Merge pull request #56 from TheBlueMatt/main v0.0.103.1
authorMatt Corallo <649246+TheBlueMatt@users.noreply.github.com>
Fri, 3 Dec 2021 16:21:47 +0000 (16:21 +0000)
committerGitHub <noreply@github.com>
Fri, 3 Dec 2021 16:21:47 +0000 (16:21 +0000)
v0.0.103.1

618 files changed:
.github/workflows/build.yml
bindingstypes.py
gen_type_mapping.py
genbindings.py
genbindings.sh
java_strings.py
src/main/java/org/ldk/batteries/ChannelManagerConstructor.java
src/main/java/org/ldk/batteries/NioPeerHandler.java
src/main/java/org/ldk/enums/AccessError.java
src/main/java/org/ldk/enums/ChannelMonitorUpdateErr.java
src/main/java/org/ldk/enums/ConfirmationTarget.java
src/main/java/org/ldk/enums/CreationError.java
src/main/java/org/ldk/enums/Currency.java
src/main/java/org/ldk/enums/Level.java
src/main/java/org/ldk/enums/Network.java
src/main/java/org/ldk/enums/Secp256k1Error.java
src/main/java/org/ldk/enums/SemanticError.java
src/main/java/org/ldk/enums/SiPrefix.java
src/main/java/org/ldk/impl/bindings.java
src/main/java/org/ldk/structs/APIError.java
src/main/java/org/ldk/structs/AcceptChannel.java
src/main/java/org/ldk/structs/Access.java
src/main/java/org/ldk/structs/AnnouncementSignatures.java
src/main/java/org/ldk/structs/Balance.java
src/main/java/org/ldk/structs/BaseSign.java
src/main/java/org/ldk/structs/BestBlock.java
src/main/java/org/ldk/structs/BuiltCommitmentTransaction.java
src/main/java/org/ldk/structs/ChainMonitor.java
src/main/java/org/ldk/structs/ChainParameters.java
src/main/java/org/ldk/structs/ChannelAnnouncement.java
src/main/java/org/ldk/structs/ChannelConfig.java
src/main/java/org/ldk/structs/ChannelCounterparty.java
src/main/java/org/ldk/structs/ChannelDetails.java
src/main/java/org/ldk/structs/ChannelFeatures.java
src/main/java/org/ldk/structs/ChannelHandshakeConfig.java
src/main/java/org/ldk/structs/ChannelHandshakeLimits.java
src/main/java/org/ldk/structs/ChannelInfo.java
src/main/java/org/ldk/structs/ChannelManager.java
src/main/java/org/ldk/structs/ChannelManagerPersister.java
src/main/java/org/ldk/structs/ChannelMessageHandler.java
src/main/java/org/ldk/structs/ChannelMonitor.java
src/main/java/org/ldk/structs/ChannelMonitorUpdate.java
src/main/java/org/ldk/structs/ChannelPublicKeys.java
src/main/java/org/ldk/structs/ChannelReestablish.java
src/main/java/org/ldk/structs/ChannelTransactionParameters.java
src/main/java/org/ldk/structs/ChannelUpdate.java
src/main/java/org/ldk/structs/ClosingSigned.java
src/main/java/org/ldk/structs/ClosingSignedFeeRange.java
src/main/java/org/ldk/structs/ClosingTransaction.java
src/main/java/org/ldk/structs/ClosureReason.java
src/main/java/org/ldk/structs/CommitmentSigned.java
src/main/java/org/ldk/structs/CommitmentTransaction.java
src/main/java/org/ldk/structs/CommitmentUpdate.java
src/main/java/org/ldk/structs/Confirm.java
src/main/java/org/ldk/structs/CounterpartyChannelTransactionParameters.java
src/main/java/org/ldk/structs/CounterpartyForwardingInfo.java
src/main/java/org/ldk/structs/CustomMessageHandler.java
src/main/java/org/ldk/structs/CustomMessageReader.java
src/main/java/org/ldk/structs/DataLossProtect.java
src/main/java/org/ldk/structs/DecodeError.java
src/main/java/org/ldk/structs/DelayedPaymentOutputDescriptor.java
src/main/java/org/ldk/structs/Description.java
src/main/java/org/ldk/structs/DirectionalChannelInfo.java
src/main/java/org/ldk/structs/ErrorAction.java
src/main/java/org/ldk/structs/ErrorMessage.java
src/main/java/org/ldk/structs/Event.java
src/main/java/org/ldk/structs/ExpiryTime.java
src/main/java/org/ldk/structs/Fallback.java
src/main/java/org/ldk/structs/Filter.java
src/main/java/org/ldk/structs/FundingCreated.java
src/main/java/org/ldk/structs/FundingLocked.java
src/main/java/org/ldk/structs/FundingSigned.java
src/main/java/org/ldk/structs/GossipTimestampFilter.java
src/main/java/org/ldk/structs/HTLCOutputInCommitment.java
src/main/java/org/ldk/structs/HTLCUpdate.java
src/main/java/org/ldk/structs/HolderCommitmentTransaction.java
src/main/java/org/ldk/structs/InMemorySigner.java
src/main/java/org/ldk/structs/Init.java
src/main/java/org/ldk/structs/InitFeatures.java
src/main/java/org/ldk/structs/InvalidShutdownScript.java
src/main/java/org/ldk/structs/Invoice.java
src/main/java/org/ldk/structs/InvoiceFeatures.java
src/main/java/org/ldk/structs/InvoicePayer.java
src/main/java/org/ldk/structs/InvoiceSignature.java
src/main/java/org/ldk/structs/KeysInterface.java
src/main/java/org/ldk/structs/KeysManager.java
src/main/java/org/ldk/structs/LightningError.java
src/main/java/org/ldk/structs/Listen.java
src/main/java/org/ldk/structs/Logger.java
src/main/java/org/ldk/structs/MessageSendEvent.java
src/main/java/org/ldk/structs/MessageSendEventsProvider.java
src/main/java/org/ldk/structs/MinFinalCltvExpiry.java
src/main/java/org/ldk/structs/MonitorEvent.java
src/main/java/org/ldk/structs/MonitorUpdateError.java
src/main/java/org/ldk/structs/MonitorUpdateId.java
src/main/java/org/ldk/structs/NetAddress.java
src/main/java/org/ldk/structs/NetGraphMsgHandler.java
src/main/java/org/ldk/structs/NetworkGraph.java
src/main/java/org/ldk/structs/NetworkUpdate.java
src/main/java/org/ldk/structs/NodeAnnouncement.java
src/main/java/org/ldk/structs/NodeAnnouncementInfo.java
src/main/java/org/ldk/structs/NodeFeatures.java
src/main/java/org/ldk/structs/NodeId.java
src/main/java/org/ldk/structs/NodeInfo.java
src/main/java/org/ldk/structs/OpenChannel.java
src/main/java/org/ldk/structs/Option_AccessZ.java
src/main/java/org/ldk/structs/Option_C2Tuple_usizeTransactionZZ.java
src/main/java/org/ldk/structs/Option_CVec_NetAddressZZ.java
src/main/java/org/ldk/structs/Option_ClosureReasonZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Option_EventZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Option_FilterZ.java
src/main/java/org/ldk/structs/Option_MonitorEventZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Option_NetworkUpdateZ.java
src/main/java/org/ldk/structs/Option_TypeZ.java
src/main/java/org/ldk/structs/Option_u16Z.java
src/main/java/org/ldk/structs/Option_u32Z.java
src/main/java/org/ldk/structs/Option_u64Z.java
src/main/java/org/ldk/structs/OutPoint.java
src/main/java/org/ldk/structs/Payee.java
src/main/java/org/ldk/structs/PayeePubKey.java
src/main/java/org/ldk/structs/Payer.java
src/main/java/org/ldk/structs/PaymentError.java
src/main/java/org/ldk/structs/PaymentPurpose.java
src/main/java/org/ldk/structs/PaymentSendFailure.java
src/main/java/org/ldk/structs/PeerHandleError.java
src/main/java/org/ldk/structs/PeerManager.java
src/main/java/org/ldk/structs/Persist.java
src/main/java/org/ldk/structs/Ping.java
src/main/java/org/ldk/structs/Pong.java
src/main/java/org/ldk/structs/PositiveTimestamp.java
src/main/java/org/ldk/structs/PrivateRoute.java
src/main/java/org/ldk/structs/QueryChannelRange.java
src/main/java/org/ldk/structs/QueryShortChannelIds.java
src/main/java/org/ldk/structs/RawDataPart.java
src/main/java/org/ldk/structs/RawInvoice.java
src/main/java/org/ldk/structs/ReadOnlyNetworkGraph.java
src/main/java/org/ldk/structs/Record.java [new file with mode: 0644]
src/main/java/org/ldk/structs/ReplyChannelRange.java
src/main/java/org/ldk/structs/ReplyShortChannelIdsEnd.java
src/main/java/org/ldk/structs/Result_AcceptChannelDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_AnnouncementSignaturesDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_BuiltCommitmentTransactionDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ.java
src/main/java/org/ldk/structs/Result_C2Tuple_SignatureCVec_SignatureZZNoneZ.java
src/main/java/org/ldk/structs/Result_COption_ClosureReasonZDecodeErrorZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Result_COption_EventZDecodeErrorZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Result_COption_MonitorEventZDecodeErrorZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Result_COption_NetworkUpdateZDecodeErrorZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Result_COption_TypeZDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ.java
src/main/java/org/ldk/structs/Result_CVec_CVec_u8ZZNoneZ.java
src/main/java/org/ldk/structs/Result_CVec_SignatureZNoneZ.java
src/main/java/org/ldk/structs/Result_CVec_u8ZPeerHandleErrorZ.java
src/main/java/org/ldk/structs/Result_ChannelAnnouncementDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_ChannelConfigDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_ChannelFeaturesDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_ChannelInfoDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_ChannelMonitorUpdateDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_ChannelPublicKeysDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_ChannelReestablishDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_ChannelTransactionParametersDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_ChannelUpdateDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_ClosingSignedDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_ClosingSignedFeeRangeDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_CommitmentSignedDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_CommitmentTransactionDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_CounterpartyChannelTransactionParametersDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_DelayedPaymentOutputDescriptorDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_DescriptionCreationErrorZ.java
src/main/java/org/ldk/structs/Result_DirectionalChannelInfoDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_ErrorMessageDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_ExpiryTimeCreationErrorZ.java
src/main/java/org/ldk/structs/Result_FundingCreatedDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_FundingLockedDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_FundingSignedDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_GossipTimestampFilterDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_HTLCOutputInCommitmentDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_HTLCUpdateDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_HolderCommitmentTransactionDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_InMemorySignerDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_InitDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_InitFeaturesDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_InvoiceFeaturesDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_InvoiceNoneZ.java
src/main/java/org/ldk/structs/Result_InvoiceSemanticErrorZ.java
src/main/java/org/ldk/structs/Result_InvoiceSignOrCreationErrorZ.java
src/main/java/org/ldk/structs/Result_LockedChannelMonitorNoneZ.java
src/main/java/org/ldk/structs/Result_NetAddressDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_NetworkGraphDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_NodeAnnouncementDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_NodeAnnouncementInfoDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_NodeFeaturesDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_NodeIdDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_NodeInfoDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_NoneAPIErrorZ.java
src/main/java/org/ldk/structs/Result_NoneChannelMonitorUpdateErrZ.java
src/main/java/org/ldk/structs/Result_NoneErrorZ.java
src/main/java/org/ldk/structs/Result_NoneLightningErrorZ.java
src/main/java/org/ldk/structs/Result_NoneMonitorUpdateErrorZ.java
src/main/java/org/ldk/structs/Result_NoneNoneZ.java
src/main/java/org/ldk/structs/Result_NonePaymentSendFailureZ.java
src/main/java/org/ldk/structs/Result_NonePeerHandleErrorZ.java
src/main/java/org/ldk/structs/Result_NoneSemanticErrorZ.java
src/main/java/org/ldk/structs/Result_OpenChannelDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_OutPointDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_PayeeDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_PayeePubKeyErrorZ.java
src/main/java/org/ldk/structs/Result_PaymentIdPaymentErrorZ.java
src/main/java/org/ldk/structs/Result_PaymentIdPaymentSendFailureZ.java
src/main/java/org/ldk/structs/Result_PaymentSecretAPIErrorZ.java
src/main/java/org/ldk/structs/Result_PingDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_PongDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_PositiveTimestampCreationErrorZ.java
src/main/java/org/ldk/structs/Result_PrivateRouteCreationErrorZ.java
src/main/java/org/ldk/structs/Result_PublicKeyErrorZ.java
src/main/java/org/ldk/structs/Result_QueryChannelRangeDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_QueryShortChannelIdsDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_RecoverableSignatureNoneZ.java
src/main/java/org/ldk/structs/Result_ReplyChannelRangeDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_ReplyShortChannelIdsEndDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_RevokeAndACKDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_RouteDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_RouteHintDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_RouteHintHopDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_RouteHopDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_RouteLightningErrorZ.java
src/main/java/org/ldk/structs/Result_RouteParametersDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_RoutingFeesDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_ScorerDecodeErrorZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Result_ScoringParametersDecodeErrorZ.java [new file with mode: 0644]
src/main/java/org/ldk/structs/Result_SecretKeyErrorZ.java
src/main/java/org/ldk/structs/Result_ShutdownDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_ShutdownScriptDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_ShutdownScriptInvalidShutdownScriptZ.java
src/main/java/org/ldk/structs/Result_SiPrefixNoneZ.java
src/main/java/org/ldk/structs/Result_SignDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_SignatureNoneZ.java
src/main/java/org/ldk/structs/Result_SignedRawInvoiceNoneZ.java
src/main/java/org/ldk/structs/Result_SpendableOutputDescriptorDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_StaticPaymentOutputDescriptorDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_StringErrorZ.java
src/main/java/org/ldk/structs/Result_TransactionNoneZ.java
src/main/java/org/ldk/structs/Result_TrustedClosingTransactionNoneZ.java
src/main/java/org/ldk/structs/Result_TrustedCommitmentTransactionNoneZ.java
src/main/java/org/ldk/structs/Result_TxCreationKeysDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_TxCreationKeysErrorZ.java
src/main/java/org/ldk/structs/Result_TxOutAccessErrorZ.java
src/main/java/org/ldk/structs/Result_UnsignedChannelAnnouncementDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_UnsignedChannelUpdateDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_UnsignedNodeAnnouncementDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_UpdateAddHTLCDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_UpdateFailHTLCDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_UpdateFailMalformedHTLCDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_UpdateFeeDecodeErrorZ.java
src/main/java/org/ldk/structs/Result_UpdateFulfillHTLCDecodeErrorZ.java
src/main/java/org/ldk/structs/Result__u832APIErrorZ.java
src/main/java/org/ldk/structs/Result_boolLightningErrorZ.java
src/main/java/org/ldk/structs/Result_boolPeerHandleErrorZ.java
src/main/java/org/ldk/structs/RetryAttempts.java
src/main/java/org/ldk/structs/RevokeAndACK.java
src/main/java/org/ldk/structs/Route.java
src/main/java/org/ldk/structs/RouteHint.java
src/main/java/org/ldk/structs/RouteHintHop.java
src/main/java/org/ldk/structs/RouteHop.java
src/main/java/org/ldk/structs/RouteParameters.java
src/main/java/org/ldk/structs/Router.java
src/main/java/org/ldk/structs/RoutingFees.java
src/main/java/org/ldk/structs/RoutingMessageHandler.java
src/main/java/org/ldk/structs/Sha256.java
src/main/java/org/ldk/structs/Shutdown.java
src/main/java/org/ldk/structs/ShutdownScript.java
src/main/java/org/ldk/structs/Sign.java
src/main/java/org/ldk/structs/SignOrCreationError.java
src/main/java/org/ldk/structs/SignedRawInvoice.java
src/main/java/org/ldk/structs/SocketDescriptor.java
src/main/java/org/ldk/structs/SpendableOutputDescriptor.java
src/main/java/org/ldk/structs/StaticPaymentOutputDescriptor.java
src/main/java/org/ldk/structs/ThreeTuple_ChannelAnnouncementChannelUpdateChannelUpdateZ.java
src/main/java/org/ldk/structs/ThreeTuple_RawInvoice_u832InvoiceSignatureZ.java
src/main/java/org/ldk/structs/TrustedClosingTransaction.java
src/main/java/org/ldk/structs/TrustedCommitmentTransaction.java
src/main/java/org/ldk/structs/TwoTuple_BlockHashChannelManagerZ.java
src/main/java/org/ldk/structs/TwoTuple_BlockHashChannelMonitorZ.java
src/main/java/org/ldk/structs/TwoTuple_OutPointScriptZ.java
src/main/java/org/ldk/structs/TwoTuple_PaymentHashPaymentIdZ.java
src/main/java/org/ldk/structs/TwoTuple_PaymentHashPaymentSecretZ.java
src/main/java/org/ldk/structs/TwoTuple_PublicKeyTypeZ.java
src/main/java/org/ldk/structs/TwoTuple_SignatureCVec_SignatureZZ.java
src/main/java/org/ldk/structs/TwoTuple_TxidCVec_C2Tuple_u32ScriptZZZ.java
src/main/java/org/ldk/structs/TwoTuple_TxidCVec_C2Tuple_u32TxOutZZZ.java
src/main/java/org/ldk/structs/TwoTuple_u32ScriptZ.java
src/main/java/org/ldk/structs/TwoTuple_u32TxOutZ.java
src/main/java/org/ldk/structs/TwoTuple_usizeTransactionZ.java
src/main/java/org/ldk/structs/TxCreationKeys.java
src/main/java/org/ldk/structs/Type.java
src/main/java/org/ldk/structs/UnsignedChannelAnnouncement.java
src/main/java/org/ldk/structs/UnsignedChannelUpdate.java
src/main/java/org/ldk/structs/UnsignedNodeAnnouncement.java
src/main/java/org/ldk/structs/UpdateAddHTLC.java
src/main/java/org/ldk/structs/UpdateFailHTLC.java
src/main/java/org/ldk/structs/UpdateFailMalformedHTLC.java
src/main/java/org/ldk/structs/UpdateFee.java
src/main/java/org/ldk/structs/UpdateFulfillHTLC.java
src/main/java/org/ldk/structs/UserConfig.java
src/main/java/org/ldk/structs/UtilMethods.java
src/main/java/org/ldk/structs/Watch.java
src/main/java/org/ldk/structs/WatchedOutput.java
src/main/java/org/ldk/util/InternalUtils.java [new file with mode: 0644]
src/main/jni/bindings.c
src/main/jni/bindings.c.body
src/main/jni/org_ldk_impl_bindings.h
src/test/java/org/ldk/HumanObjectPeerTest.java
src/test/java/org/ldk/ManualMsgHandlingPeerTest.java
src/test/java/org/ldk/PeerTest.java
ts/bindings.c
ts/bindings.c.body
ts/bindings.ts
ts/enums/AccessError.ts
ts/enums/ChannelMonitorUpdateErr.ts
ts/enums/ConfirmationTarget.ts
ts/enums/CreationError.ts
ts/enums/Currency.ts
ts/enums/Level.ts
ts/enums/Network.ts
ts/enums/Secp256k1Error.ts
ts/enums/SemanticError.ts
ts/enums/SiPrefix.ts
ts/structs/APIError.ts
ts/structs/AcceptChannel.ts
ts/structs/Access.ts
ts/structs/AnnouncementSignatures.ts
ts/structs/Balance.ts
ts/structs/BaseSign.ts
ts/structs/BestBlock.ts
ts/structs/BuiltCommitmentTransaction.ts
ts/structs/ChainMonitor.ts
ts/structs/ChainParameters.ts
ts/structs/ChannelAnnouncement.ts
ts/structs/ChannelConfig.ts
ts/structs/ChannelCounterparty.ts
ts/structs/ChannelDetails.ts
ts/structs/ChannelFeatures.ts
ts/structs/ChannelHandshakeConfig.ts
ts/structs/ChannelHandshakeLimits.ts
ts/structs/ChannelInfo.ts
ts/structs/ChannelManager.ts
ts/structs/ChannelManagerPersister.ts
ts/structs/ChannelMessageHandler.ts
ts/structs/ChannelMonitor.ts
ts/structs/ChannelMonitorUpdate.ts
ts/structs/ChannelPublicKeys.ts
ts/structs/ChannelReestablish.ts
ts/structs/ChannelTransactionParameters.ts
ts/structs/ChannelUpdate.ts
ts/structs/ClosingSigned.ts
ts/structs/ClosingSignedFeeRange.ts
ts/structs/ClosingTransaction.ts
ts/structs/ClosureReason.ts
ts/structs/CommitmentSigned.ts
ts/structs/CommitmentTransaction.ts
ts/structs/CommitmentUpdate.ts
ts/structs/Confirm.ts
ts/structs/CounterpartyChannelTransactionParameters.ts
ts/structs/CounterpartyForwardingInfo.ts
ts/structs/CustomMessageHandler.ts
ts/structs/CustomMessageReader.ts
ts/structs/DataLossProtect.ts
ts/structs/DecodeError.ts
ts/structs/DelayedPaymentOutputDescriptor.ts
ts/structs/Description.ts
ts/structs/DirectionalChannelInfo.ts
ts/structs/ErrorAction.ts
ts/structs/ErrorMessage.ts
ts/structs/Event.ts
ts/structs/ExpiryTime.ts
ts/structs/Fallback.ts
ts/structs/Filter.ts
ts/structs/FundingCreated.ts
ts/structs/FundingLocked.ts
ts/structs/FundingSigned.ts
ts/structs/GossipTimestampFilter.ts
ts/structs/HTLCOutputInCommitment.ts
ts/structs/HTLCUpdate.ts
ts/structs/HolderCommitmentTransaction.ts
ts/structs/InMemorySigner.ts
ts/structs/Init.ts
ts/structs/InitFeatures.ts
ts/structs/InvalidShutdownScript.ts
ts/structs/Invoice.ts
ts/structs/InvoiceFeatures.ts
ts/structs/InvoicePayer.ts
ts/structs/InvoiceSignature.ts
ts/structs/KeysInterface.ts
ts/structs/KeysManager.ts
ts/structs/LightningError.ts
ts/structs/Listen.ts
ts/structs/Logger.ts
ts/structs/MessageSendEvent.ts
ts/structs/MessageSendEventsProvider.ts
ts/structs/MinFinalCltvExpiry.ts
ts/structs/MonitorEvent.ts
ts/structs/MonitorUpdateError.ts
ts/structs/MonitorUpdateId.ts
ts/structs/NetAddress.ts
ts/structs/NetGraphMsgHandler.ts
ts/structs/NetworkGraph.ts
ts/structs/NetworkUpdate.ts
ts/structs/NodeAnnouncement.ts
ts/structs/NodeAnnouncementInfo.ts
ts/structs/NodeFeatures.ts
ts/structs/NodeId.ts
ts/structs/NodeInfo.ts
ts/structs/OpenChannel.ts
ts/structs/Option_C2Tuple_usizeTransactionZZ.ts
ts/structs/Option_CVec_NetAddressZZ.ts
ts/structs/Option_ClosureReasonZ.ts [new file with mode: 0644]
ts/structs/Option_EventZ.ts [new file with mode: 0644]
ts/structs/Option_MonitorEventZ.ts [new file with mode: 0644]
ts/structs/Option_NetworkUpdateZ.ts
ts/structs/Option_TypeZ.ts
ts/structs/Option_u16Z.ts
ts/structs/Option_u32Z.ts
ts/structs/Option_u64Z.ts
ts/structs/OutPoint.ts
ts/structs/Payee.ts
ts/structs/PayeePubKey.ts
ts/structs/Payer.ts
ts/structs/PaymentError.ts
ts/structs/PaymentPurpose.ts
ts/structs/PaymentSendFailure.ts
ts/structs/PeerHandleError.ts
ts/structs/PeerManager.ts
ts/structs/Persist.ts
ts/structs/Ping.ts
ts/structs/Pong.ts
ts/structs/PositiveTimestamp.ts
ts/structs/PrivateRoute.ts
ts/structs/QueryChannelRange.ts
ts/structs/QueryShortChannelIds.ts
ts/structs/RawDataPart.ts
ts/structs/RawInvoice.ts
ts/structs/ReadOnlyNetworkGraph.ts
ts/structs/Record.ts [new file with mode: 0644]
ts/structs/ReplyChannelRange.ts
ts/structs/ReplyShortChannelIdsEnd.ts
ts/structs/Result_AcceptChannelDecodeErrorZ.ts
ts/structs/Result_AnnouncementSignaturesDecodeErrorZ.ts
ts/structs/Result_BuiltCommitmentTransactionDecodeErrorZ.ts
ts/structs/Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ.ts
ts/structs/Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ.ts
ts/structs/Result_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ.ts
ts/structs/Result_C2Tuple_SignatureCVec_SignatureZZNoneZ.ts
ts/structs/Result_COption_ClosureReasonZDecodeErrorZ.ts [new file with mode: 0644]
ts/structs/Result_COption_EventZDecodeErrorZ.ts [new file with mode: 0644]
ts/structs/Result_COption_MonitorEventZDecodeErrorZ.ts [new file with mode: 0644]
ts/structs/Result_COption_NetworkUpdateZDecodeErrorZ.ts [new file with mode: 0644]
ts/structs/Result_COption_TypeZDecodeErrorZ.ts
ts/structs/Result_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ.ts
ts/structs/Result_CVec_CVec_u8ZZNoneZ.ts
ts/structs/Result_CVec_SignatureZNoneZ.ts
ts/structs/Result_CVec_u8ZPeerHandleErrorZ.ts
ts/structs/Result_ChannelAnnouncementDecodeErrorZ.ts
ts/structs/Result_ChannelConfigDecodeErrorZ.ts
ts/structs/Result_ChannelFeaturesDecodeErrorZ.ts
ts/structs/Result_ChannelInfoDecodeErrorZ.ts
ts/structs/Result_ChannelMonitorUpdateDecodeErrorZ.ts
ts/structs/Result_ChannelPublicKeysDecodeErrorZ.ts
ts/structs/Result_ChannelReestablishDecodeErrorZ.ts
ts/structs/Result_ChannelTransactionParametersDecodeErrorZ.ts
ts/structs/Result_ChannelUpdateDecodeErrorZ.ts
ts/structs/Result_ClosingSignedDecodeErrorZ.ts
ts/structs/Result_ClosingSignedFeeRangeDecodeErrorZ.ts
ts/structs/Result_CommitmentSignedDecodeErrorZ.ts
ts/structs/Result_CommitmentTransactionDecodeErrorZ.ts
ts/structs/Result_CounterpartyChannelTransactionParametersDecodeErrorZ.ts
ts/structs/Result_DelayedPaymentOutputDescriptorDecodeErrorZ.ts
ts/structs/Result_DescriptionCreationErrorZ.ts
ts/structs/Result_DirectionalChannelInfoDecodeErrorZ.ts
ts/structs/Result_ErrorMessageDecodeErrorZ.ts
ts/structs/Result_ExpiryTimeCreationErrorZ.ts
ts/structs/Result_FundingCreatedDecodeErrorZ.ts
ts/structs/Result_FundingLockedDecodeErrorZ.ts
ts/structs/Result_FundingSignedDecodeErrorZ.ts
ts/structs/Result_GossipTimestampFilterDecodeErrorZ.ts
ts/structs/Result_HTLCOutputInCommitmentDecodeErrorZ.ts
ts/structs/Result_HTLCUpdateDecodeErrorZ.ts
ts/structs/Result_HolderCommitmentTransactionDecodeErrorZ.ts
ts/structs/Result_InMemorySignerDecodeErrorZ.ts
ts/structs/Result_InitDecodeErrorZ.ts
ts/structs/Result_InitFeaturesDecodeErrorZ.ts
ts/structs/Result_InvoiceFeaturesDecodeErrorZ.ts
ts/structs/Result_InvoiceNoneZ.ts
ts/structs/Result_InvoiceSemanticErrorZ.ts
ts/structs/Result_InvoiceSignOrCreationErrorZ.ts
ts/structs/Result_LockedChannelMonitorNoneZ.ts
ts/structs/Result_NetAddressDecodeErrorZ.ts
ts/structs/Result_NetworkGraphDecodeErrorZ.ts
ts/structs/Result_NodeAnnouncementDecodeErrorZ.ts
ts/structs/Result_NodeAnnouncementInfoDecodeErrorZ.ts
ts/structs/Result_NodeFeaturesDecodeErrorZ.ts
ts/structs/Result_NodeIdDecodeErrorZ.ts
ts/structs/Result_NodeInfoDecodeErrorZ.ts
ts/structs/Result_NoneAPIErrorZ.ts
ts/structs/Result_NoneChannelMonitorUpdateErrZ.ts
ts/structs/Result_NoneErrorZ.ts
ts/structs/Result_NoneLightningErrorZ.ts
ts/structs/Result_NoneMonitorUpdateErrorZ.ts
ts/structs/Result_NoneNoneZ.ts
ts/structs/Result_NonePaymentSendFailureZ.ts
ts/structs/Result_NonePeerHandleErrorZ.ts
ts/structs/Result_NoneSemanticErrorZ.ts
ts/structs/Result_OpenChannelDecodeErrorZ.ts
ts/structs/Result_OutPointDecodeErrorZ.ts
ts/structs/Result_PayeeDecodeErrorZ.ts
ts/structs/Result_PayeePubKeyErrorZ.ts
ts/structs/Result_PaymentIdPaymentErrorZ.ts
ts/structs/Result_PaymentIdPaymentSendFailureZ.ts
ts/structs/Result_PaymentSecretAPIErrorZ.ts
ts/structs/Result_PingDecodeErrorZ.ts
ts/structs/Result_PongDecodeErrorZ.ts
ts/structs/Result_PositiveTimestampCreationErrorZ.ts
ts/structs/Result_PrivateRouteCreationErrorZ.ts
ts/structs/Result_PublicKeyErrorZ.ts
ts/structs/Result_QueryChannelRangeDecodeErrorZ.ts
ts/structs/Result_QueryShortChannelIdsDecodeErrorZ.ts
ts/structs/Result_RecoverableSignatureNoneZ.ts
ts/structs/Result_ReplyChannelRangeDecodeErrorZ.ts
ts/structs/Result_ReplyShortChannelIdsEndDecodeErrorZ.ts
ts/structs/Result_RevokeAndACKDecodeErrorZ.ts
ts/structs/Result_RouteDecodeErrorZ.ts
ts/structs/Result_RouteHintDecodeErrorZ.ts
ts/structs/Result_RouteHintHopDecodeErrorZ.ts
ts/structs/Result_RouteHopDecodeErrorZ.ts
ts/structs/Result_RouteLightningErrorZ.ts
ts/structs/Result_RouteParametersDecodeErrorZ.ts
ts/structs/Result_RoutingFeesDecodeErrorZ.ts
ts/structs/Result_ScorerDecodeErrorZ.ts [new file with mode: 0644]
ts/structs/Result_ScoringParametersDecodeErrorZ.ts [new file with mode: 0644]
ts/structs/Result_SecretKeyErrorZ.ts
ts/structs/Result_ShutdownDecodeErrorZ.ts
ts/structs/Result_ShutdownScriptDecodeErrorZ.ts
ts/structs/Result_ShutdownScriptInvalidShutdownScriptZ.ts
ts/structs/Result_SiPrefixNoneZ.ts
ts/structs/Result_SignDecodeErrorZ.ts
ts/structs/Result_SignatureNoneZ.ts
ts/structs/Result_SignedRawInvoiceNoneZ.ts
ts/structs/Result_SpendableOutputDescriptorDecodeErrorZ.ts
ts/structs/Result_StaticPaymentOutputDescriptorDecodeErrorZ.ts
ts/structs/Result_StringErrorZ.ts
ts/structs/Result_TransactionNoneZ.ts
ts/structs/Result_TrustedClosingTransactionNoneZ.ts
ts/structs/Result_TrustedCommitmentTransactionNoneZ.ts
ts/structs/Result_TxCreationKeysDecodeErrorZ.ts
ts/structs/Result_TxCreationKeysErrorZ.ts
ts/structs/Result_TxOutAccessErrorZ.ts
ts/structs/Result_UnsignedChannelAnnouncementDecodeErrorZ.ts
ts/structs/Result_UnsignedChannelUpdateDecodeErrorZ.ts
ts/structs/Result_UnsignedNodeAnnouncementDecodeErrorZ.ts
ts/structs/Result_UpdateAddHTLCDecodeErrorZ.ts
ts/structs/Result_UpdateFailHTLCDecodeErrorZ.ts
ts/structs/Result_UpdateFailMalformedHTLCDecodeErrorZ.ts
ts/structs/Result_UpdateFeeDecodeErrorZ.ts
ts/structs/Result_UpdateFulfillHTLCDecodeErrorZ.ts
ts/structs/Result__u832APIErrorZ.ts
ts/structs/Result_boolLightningErrorZ.ts
ts/structs/Result_boolPeerHandleErrorZ.ts
ts/structs/RetryAttempts.ts
ts/structs/RevokeAndACK.ts
ts/structs/Route.ts
ts/structs/RouteHint.ts
ts/structs/RouteHintHop.ts
ts/structs/RouteHop.ts
ts/structs/RouteParameters.ts
ts/structs/Router.ts
ts/structs/RoutingFees.ts
ts/structs/RoutingMessageHandler.ts
ts/structs/Sha256.ts
ts/structs/Shutdown.ts
ts/structs/ShutdownScript.ts
ts/structs/Sign.ts
ts/structs/SignOrCreationError.ts
ts/structs/SignedRawInvoice.ts
ts/structs/SocketDescriptor.ts
ts/structs/SpendableOutputDescriptor.ts
ts/structs/StaticPaymentOutputDescriptor.ts
ts/structs/ThreeTuple_ChannelAnnouncementChannelUpdateChannelUpdateZ.ts
ts/structs/ThreeTuple_RawInvoice_u832InvoiceSignatureZ.ts
ts/structs/TrustedClosingTransaction.ts
ts/structs/TrustedCommitmentTransaction.ts
ts/structs/TwoTuple_BlockHashChannelManagerZ.ts
ts/structs/TwoTuple_BlockHashChannelMonitorZ.ts
ts/structs/TwoTuple_OutPointScriptZ.ts
ts/structs/TwoTuple_PaymentHashPaymentIdZ.ts
ts/structs/TwoTuple_PaymentHashPaymentSecretZ.ts
ts/structs/TwoTuple_PublicKeyTypeZ.ts
ts/structs/TwoTuple_SignatureCVec_SignatureZZ.ts
ts/structs/TwoTuple_TxidCVec_C2Tuple_u32ScriptZZZ.ts
ts/structs/TwoTuple_TxidCVec_C2Tuple_u32TxOutZZZ.ts
ts/structs/TwoTuple_u32ScriptZ.ts
ts/structs/TwoTuple_u32TxOutZ.ts
ts/structs/TwoTuple_usizeTransactionZ.ts
ts/structs/TxCreationKeys.ts
ts/structs/Type.ts
ts/structs/UnsignedChannelAnnouncement.ts
ts/structs/UnsignedChannelUpdate.ts
ts/structs/UnsignedNodeAnnouncement.ts
ts/structs/UpdateAddHTLC.ts
ts/structs/UpdateFailHTLC.ts
ts/structs/UpdateFailMalformedHTLC.ts
ts/structs/UpdateFee.ts
ts/structs/UpdateFulfillHTLC.ts
ts/structs/UserConfig.ts
ts/structs/UtilMethods.ts
ts/structs/Watch.ts
ts/structs/WatchedOutput.ts
typescript_strings.py

index 4bdd6dbfb1216b219de65d24bd6fff2e357df47c..14a8595cd7ca9123d033b8178a7f062a3f39a75c 100644 (file)
@@ -290,23 +290,26 @@ jobs:
             ./genbindings.sh ./ldk-c-bindings/ "-I$JAVA_HOME/include/ -I$JAVA_HOME/include/darwin -isysroot$(xcrun --show-sdk-path)" false false || echo
             cat src/main/resources/liblightningjni_MacOSX-aarch64.nativelib > /dev/null
           fi
-      - name: Fetch Maven 3.8.3
+      - name: Fetch Maven 3.8.4
         run: |
-          wget -O apache-maven-3.8.3-bin.tar.gz https://apache.osuosl.org/maven/maven-3/3.8.3/binaries/apache-maven-3.8.3-bin.tar.gz
-          if [ "$(shasum -a 256 apache-maven-3.8.3-bin.tar.gz | awk '{ print $1 }')" != "0f1597d11085b8fe93d84652a18c6deea71ece9fabba45a02cf6600c7758fd5b" ]; then
+          # We don't bother using the upstream mirrors as they remove prior
+          # releases aggressively, causing spurious CI failures when we don't
+          # care about the version used.
+          wget -O apache-maven-3.8.4-bin.tar.gz https://bitcoin.ninja/apache-maven-3.8.4-bin.tar.gz
+          if [ "$(shasum -a 256 apache-maven-3.8.4-bin.tar.gz | awk '{ print $1 }')" != "2cdc9c519427bb20fdc25bef5a9063b790e4abd930e7b14b4e9f4863d6f9f13c" ]; then
             echo "Bad hash"
             exit 1
           fi
-          tar xvvf apache-maven-3.8.3-bin.tar.gz
-          export PATH=apache-maven-3.8.3/bin:$PATH
+          tar xvvf apache-maven-3.8.4-bin.tar.gz
+          export PATH=apache-maven-3.8.4/bin:$PATH
       - name: Run Java Tests against built jar
         run: |
-          mvn -DskipTests=true package
+          mvn -q -B -DskipTests=true package
           export LDK_GARBAGECOLLECTED_GIT_OVERRIDE="$(git describe --tag HEAD)"
           JAR_VERSION=${LDK_GARBAGECOLLECTED_GIT_OVERRIDE:1:100}
           mvn install:install-file -Dfile=target/ldk-java-${JAR_VERSION}.jar -DgroupId=org.lightningdevkit -DartifactId=ldk-java -Dversion=1.0-SNAPSHOT -Dpackaging=jar
           cd javatester
-          mvn package
+          mvn -q -B package
           java -ea -jar target/ldk-java-tests-1.0-SNAPSHOT-jar-with-dependencies.jar
           cd ..
       - name: Check latest release libs are in git
@@ -323,11 +326,11 @@ jobs:
             export LDK_GARBAGECOLLECTED_GIT_OVERRIDE="$(git describe --tag HEAD)"
             cp "ldk-java-bins/${LDK_GARBAGECOLLECTED_GIT_OVERRIDE}/"liblightningjni_MacOSX-{x86_64,aarch64}.nativelib src/main/resources/
             mvn clean
-            mvn -DskipTests=true package
+            mvn -q -B -DskipTests=true package
             JAR_VERSION=${LDK_GARBAGECOLLECTED_GIT_OVERRIDE:1:100}
             mvn install:install-file -Dfile=target/ldk-java-${JAR_VERSION}.jar -DgroupId=org.lightningdevkit -DartifactId=ldk-java -Dversion=1.0-SNAPSHOT -Dpackaging=jar
             cd javatester
-            mvn package
+            mvn -q -B package
             java -ea -jar target/ldk-java-tests-1.0-SNAPSHOT-jar-with-dependencies.jar
             cd ..
           fi
index edb19565140c0c435892615810e59986414b6778..8c3f0db8e7e520a5cbde12a338e1e4fcb2b4ebfe 100644 (file)
@@ -1,5 +1,5 @@
 class TypeInfo:
-    def __init__(self, is_native_primitive, rust_obj, java_ty, java_fn_ty_arg, java_hu_ty, c_ty, is_const, passed_as_ptr, is_ptr, nonnull_ptr, var_name, arr_len, arr_access, subty=None):
+    def __init__(self, is_native_primitive, rust_obj, java_ty, java_fn_ty_arg, java_hu_ty, c_ty, is_const, passed_as_ptr, is_ptr, nonnull_ptr, var_name, arr_len, arr_access, subty=None, contains_trait=False):
         self.is_native_primitive = is_native_primitive
         self.rust_obj = rust_obj
         self.java_ty = java_ty
@@ -16,6 +16,7 @@ class TypeInfo:
         self.subty = subty
         self.pass_by_ref = is_ptr
         self.requires_clone = None
+        self.contains_trait = contains_trait
 
     def get_full_rust_ty(self):
         ret = ""
@@ -77,7 +78,8 @@ class TraitMethInfo:
         self.docs = docs
 
 class ComplexEnumVariantInfo:
-    def __init__(self, var_name, fields, tuple_variant):
+    def __init__(self, var_name, var_docs, fields, tuple_variant):
         self.var_name = var_name
+        self.var_docs = var_docs
         self.fields = fields
         self.tuple_variant = tuple_variant
index 81bb0f99b8ebcaa5236073fa627514c8d224a212..8e54cc12bdab47981435c67cd72558a78cb03aba 100644 (file)
@@ -47,6 +47,7 @@ class TypeMappingGenerator:
                 (set_pfx, set_sfx) = self.consts.set_native_arr_contents(arr_name + "_arr", arr_len, ty_info)
                 ret_conv = ("int8_tArray " + arr_name + "_arr = " + self.consts.create_native_arr_call(arr_len, ty_info) + ";\n" + set_pfx, "")
                 arg_conv_cleanup = None
+                from_hu_conv = None
                 if not arr_len.isdigit():
                     arg_conv = ty_info.rust_obj + " " + arr_name + "_ref;\n"
                     arg_conv = arg_conv + arr_name + "_ref." + arr_len + " = " +  self.consts.get_native_arr_len_call[0] + arr_name + self.consts.get_native_arr_len_call[1] + ";\n"
@@ -69,15 +70,18 @@ class TypeMappingGenerator:
                     arg_conv = arg_conv + "CHECK(" + self.consts.get_native_arr_len_call[0] + arr_name + self.consts.get_native_arr_len_call[1] + " == " + arr_len + ");\n"
                     arg_conv = arg_conv + self.consts.get_native_arr_contents(arr_name, arr_name + "_ref." + ty_info.arr_access, arr_len, ty_info, True) + ";"
                     ret_conv = (ret_conv[0], "." + ty_info.arr_access + set_sfx + ";")
+                    from_hu_conv = ("InternalUtils.check_arr_len(" + arr_name + ", " + arr_len + ")", "")
                 else:
                     arg_conv = "unsigned char " + arr_name + "_arr[" + arr_len + "];\n"
                     arg_conv = arg_conv + "CHECK(" + self.consts.get_native_arr_len_call[0] + arr_name + self.consts.get_native_arr_len_call[1] + " == " + arr_len + ");\n"
                     arg_conv = arg_conv + self.consts.get_native_arr_contents(arr_name, arr_name + "_arr", arr_len, ty_info, True) + ";\n"
                     arg_conv = arg_conv + "unsigned char (*" + arr_name + "_ref)[" + arr_len + "] = &" + arr_name + "_arr;"
                     ret_conv = (ret_conv[0] + "*", set_sfx + ";")
+                    from_hu_conv = ("InternalUtils.check_arr_len(" + arr_name + ", " + arr_len + ")", "")
                 return ConvInfo(ty_info = ty_info, arg_name = ty_info.var_name,
                     arg_conv = arg_conv, arg_conv_name = arr_name + "_ref", arg_conv_cleanup = arg_conv_cleanup,
-                    ret_conv = ret_conv, ret_conv_name = arr_name + "_arr", to_hu_conv = None, to_hu_conv_name = None, from_hu_conv = None)
+                    ret_conv = ret_conv, ret_conv_name = arr_name + "_arr", to_hu_conv = None, to_hu_conv_name = None,
+                    from_hu_conv = from_hu_conv)
             else:
                 assert not arr_len.isdigit() # fixed length arrays not implemented
                 assert ty_info.java_ty[len(ty_info.java_ty) - 2:] == "[]"
@@ -257,14 +261,22 @@ class TypeMappingGenerator:
                 opaque_arg_conv = ty_info.rust_obj + " " + ty_info.var_name + "_conv;\n"
                 opaque_arg_conv = opaque_arg_conv + ty_info.var_name + "_conv.inner = (void*)(" + ty_info.var_name + " & (~1));\n"
                 if ty_info.is_ptr and holds_ref:
-                    opaque_arg_conv = opaque_arg_conv + ty_info.var_name + "_conv.is_owned = false;"
+                    opaque_arg_conv += ty_info.var_name + "_conv.is_owned = false;\n"
                 else:
-                    opaque_arg_conv = opaque_arg_conv + ty_info.var_name + "_conv.is_owned = (" + ty_info.var_name + " & 1) || (" + ty_info.var_name + " == 0);"
+                    opaque_arg_conv += ty_info.var_name + "_conv.is_owned = (" + ty_info.var_name + " & 1) || (" + ty_info.var_name + " == 0);\n"
+                opaque_arg_conv += "CHECK_INNER_FIELD_ACCESS_OR_NULL(" + ty_info.var_name + "_conv);"
                 if not is_free and (not ty_info.is_ptr or not holds_ref or ty_info.requires_clone == True) and ty_info.requires_clone != False:
                     if (ty_info.rust_obj.replace("LDK", "") + "_clone") in self.clone_fns:
                         # TODO: This is a bit too naive, even with the checks above, we really need to know if rust wants a ref or not, not just if its pass as a ptr.
-                        opaque_arg_conv = opaque_arg_conv + "\n" + ty_info.var_name + "_conv = " + ty_info.rust_obj.replace("LDK", "") + "_clone(&" + ty_info.var_name + "_conv);"
-                        from_hu_conv = (from_hu_conv[0], "")
+                        # arg_conv is used when converting a function argument from java normally (with holds_ref set),
+                        # and when converting a java value being returned from a trait method (with holds_ref unset).
+                        # In the second case, we need to clone before returning to C (as once we return the GC can free the object),
+                        # whereas in the first we prefer to clone in C to avoid additional Java code as much as possible.
+                        if holds_ref:
+                            opaque_arg_conv = opaque_arg_conv + "\n" + ty_info.var_name + "_conv = " + ty_info.rust_obj.replace("LDK", "") + "_clone(&" + ty_info.var_name + "_conv);"
+                            from_hu_conv = (from_hu_conv[0], "")
+                        else:
+                            from_hu_conv = (ty_info.var_name + " == null ? 0 : " + ty_info.var_name + ".clone_ptr()", "")
                     elif ty_info.passed_as_ptr:
                         opaque_arg_conv = opaque_arg_conv + "\n// Warning: we need a move here but no clone is available for " + ty_info.rust_obj
                         # TODO: Once we support features cloning (which just isn't in C yet), we can make this a compile error instead!
@@ -290,6 +302,7 @@ class TypeMappingGenerator:
 
                 opaque_ret_conv_suf += indent + "CHECK((((uint64_t)" + ty_info.var_name + "_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.\n"
                 opaque_ret_conv_suf += indent + "CHECK((((uint64_t)&" + ty_info.var_name + "_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.\n"
+                opaque_ret_conv_suf += "CHECK_INNER_FIELD_ACCESS_OR_NULL(" + ty_info.var_name + "_var);\n"
                 if holds_ref:
                     opaque_ret_conv_suf += indent + ty_info.var_name + "_ref = (uint64_t)" + ty_info.var_name + "_var.inner & ~1;"
                 else:
@@ -334,6 +347,7 @@ class TypeMappingGenerator:
                 base_conv = "void* " + ty_info.var_name + "_ptr = (void*)(((uint64_t)" + ty_info.var_name + ") & ~1);\n"
                 base_conv += "CHECK_ACCESS(" + ty_info.var_name + "_ptr);\n"
                 base_conv += ty_info.rust_obj + " " + ty_info.var_name + "_conv = *(" + ty_info.rust_obj + "*)(" + ty_info.var_name + "_ptr);"
+                from_hu_conv = None
                 if ty_info.rust_obj in self.trait_structs:
                     ret_conv = (ty_info.rust_obj + "* " + ty_info.var_name + "_ret = MALLOC(sizeof(" + ty_info.rust_obj + "), \"" + ty_info.rust_obj + "\");\n*" + ty_info.var_name + "_ret = ", ";")
                     if holds_ref:
@@ -345,25 +359,43 @@ class TypeMappingGenerator:
                     if not is_free:
                         needs_full_clone = not is_free and (not ty_info.is_ptr and not holds_ref or ty_info.requires_clone == True) and ty_info.requires_clone != False
                         if needs_full_clone and (ty_info.rust_obj.replace("LDK", "") + "_clone") in self.clone_fns:
-                            base_conv = base_conv + "\n" + ty_info.var_name + "_conv = " + ty_info.rust_obj.replace("LDK", "") + "_clone(&" + ty_info.var_name + "_conv);"
+                            # arg_conv is used when converting a function argument from java normally (with holds_ref set),
+                            # and when converting a java value being returned from a trait method (with holds_ref unset).
+                            # In the second case, we need to clone before returning to C (as once we return the GC can free the object),
+                            # whereas in the first we prefer to clone in C to avoid additional Java code as much as possible.
+                            if holds_ref:
+                                base_conv += "\n" + ty_info.var_name + "_conv = " + ty_info.rust_obj.replace("LDK", "") + "_clone(&" + ty_info.var_name + "_conv);"
+                            else:
+                                from_hu_conv = (ty_info.var_name + " == null ? 0 : " + ty_info.var_name + ".clone_ptr()", "")
+                                base_conv += "\n" + "FREE((void*)" + ty_info.var_name + ");"
                         else:
                             base_conv = base_conv + self.consts.trait_struct_inc_refcnt(ty_info)
                             if needs_full_clone:
                                 base_conv = base_conv + "// Warning: we may need a move here but no clone is available for " + ty_info.rust_obj + "\n"
                     else:
                         base_conv = base_conv + "\n" + "FREE((void*)" + ty_info.var_name + ");"
+                    if from_hu_conv is None:
+                        from_hu_conv = (ty_info.var_name + " == null ? 0 : " + ty_info.var_name + ".ptr", "")
+                    from_hu_conv = (from_hu_conv[0], "this.ptrs_to.add(" + ty_info.var_name + ")")
                     return ConvInfo(ty_info = ty_info, arg_name = ty_info.var_name,
                         arg_conv = base_conv, arg_conv_name = ty_info.var_name + "_conv", arg_conv_cleanup = None,
                         ret_conv = ret_conv, ret_conv_name = "(uint64_t)" + ty_info.var_name + "_ret",
                         to_hu_conv = ty_info.java_hu_ty + " ret_hu_conv = new " + ty_info.java_hu_ty + "(null, " + ty_info.var_name + ");\nret_hu_conv.ptrs_to.add(this);",
-                        to_hu_conv_name = "ret_hu_conv",
-                        from_hu_conv = (ty_info.var_name + " == null ? 0 : " + ty_info.var_name + ".ptr", "this.ptrs_to.add(" + ty_info.var_name + ")"))
+                        to_hu_conv_name = "ret_hu_conv", from_hu_conv = from_hu_conv)
                 needs_full_clone = not is_free and (not ty_info.is_ptr or ty_info.requires_clone == True) and ty_info.requires_clone != False
                 if needs_full_clone:
                     if "res" in ty_info.var_name: # XXX: This is a stupid hack
                         needs_full_clone = False
                     if needs_full_clone and (ty_info.rust_obj.replace("LDK", "") + "_clone") in self.clone_fns:
-                        base_conv = base_conv + "\n" + ty_info.var_name + "_conv = " + ty_info.rust_obj.replace("LDK", "") + "_clone((" + ty_info.rust_obj + "*)(((uint64_t)" + ty_info.var_name + ") & ~1));"
+                        # arg_conv is used when converting a function argument from java normally (with holds_ref set),
+                        # and when converting a java value being returned from a trait method (with holds_ref unset).
+                        # In the second case, we need to clone before returning to C (as once we return the GC can free the object),
+                        # whereas in the first we prefer to clone in C to avoid additional Java code as much as possible.
+                        if holds_ref:
+                            base_conv += "\n" + ty_info.var_name + "_conv = " + ty_info.rust_obj.replace("LDK", "") + "_clone((" + ty_info.rust_obj + "*)(((uint64_t)" + ty_info.var_name + ") & ~1));"
+                        else:
+                            from_hu_conv = (ty_info.var_name + " == null ? 0 : " + ty_info.var_name + ".clone_ptr()", "")
+                            base_conv += "\n" + "FREE((void*)" + ty_info.var_name + ");"
                     elif needs_full_clone:
                         base_conv = base_conv + "\n// Warning: we may need a move here but no clone is available for " + ty_info.rust_obj
                 if not needs_full_clone and ty_info.rust_obj != "LDKu8slice" and (not holds_ref or is_free):
@@ -371,28 +403,34 @@ class TypeMappingGenerator:
                     # underlying unlike Vecs, and it gives Java more freedom.
                     base_conv = base_conv + "\nFREE((void*)" + ty_info.var_name + ");"
                 if ty_info.rust_obj in self.complex_enums:
+                    to_hu_conv_sfx = ""
                     if needs_full_clone and (ty_info.rust_obj.replace("LDK", "") + "_clone") not in self.clone_fns:
                         # We really need a full clone here, but for now we just implement
                         # a manual clone explicitly for Option<Trait>s
-                        if ty_info.rust_obj.startswith("LDKCOption"):
+                        if ty_info.contains_trait:
+                            assert ty_info.rust_obj.startswith("LDKCOption") # We don't support contained traits for anything else yet
                             optional_ty = ty_info.rust_obj[11:-1]
-                            if "LDK" + optional_ty in self.trait_structs:
-                                base_conv += "\nif (" + ty_info.var_name + "_conv.tag == " + ty_info.rust_obj + "_Some) {"
-                                base_conv += "\n\t// Manually implement clone for Java trait instances"
-                                optional_ty_info = self.java_c_types("LDK" + optional_ty + " " + ty_info.var_name, None)
-                                base_conv += self.consts.trait_struct_inc_refcnt(optional_ty_info).\
-                                    replace("\n", "\n\t").replace(ty_info.var_name + "_conv", ty_info.var_name + "_conv.some")
-                                base_conv += "\n}"
+                            assert "LDK" + optional_ty in self.trait_structs # We don't support contained traits for anything else yet
+                            to_hu_conv_sfx = "this.ptrs_to.add(" + ty_info.var_name + ")"
+                            base_conv += "\nif (" + ty_info.var_name + "_conv.tag == " + ty_info.rust_obj + "_Some) {"
+                            base_conv += "\n\t// Manually implement clone for Java trait instances"
+                            optional_ty_info = self.java_c_types("LDK" + optional_ty + " " + ty_info.var_name, None)
+                            base_conv += self.consts.trait_struct_inc_refcnt(optional_ty_info).\
+                                replace("\n", "\n\t").replace(ty_info.var_name + "_conv", ty_info.var_name + "_conv.some")
+                            base_conv += "\n}"
                     ret_conv = ("uint64_t " + ty_info.var_name + "_ref = ((uint64_t)&", ") | 1;")
                     if not holds_ref:
                         ret_conv = (ty_info.rust_obj + " *" + ty_info.var_name + "_copy = MALLOC(sizeof(" + ty_info.rust_obj + "), \"" + ty_info.rust_obj + "\");\n", "")
                         ret_conv = (ret_conv[0] + "*" + ty_info.var_name + "_copy = ", "")
                         ret_conv = (ret_conv[0], ";\nuint64_t " + ty_info.var_name + "_ref = (uint64_t)" + ty_info.var_name + "_copy;")
+                    if from_hu_conv is None:
+                        from_hu_conv = (ty_info.var_name + ".ptr", "")
+                    from_hu_conv = (from_hu_conv[0], to_hu_conv_sfx)
                     return ConvInfo(ty_info = ty_info, arg_name = ty_info.var_name,
                         arg_conv = base_conv, arg_conv_name = ty_info.var_name + "_conv", arg_conv_cleanup = None,
                         ret_conv = ret_conv, ret_conv_name = ty_info.var_name + "_ref",
                         to_hu_conv = ty_info.java_hu_ty + " " + ty_info.var_name + "_hu_conv = " + ty_info.java_hu_ty + ".constr_from_ptr(" + ty_info.var_name + ");\n" + ty_info.var_name + "_hu_conv.ptrs_to.add(this);",
-                        to_hu_conv_name = ty_info.var_name + "_hu_conv", from_hu_conv = (ty_info.var_name + ".ptr", ""))
+                        to_hu_conv_name = ty_info.var_name + "_hu_conv", from_hu_conv = from_hu_conv)
                 if ty_info.rust_obj in self.result_types:
                     if holds_ref:
                         # If we're trying to return a ref, we have to clone.
@@ -401,11 +439,13 @@ class TypeMappingGenerator:
                         ret_conv = (ret_conv[0], ret_conv[1] + "\n*" + ty_info.var_name + "_conv = " + ty_info.rust_obj.replace("LDK", "") + "_clone(" + ty_info.var_name + "_conv);")
                     else:
                         ret_conv = (ty_info.rust_obj + "* " + ty_info.var_name + "_conv = MALLOC(sizeof(" + ty_info.rust_obj + "), \"" + ty_info.rust_obj + "\");\n*" + ty_info.var_name + "_conv = ", ";")
+                    if from_hu_conv is None:
+                        from_hu_conv = (ty_info.var_name + " != null ? " + ty_info.var_name + ".ptr : 0", "")
                     return ConvInfo(ty_info = ty_info, arg_name = ty_info.var_name,
                         arg_conv = base_conv, arg_conv_name = ty_info.var_name + "_conv", arg_conv_cleanup = None,
                         ret_conv = ret_conv, ret_conv_name = "(uint64_t)" + ty_info.var_name + "_conv",
                         to_hu_conv = ty_info.java_hu_ty + " " + ty_info.var_name + "_hu_conv = " + ty_info.java_hu_ty + ".constr_from_ptr(" + ty_info.var_name + ");",
-                        to_hu_conv_name = ty_info.var_name + "_hu_conv", from_hu_conv = (ty_info.var_name + " != null ? " + ty_info.var_name + ".ptr : 0", ""))
+                        to_hu_conv_name = ty_info.var_name + "_hu_conv", from_hu_conv = from_hu_conv)
                 if ty_info.rust_obj in self.tuple_types:
                     ret_conv_name = "((uint64_t)" + ty_info.var_name + "_conv)"
                     if holds_ref:
@@ -423,14 +463,17 @@ class TypeMappingGenerator:
                         to_hu_conv_sfx = "\n" + ty_info.var_name + "_hu_conv.ptrs_to.add(this);"
                     else:
                         to_hu_conv_sfx = ""
+                    if from_hu_conv is None:
+                        from_hu_conv = (ty_info.var_name + " != null ? " + ty_info.var_name + ".ptr : 0", "")
                     return ConvInfo(ty_info = ty_info, arg_name = ty_info.var_name,
                         arg_conv = base_conv, arg_conv_name = ty_info.var_name + "_conv", arg_conv_cleanup = None,
                         ret_conv = ret_conv, ret_conv_name = ret_conv_name,
                         to_hu_conv = ty_info.java_hu_ty + " " + ty_info.var_name + "_hu_conv = new " + ty_info.java_hu_ty + "(null, " + ty_info.var_name + ");" + to_hu_conv_sfx,
-                        to_hu_conv_name = ty_info.var_name + "_hu_conv", from_hu_conv = (ty_info.var_name + " != null ? " + ty_info.var_name + ".ptr : 0", ""))
+                        to_hu_conv_name = ty_info.var_name + "_hu_conv", from_hu_conv = from_hu_conv)
 
                 # The manually-defined types - TxOut and u5
                 if ty_info.rust_obj == "LDKu5":
+                    assert from_hu_conv is None
                     return ConvInfo(ty_info = ty_info, arg_name = ty_info.var_name,
                         arg_conv = "", arg_conv_name = "(LDKu5){ ._0 = " + ty_info.var_name + " }", arg_conv_cleanup = None,
                         ret_conv = ("uint8_t " + ty_info.var_name + "_val = ", "._0;"), ret_conv_name = ty_info.var_name + "_val",
index c46644b8ee746eb76a801db18c4bf2c44eff2f1c..640400ee3384e0a6e9673084786dc1763027edae 100755 (executable)
@@ -94,7 +94,8 @@ def doc_to_params_ret_nullable(doc):
     return (params, ret_null)
 
 unitary_enums = set()
-complex_enums = set()
+# Map from enum name to "contains trait object"
+complex_enums = {}
 opaque_structs = set()
 trait_structs = {}
 result_types = set()
@@ -225,6 +226,7 @@ def java_c_types(fn_arg, ret_arr_len):
                 var_name=res.var_name, arr_len="datalen", arr_access="data", subty=res, is_native_primitive=False)
 
     is_primitive = False
+    contains_trait = False
     arr_len = None
     mapped_type = []
     java_type_plural = None
@@ -316,6 +318,10 @@ def java_c_types(fn_arg, ret_arr_len):
             fn_ty_arg = "J"
             fn_arg = ma.group(2).strip()
             rust_obj = ma.group(1).strip()
+            if rust_obj in trait_structs:
+                contains_trait = True
+            elif rust_obj in complex_enums:
+                contains_trait = complex_enums[rust_obj]
             take_by_ptr = True
 
     if fn_arg.startswith(" *") or fn_arg.startswith("*"):
@@ -339,15 +345,16 @@ def java_c_types(fn_arg, ret_arr_len):
             if var_is_arr.group(1) == "":
                 return TypeInfo(rust_obj=rust_obj, java_ty=java_ty, java_hu_ty=java_ty, java_fn_ty_arg="[" + fn_ty_arg, c_ty=c_ty, is_const=is_const,
                     passed_as_ptr=False, is_ptr=False, nonnull_ptr=nonnull_ptr, var_name="arg",
-                    arr_len=var_is_arr.group(2), arr_access=arr_access, is_native_primitive=False)
+                    arr_len=var_is_arr.group(2), arr_access=arr_access, is_native_primitive=False, contains_trait=contains_trait)
             return TypeInfo(rust_obj=rust_obj, java_ty=java_ty, java_hu_ty=java_ty, java_fn_ty_arg="[" + fn_ty_arg, c_ty=c_ty, is_const=is_const,
                 passed_as_ptr=False, is_ptr=False, nonnull_ptr=nonnull_ptr, var_name=var_is_arr.group(1),
-                arr_len=var_is_arr.group(2), arr_access=arr_access, is_native_primitive=False)
+                arr_len=var_is_arr.group(2), arr_access=arr_access, is_native_primitive=False, contains_trait=contains_trait)
 
     if java_hu_ty is None:
         java_hu_ty = java_ty
     return TypeInfo(rust_obj=rust_obj, java_ty=java_ty, java_hu_ty=java_hu_ty, java_fn_ty_arg=fn_ty_arg, c_ty=c_ty, passed_as_ptr=is_ptr or take_by_ptr,
-        is_const=is_const, is_ptr=is_ptr, nonnull_ptr=nonnull_ptr, var_name=fn_arg, arr_len=arr_len, arr_access=arr_access, is_native_primitive=is_primitive)
+        is_const=is_const, is_ptr=is_ptr, nonnull_ptr=nonnull_ptr, var_name=fn_arg, arr_len=arr_len, arr_access=arr_access, is_native_primitive=is_primitive,
+        contains_trait=contains_trait)
 
 fn_ptr_regex = re.compile("^extern const ([A-Za-z_0-9\* ]*) \(\*(.*)\)\((.*)\);$")
 fn_ret_arr_regex = re.compile("(.*) \(\*(.*)\((.*)\)\)\[([0-9]*)\];$")
@@ -395,15 +402,22 @@ with open(sys.argv[1]) as in_h, open(f"{sys.argv[2]}/bindings{consts.file_ext}",
         method_comma_separated_arguments = re_match.group(3)
         method_arguments = method_comma_separated_arguments.split(',')
 
+        if method_name.startswith("__"):
+            return
+
         is_free = method_name.endswith("_free")
         if method_name.startswith("COption") or method_name.startswith("CResult"):
             struct_meth = method_name.rsplit("Z", 1)[0][1:] + "Z"
             expected_struct = "LDKC" + struct_meth
             struct_meth_name = method_name[len(struct_meth) + 1:].strip("_")
-        elif method_name.startswith("C2Tuple"):
+        elif method_name.startswith("C2Tuple") or method_name.startswith("C3Tuple"):
             tuple_name = method_name.rsplit("Z", 1)[0][2:] + "Z"
-            struct_meth = "Two" + tuple_name
-            expected_struct = "LDKC2" + tuple_name
+            if method_name.startswith("C2Tuple"):
+                struct_meth = "Two" + tuple_name
+                expected_struct = "LDKC2" + tuple_name
+            else:
+                struct_meth = "Three" + tuple_name
+                expected_struct = "LDKC3" + tuple_name
             struct_meth_name = method_name[len(tuple_name) + 2:].strip("_")
         else:
             struct_meth = method_name.split("_")[0]
@@ -416,6 +430,15 @@ with open(sys.argv[1]) as in_h, open(f"{sys.argv[2]}/bindings{consts.file_ext}",
         else:
             return_type_info = type_mapping_generator.map_type(method_return_type.strip() + " ret", True, ret_arr_len, False, force_holds_ref)
 
+        if method_name.endswith("_clone") and expected_struct not in unitary_enums:
+            meth_line = "uint64_t " + expected_struct.replace("LDK", "") + "_clone_ptr(" + expected_struct + " *NONNULL_PTR arg)"
+            write_c("static inline " + meth_line + " {\n")
+            write_c("\t" + return_type_info.ret_conv[0].replace("\n", "\n\t"))
+            write_c(method_name + "(arg)")
+            write_c(return_type_info.ret_conv[1])
+            write_c("\n\treturn " + return_type_info.ret_conv_name + ";\n}\n")
+            map_fn(meth_line + ";\n", re.compile("(uint64_t) ([A-Za-z_0-9]*)\((.*)\)").match(meth_line), None, None, None)
+
         argument_types = []
         default_constructor_args = {}
         takes_self = False
@@ -532,18 +555,18 @@ with open(sys.argv[1]) as in_h, open(f"{sys.argv[2]}/bindings{consts.file_ext}",
                 elif idx == len(field_lines) - 1:
                     assert(struct_line == "")
             assert struct_name.startswith("LDK")
-            (c_out, native_file_out, native_out) = consts.native_c_unitary_enum_map(struct_name[3:], [x.strip().strip(",") for x, _ in field_lines[1:-3]], enum_doc_comment)
+            (c_out, native_file_out, native_out) = consts.native_c_unitary_enum_map(struct_name[3:], [(x.strip().strip(","), y) for x, y in field_lines[1:-3]], enum_doc_comment)
             write_c(c_out)
             out_java_enum.write(native_file_out)
             out_java.write(native_out)
 
     def map_complex_enum(struct_name, union_enum_items, inline_enum_variants, enum_doc_comment):
         java_hu_type = struct_name.replace("LDK", "").replace("COption", "Option")
-        complex_enums.add(struct_name)
 
         enum_variants = []
         tag_field_lines = union_enum_items["field_lines"]
-        for idx, (struct_line, _) in enumerate(tag_field_lines):
+        contains_trait = False
+        for idx, (struct_line, variant_docs) in enumerate(tag_field_lines):
             if idx == 0:
                 assert(struct_line == "typedef enum %s_Tag {" % struct_name)
             elif idx == len(tag_field_lines) - 3:
@@ -560,19 +583,23 @@ with open(sys.argv[1]) as in_h, open(f"{sys.argv[2]}/bindings{consts.file_ext}",
                     for idx, (field, field_docs) in enumerate(enum_var_lines):
                         if idx != 0 and idx < len(enum_var_lines) - 2 and field.strip() != "":
                             field_ty = type_mapping_generator.java_c_types(field.strip(' ;'), None)
+                            contains_trait |= field_ty.contains_trait
                             if field_docs is not None and doc_to_field_nullable(field_docs):
                                 field_conv = type_mapping_generator.map_type_with_info(field_ty, False, None, False, True, True)
                             else:
                                 field_conv = type_mapping_generator.map_type_with_info(field_ty, False, None, False, True, False)
                             fields.append((field_conv, field_docs))
-                    enum_variants.append(ComplexEnumVariantInfo(variant_name, fields, False))
+                    enum_variants.append(ComplexEnumVariantInfo(variant_name, variant_docs, fields, False))
                 elif camel_to_snake(variant_name) in inline_enum_variants:
                     # TODO: If we ever have a rust enum Variant(Option<Struct>) we need to pipe
                     # docs through to there, and then potentially mark the field nullable.
-                    fields.append((type_mapping_generator.map_type(inline_enum_variants[camel_to_snake(variant_name)] + " " + camel_to_snake(variant_name), False, None, False, True), None))
-                    enum_variants.append(ComplexEnumVariantInfo(variant_name, fields, True))
+                    mapped = type_mapping_generator.map_type(inline_enum_variants[camel_to_snake(variant_name)] + " " + camel_to_snake(variant_name), False, None, False, True)
+                    contains_trait |= mapped.ty_info.contains_trait
+                    fields.append((mapped, None))
+                    enum_variants.append(ComplexEnumVariantInfo(variant_name, variant_docs, fields, True))
                 else:
-                    enum_variants.append(ComplexEnumVariantInfo(variant_name, fields, True))
+                    enum_variants.append(ComplexEnumVariantInfo(variant_name, variant_docs, fields, True))
+        complex_enums[struct_name] = contains_trait
 
         with open(f"{sys.argv[3]}/structs/{java_hu_type}{consts.file_ext}", "w") as out_java_enum:
             (out_java_addendum, out_java_enum_addendum, out_c_addendum) = consts.map_complex_enum(struct_name, enum_variants, camel_to_snake, enum_doc_comment)
@@ -658,7 +685,7 @@ with open(sys.argv[1]) as in_h, open(f"{sys.argv[2]}/bindings{consts.file_ext}",
             out_java_struct.write("\t\tif (ptr != 0) { bindings." + struct_name.replace("LDK","") + "_free(ptr); } super.finalize();\n")
             out_java_struct.write("\t}\n\n")
             out_java_struct.write("\tstatic " + human_ty + " constr_from_ptr(long ptr) {\n")
-            out_java_struct.write("\t\tif (bindings." + struct_name + "_result_ok(ptr)) {\n")
+            out_java_struct.write("\t\tif (bindings." + struct_name.replace("LDK", "") + "_is_ok(ptr)) {\n")
             out_java_struct.write("\t\t\treturn new " + human_ty + "_OK(null, ptr);\n")
             out_java_struct.write("\t\t} else {\n")
             out_java_struct.write("\t\t\treturn new " + human_ty + "_Err(null, ptr);\n")
@@ -673,11 +700,6 @@ with open(sys.argv[1]) as in_h, open(f"{sys.argv[2]}/bindings{consts.file_ext}",
             if not err_map.is_native_primitive and (err_map.rust_obj.replace("LDK", "") + "_clone" not in clone_fns):
                 can_clone = False
 
-            out_java.write("\tpublic static native boolean " + struct_name + "_result_ok(long arg);\n")
-            write_c(consts.c_fn_ty_pfx + "jboolean " + consts.c_fn_name_define_pfx(struct_name + "_result_ok", True) + consts.ptr_c_ty + " arg) {\n")
-            write_c("\treturn ((" + struct_name + "*)arg)->result_ok;\n")
-            write_c("}\n")
-
             out_java.write("\tpublic static native " + res_map.java_ty + " " + struct_name + "_get_ok(long arg);\n")
             write_c(consts.c_fn_ty_pfx + res_map.c_ty + " " + consts.c_fn_name_define_pfx(struct_name + "_get_ok", True) + consts.ptr_c_ty + " arg) {\n")
             write_c("\t" + struct_name + " *val = (" + struct_name + "*)(arg & ~1);\n")
@@ -833,7 +855,7 @@ with open(sys.argv[1]) as in_h, open(f"{sys.argv[2]}/bindings{consts.file_ext}",
                             last_struct_block_comment = block_comment.strip("\n")
                             block_comment = None
                         else:
-                            block_comment = block_comment + "\n" + struct_line.strip(" /*")
+                            block_comment = block_comment + "\n" + struct_line.strip(" /*").replace("…", "...")
                     else:
                         struct_name_match = struct_name_regex.match(struct_line)
                         if struct_name_match is not None:
@@ -898,33 +920,6 @@ with open(sys.argv[1]) as in_h, open(f"{sys.argv[2]}/bindings{consts.file_ext}",
                     map_tuple(struct_name, field_lines)
                 elif vec_ty is not None:
                     ty_info = type_mapping_generator.map_type(vec_ty + " arr_elem", False, None, False, False)
-                    if len(ty_info.java_fn_ty_arg) == 1: # ie we're a primitive of some form
-                        out_java.write("\tpublic static native long " + struct_name + "_new(" + ty_info.java_ty + "[] elems);\n")
-                        write_c(consts.c_fn_ty_pfx + consts.ptr_c_ty + " " + consts.c_fn_name_define_pfx(struct_name + "_new", True) + ty_info.c_ty + "Array elems) {\n")
-                        write_c("\t" + struct_name + " *ret = MALLOC(sizeof(" + struct_name + "), \"" + struct_name + "\");\n")
-                        write_c("\tret->datalen = " + consts.get_native_arr_len_call[0] + "elems" + consts.get_native_arr_len_call[1] + ";\n")
-                        write_c("\tif (ret->datalen == 0) {\n")
-                        write_c("\t\tret->data = NULL;\n")
-                        write_c("\t} else {\n")
-                        write_c("\t\tret->data = MALLOC(sizeof(" + vec_ty + ") * ret->datalen, \"" + struct_name + " Data\");\n")
-                        native_arr_ptr_call = consts.get_native_arr_ptr_call(ty_info.ty_info)
-                        write_c("\t\t" + ty_info.c_ty + " *java_elems = " + native_arr_ptr_call[0] + "elems" + native_arr_ptr_call[1] + ";\n")
-                        write_c("\t\tfor (size_t i = 0; i < ret->datalen; i++) {\n")
-                        if ty_info.arg_conv is not None:
-                            write_c("\t\t\t" + ty_info.c_ty + " arr_elem = java_elems[i];\n")
-                            write_c("\t\t\t" + ty_info.arg_conv.replace("\n", "\n\t\t\t") + "\n")
-                            write_c("\t\t\tret->data[i] = " + ty_info.arg_conv_name + ";\n")
-                            assert ty_info.arg_conv_cleanup is None
-                        else:
-                            write_c("\t\t\tret->data[i] = java_elems[i];\n")
-                        write_c("\t\t}\n")
-                        cleanup = consts.release_native_arr_ptr_call(ty_info.ty_info, "elems", "java_elems")
-                        if cleanup is not None:
-                            write_c("\t\t" + cleanup + ";\n")
-                        write_c("\t}\n")
-                        write_c("\treturn (uint64_t)ret;\n")
-                        write_c("}\n")
-
                     if ty_info.is_native_primitive:
                         clone_fns.add(struct_name.replace("LDK", "") + "_clone")
                         write_c("static inline " + struct_name + " " + struct_name.replace("LDK", "") + "_clone(const " + struct_name + " *orig) {\n")
index 912cc1cdce44e892d349291de5a179c064f67a7c..13f4c6c3e1179ef1700a30dccd57510ac72d803c 100755 (executable)
@@ -78,7 +78,15 @@ if [ "$4" = "true" ]; then
 else
        ./genbindings.py "./lightning.h" src/main/java/org/ldk/impl src/main/java/org/ldk src/main/jni/ $DEBUG_ARG java $4
 fi
-echo "#define LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ LDKCVec_TransactionOutputsZ" > src/main/jni/bindings.c
+rm -f src/main/jni/bindings.c
+if [ "$3" = "true" ]; then
+       echo "#define LDK_DEBUG_BUILD" > src/main/jni/bindings.c
+elif [ "$3" = "leaks" ]; then
+       # For leak checking we use release libldk which doesn't expose
+       # __unmangle_inner_ptr, but the C code expects to be able to call it.
+       echo "#define __unmangle_inner_ptr(a) (a)" > src/main/jni/bindings.c
+fi
+echo "#define LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ LDKCVec_TransactionOutputsZ" >> src/main/jni/bindings.c
 echo "#define CVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ_free CVec_TransactionOutputsZ_free" >> src/main/jni/bindings.c
 cat src/main/jni/bindings.c.body >> src/main/jni/bindings.c
 javac -h src/main/jni src/main/java/org/ldk/enums/*.java src/main/java/org/ldk/impl/*.java
index 15c3ac4783ad222aef4647d40fcf1ebb6bec7204..3827005a2707dbd00a7eb0ca1ecdeb339f13df0d 100644 (file)
@@ -103,9 +103,10 @@ public class version {
 
         self.util_fn_pfx = """package org.ldk.structs;
 import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
 import java.util.Arrays;
 import javax.annotation.Nullable;
-import org.ldk.enums.*;
 
 public class UtilMethods {
 """
@@ -163,6 +164,7 @@ void __attribute__((constructor)) spawn_stderr_redirection() {
             self.c_file_pfx = self.c_file_pfx + """#define MALLOC(a, _) malloc(a)
 #define FREE(p) if ((uint64_t)(p) > 4096) { free(p); }
 #define CHECK_ACCESS(p)
+#define CHECK_INNER_FIELD_ACCESS_OR_NULL(v)
 """
         if not DEBUG:
             self.c_file_pfx += """#define DO_ASSERT(a) (void)(a)
@@ -319,7 +321,7 @@ void __wrap_free(void* ptr) {
        __real_free(ptr);
 }
 
-static void CHECK_ACCESS(void* ptr) {
+static void CHECK_ACCESS(const void* ptr) {
        DO_ASSERT(!pthread_mutex_lock(&allocation_mtx));
        allocation* it = allocation_ll;
        while (it->ptr != ptr) {
@@ -336,6 +338,13 @@ static void CHECK_ACCESS(void* ptr) {
        }
        DO_ASSERT(!pthread_mutex_unlock(&allocation_mtx));
 }
+#define CHECK_INNER_FIELD_ACCESS_OR_NULL(v) \\
+       if (v.is_owned && v.inner != NULL) { \\
+               const void *p = __unmangle_inner_ptr(v.inner); \\
+               if (p != NULL) { \\
+                       CHECK_ACCESS(p); \\
+               } \\
+       }
 
 void* __real_realloc(void* ptr, size_t newlen);
 void* __wrap_realloc(void* ptr, size_t len) {
@@ -614,8 +623,10 @@ import javax.annotation.Nullable;
             out_java_enum += "/**\n * " + enum_doc_comment.replace("\n", "\n * ") + "\n */\n"
         out_java_enum += "public enum " + struct_name + " {\n"
         ord_v = 0
-        for var in variants:
-            out_java_enum = out_java_enum + "\t" + var + ",\n"
+        for var, var_docs in variants:
+            if var_docs is not None:
+                out_java_enum += "\t/**\n\t * " + var_docs.replace("\n", "\n\t * ") + "\n\t */\n"
+            out_java_enum += "\t" + var + ",\n"
             out_c = out_c + "\t\tcase %d: return %s;\n" % (ord_v, var)
             ord_v = ord_v + 1
         out_java_enum = out_java_enum + "\t; static native void init();\n"
@@ -627,19 +638,19 @@ import javax.annotation.Nullable;
         out_c = out_c + "}\n"
 
         out_c = out_c + "static jclass " + struct_name + "_class = NULL;\n"
-        for var in variants:
+        for var, _ in variants:
             out_c = out_c + "static jfieldID " + struct_name + "_" + var + " = NULL;\n"
         out_c = out_c + self.c_fn_ty_pfx + "void JNICALL Java_org_ldk_enums_" + struct_name.replace("_", "_1") + "_init (" + self.c_fn_args_pfx + ") {\n"
         out_c = out_c + "\t" + struct_name + "_class = (*env)->NewGlobalRef(env, clz);\n"
         out_c = out_c + "\tCHECK(" + struct_name + "_class != NULL);\n"
-        for var in variants:
+        for var, _ in variants:
             out_c = out_c + "\t" + struct_name + "_" + var + " = (*env)->GetStaticFieldID(env, " + struct_name + "_class, \"" + var + "\", \"Lorg/ldk/enums/" + struct_name + ";\");\n"
             out_c = out_c + "\tCHECK(" + struct_name + "_" + var + " != NULL);\n"
         out_c = out_c + "}\n"
         out_c = out_c + "static inline jclass LDK" + struct_name + "_to_java(JNIEnv *env, LDK" + struct_name + " val) {\n"
         out_c = out_c + "\tswitch (val) {\n"
         ord_v = 0
-        for var in variants:
+        for var, _ in variants:
             out_c = out_c + "\t\tcase " + var + ":\n"
             out_c = out_c + "\t\t\treturn (*env)->GetStaticObjectField(env, " + struct_name + "_class, " + struct_name + "_" + var + ");\n"
             ord_v = ord_v + 1
@@ -1049,7 +1060,9 @@ import javax.annotation.Nullable;
         out_java +=  ("\t\tprivate " + struct_name + "() {}\n")
         for var in variant_list:
             out_java +=  ("\t\tpublic final static class " + var.var_name + " extends " + struct_name + " {\n")
-            java_hu_subclasses = java_hu_subclasses + "\tpublic final static class " + var.var_name + " extends " + java_hu_type + " {\n"
+            if var.var_docs is not None:
+                java_hu_subclasses += "\t/**\n\t * " + var.var_docs.replace("\n", "\n\t * ") + "\n\t */\n"
+            java_hu_subclasses += "\tpublic final static class " + var.var_name + " extends " + java_hu_type + " {\n"
             out_java_enum += ("\t\tif (raw_val.getClass() == bindings." + struct_name + "." + var.var_name + ".class) {\n")
             out_java_enum += ("\t\t\treturn new " + var.var_name + "(ptr, (bindings." + struct_name + "." + var.var_name + ")raw_val);\n")
             init_meth_jty_str = ""
@@ -1188,6 +1201,8 @@ import javax.annotation.Nullable;
                     out_java_struct += "\tpublic static " + return_type_info.java_hu_ty + " with_default("
                 else:
                     out_java_struct += "\tpublic static " + return_type_info.java_hu_ty + " " + meth_n + "("
+            elif meth_n == "clone_ptr":
+                out_java_struct += ("\t" + return_type_info.java_hu_ty + " " + meth_n + "(")
             else:
                 out_java_struct += ("\tpublic " + return_type_info.java_hu_ty + " " + meth_n + "(")
             for idx, arg in enumerate(argument_types):
index 0e68a947141c9ed3a1bab449816cdab77f20d4f8..3dd5f49f65b882e3ea3fab98cb3ef53697465125 100644 (file)
@@ -68,9 +68,9 @@ public class ChannelManagerConstructor {
      *               Note that if the provided Watch is a ChainWatch and has an associated filter, the previously registered
      *               outputs will be loaded when chain_sync_completed is called.
      */
-    public ChannelManagerConstructor(byte[] channel_manager_serialized, byte[][] channel_monitors_serialized,
-                                     KeysInterface keys_interface, FeeEstimator fee_estimator, ChainMonitor chain_monitor, @Nullable Filter filter,
-                                     @Nullable NetworkGraph net_graph,
+    public ChannelManagerConstructor(byte[] channel_manager_serialized, byte[][] channel_monitors_serialized, UserConfig config,
+                                     KeysInterface keys_interface, FeeEstimator fee_estimator, ChainMonitor chain_monitor,
+                                     @Nullable Filter filter, @Nullable NetworkGraph net_graph,
                                      BroadcasterInterface tx_broadcaster, Logger logger) throws InvalidSerializedDataException {
         final IgnoringMessageHandler no_custom_messages = IgnoringMessageHandler.of();
         final ChannelMonitor[] monitors = new ChannelMonitor[channel_monitors_serialized.length];
@@ -86,7 +86,7 @@ public class ChannelManagerConstructor {
         }
         Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ res =
                 UtilMethods.C2Tuple_BlockHashChannelManagerZ_read(channel_manager_serialized, keys_interface, fee_estimator, chain_monitor.as_Watch(), tx_broadcaster,
-                        logger, UserConfig.with_default(), monitors);
+                        logger, config, monitors);
         if (res instanceof Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ.Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_Err) {
             throw new InvalidSerializedDataException();
         }
index afe728b059c482cc35983051ab3f72ed998b0e99..49f60c7f721b22f570dd5e5d9c300ca9c9503fbe 100644 (file)
@@ -217,7 +217,7 @@ public class NioPeerHandler {
                                     buf.get(read_bytes, 0, read);
                                     long read_result_pointer = bindings.PeerManager_read_event(
                                             peer_manager_raw_pointer, peer.descriptor_raw_pointer, read_bytes);
-                                    if (bindings.LDKCResult_boolPeerHandleErrorZ_result_ok(read_result_pointer)) {
+                                    if (bindings.CResult_boolPeerHandleErrorZ_is_ok(read_result_pointer)) {
                                         if (bindings.LDKCResult_boolPeerHandleErrorZ_get_ok(read_result_pointer)) {
                                             key.interestOps(key.interestOps() & (~SelectionKey.OP_READ));
                                         }
index 563ff9d779afe43926cbc0a538a5e9c79f497ca1..805a9a5cb80230144dc169c2f3c799ffd4068a75 100644 (file)
@@ -4,7 +4,13 @@ package org.ldk.enums;
  * An error when accessing the chain via [`Access`].
  */
 public enum AccessError {
+       /**
+        * The requested chain is unknown.
+        */
        LDKAccessError_UnknownChain,
+       /**
+        * The requested transaction doesn't exist or hasn't confirmed.
+        */
        LDKAccessError_UnknownTx,
        ; static native void init();
        static { init(); }
index d7b1ddb4355e0f7f24891976b0ae75cfcf4bf8ea..55c551e4dbea37fe6481f4b338031a0c973cfe0c 100644 (file)
@@ -4,7 +4,69 @@ package org.ldk.enums;
  * An error enum representing a failure to persist a channel monitor update.
  */
 public enum ChannelMonitorUpdateErr {
+       /**
+        * Used to indicate a temporary failure (eg connection to a watchtower or remote backup of
+        * our state failed, but is expected to succeed at some point in the future).
+        * 
+        * Such a failure will \"freeze\" a channel, preventing us from revoking old states or
+        * submitting new commitment transactions to the counterparty. Once the update(s) that failed
+        * have been successfully applied, a [`MonitorEvent::UpdateCompleted`] event should be returned
+        * via [`Watch::release_pending_monitor_events`] which will then restore the channel to an
+        * operational state.
+        * 
+        * Note that a given ChannelManager will *never* re-generate a given ChannelMonitorUpdate. If
+        * you return a TemporaryFailure you must ensure that it is written to disk safely before
+        * writing out the latest ChannelManager state.
+        * 
+        * Even when a channel has been \"frozen\" updates to the ChannelMonitor can continue to occur
+        * (eg if an inbound HTLC which we forwarded was claimed upstream resulting in us attempting
+        * to claim it on this channel) and those updates must be applied wherever they can be. At
+        * least one such updated ChannelMonitor must be persisted otherwise PermanentFailure should
+        * be returned to get things on-chain ASAP using only the in-memory copy. Obviously updates to
+        * the channel which would invalidate previous ChannelMonitors are not made when a channel has
+        * been \"frozen\".
+        * 
+        * Note that even if updates made after TemporaryFailure succeed you must still provide a
+        * [`MonitorEvent::UpdateCompleted`] to ensure you have the latest monitor and re-enable
+        * normal channel operation. Note that this is normally generated through a call to
+        * [`ChainMonitor::channel_monitor_updated`].
+        * 
+        * Note that the update being processed here will not be replayed for you when you return a
+        * [`MonitorEvent::UpdateCompleted`] event via [`Watch::release_pending_monitor_events`], so
+        * you must store the update itself on your own local disk prior to returning a
+        * TemporaryFailure. You may, of course, employ a journaling approach, storing only the
+        * ChannelMonitorUpdate on disk without updating the monitor itself, replaying the journal at
+        * reload-time.
+        * 
+        * For deployments where a copy of ChannelMonitors and other local state are backed up in a
+        * remote location (with local copies persisted immediately), it is anticipated that all
+        * updates will return TemporaryFailure until the remote copies could be updated.
+        * 
+        * [`ChainMonitor::channel_monitor_updated`]: chainmonitor::ChainMonitor::channel_monitor_updated
+        */
        LDKChannelMonitorUpdateErr_TemporaryFailure,
+       /**
+        * Used to indicate no further channel monitor updates will be allowed (eg we've moved on to a
+        * different watchtower and cannot update with all watchtowers that were previously informed
+        * of this channel).
+        * 
+        * At reception of this error, ChannelManager will force-close the channel and return at
+        * least a final ChannelMonitorUpdate::ChannelForceClosed which must be delivered to at
+        * least one ChannelMonitor copy. Revocation secret MUST NOT be released and offchain channel
+        * update must be rejected.
+        * 
+        * This failure may also signal a failure to update the local persisted copy of one of
+        * the channel monitor instance.
+        * 
+        * Note that even when you fail a holder commitment transaction update, you must store the
+        * update to ensure you can claim from it in case of a duplicate copy of this ChannelMonitor
+        * broadcasts it (e.g distributed channel-monitor deployment)
+        * 
+        * In case of distributed watchtowers deployment, the new version must be written to disk, as
+        * state may have been stored but rejected due to a block forcing a commitment broadcast. This
+        * storage is used to claim outputs of rejected state confirmed onchain by another watchtower,
+        * lagging behind on block processing.
+        */
        LDKChannelMonitorUpdateErr_PermanentFailure,
        ; static native void init();
        static { init(); }
index 3c7cdc4ea449178aa2eda9b428de71e702e6b8cf..bdd116a0f1ff945e66ae2fdfc509962b523e49bd 100644 (file)
@@ -5,8 +5,17 @@ package org.ldk.enums;
  * estimation.
  */
 public enum ConfirmationTarget {
+       /**
+        * We are happy with this transaction confirming slowly when feerate drops some.
+        */
        LDKConfirmationTarget_Background,
+       /**
+        * We'd like this transaction to confirm without major delay, but 12-18 blocks is fine.
+        */
        LDKConfirmationTarget_Normal,
+       /**
+        * We'd like this transaction to confirm in the next few blocks.
+        */
        LDKConfirmationTarget_HighPriority,
        ; static native void init();
        static { init(); }
index c0f494a26172481ecd2148f8053135cbc4235cf3..f46601b3dcf0086a7f828d98846c1ab6e1c364ae 100644 (file)
@@ -4,9 +4,21 @@ package org.ldk.enums;
  * Errors that may occur when constructing a new `RawInvoice` or `Invoice`
  */
 public enum CreationError {
+       /**
+        * The supplied description string was longer than 639 __bytes__ (see [`Description::new(...)`](./struct.Description.html#method.new))
+        */
        LDKCreationError_DescriptionTooLong,
+       /**
+        * The specified route has too many hops and can't be encoded
+        */
        LDKCreationError_RouteTooLong,
+       /**
+        * The unix timestamp of the supplied date is <0 or can't be represented as `SystemTime`
+        */
        LDKCreationError_TimestampOutOfBounds,
+       /**
+        * The supplied expiry time could cause an overflow if added to a `PositiveTimestamp`
+        */
        LDKCreationError_ExpiryTimeOutOfBounds,
        ; static native void init();
        static { init(); }
index a7f118330c63661da5d7e7acb401b7c8df6d4dea..67ed429b6472232a94997441408ca88407873b2f 100644 (file)
@@ -4,10 +4,25 @@ package org.ldk.enums;
  * Enum representing the crypto currencies (or networks) supported by this library
  */
 public enum Currency {
+       /**
+        * Bitcoin mainnet
+        */
        LDKCurrency_Bitcoin,
+       /**
+        * Bitcoin testnet
+        */
        LDKCurrency_BitcoinTestnet,
+       /**
+        * Bitcoin regtest
+        */
        LDKCurrency_Regtest,
+       /**
+        * Bitcoin simnet
+        */
        LDKCurrency_Simnet,
+       /**
+        * Bitcoin signet
+        */
        LDKCurrency_Signet,
        ; static native void init();
        static { init(); }
index e066ac329731f93d7178ee7f60b0a214c307d81f..f278da87bc816688813a29ab7532503a5fc6b2f3 100644 (file)
@@ -4,10 +4,25 @@ package org.ldk.enums;
  * An enum representing the available verbosity levels of the logger.
  */
 public enum Level {
+       /**
+        * Designates very low priority, often extremely verbose, information
+        */
        LDKLevel_Trace,
+       /**
+        * Designates lower priority information
+        */
        LDKLevel_Debug,
+       /**
+        * Designates useful information
+        */
        LDKLevel_Info,
+       /**
+        * Designates hazardous situations
+        */
        LDKLevel_Warn,
+       /**
+        * Designates very serious errors
+        */
        LDKLevel_Error,
        ; static native void init();
        static { init(); }
index 686f21e8b2b8e561fae055f11cba34b147ace457..ce37795849a506349ac2fffa5122a712e7b450a8 100644 (file)
@@ -4,9 +4,21 @@ package org.ldk.enums;
  * An enum representing the possible Bitcoin or test networks which we can run on
  */
 public enum Network {
+       /**
+        * The main Bitcoin blockchain.
+        */
        LDKNetwork_Bitcoin,
+       /**
+        * The testnet3 blockchain.
+        */
        LDKNetwork_Testnet,
+       /**
+        * A local test blockchain.
+        */
        LDKNetwork_Regtest,
+       /**
+        * A blockchain on which blocks are signed instead of mined.
+        */
        LDKNetwork_Signet,
        ; static native void init();
        static { init(); }
index 597c73fc1e68d0ad1fb03074f898fbe25ebe8918..cca53632dc174423e4b7fcad8415e1424ab91aa7 100644 (file)
@@ -4,14 +4,41 @@ package org.ldk.enums;
  * Represents an error returned from libsecp256k1 during validation of some secp256k1 data
  */
 public enum Secp256k1Error {
+       /**
+        * Signature failed verification
+        */
        LDKSecp256k1Error_IncorrectSignature,
+       /**
+        * Badly sized message ("messages" are actually fixed-sized digests; see the MESSAGE_SIZE constant)
+        */
        LDKSecp256k1Error_InvalidMessage,
+       /**
+        * Bad public key
+        */
        LDKSecp256k1Error_InvalidPublicKey,
+       /**
+        * Bad signature
+        */
        LDKSecp256k1Error_InvalidSignature,
+       /**
+        * Bad secret key
+        */
        LDKSecp256k1Error_InvalidSecretKey,
+       /**
+        * Bad recovery id
+        */
        LDKSecp256k1Error_InvalidRecoveryId,
+       /**
+        * Invalid tweak for add_assign or mul_assign
+        */
        LDKSecp256k1Error_InvalidTweak,
+       /**
+        * tweak_add_check failed on an xonly public key
+        */
        LDKSecp256k1Error_TweakCheckFailed,
+       /**
+        * Didn't pass enough memory to context creation with preallocated memory
+        */
        LDKSecp256k1Error_NotEnoughMemory,
        ; static native void init();
        static { init(); }
index 96023bd25a5589c6925666f7b2f84b99fdd123db..57f659ff9020fc4eee240b45ea3a7c8fda8c72e8 100644 (file)
@@ -5,15 +5,46 @@ package org.ldk.enums;
  * requirements sections in BOLT #11
  */
 public enum SemanticError {
+       /**
+        * The invoice is missing the mandatory payment hash
+        */
        LDKSemanticError_NoPaymentHash,
+       /**
+        * The invoice has multiple payment hashes which isn't allowed
+        */
        LDKSemanticError_MultiplePaymentHashes,
+       /**
+        * No description or description hash are part of the invoice
+        */
        LDKSemanticError_NoDescription,
+       /**
+        * The invoice contains multiple descriptions and/or description hashes which isn't allowed
+        */
        LDKSemanticError_MultipleDescriptions,
+       /**
+        * The invoice is missing the mandatory payment secret, which all modern lightning nodes
+        * should provide.
+        */
        LDKSemanticError_NoPaymentSecret,
+       /**
+        * The invoice contains multiple payment secrets
+        */
        LDKSemanticError_MultiplePaymentSecrets,
+       /**
+        * The invoice's features are invalid
+        */
        LDKSemanticError_InvalidFeatures,
+       /**
+        * The recovery id doesn't fit the signature/pub key
+        */
        LDKSemanticError_InvalidRecoveryId,
+       /**
+        * The invoice's signature is invalid
+        */
        LDKSemanticError_InvalidSignature,
+       /**
+        * The invoice's amount was not a whole number of millisatoshis
+        */
        LDKSemanticError_ImpreciseAmount,
        ; static native void init();
        static { init(); }
index c1b167a63798b2b041ade4b5d46e9252f0aa04b8..319da34eb901fa6b220a428eb28eef4ea54d49df 100644 (file)
@@ -4,9 +4,21 @@ package org.ldk.enums;
  * SI prefixes for the human readable part
  */
 public enum SiPrefix {
+       /**
+        * 10^-3
+        */
        LDKSiPrefix_Milli,
+       /**
+        * 10^-6
+        */
        LDKSiPrefix_Micro,
+       /**
+        * 10^-9
+        */
        LDKSiPrefix_Nano,
+       /**
+        * 10^-12
+        */
        LDKSiPrefix_Pico,
        ; static native void init();
        static { init(); }
index 99e579fb65f776153dd181cd830b91d4166330b6..5e7973047e3e2482b320fd72abe0c35c2f51c6e1 100644 (file)
@@ -77,24 +77,18 @@ public class bindings {
        static { Secp256k1Error.values(); /* Force enum statics to run */ }
        static { SemanticError.values(); /* Force enum statics to run */ }
        static { SiPrefix.values(); /* Force enum statics to run */ }
-       public static native long LDKCVec_u8Z_new(byte[] elems);
        // struct LDKCVec_u8Z TxOut_get_script_pubkey (struct LDKTxOut* thing)
        public static native byte[] TxOut_get_script_pubkey(long thing);
        // uint64_t TxOut_get_value (struct LDKTxOut* thing)
        public static native long TxOut_get_value(long thing);
-       public static native boolean LDKCResult_SecretKeyErrorZ_result_ok(long arg);
        public static native byte[] LDKCResult_SecretKeyErrorZ_get_ok(long arg);
        public static native Secp256k1Error LDKCResult_SecretKeyErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_PublicKeyErrorZ_result_ok(long arg);
        public static native byte[] LDKCResult_PublicKeyErrorZ_get_ok(long arg);
        public static native Secp256k1Error LDKCResult_PublicKeyErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_TxCreationKeysDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_TxCreationKeysDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_TxCreationKeysDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_ChannelPublicKeysDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_ChannelPublicKeysDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_ChannelPublicKeysDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_TxCreationKeysErrorZ_result_ok(long arg);
        public static native long LDKCResult_TxCreationKeysErrorZ_get_ok(long arg);
        public static native Secp256k1Error LDKCResult_TxCreationKeysErrorZ_get_err(long arg);
        public static class LDKCOption_u32Z {
@@ -110,53 +104,36 @@ public class bindings {
        }
        static { LDKCOption_u32Z.init(); }
        public static native LDKCOption_u32Z LDKCOption_u32Z_ref_from_ptr(long ptr);
-       public static native boolean LDKCResult_HTLCOutputInCommitmentDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_HTLCOutputInCommitmentDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_HTLCOutputInCommitmentDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_ChannelTransactionParametersDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_ChannelTransactionParametersDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_ChannelTransactionParametersDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_HolderCommitmentTransactionDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_HolderCommitmentTransactionDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_HolderCommitmentTransactionDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_BuiltCommitmentTransactionDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_BuiltCommitmentTransactionDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_BuiltCommitmentTransactionDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_TrustedClosingTransactionNoneZ_result_ok(long arg);
        public static native long LDKCResult_TrustedClosingTransactionNoneZ_get_ok(long arg);
        public static native void LDKCResult_TrustedClosingTransactionNoneZ_get_err(long arg);
-       public static native boolean LDKCResult_CommitmentTransactionDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_CommitmentTransactionDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_CommitmentTransactionDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_TrustedCommitmentTransactionNoneZ_result_ok(long arg);
        public static native long LDKCResult_TrustedCommitmentTransactionNoneZ_get_ok(long arg);
        public static native void LDKCResult_TrustedCommitmentTransactionNoneZ_get_err(long arg);
-       public static native boolean LDKCResult_CVec_SignatureZNoneZ_result_ok(long arg);
        public static native byte[][] LDKCResult_CVec_SignatureZNoneZ_get_ok(long arg);
        public static native void LDKCResult_CVec_SignatureZNoneZ_get_err(long arg);
-       public static native boolean LDKCResult_ShutdownScriptDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_ShutdownScriptDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_ShutdownScriptDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_ShutdownScriptInvalidShutdownScriptZ_result_ok(long arg);
        public static native long LDKCResult_ShutdownScriptInvalidShutdownScriptZ_get_ok(long arg);
        public static native long LDKCResult_ShutdownScriptInvalidShutdownScriptZ_get_err(long arg);
-       public static native boolean LDKCResult_NoneErrorZ_result_ok(long arg);
        public static native void LDKCResult_NoneErrorZ_get_ok(long arg);
        public static native IOError LDKCResult_NoneErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_RouteHopDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_RouteHopDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_RouteHopDecodeErrorZ_get_err(long arg);
-       public static native long LDKCVec_RouteHopZ_new(long[] elems);
-       public static native boolean LDKCResult_RouteDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_RouteDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_RouteDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_RouteParametersDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_RouteParametersDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_RouteParametersDecodeErrorZ_get_err(long arg);
-       public static native long LDKCVec_RouteHintZ_new(long[] elems);
        public static class LDKCOption_u64Z {
                private LDKCOption_u64Z() {}
                public final static class Some extends LDKCOption_u64Z {
@@ -170,29 +147,20 @@ public class bindings {
        }
        static { LDKCOption_u64Z.init(); }
        public static native LDKCOption_u64Z LDKCOption_u64Z_ref_from_ptr(long ptr);
-       public static native boolean LDKCResult_PayeeDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_PayeeDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_PayeeDecodeErrorZ_get_err(long arg);
-       public static native long LDKCVec_RouteHintHopZ_new(long[] elems);
-       public static native boolean LDKCResult_RouteHintDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_RouteHintDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_RouteHintDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_RouteHintHopDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_RouteHintHopDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_RouteHintHopDecodeErrorZ_get_err(long arg);
-       public static native long LDKCVec_ChannelDetailsZ_new(long[] elems);
-       public static native boolean LDKCResult_RouteLightningErrorZ_result_ok(long arg);
        public static native long LDKCResult_RouteLightningErrorZ_get_ok(long arg);
        public static native long LDKCResult_RouteLightningErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_TxOutAccessErrorZ_result_ok(long arg);
        public static native long LDKCResult_TxOutAccessErrorZ_get_ok(long arg);
        public static native AccessError LDKCResult_TxOutAccessErrorZ_get_err(long arg);
        // uintptr_t C2Tuple_usizeTransactionZ_get_a(LDKC2Tuple_usizeTransactionZ *NONNULL_PTR tuple);
        public static native long C2Tuple_usizeTransactionZ_get_a(long tuple);
        // struct LDKTransaction C2Tuple_usizeTransactionZ_get_b(LDKC2Tuple_usizeTransactionZ *NONNULL_PTR tuple);
        public static native byte[] C2Tuple_usizeTransactionZ_get_b(long tuple);
-       public static native long LDKCVec_C2Tuple_usizeTransactionZZ_new(long[] elems);
-       public static native boolean LDKCResult_NoneChannelMonitorUpdateErrZ_result_ok(long arg);
        public static native void LDKCResult_NoneChannelMonitorUpdateErrZ_get_ok(long arg);
        public static native ChannelMonitorUpdateErr LDKCResult_NoneChannelMonitorUpdateErrZ_get_err(long arg);
        public static class LDKMonitorEvent {
@@ -218,7 +186,6 @@ public class bindings {
        }
        static { LDKMonitorEvent.init(); }
        public static native LDKMonitorEvent LDKMonitorEvent_ref_from_ptr(long ptr);
-       public static native long LDKCVec_MonitorEventZ_new(long[] elems);
        public static class LDKCOption_C2Tuple_usizeTransactionZZ {
                private LDKCOption_C2Tuple_usizeTransactionZZ() {}
                public final static class Some extends LDKCOption_C2Tuple_usizeTransactionZZ {
@@ -232,6 +199,50 @@ public class bindings {
        }
        static { LDKCOption_C2Tuple_usizeTransactionZZ.init(); }
        public static native LDKCOption_C2Tuple_usizeTransactionZZ LDKCOption_C2Tuple_usizeTransactionZZ_ref_from_ptr(long ptr);
+       public static class LDKClosureReason {
+               private LDKClosureReason() {}
+               public final static class CounterpartyForceClosed extends LDKClosureReason {
+                       public String peer_msg;
+                       CounterpartyForceClosed(String peer_msg) { this.peer_msg = peer_msg; }
+               }
+               public final static class HolderForceClosed extends LDKClosureReason {
+                       HolderForceClosed() { }
+               }
+               public final static class CooperativeClosure extends LDKClosureReason {
+                       CooperativeClosure() { }
+               }
+               public final static class CommitmentTxConfirmed extends LDKClosureReason {
+                       CommitmentTxConfirmed() { }
+               }
+               public final static class ProcessingError extends LDKClosureReason {
+                       public String err;
+                       ProcessingError(String err) { this.err = err; }
+               }
+               public final static class DisconnectedPeer extends LDKClosureReason {
+                       DisconnectedPeer() { }
+               }
+               public final static class OutdatedChannelManager extends LDKClosureReason {
+                       OutdatedChannelManager() { }
+               }
+               static native void init();
+       }
+       static { LDKClosureReason.init(); }
+       public static native LDKClosureReason LDKClosureReason_ref_from_ptr(long ptr);
+       public static class LDKCOption_ClosureReasonZ {
+               private LDKCOption_ClosureReasonZ() {}
+               public final static class Some extends LDKCOption_ClosureReasonZ {
+                       public long some;
+                       Some(long some) { this.some = some; }
+               }
+               public final static class None extends LDKCOption_ClosureReasonZ {
+                       None() { }
+               }
+               static native void init();
+       }
+       static { LDKCOption_ClosureReasonZ.init(); }
+       public static native LDKCOption_ClosureReasonZ LDKCOption_ClosureReasonZ_ref_from_ptr(long ptr);
+       public static native long LDKCResult_COption_ClosureReasonZDecodeErrorZ_get_ok(long arg);
+       public static native long LDKCResult_COption_ClosureReasonZDecodeErrorZ_get_err(long arg);
        public static class LDKNetworkUpdate {
                private LDKNetworkUpdate() {}
                public final static class ChannelUpdateMessage extends LDKNetworkUpdate {
@@ -284,7 +295,98 @@ public class bindings {
        }
        static { LDKSpendableOutputDescriptor.init(); }
        public static native LDKSpendableOutputDescriptor LDKSpendableOutputDescriptor_ref_from_ptr(long ptr);
-       public static native long LDKCVec_SpendableOutputDescriptorZ_new(long[] elems);
+       public static class LDKPaymentPurpose {
+               private LDKPaymentPurpose() {}
+               public final static class InvoicePayment extends LDKPaymentPurpose {
+                       public byte[] payment_preimage;
+                       public byte[] payment_secret;
+                       public long user_payment_id;
+                       InvoicePayment(byte[] payment_preimage, byte[] payment_secret, long user_payment_id) { this.payment_preimage = payment_preimage; this.payment_secret = payment_secret; this.user_payment_id = user_payment_id; }
+               }
+               public final static class SpontaneousPayment extends LDKPaymentPurpose {
+                       public byte[] spontaneous_payment;
+                       SpontaneousPayment(byte[] spontaneous_payment) { this.spontaneous_payment = spontaneous_payment; }
+               }
+               static native void init();
+       }
+       static { LDKPaymentPurpose.init(); }
+       public static native LDKPaymentPurpose LDKPaymentPurpose_ref_from_ptr(long ptr);
+       public static class LDKEvent {
+               private LDKEvent() {}
+               public final static class FundingGenerationReady extends LDKEvent {
+                       public byte[] temporary_channel_id;
+                       public long channel_value_satoshis;
+                       public byte[] output_script;
+                       public long user_channel_id;
+                       FundingGenerationReady(byte[] temporary_channel_id, long channel_value_satoshis, byte[] output_script, long user_channel_id) { this.temporary_channel_id = temporary_channel_id; this.channel_value_satoshis = channel_value_satoshis; this.output_script = output_script; this.user_channel_id = user_channel_id; }
+               }
+               public final static class PaymentReceived extends LDKEvent {
+                       public byte[] payment_hash;
+                       public long amt;
+                       public long purpose;
+                       PaymentReceived(byte[] payment_hash, long amt, long purpose) { this.payment_hash = payment_hash; this.amt = amt; this.purpose = purpose; }
+               }
+               public final static class PaymentSent extends LDKEvent {
+                       public byte[] payment_id;
+                       public byte[] payment_preimage;
+                       public byte[] payment_hash;
+                       public long fee_paid_msat;
+                       PaymentSent(byte[] payment_id, byte[] payment_preimage, byte[] payment_hash, long fee_paid_msat) { this.payment_id = payment_id; this.payment_preimage = payment_preimage; this.payment_hash = payment_hash; this.fee_paid_msat = fee_paid_msat; }
+               }
+               public final static class PaymentPathFailed extends LDKEvent {
+                       public byte[] payment_id;
+                       public byte[] payment_hash;
+                       public boolean rejected_by_dest;
+                       public long network_update;
+                       public boolean all_paths_failed;
+                       public long[] path;
+                       public long short_channel_id;
+                       public long retry;
+                       PaymentPathFailed(byte[] payment_id, byte[] payment_hash, boolean rejected_by_dest, long network_update, boolean all_paths_failed, long[] path, long short_channel_id, long retry) { this.payment_id = payment_id; this.payment_hash = payment_hash; this.rejected_by_dest = rejected_by_dest; this.network_update = network_update; this.all_paths_failed = all_paths_failed; this.path = path; this.short_channel_id = short_channel_id; this.retry = retry; }
+               }
+               public final static class PendingHTLCsForwardable extends LDKEvent {
+                       public long time_forwardable;
+                       PendingHTLCsForwardable(long time_forwardable) { this.time_forwardable = time_forwardable; }
+               }
+               public final static class SpendableOutputs extends LDKEvent {
+                       public long[] outputs;
+                       SpendableOutputs(long[] outputs) { this.outputs = outputs; }
+               }
+               public final static class PaymentForwarded extends LDKEvent {
+                       public long fee_earned_msat;
+                       public boolean claim_from_onchain_tx;
+                       PaymentForwarded(long fee_earned_msat, boolean claim_from_onchain_tx) { this.fee_earned_msat = fee_earned_msat; this.claim_from_onchain_tx = claim_from_onchain_tx; }
+               }
+               public final static class ChannelClosed extends LDKEvent {
+                       public byte[] channel_id;
+                       public long user_channel_id;
+                       public long reason;
+                       ChannelClosed(byte[] channel_id, long user_channel_id, long reason) { this.channel_id = channel_id; this.user_channel_id = user_channel_id; this.reason = reason; }
+               }
+               public final static class DiscardFunding extends LDKEvent {
+                       public byte[] channel_id;
+                       public byte[] transaction;
+                       DiscardFunding(byte[] channel_id, byte[] transaction) { this.channel_id = channel_id; this.transaction = transaction; }
+               }
+               static native void init();
+       }
+       static { LDKEvent.init(); }
+       public static native LDKEvent LDKEvent_ref_from_ptr(long ptr);
+       public static class LDKCOption_EventZ {
+               private LDKCOption_EventZ() {}
+               public final static class Some extends LDKCOption_EventZ {
+                       public long some;
+                       Some(long some) { this.some = some; }
+               }
+               public final static class None extends LDKCOption_EventZ {
+                       None() { }
+               }
+               static native void init();
+       }
+       static { LDKCOption_EventZ.init(); }
+       public static native LDKCOption_EventZ LDKCOption_EventZ_ref_from_ptr(long ptr);
+       public static native long LDKCResult_COption_EventZDecodeErrorZ_get_ok(long arg);
+       public static native long LDKCResult_COption_EventZDecodeErrorZ_get_err(long arg);
        public static class LDKErrorAction {
                private LDKErrorAction() {}
                public final static class DisconnectPeer extends LDKErrorAction {
@@ -405,45 +507,32 @@ public class bindings {
        }
        static { LDKMessageSendEvent.init(); }
        public static native LDKMessageSendEvent LDKMessageSendEvent_ref_from_ptr(long ptr);
-       public static native long LDKCVec_MessageSendEventZ_new(long[] elems);
-       public static native boolean LDKCResult_InitFeaturesDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_InitFeaturesDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_InitFeaturesDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_NodeFeaturesDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_NodeFeaturesDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_NodeFeaturesDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_ChannelFeaturesDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_ChannelFeaturesDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_ChannelFeaturesDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_InvoiceFeaturesDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_InvoiceFeaturesDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_InvoiceFeaturesDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_ScoringParametersDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_ScoringParametersDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_ScoringParametersDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_ScorerDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_ScorerDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_ScorerDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_SpendableOutputDescriptorDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_SpendableOutputDescriptorDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_SpendableOutputDescriptorDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_NoneNoneZ_result_ok(long arg);
        public static native void LDKCResult_NoneNoneZ_get_ok(long arg);
        public static native void LDKCResult_NoneNoneZ_get_err(long arg);
        // struct LDKSignature C2Tuple_SignatureCVec_SignatureZZ_get_a(LDKC2Tuple_SignatureCVec_SignatureZZ *NONNULL_PTR tuple);
        public static native byte[] C2Tuple_SignatureCVec_SignatureZZ_get_a(long tuple);
        // struct LDKCVec_SignatureZ C2Tuple_SignatureCVec_SignatureZZ_get_b(LDKC2Tuple_SignatureCVec_SignatureZZ *NONNULL_PTR tuple);
        public static native byte[][] C2Tuple_SignatureCVec_SignatureZZ_get_b(long tuple);
-       public static native boolean LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_result_ok(long arg);
        public static native long LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_get_ok(long arg);
        public static native void LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_get_err(long arg);
-       public static native boolean LDKCResult_SignatureNoneZ_result_ok(long arg);
        public static native byte[] LDKCResult_SignatureNoneZ_get_ok(long arg);
        public static native void LDKCResult_SignatureNoneZ_get_err(long arg);
        public interface LDKBaseSign {
@@ -497,28 +586,20 @@ public class bindings {
        public static native long LDKSign_get_BaseSign(long arg);
        // LDKCVec_u8Z Sign_write LDKSign *NONNULL_PTR this_arg
        public static native byte[] Sign_write(long this_arg);
-       public static native boolean LDKCResult_SignDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_SignDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_SignDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_RecoverableSignatureNoneZ_result_ok(long arg);
        public static native byte[] LDKCResult_RecoverableSignatureNoneZ_get_ok(long arg);
        public static native void LDKCResult_RecoverableSignatureNoneZ_get_err(long arg);
-       public static native boolean LDKCResult_CVec_CVec_u8ZZNoneZ_result_ok(long arg);
        public static native byte[][] LDKCResult_CVec_CVec_u8ZZNoneZ_get_ok(long arg);
        public static native void LDKCResult_CVec_CVec_u8ZZNoneZ_get_err(long arg);
-       public static native boolean LDKCResult_InMemorySignerDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_InMemorySignerDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_InMemorySignerDecodeErrorZ_get_err(long arg);
-       public static native long LDKCVec_TxOutZ_new(long[] elems);
-       public static native boolean LDKCResult_TransactionNoneZ_result_ok(long arg);
        public static native byte[] LDKCResult_TransactionNoneZ_get_ok(long arg);
        public static native void LDKCResult_TransactionNoneZ_get_err(long arg);
        // struct LDKThirtyTwoBytes C2Tuple_BlockHashChannelMonitorZ_get_a(LDKC2Tuple_BlockHashChannelMonitorZ *NONNULL_PTR tuple);
        public static native byte[] C2Tuple_BlockHashChannelMonitorZ_get_a(long tuple);
        // struct LDKChannelMonitor C2Tuple_BlockHashChannelMonitorZ_get_b(LDKC2Tuple_BlockHashChannelMonitorZ *NONNULL_PTR tuple);
        public static native long C2Tuple_BlockHashChannelMonitorZ_get_b(long tuple);
-       public static native long LDKCVec_C2Tuple_BlockHashChannelMonitorZZ_new(long[] elems);
-       public static native boolean LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_result_ok(long arg);
        public static native long[] LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_get_ok(long arg);
        public static native IOError LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_get_err(long arg);
        public static class LDKCOption_u16Z {
@@ -564,12 +645,8 @@ public class bindings {
        }
        static { LDKAPIError.init(); }
        public static native LDKAPIError LDKAPIError_ref_from_ptr(long ptr);
-       public static native boolean LDKCResult_NoneAPIErrorZ_result_ok(long arg);
        public static native void LDKCResult_NoneAPIErrorZ_get_ok(long arg);
        public static native long LDKCResult_NoneAPIErrorZ_get_err(long arg);
-       public static native long LDKCVec_CResult_NoneAPIErrorZZ_new(long[] elems);
-       public static native long LDKCVec_APIErrorZ_new(long[] elems);
-       public static native boolean LDKCResult__u832APIErrorZ_result_ok(long arg);
        public static native byte[] LDKCResult__u832APIErrorZ_get_ok(long arg);
        public static native long LDKCResult__u832APIErrorZ_get_err(long arg);
        public static class LDKPaymentSendFailure {
@@ -596,17 +673,14 @@ public class bindings {
        }
        static { LDKPaymentSendFailure.init(); }
        public static native LDKPaymentSendFailure LDKPaymentSendFailure_ref_from_ptr(long ptr);
-       public static native boolean LDKCResult_PaymentIdPaymentSendFailureZ_result_ok(long arg);
        public static native byte[] LDKCResult_PaymentIdPaymentSendFailureZ_get_ok(long arg);
        public static native long LDKCResult_PaymentIdPaymentSendFailureZ_get_err(long arg);
-       public static native boolean LDKCResult_NonePaymentSendFailureZ_result_ok(long arg);
        public static native void LDKCResult_NonePaymentSendFailureZ_get_ok(long arg);
        public static native long LDKCResult_NonePaymentSendFailureZ_get_err(long arg);
        // struct LDKThirtyTwoBytes C2Tuple_PaymentHashPaymentIdZ_get_a(LDKC2Tuple_PaymentHashPaymentIdZ *NONNULL_PTR tuple);
        public static native byte[] C2Tuple_PaymentHashPaymentIdZ_get_a(long tuple);
        // struct LDKThirtyTwoBytes C2Tuple_PaymentHashPaymentIdZ_get_b(LDKC2Tuple_PaymentHashPaymentIdZ *NONNULL_PTR tuple);
        public static native byte[] C2Tuple_PaymentHashPaymentIdZ_get_b(long tuple);
-       public static native boolean LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_result_ok(long arg);
        public static native long LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_get_ok(long arg);
        public static native long LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_get_err(long arg);
        public static class LDKNetAddress {
@@ -637,15 +711,12 @@ public class bindings {
        }
        static { LDKNetAddress.init(); }
        public static native LDKNetAddress LDKNetAddress_ref_from_ptr(long ptr);
-       public static native long LDKCVec_NetAddressZ_new(long[] elems);
        // struct LDKThirtyTwoBytes C2Tuple_PaymentHashPaymentSecretZ_get_a(LDKC2Tuple_PaymentHashPaymentSecretZ *NONNULL_PTR tuple);
        public static native byte[] C2Tuple_PaymentHashPaymentSecretZ_get_a(long tuple);
        // struct LDKThirtyTwoBytes C2Tuple_PaymentHashPaymentSecretZ_get_b(LDKC2Tuple_PaymentHashPaymentSecretZ *NONNULL_PTR tuple);
        public static native byte[] C2Tuple_PaymentHashPaymentSecretZ_get_b(long tuple);
-       public static native boolean LDKCResult_PaymentSecretAPIErrorZ_result_ok(long arg);
        public static native byte[] LDKCResult_PaymentSecretAPIErrorZ_get_ok(long arg);
        public static native long LDKCResult_PaymentSecretAPIErrorZ_get_err(long arg);
-       public static native long LDKCVec_ChannelMonitorZ_new(long[] elems);
        public interface LDKWatch {
                 long watch_channel(long funding_txo, long monitor);
                 long update_channel(long funding_txo, long update);
@@ -695,20 +766,17 @@ public class bindings {
        // uint32_t FeeEstimator_get_est_sat_per_1000_weight LDKFeeEstimator *NONNULL_PTR this_arg, enum LDKConfirmationTarget confirmation_target
        public static native int FeeEstimator_get_est_sat_per_1000_weight(long this_arg, ConfirmationTarget confirmation_target);
        public interface LDKLogger {
-                void log(String record);
+                void log(long record);
        }
        public static native long LDKLogger_new(LDKLogger impl);
        // struct LDKThirtyTwoBytes C2Tuple_BlockHashChannelManagerZ_get_a(LDKC2Tuple_BlockHashChannelManagerZ *NONNULL_PTR tuple);
        public static native byte[] C2Tuple_BlockHashChannelManagerZ_get_a(long tuple);
        // struct LDKChannelManager *C2Tuple_BlockHashChannelManagerZ_get_b(LDKC2Tuple_BlockHashChannelManagerZ *NONNULL_PTR tuple);
        public static native long C2Tuple_BlockHashChannelManagerZ_get_b(long tuple);
-       public static native boolean LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_ChannelConfigDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_ChannelConfigDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_ChannelConfigDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_OutPointDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_OutPointDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_OutPointDecodeErrorZ_get_err(long arg);
        public interface LDKType {
@@ -736,7 +804,6 @@ public class bindings {
        }
        static { LDKCOption_TypeZ.init(); }
        public static native LDKCOption_TypeZ LDKCOption_TypeZ_ref_from_ptr(long ptr);
-       public static native boolean LDKCResult_COption_TypeZDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_COption_TypeZDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_COption_TypeZDecodeErrorZ_get_err(long arg);
        public static class LDKPaymentError {
@@ -757,16 +824,12 @@ public class bindings {
        }
        static { LDKPaymentError.init(); }
        public static native LDKPaymentError LDKPaymentError_ref_from_ptr(long ptr);
-       public static native boolean LDKCResult_PaymentIdPaymentErrorZ_result_ok(long arg);
        public static native byte[] LDKCResult_PaymentIdPaymentErrorZ_get_ok(long arg);
        public static native long LDKCResult_PaymentIdPaymentErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_SiPrefixNoneZ_result_ok(long arg);
        public static native SiPrefix LDKCResult_SiPrefixNoneZ_get_ok(long arg);
        public static native void LDKCResult_SiPrefixNoneZ_get_err(long arg);
-       public static native boolean LDKCResult_InvoiceNoneZ_result_ok(long arg);
        public static native long LDKCResult_InvoiceNoneZ_get_ok(long arg);
        public static native void LDKCResult_InvoiceNoneZ_get_err(long arg);
-       public static native boolean LDKCResult_SignedRawInvoiceNoneZ_result_ok(long arg);
        public static native long LDKCResult_SignedRawInvoiceNoneZ_get_ok(long arg);
        public static native void LDKCResult_SignedRawInvoiceNoneZ_get_err(long arg);
        // struct LDKRawInvoice C3Tuple_RawInvoice_u832InvoiceSignatureZ_get_a(LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ *NONNULL_PTR tuple);
@@ -775,38 +838,41 @@ public class bindings {
        public static native byte[] C3Tuple_RawInvoice_u832InvoiceSignatureZ_get_b(long tuple);
        // struct LDKInvoiceSignature C3Tuple_RawInvoice_u832InvoiceSignatureZ_get_c(LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ *NONNULL_PTR tuple);
        public static native long C3Tuple_RawInvoice_u832InvoiceSignatureZ_get_c(long tuple);
-       public static native boolean LDKCResult_PayeePubKeyErrorZ_result_ok(long arg);
        public static native long LDKCResult_PayeePubKeyErrorZ_get_ok(long arg);
        public static native Secp256k1Error LDKCResult_PayeePubKeyErrorZ_get_err(long arg);
-       public static native long LDKCVec_PrivateRouteZ_new(long[] elems);
-       public static native boolean LDKCResult_PositiveTimestampCreationErrorZ_result_ok(long arg);
        public static native long LDKCResult_PositiveTimestampCreationErrorZ_get_ok(long arg);
        public static native CreationError LDKCResult_PositiveTimestampCreationErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_NoneSemanticErrorZ_result_ok(long arg);
        public static native void LDKCResult_NoneSemanticErrorZ_get_ok(long arg);
        public static native SemanticError LDKCResult_NoneSemanticErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_InvoiceSemanticErrorZ_result_ok(long arg);
        public static native long LDKCResult_InvoiceSemanticErrorZ_get_ok(long arg);
        public static native SemanticError LDKCResult_InvoiceSemanticErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_DescriptionCreationErrorZ_result_ok(long arg);
        public static native long LDKCResult_DescriptionCreationErrorZ_get_ok(long arg);
        public static native CreationError LDKCResult_DescriptionCreationErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_ExpiryTimeCreationErrorZ_result_ok(long arg);
        public static native long LDKCResult_ExpiryTimeCreationErrorZ_get_ok(long arg);
        public static native CreationError LDKCResult_ExpiryTimeCreationErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_PrivateRouteCreationErrorZ_result_ok(long arg);
        public static native long LDKCResult_PrivateRouteCreationErrorZ_get_ok(long arg);
        public static native CreationError LDKCResult_PrivateRouteCreationErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_StringErrorZ_result_ok(long arg);
        public static native String LDKCResult_StringErrorZ_get_ok(long arg);
        public static native Secp256k1Error LDKCResult_StringErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_ChannelMonitorUpdateDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_ChannelMonitorUpdateDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_ChannelMonitorUpdateDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_HTLCUpdateDecodeErrorZ_result_ok(long arg);
+       public static class LDKCOption_MonitorEventZ {
+               private LDKCOption_MonitorEventZ() {}
+               public final static class Some extends LDKCOption_MonitorEventZ {
+                       public long some;
+                       Some(long some) { this.some = some; }
+               }
+               public final static class None extends LDKCOption_MonitorEventZ {
+                       None() { }
+               }
+               static native void init();
+       }
+       static { LDKCOption_MonitorEventZ.init(); }
+       public static native LDKCOption_MonitorEventZ LDKCOption_MonitorEventZ_ref_from_ptr(long ptr);
+       public static native long LDKCResult_COption_MonitorEventZDecodeErrorZ_get_ok(long arg);
+       public static native long LDKCResult_COption_MonitorEventZDecodeErrorZ_get_err(long arg);
        public static native long LDKCResult_HTLCUpdateDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_HTLCUpdateDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_NoneMonitorUpdateErrorZ_result_ok(long arg);
        public static native void LDKCResult_NoneMonitorUpdateErrorZ_get_ok(long arg);
        public static native long LDKCResult_NoneMonitorUpdateErrorZ_get_err(long arg);
        // struct LDKOutPoint C2Tuple_OutPointScriptZ_get_a(LDKC2Tuple_OutPointScriptZ *NONNULL_PTR tuple);
@@ -817,129 +883,18 @@ public class bindings {
        public static native int C2Tuple_u32ScriptZ_get_a(long tuple);
        // struct LDKCVec_u8Z C2Tuple_u32ScriptZ_get_b(LDKC2Tuple_u32ScriptZ *NONNULL_PTR tuple);
        public static native byte[] C2Tuple_u32ScriptZ_get_b(long tuple);
-       public static native long LDKCVec_C2Tuple_u32ScriptZZ_new(long[] elems);
        // struct LDKThirtyTwoBytes C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_get_a(LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ *NONNULL_PTR tuple);
        public static native byte[] C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_get_a(long tuple);
        // struct LDKCVec_C2Tuple_u32ScriptZZ C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_get_b(LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ *NONNULL_PTR tuple);
        public static native long[] C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_get_b(long tuple);
-       public static native long LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ_new(long[] elems);
-       public static class LDKPaymentPurpose {
-               private LDKPaymentPurpose() {}
-               public final static class InvoicePayment extends LDKPaymentPurpose {
-                       public byte[] payment_preimage;
-                       public byte[] payment_secret;
-                       public long user_payment_id;
-                       InvoicePayment(byte[] payment_preimage, byte[] payment_secret, long user_payment_id) { this.payment_preimage = payment_preimage; this.payment_secret = payment_secret; this.user_payment_id = user_payment_id; }
-               }
-               public final static class SpontaneousPayment extends LDKPaymentPurpose {
-                       public byte[] spontaneous_payment;
-                       SpontaneousPayment(byte[] spontaneous_payment) { this.spontaneous_payment = spontaneous_payment; }
-               }
-               static native void init();
-       }
-       static { LDKPaymentPurpose.init(); }
-       public static native LDKPaymentPurpose LDKPaymentPurpose_ref_from_ptr(long ptr);
-       public static class LDKClosureReason {
-               private LDKClosureReason() {}
-               public final static class CounterpartyForceClosed extends LDKClosureReason {
-                       public String peer_msg;
-                       CounterpartyForceClosed(String peer_msg) { this.peer_msg = peer_msg; }
-               }
-               public final static class HolderForceClosed extends LDKClosureReason {
-                       HolderForceClosed() { }
-               }
-               public final static class CooperativeClosure extends LDKClosureReason {
-                       CooperativeClosure() { }
-               }
-               public final static class CommitmentTxConfirmed extends LDKClosureReason {
-                       CommitmentTxConfirmed() { }
-               }
-               public final static class ProcessingError extends LDKClosureReason {
-                       public String err;
-                       ProcessingError(String err) { this.err = err; }
-               }
-               public final static class DisconnectedPeer extends LDKClosureReason {
-                       DisconnectedPeer() { }
-               }
-               public final static class OutdatedChannelManager extends LDKClosureReason {
-                       OutdatedChannelManager() { }
-               }
-               static native void init();
-       }
-       static { LDKClosureReason.init(); }
-       public static native LDKClosureReason LDKClosureReason_ref_from_ptr(long ptr);
-       public static class LDKEvent {
-               private LDKEvent() {}
-               public final static class FundingGenerationReady extends LDKEvent {
-                       public byte[] temporary_channel_id;
-                       public long channel_value_satoshis;
-                       public byte[] output_script;
-                       public long user_channel_id;
-                       FundingGenerationReady(byte[] temporary_channel_id, long channel_value_satoshis, byte[] output_script, long user_channel_id) { this.temporary_channel_id = temporary_channel_id; this.channel_value_satoshis = channel_value_satoshis; this.output_script = output_script; this.user_channel_id = user_channel_id; }
-               }
-               public final static class PaymentReceived extends LDKEvent {
-                       public byte[] payment_hash;
-                       public long amt;
-                       public long purpose;
-                       PaymentReceived(byte[] payment_hash, long amt, long purpose) { this.payment_hash = payment_hash; this.amt = amt; this.purpose = purpose; }
-               }
-               public final static class PaymentSent extends LDKEvent {
-                       public byte[] payment_id;
-                       public byte[] payment_preimage;
-                       public byte[] payment_hash;
-                       public long fee_paid_msat;
-                       PaymentSent(byte[] payment_id, byte[] payment_preimage, byte[] payment_hash, long fee_paid_msat) { this.payment_id = payment_id; this.payment_preimage = payment_preimage; this.payment_hash = payment_hash; this.fee_paid_msat = fee_paid_msat; }
-               }
-               public final static class PaymentPathFailed extends LDKEvent {
-                       public byte[] payment_id;
-                       public byte[] payment_hash;
-                       public boolean rejected_by_dest;
-                       public long network_update;
-                       public boolean all_paths_failed;
-                       public long[] path;
-                       public long short_channel_id;
-                       public long retry;
-                       PaymentPathFailed(byte[] payment_id, byte[] payment_hash, boolean rejected_by_dest, long network_update, boolean all_paths_failed, long[] path, long short_channel_id, long retry) { this.payment_id = payment_id; this.payment_hash = payment_hash; this.rejected_by_dest = rejected_by_dest; this.network_update = network_update; this.all_paths_failed = all_paths_failed; this.path = path; this.short_channel_id = short_channel_id; this.retry = retry; }
-               }
-               public final static class PendingHTLCsForwardable extends LDKEvent {
-                       public long time_forwardable;
-                       PendingHTLCsForwardable(long time_forwardable) { this.time_forwardable = time_forwardable; }
-               }
-               public final static class SpendableOutputs extends LDKEvent {
-                       public long[] outputs;
-                       SpendableOutputs(long[] outputs) { this.outputs = outputs; }
-               }
-               public final static class PaymentForwarded extends LDKEvent {
-                       public long fee_earned_msat;
-                       public boolean claim_from_onchain_tx;
-                       PaymentForwarded(long fee_earned_msat, boolean claim_from_onchain_tx) { this.fee_earned_msat = fee_earned_msat; this.claim_from_onchain_tx = claim_from_onchain_tx; }
-               }
-               public final static class ChannelClosed extends LDKEvent {
-                       public byte[] channel_id;
-                       public long user_channel_id;
-                       public long reason;
-                       ChannelClosed(byte[] channel_id, long user_channel_id, long reason) { this.channel_id = channel_id; this.user_channel_id = user_channel_id; this.reason = reason; }
-               }
-               public final static class DiscardFunding extends LDKEvent {
-                       public byte[] channel_id;
-                       public byte[] transaction;
-                       DiscardFunding(byte[] channel_id, byte[] transaction) { this.channel_id = channel_id; this.transaction = transaction; }
-               }
-               static native void init();
-       }
-       static { LDKEvent.init(); }
-       public static native LDKEvent LDKEvent_ref_from_ptr(long ptr);
-       public static native long LDKCVec_EventZ_new(long[] elems);
        // uint32_t C2Tuple_u32TxOutZ_get_a(LDKC2Tuple_u32TxOutZ *NONNULL_PTR tuple);
        public static native int C2Tuple_u32TxOutZ_get_a(long tuple);
        // struct LDKTxOut C2Tuple_u32TxOutZ_get_b(LDKC2Tuple_u32TxOutZ *NONNULL_PTR tuple);
        public static native long C2Tuple_u32TxOutZ_get_b(long tuple);
-       public static native long LDKCVec_C2Tuple_u32TxOutZZ_new(long[] elems);
        // struct LDKThirtyTwoBytes C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_get_a(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ *NONNULL_PTR tuple);
        public static native byte[] C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_get_a(long tuple);
        // struct LDKCVec_C2Tuple_u32TxOutZZ C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_get_b(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ *NONNULL_PTR tuple);
        public static native long[] C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_get_b(long tuple);
-       public static native long LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ_new(long[] elems);
        public static class LDKBalance {
                private LDKBalance() {}
                public final static class ClaimableOnChannelClose extends LDKBalance {
@@ -965,19 +920,14 @@ public class bindings {
        }
        static { LDKBalance.init(); }
        public static native LDKBalance LDKBalance_ref_from_ptr(long ptr);
-       public static native long LDKCVec_BalanceZ_new(long[] elems);
-       public static native boolean LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_NoneLightningErrorZ_result_ok(long arg);
        public static native void LDKCResult_NoneLightningErrorZ_get_ok(long arg);
        public static native long LDKCResult_NoneLightningErrorZ_get_err(long arg);
        // struct LDKPublicKey C2Tuple_PublicKeyTypeZ_get_a(LDKC2Tuple_PublicKeyTypeZ *NONNULL_PTR tuple);
        public static native byte[] C2Tuple_PublicKeyTypeZ_get_a(long tuple);
        // struct LDKType C2Tuple_PublicKeyTypeZ_get_b(LDKC2Tuple_PublicKeyTypeZ *NONNULL_PTR tuple);
        public static native long C2Tuple_PublicKeyTypeZ_get_b(long tuple);
-       public static native long LDKCVec_C2Tuple_PublicKeyTypeZZ_new(long[] elems);
-       public static native boolean LDKCResult_boolLightningErrorZ_result_ok(long arg);
        public static native boolean LDKCResult_boolLightningErrorZ_get_ok(long arg);
        public static native long LDKCResult_boolLightningErrorZ_get_err(long arg);
        // struct LDKChannelAnnouncement C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_get_a(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ *NONNULL_PTR tuple);
@@ -986,20 +936,16 @@ public class bindings {
        public static native long C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_get_b(long tuple);
        // struct LDKChannelUpdate C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_get_c(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ *NONNULL_PTR tuple);
        public static native long C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_get_c(long tuple);
-       public static native long LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ_new(long[] elems);
-       public static native long LDKCVec_NodeAnnouncementZ_new(long[] elems);
-       public static native boolean LDKCResult_CVec_u8ZPeerHandleErrorZ_result_ok(long arg);
        public static native byte[] LDKCResult_CVec_u8ZPeerHandleErrorZ_get_ok(long arg);
        public static native long LDKCResult_CVec_u8ZPeerHandleErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_NonePeerHandleErrorZ_result_ok(long arg);
        public static native void LDKCResult_NonePeerHandleErrorZ_get_ok(long arg);
        public static native long LDKCResult_NonePeerHandleErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_boolPeerHandleErrorZ_result_ok(long arg);
        public static native boolean LDKCResult_boolPeerHandleErrorZ_get_ok(long arg);
        public static native long LDKCResult_boolPeerHandleErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_NodeIdDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_NodeIdDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_NodeIdDecodeErrorZ_get_err(long arg);
+       public static native long LDKCResult_COption_NetworkUpdateZDecodeErrorZ_get_ok(long arg);
+       public static native long LDKCResult_COption_NetworkUpdateZDecodeErrorZ_get_err(long arg);
        public interface LDKAccess {
                 long get_utxo(byte[] genesis_hash, long short_channel_id);
        }
@@ -1019,23 +965,16 @@ public class bindings {
        }
        static { LDKCOption_AccessZ.init(); }
        public static native LDKCOption_AccessZ LDKCOption_AccessZ_ref_from_ptr(long ptr);
-       public static native boolean LDKCResult_DirectionalChannelInfoDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_DirectionalChannelInfoDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_DirectionalChannelInfoDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_ChannelInfoDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_ChannelInfoDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_ChannelInfoDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_RoutingFeesDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_RoutingFeesDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_RoutingFeesDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_NodeAnnouncementInfoDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_NodeAnnouncementInfoDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_NodeAnnouncementInfoDecodeErrorZ_get_err(long arg);
-       public static native long LDKCVec_u64Z_new(long[] elems);
-       public static native boolean LDKCResult_NodeInfoDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_NodeInfoDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_NodeInfoDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_NetworkGraphDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_NetworkGraphDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_NetworkGraphDecodeErrorZ_get_err(long arg);
        public static class LDKCOption_CVec_NetAddressZZ {
@@ -1051,107 +990,70 @@ public class bindings {
        }
        static { LDKCOption_CVec_NetAddressZZ.init(); }
        public static native LDKCOption_CVec_NetAddressZZ LDKCOption_CVec_NetAddressZZ_ref_from_ptr(long ptr);
-       public static native boolean LDKCResult_NetAddressDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_NetAddressDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_NetAddressDecodeErrorZ_get_err(long arg);
-       public static native long LDKCVec_UpdateAddHTLCZ_new(long[] elems);
-       public static native long LDKCVec_UpdateFulfillHTLCZ_new(long[] elems);
-       public static native long LDKCVec_UpdateFailHTLCZ_new(long[] elems);
-       public static native long LDKCVec_UpdateFailMalformedHTLCZ_new(long[] elems);
-       public static native boolean LDKCResult_AcceptChannelDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_AcceptChannelDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_AcceptChannelDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_AnnouncementSignaturesDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_AnnouncementSignaturesDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_AnnouncementSignaturesDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_ChannelReestablishDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_ChannelReestablishDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_ChannelReestablishDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_ClosingSignedDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_ClosingSignedDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_ClosingSignedDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_ClosingSignedFeeRangeDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_ClosingSignedFeeRangeDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_ClosingSignedFeeRangeDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_CommitmentSignedDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_CommitmentSignedDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_CommitmentSignedDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_FundingCreatedDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_FundingCreatedDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_FundingCreatedDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_FundingSignedDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_FundingSignedDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_FundingSignedDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_FundingLockedDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_FundingLockedDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_FundingLockedDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_InitDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_InitDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_InitDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_OpenChannelDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_OpenChannelDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_OpenChannelDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_RevokeAndACKDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_RevokeAndACKDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_RevokeAndACKDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_ShutdownDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_ShutdownDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_ShutdownDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_UpdateFailHTLCDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_UpdateFailHTLCDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_UpdateFailHTLCDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_UpdateFeeDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_UpdateFeeDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_UpdateFeeDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_UpdateFulfillHTLCDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_UpdateFulfillHTLCDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_UpdateFulfillHTLCDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_UpdateAddHTLCDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_UpdateAddHTLCDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_UpdateAddHTLCDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_PingDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_PingDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_PingDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_PongDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_PongDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_PongDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_ChannelAnnouncementDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_ChannelAnnouncementDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_ChannelAnnouncementDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_UnsignedChannelUpdateDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_UnsignedChannelUpdateDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_UnsignedChannelUpdateDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_ChannelUpdateDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_ChannelUpdateDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_ChannelUpdateDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_ErrorMessageDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_ErrorMessageDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_ErrorMessageDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_NodeAnnouncementDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_NodeAnnouncementDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_NodeAnnouncementDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_QueryShortChannelIdsDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_QueryShortChannelIdsDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_QueryShortChannelIdsDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_QueryChannelRangeDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_QueryChannelRangeDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_QueryChannelRangeDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_ReplyChannelRangeDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_ReplyChannelRangeDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_ReplyChannelRangeDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_GossipTimestampFilterDecodeErrorZ_result_ok(long arg);
        public static native long LDKCResult_GossipTimestampFilterDecodeErrorZ_get_ok(long arg);
        public static native long LDKCResult_GossipTimestampFilterDecodeErrorZ_get_err(long arg);
        public static class LDKSignOrCreationError {
@@ -1167,7 +1069,6 @@ public class bindings {
        }
        static { LDKSignOrCreationError.init(); }
        public static native LDKSignOrCreationError LDKSignOrCreationError_ref_from_ptr(long ptr);
-       public static native boolean LDKCResult_InvoiceSignOrCreationErrorZ_result_ok(long arg);
        public static native long LDKCResult_InvoiceSignOrCreationErrorZ_get_ok(long arg);
        public static native long LDKCResult_InvoiceSignOrCreationErrorZ_get_err(long arg);
        public interface LDKFilter {
@@ -1192,10 +1093,8 @@ public class bindings {
        }
        static { LDKCOption_FilterZ.init(); }
        public static native LDKCOption_FilterZ LDKCOption_FilterZ_ref_from_ptr(long ptr);
-       public static native boolean LDKCResult_LockedChannelMonitorNoneZ_result_ok(long arg);
        public static native long LDKCResult_LockedChannelMonitorNoneZ_get_ok(long arg);
        public static native void LDKCResult_LockedChannelMonitorNoneZ_get_err(long arg);
-       public static native long LDKCVec_OutPointZ_new(long[] elems);
        public interface LDKMessageSendEventsProvider {
                 long[] get_and_clear_pending_msg_events();
        }
@@ -1442,6 +1341,8 @@ public class bindings {
        public static native long TxOut_new(byte[] script_pubkey, long value);
        // void TxOut_free(struct LDKTxOut _res);
        public static native void TxOut_free(long _res);
+       // uint64_t TxOut_clone_ptr(LDKTxOut *NONNULL_PTR arg);
+       public static native long TxOut_clone_ptr(long arg);
        // struct LDKTxOut TxOut_clone(const struct LDKTxOut *NONNULL_PTR orig);
        public static native long TxOut_clone(long orig);
        // void Str_free(struct LDKStr _res);
@@ -1450,38 +1351,56 @@ public class bindings {
        public static native long CResult_SecretKeyErrorZ_ok(byte[] o);
        // struct LDKCResult_SecretKeyErrorZ CResult_SecretKeyErrorZ_err(enum LDKSecp256k1Error e);
        public static native long CResult_SecretKeyErrorZ_err(Secp256k1Error e);
+       // bool CResult_SecretKeyErrorZ_is_ok(const struct LDKCResult_SecretKeyErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_SecretKeyErrorZ_is_ok(long o);
        // void CResult_SecretKeyErrorZ_free(struct LDKCResult_SecretKeyErrorZ _res);
        public static native void CResult_SecretKeyErrorZ_free(long _res);
        // struct LDKCResult_PublicKeyErrorZ CResult_PublicKeyErrorZ_ok(struct LDKPublicKey o);
        public static native long CResult_PublicKeyErrorZ_ok(byte[] o);
        // struct LDKCResult_PublicKeyErrorZ CResult_PublicKeyErrorZ_err(enum LDKSecp256k1Error e);
        public static native long CResult_PublicKeyErrorZ_err(Secp256k1Error e);
+       // bool CResult_PublicKeyErrorZ_is_ok(const struct LDKCResult_PublicKeyErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_PublicKeyErrorZ_is_ok(long o);
        // void CResult_PublicKeyErrorZ_free(struct LDKCResult_PublicKeyErrorZ _res);
        public static native void CResult_PublicKeyErrorZ_free(long _res);
+       // uint64_t CResult_PublicKeyErrorZ_clone_ptr(LDKCResult_PublicKeyErrorZ *NONNULL_PTR arg);
+       public static native long CResult_PublicKeyErrorZ_clone_ptr(long arg);
        // struct LDKCResult_PublicKeyErrorZ CResult_PublicKeyErrorZ_clone(const struct LDKCResult_PublicKeyErrorZ *NONNULL_PTR orig);
        public static native long CResult_PublicKeyErrorZ_clone(long orig);
        // struct LDKCResult_TxCreationKeysDecodeErrorZ CResult_TxCreationKeysDecodeErrorZ_ok(struct LDKTxCreationKeys o);
        public static native long CResult_TxCreationKeysDecodeErrorZ_ok(long o);
        // struct LDKCResult_TxCreationKeysDecodeErrorZ CResult_TxCreationKeysDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_TxCreationKeysDecodeErrorZ_err(long e);
+       // bool CResult_TxCreationKeysDecodeErrorZ_is_ok(const struct LDKCResult_TxCreationKeysDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_TxCreationKeysDecodeErrorZ_is_ok(long o);
        // void CResult_TxCreationKeysDecodeErrorZ_free(struct LDKCResult_TxCreationKeysDecodeErrorZ _res);
        public static native void CResult_TxCreationKeysDecodeErrorZ_free(long _res);
+       // uint64_t CResult_TxCreationKeysDecodeErrorZ_clone_ptr(LDKCResult_TxCreationKeysDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_TxCreationKeysDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_TxCreationKeysDecodeErrorZ CResult_TxCreationKeysDecodeErrorZ_clone(const struct LDKCResult_TxCreationKeysDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_TxCreationKeysDecodeErrorZ_clone(long orig);
        // struct LDKCResult_ChannelPublicKeysDecodeErrorZ CResult_ChannelPublicKeysDecodeErrorZ_ok(struct LDKChannelPublicKeys o);
        public static native long CResult_ChannelPublicKeysDecodeErrorZ_ok(long o);
        // struct LDKCResult_ChannelPublicKeysDecodeErrorZ CResult_ChannelPublicKeysDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_ChannelPublicKeysDecodeErrorZ_err(long e);
+       // bool CResult_ChannelPublicKeysDecodeErrorZ_is_ok(const struct LDKCResult_ChannelPublicKeysDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_ChannelPublicKeysDecodeErrorZ_is_ok(long o);
        // void CResult_ChannelPublicKeysDecodeErrorZ_free(struct LDKCResult_ChannelPublicKeysDecodeErrorZ _res);
        public static native void CResult_ChannelPublicKeysDecodeErrorZ_free(long _res);
+       // uint64_t CResult_ChannelPublicKeysDecodeErrorZ_clone_ptr(LDKCResult_ChannelPublicKeysDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_ChannelPublicKeysDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_ChannelPublicKeysDecodeErrorZ CResult_ChannelPublicKeysDecodeErrorZ_clone(const struct LDKCResult_ChannelPublicKeysDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_ChannelPublicKeysDecodeErrorZ_clone(long orig);
        // struct LDKCResult_TxCreationKeysErrorZ CResult_TxCreationKeysErrorZ_ok(struct LDKTxCreationKeys o);
        public static native long CResult_TxCreationKeysErrorZ_ok(long o);
        // struct LDKCResult_TxCreationKeysErrorZ CResult_TxCreationKeysErrorZ_err(enum LDKSecp256k1Error e);
        public static native long CResult_TxCreationKeysErrorZ_err(Secp256k1Error e);
+       // bool CResult_TxCreationKeysErrorZ_is_ok(const struct LDKCResult_TxCreationKeysErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_TxCreationKeysErrorZ_is_ok(long o);
        // void CResult_TxCreationKeysErrorZ_free(struct LDKCResult_TxCreationKeysErrorZ _res);
        public static native void CResult_TxCreationKeysErrorZ_free(long _res);
+       // uint64_t CResult_TxCreationKeysErrorZ_clone_ptr(LDKCResult_TxCreationKeysErrorZ *NONNULL_PTR arg);
+       public static native long CResult_TxCreationKeysErrorZ_clone_ptr(long arg);
        // struct LDKCResult_TxCreationKeysErrorZ CResult_TxCreationKeysErrorZ_clone(const struct LDKCResult_TxCreationKeysErrorZ *NONNULL_PTR orig);
        public static native long CResult_TxCreationKeysErrorZ_clone(long orig);
        // struct LDKCOption_u32Z COption_u32Z_some(uint32_t o);
@@ -1490,30 +1409,44 @@ public class bindings {
        public static native long COption_u32Z_none();
        // void COption_u32Z_free(struct LDKCOption_u32Z _res);
        public static native void COption_u32Z_free(long _res);
+       // uint64_t COption_u32Z_clone_ptr(LDKCOption_u32Z *NONNULL_PTR arg);
+       public static native long COption_u32Z_clone_ptr(long arg);
        // struct LDKCOption_u32Z COption_u32Z_clone(const struct LDKCOption_u32Z *NONNULL_PTR orig);
        public static native long COption_u32Z_clone(long orig);
        // struct LDKCResult_HTLCOutputInCommitmentDecodeErrorZ CResult_HTLCOutputInCommitmentDecodeErrorZ_ok(struct LDKHTLCOutputInCommitment o);
        public static native long CResult_HTLCOutputInCommitmentDecodeErrorZ_ok(long o);
        // struct LDKCResult_HTLCOutputInCommitmentDecodeErrorZ CResult_HTLCOutputInCommitmentDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_HTLCOutputInCommitmentDecodeErrorZ_err(long e);
+       // bool CResult_HTLCOutputInCommitmentDecodeErrorZ_is_ok(const struct LDKCResult_HTLCOutputInCommitmentDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_HTLCOutputInCommitmentDecodeErrorZ_is_ok(long o);
        // void CResult_HTLCOutputInCommitmentDecodeErrorZ_free(struct LDKCResult_HTLCOutputInCommitmentDecodeErrorZ _res);
        public static native void CResult_HTLCOutputInCommitmentDecodeErrorZ_free(long _res);
+       // uint64_t CResult_HTLCOutputInCommitmentDecodeErrorZ_clone_ptr(LDKCResult_HTLCOutputInCommitmentDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_HTLCOutputInCommitmentDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_HTLCOutputInCommitmentDecodeErrorZ CResult_HTLCOutputInCommitmentDecodeErrorZ_clone(const struct LDKCResult_HTLCOutputInCommitmentDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_HTLCOutputInCommitmentDecodeErrorZ_clone(long orig);
        // struct LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_ok(struct LDKCounterpartyChannelTransactionParameters o);
        public static native long CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_ok(long o);
        // struct LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_err(long e);
+       // bool CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_is_ok(const struct LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_is_ok(long o);
        // void CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_free(struct LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ _res);
        public static native void CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_free(long _res);
+       // uint64_t CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_clone_ptr(LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_clone(const struct LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_clone(long orig);
        // struct LDKCResult_ChannelTransactionParametersDecodeErrorZ CResult_ChannelTransactionParametersDecodeErrorZ_ok(struct LDKChannelTransactionParameters o);
        public static native long CResult_ChannelTransactionParametersDecodeErrorZ_ok(long o);
        // struct LDKCResult_ChannelTransactionParametersDecodeErrorZ CResult_ChannelTransactionParametersDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_ChannelTransactionParametersDecodeErrorZ_err(long e);
+       // bool CResult_ChannelTransactionParametersDecodeErrorZ_is_ok(const struct LDKCResult_ChannelTransactionParametersDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_ChannelTransactionParametersDecodeErrorZ_is_ok(long o);
        // void CResult_ChannelTransactionParametersDecodeErrorZ_free(struct LDKCResult_ChannelTransactionParametersDecodeErrorZ _res);
        public static native void CResult_ChannelTransactionParametersDecodeErrorZ_free(long _res);
+       // uint64_t CResult_ChannelTransactionParametersDecodeErrorZ_clone_ptr(LDKCResult_ChannelTransactionParametersDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_ChannelTransactionParametersDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_ChannelTransactionParametersDecodeErrorZ CResult_ChannelTransactionParametersDecodeErrorZ_clone(const struct LDKCResult_ChannelTransactionParametersDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_ChannelTransactionParametersDecodeErrorZ_clone(long orig);
        // void CVec_SignatureZ_free(struct LDKCVec_SignatureZ _res);
@@ -1522,76 +1455,112 @@ public class bindings {
        public static native long CResult_HolderCommitmentTransactionDecodeErrorZ_ok(long o);
        // struct LDKCResult_HolderCommitmentTransactionDecodeErrorZ CResult_HolderCommitmentTransactionDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_HolderCommitmentTransactionDecodeErrorZ_err(long e);
+       // bool CResult_HolderCommitmentTransactionDecodeErrorZ_is_ok(const struct LDKCResult_HolderCommitmentTransactionDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_HolderCommitmentTransactionDecodeErrorZ_is_ok(long o);
        // void CResult_HolderCommitmentTransactionDecodeErrorZ_free(struct LDKCResult_HolderCommitmentTransactionDecodeErrorZ _res);
        public static native void CResult_HolderCommitmentTransactionDecodeErrorZ_free(long _res);
+       // uint64_t CResult_HolderCommitmentTransactionDecodeErrorZ_clone_ptr(LDKCResult_HolderCommitmentTransactionDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_HolderCommitmentTransactionDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_HolderCommitmentTransactionDecodeErrorZ CResult_HolderCommitmentTransactionDecodeErrorZ_clone(const struct LDKCResult_HolderCommitmentTransactionDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_HolderCommitmentTransactionDecodeErrorZ_clone(long orig);
        // struct LDKCResult_BuiltCommitmentTransactionDecodeErrorZ CResult_BuiltCommitmentTransactionDecodeErrorZ_ok(struct LDKBuiltCommitmentTransaction o);
        public static native long CResult_BuiltCommitmentTransactionDecodeErrorZ_ok(long o);
        // struct LDKCResult_BuiltCommitmentTransactionDecodeErrorZ CResult_BuiltCommitmentTransactionDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_BuiltCommitmentTransactionDecodeErrorZ_err(long e);
+       // bool CResult_BuiltCommitmentTransactionDecodeErrorZ_is_ok(const struct LDKCResult_BuiltCommitmentTransactionDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_BuiltCommitmentTransactionDecodeErrorZ_is_ok(long o);
        // void CResult_BuiltCommitmentTransactionDecodeErrorZ_free(struct LDKCResult_BuiltCommitmentTransactionDecodeErrorZ _res);
        public static native void CResult_BuiltCommitmentTransactionDecodeErrorZ_free(long _res);
+       // uint64_t CResult_BuiltCommitmentTransactionDecodeErrorZ_clone_ptr(LDKCResult_BuiltCommitmentTransactionDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_BuiltCommitmentTransactionDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_BuiltCommitmentTransactionDecodeErrorZ CResult_BuiltCommitmentTransactionDecodeErrorZ_clone(const struct LDKCResult_BuiltCommitmentTransactionDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_BuiltCommitmentTransactionDecodeErrorZ_clone(long orig);
        // struct LDKCResult_TrustedClosingTransactionNoneZ CResult_TrustedClosingTransactionNoneZ_ok(struct LDKTrustedClosingTransaction o);
        public static native long CResult_TrustedClosingTransactionNoneZ_ok(long o);
        // struct LDKCResult_TrustedClosingTransactionNoneZ CResult_TrustedClosingTransactionNoneZ_err(void);
        public static native long CResult_TrustedClosingTransactionNoneZ_err();
+       // bool CResult_TrustedClosingTransactionNoneZ_is_ok(const struct LDKCResult_TrustedClosingTransactionNoneZ *NONNULL_PTR o);
+       public static native boolean CResult_TrustedClosingTransactionNoneZ_is_ok(long o);
        // void CResult_TrustedClosingTransactionNoneZ_free(struct LDKCResult_TrustedClosingTransactionNoneZ _res);
        public static native void CResult_TrustedClosingTransactionNoneZ_free(long _res);
        // struct LDKCResult_CommitmentTransactionDecodeErrorZ CResult_CommitmentTransactionDecodeErrorZ_ok(struct LDKCommitmentTransaction o);
        public static native long CResult_CommitmentTransactionDecodeErrorZ_ok(long o);
        // struct LDKCResult_CommitmentTransactionDecodeErrorZ CResult_CommitmentTransactionDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_CommitmentTransactionDecodeErrorZ_err(long e);
+       // bool CResult_CommitmentTransactionDecodeErrorZ_is_ok(const struct LDKCResult_CommitmentTransactionDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_CommitmentTransactionDecodeErrorZ_is_ok(long o);
        // void CResult_CommitmentTransactionDecodeErrorZ_free(struct LDKCResult_CommitmentTransactionDecodeErrorZ _res);
        public static native void CResult_CommitmentTransactionDecodeErrorZ_free(long _res);
+       // uint64_t CResult_CommitmentTransactionDecodeErrorZ_clone_ptr(LDKCResult_CommitmentTransactionDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_CommitmentTransactionDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_CommitmentTransactionDecodeErrorZ CResult_CommitmentTransactionDecodeErrorZ_clone(const struct LDKCResult_CommitmentTransactionDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_CommitmentTransactionDecodeErrorZ_clone(long orig);
        // struct LDKCResult_TrustedCommitmentTransactionNoneZ CResult_TrustedCommitmentTransactionNoneZ_ok(struct LDKTrustedCommitmentTransaction o);
        public static native long CResult_TrustedCommitmentTransactionNoneZ_ok(long o);
        // struct LDKCResult_TrustedCommitmentTransactionNoneZ CResult_TrustedCommitmentTransactionNoneZ_err(void);
        public static native long CResult_TrustedCommitmentTransactionNoneZ_err();
+       // bool CResult_TrustedCommitmentTransactionNoneZ_is_ok(const struct LDKCResult_TrustedCommitmentTransactionNoneZ *NONNULL_PTR o);
+       public static native boolean CResult_TrustedCommitmentTransactionNoneZ_is_ok(long o);
        // void CResult_TrustedCommitmentTransactionNoneZ_free(struct LDKCResult_TrustedCommitmentTransactionNoneZ _res);
        public static native void CResult_TrustedCommitmentTransactionNoneZ_free(long _res);
        // struct LDKCResult_CVec_SignatureZNoneZ CResult_CVec_SignatureZNoneZ_ok(struct LDKCVec_SignatureZ o);
        public static native long CResult_CVec_SignatureZNoneZ_ok(byte[][] o);
        // struct LDKCResult_CVec_SignatureZNoneZ CResult_CVec_SignatureZNoneZ_err(void);
        public static native long CResult_CVec_SignatureZNoneZ_err();
+       // bool CResult_CVec_SignatureZNoneZ_is_ok(const struct LDKCResult_CVec_SignatureZNoneZ *NONNULL_PTR o);
+       public static native boolean CResult_CVec_SignatureZNoneZ_is_ok(long o);
        // void CResult_CVec_SignatureZNoneZ_free(struct LDKCResult_CVec_SignatureZNoneZ _res);
        public static native void CResult_CVec_SignatureZNoneZ_free(long _res);
+       // uint64_t CResult_CVec_SignatureZNoneZ_clone_ptr(LDKCResult_CVec_SignatureZNoneZ *NONNULL_PTR arg);
+       public static native long CResult_CVec_SignatureZNoneZ_clone_ptr(long arg);
        // struct LDKCResult_CVec_SignatureZNoneZ CResult_CVec_SignatureZNoneZ_clone(const struct LDKCResult_CVec_SignatureZNoneZ *NONNULL_PTR orig);
        public static native long CResult_CVec_SignatureZNoneZ_clone(long orig);
        // struct LDKCResult_ShutdownScriptDecodeErrorZ CResult_ShutdownScriptDecodeErrorZ_ok(struct LDKShutdownScript o);
        public static native long CResult_ShutdownScriptDecodeErrorZ_ok(long o);
        // struct LDKCResult_ShutdownScriptDecodeErrorZ CResult_ShutdownScriptDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_ShutdownScriptDecodeErrorZ_err(long e);
+       // bool CResult_ShutdownScriptDecodeErrorZ_is_ok(const struct LDKCResult_ShutdownScriptDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_ShutdownScriptDecodeErrorZ_is_ok(long o);
        // void CResult_ShutdownScriptDecodeErrorZ_free(struct LDKCResult_ShutdownScriptDecodeErrorZ _res);
        public static native void CResult_ShutdownScriptDecodeErrorZ_free(long _res);
+       // uint64_t CResult_ShutdownScriptDecodeErrorZ_clone_ptr(LDKCResult_ShutdownScriptDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_ShutdownScriptDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_ShutdownScriptDecodeErrorZ CResult_ShutdownScriptDecodeErrorZ_clone(const struct LDKCResult_ShutdownScriptDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_ShutdownScriptDecodeErrorZ_clone(long orig);
        // struct LDKCResult_ShutdownScriptInvalidShutdownScriptZ CResult_ShutdownScriptInvalidShutdownScriptZ_ok(struct LDKShutdownScript o);
        public static native long CResult_ShutdownScriptInvalidShutdownScriptZ_ok(long o);
        // struct LDKCResult_ShutdownScriptInvalidShutdownScriptZ CResult_ShutdownScriptInvalidShutdownScriptZ_err(struct LDKInvalidShutdownScript e);
        public static native long CResult_ShutdownScriptInvalidShutdownScriptZ_err(long e);
+       // bool CResult_ShutdownScriptInvalidShutdownScriptZ_is_ok(const struct LDKCResult_ShutdownScriptInvalidShutdownScriptZ *NONNULL_PTR o);
+       public static native boolean CResult_ShutdownScriptInvalidShutdownScriptZ_is_ok(long o);
        // void CResult_ShutdownScriptInvalidShutdownScriptZ_free(struct LDKCResult_ShutdownScriptInvalidShutdownScriptZ _res);
        public static native void CResult_ShutdownScriptInvalidShutdownScriptZ_free(long _res);
+       // uint64_t CResult_ShutdownScriptInvalidShutdownScriptZ_clone_ptr(LDKCResult_ShutdownScriptInvalidShutdownScriptZ *NONNULL_PTR arg);
+       public static native long CResult_ShutdownScriptInvalidShutdownScriptZ_clone_ptr(long arg);
        // struct LDKCResult_ShutdownScriptInvalidShutdownScriptZ CResult_ShutdownScriptInvalidShutdownScriptZ_clone(const struct LDKCResult_ShutdownScriptInvalidShutdownScriptZ *NONNULL_PTR orig);
        public static native long CResult_ShutdownScriptInvalidShutdownScriptZ_clone(long orig);
        // struct LDKCResult_NoneErrorZ CResult_NoneErrorZ_ok(void);
        public static native long CResult_NoneErrorZ_ok();
        // struct LDKCResult_NoneErrorZ CResult_NoneErrorZ_err(enum LDKIOError e);
        public static native long CResult_NoneErrorZ_err(IOError e);
+       // bool CResult_NoneErrorZ_is_ok(const struct LDKCResult_NoneErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_NoneErrorZ_is_ok(long o);
        // void CResult_NoneErrorZ_free(struct LDKCResult_NoneErrorZ _res);
        public static native void CResult_NoneErrorZ_free(long _res);
+       // uint64_t CResult_NoneErrorZ_clone_ptr(LDKCResult_NoneErrorZ *NONNULL_PTR arg);
+       public static native long CResult_NoneErrorZ_clone_ptr(long arg);
        // struct LDKCResult_NoneErrorZ CResult_NoneErrorZ_clone(const struct LDKCResult_NoneErrorZ *NONNULL_PTR orig);
        public static native long CResult_NoneErrorZ_clone(long orig);
        // struct LDKCResult_RouteHopDecodeErrorZ CResult_RouteHopDecodeErrorZ_ok(struct LDKRouteHop o);
        public static native long CResult_RouteHopDecodeErrorZ_ok(long o);
        // struct LDKCResult_RouteHopDecodeErrorZ CResult_RouteHopDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_RouteHopDecodeErrorZ_err(long e);
+       // bool CResult_RouteHopDecodeErrorZ_is_ok(const struct LDKCResult_RouteHopDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_RouteHopDecodeErrorZ_is_ok(long o);
        // void CResult_RouteHopDecodeErrorZ_free(struct LDKCResult_RouteHopDecodeErrorZ _res);
        public static native void CResult_RouteHopDecodeErrorZ_free(long _res);
+       // uint64_t CResult_RouteHopDecodeErrorZ_clone_ptr(LDKCResult_RouteHopDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_RouteHopDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_RouteHopDecodeErrorZ CResult_RouteHopDecodeErrorZ_clone(const struct LDKCResult_RouteHopDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_RouteHopDecodeErrorZ_clone(long orig);
        // void CVec_RouteHopZ_free(struct LDKCVec_RouteHopZ _res);
@@ -1602,16 +1571,24 @@ public class bindings {
        public static native long CResult_RouteDecodeErrorZ_ok(long o);
        // struct LDKCResult_RouteDecodeErrorZ CResult_RouteDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_RouteDecodeErrorZ_err(long e);
+       // bool CResult_RouteDecodeErrorZ_is_ok(const struct LDKCResult_RouteDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_RouteDecodeErrorZ_is_ok(long o);
        // void CResult_RouteDecodeErrorZ_free(struct LDKCResult_RouteDecodeErrorZ _res);
        public static native void CResult_RouteDecodeErrorZ_free(long _res);
+       // uint64_t CResult_RouteDecodeErrorZ_clone_ptr(LDKCResult_RouteDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_RouteDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_RouteDecodeErrorZ CResult_RouteDecodeErrorZ_clone(const struct LDKCResult_RouteDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_RouteDecodeErrorZ_clone(long orig);
        // struct LDKCResult_RouteParametersDecodeErrorZ CResult_RouteParametersDecodeErrorZ_ok(struct LDKRouteParameters o);
        public static native long CResult_RouteParametersDecodeErrorZ_ok(long o);
        // struct LDKCResult_RouteParametersDecodeErrorZ CResult_RouteParametersDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_RouteParametersDecodeErrorZ_err(long e);
+       // bool CResult_RouteParametersDecodeErrorZ_is_ok(const struct LDKCResult_RouteParametersDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_RouteParametersDecodeErrorZ_is_ok(long o);
        // void CResult_RouteParametersDecodeErrorZ_free(struct LDKCResult_RouteParametersDecodeErrorZ _res);
        public static native void CResult_RouteParametersDecodeErrorZ_free(long _res);
+       // uint64_t CResult_RouteParametersDecodeErrorZ_clone_ptr(LDKCResult_RouteParametersDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_RouteParametersDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_RouteParametersDecodeErrorZ CResult_RouteParametersDecodeErrorZ_clone(const struct LDKCResult_RouteParametersDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_RouteParametersDecodeErrorZ_clone(long orig);
        // void CVec_RouteHintZ_free(struct LDKCVec_RouteHintZ _res);
@@ -1622,14 +1599,20 @@ public class bindings {
        public static native long COption_u64Z_none();
        // void COption_u64Z_free(struct LDKCOption_u64Z _res);
        public static native void COption_u64Z_free(long _res);
+       // uint64_t COption_u64Z_clone_ptr(LDKCOption_u64Z *NONNULL_PTR arg);
+       public static native long COption_u64Z_clone_ptr(long arg);
        // struct LDKCOption_u64Z COption_u64Z_clone(const struct LDKCOption_u64Z *NONNULL_PTR orig);
        public static native long COption_u64Z_clone(long orig);
        // struct LDKCResult_PayeeDecodeErrorZ CResult_PayeeDecodeErrorZ_ok(struct LDKPayee o);
        public static native long CResult_PayeeDecodeErrorZ_ok(long o);
        // struct LDKCResult_PayeeDecodeErrorZ CResult_PayeeDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_PayeeDecodeErrorZ_err(long e);
+       // bool CResult_PayeeDecodeErrorZ_is_ok(const struct LDKCResult_PayeeDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_PayeeDecodeErrorZ_is_ok(long o);
        // void CResult_PayeeDecodeErrorZ_free(struct LDKCResult_PayeeDecodeErrorZ _res);
        public static native void CResult_PayeeDecodeErrorZ_free(long _res);
+       // uint64_t CResult_PayeeDecodeErrorZ_clone_ptr(LDKCResult_PayeeDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_PayeeDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_PayeeDecodeErrorZ CResult_PayeeDecodeErrorZ_clone(const struct LDKCResult_PayeeDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_PayeeDecodeErrorZ_clone(long orig);
        // void CVec_RouteHintHopZ_free(struct LDKCVec_RouteHintHopZ _res);
@@ -1638,16 +1621,24 @@ public class bindings {
        public static native long CResult_RouteHintDecodeErrorZ_ok(long o);
        // struct LDKCResult_RouteHintDecodeErrorZ CResult_RouteHintDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_RouteHintDecodeErrorZ_err(long e);
+       // bool CResult_RouteHintDecodeErrorZ_is_ok(const struct LDKCResult_RouteHintDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_RouteHintDecodeErrorZ_is_ok(long o);
        // void CResult_RouteHintDecodeErrorZ_free(struct LDKCResult_RouteHintDecodeErrorZ _res);
        public static native void CResult_RouteHintDecodeErrorZ_free(long _res);
+       // uint64_t CResult_RouteHintDecodeErrorZ_clone_ptr(LDKCResult_RouteHintDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_RouteHintDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_RouteHintDecodeErrorZ CResult_RouteHintDecodeErrorZ_clone(const struct LDKCResult_RouteHintDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_RouteHintDecodeErrorZ_clone(long orig);
        // struct LDKCResult_RouteHintHopDecodeErrorZ CResult_RouteHintHopDecodeErrorZ_ok(struct LDKRouteHintHop o);
        public static native long CResult_RouteHintHopDecodeErrorZ_ok(long o);
        // struct LDKCResult_RouteHintHopDecodeErrorZ CResult_RouteHintHopDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_RouteHintHopDecodeErrorZ_err(long e);
+       // bool CResult_RouteHintHopDecodeErrorZ_is_ok(const struct LDKCResult_RouteHintHopDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_RouteHintHopDecodeErrorZ_is_ok(long o);
        // void CResult_RouteHintHopDecodeErrorZ_free(struct LDKCResult_RouteHintHopDecodeErrorZ _res);
        public static native void CResult_RouteHintHopDecodeErrorZ_free(long _res);
+       // uint64_t CResult_RouteHintHopDecodeErrorZ_clone_ptr(LDKCResult_RouteHintHopDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_RouteHintHopDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_RouteHintHopDecodeErrorZ CResult_RouteHintHopDecodeErrorZ_clone(const struct LDKCResult_RouteHintHopDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_RouteHintHopDecodeErrorZ_clone(long orig);
        // void CVec_ChannelDetailsZ_free(struct LDKCVec_ChannelDetailsZ _res);
@@ -1656,18 +1647,28 @@ public class bindings {
        public static native long CResult_RouteLightningErrorZ_ok(long o);
        // struct LDKCResult_RouteLightningErrorZ CResult_RouteLightningErrorZ_err(struct LDKLightningError e);
        public static native long CResult_RouteLightningErrorZ_err(long e);
+       // bool CResult_RouteLightningErrorZ_is_ok(const struct LDKCResult_RouteLightningErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_RouteLightningErrorZ_is_ok(long o);
        // void CResult_RouteLightningErrorZ_free(struct LDKCResult_RouteLightningErrorZ _res);
        public static native void CResult_RouteLightningErrorZ_free(long _res);
+       // uint64_t CResult_RouteLightningErrorZ_clone_ptr(LDKCResult_RouteLightningErrorZ *NONNULL_PTR arg);
+       public static native long CResult_RouteLightningErrorZ_clone_ptr(long arg);
        // struct LDKCResult_RouteLightningErrorZ CResult_RouteLightningErrorZ_clone(const struct LDKCResult_RouteLightningErrorZ *NONNULL_PTR orig);
        public static native long CResult_RouteLightningErrorZ_clone(long orig);
        // struct LDKCResult_TxOutAccessErrorZ CResult_TxOutAccessErrorZ_ok(struct LDKTxOut o);
        public static native long CResult_TxOutAccessErrorZ_ok(long o);
        // struct LDKCResult_TxOutAccessErrorZ CResult_TxOutAccessErrorZ_err(enum LDKAccessError e);
        public static native long CResult_TxOutAccessErrorZ_err(AccessError e);
+       // bool CResult_TxOutAccessErrorZ_is_ok(const struct LDKCResult_TxOutAccessErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_TxOutAccessErrorZ_is_ok(long o);
        // void CResult_TxOutAccessErrorZ_free(struct LDKCResult_TxOutAccessErrorZ _res);
        public static native void CResult_TxOutAccessErrorZ_free(long _res);
+       // uint64_t CResult_TxOutAccessErrorZ_clone_ptr(LDKCResult_TxOutAccessErrorZ *NONNULL_PTR arg);
+       public static native long CResult_TxOutAccessErrorZ_clone_ptr(long arg);
        // struct LDKCResult_TxOutAccessErrorZ CResult_TxOutAccessErrorZ_clone(const struct LDKCResult_TxOutAccessErrorZ *NONNULL_PTR orig);
        public static native long CResult_TxOutAccessErrorZ_clone(long orig);
+       // uint64_t C2Tuple_usizeTransactionZ_clone_ptr(LDKC2Tuple_usizeTransactionZ *NONNULL_PTR arg);
+       public static native long C2Tuple_usizeTransactionZ_clone_ptr(long arg);
        // struct LDKC2Tuple_usizeTransactionZ C2Tuple_usizeTransactionZ_clone(const struct LDKC2Tuple_usizeTransactionZ *NONNULL_PTR orig);
        public static native long C2Tuple_usizeTransactionZ_clone(long orig);
        // struct LDKC2Tuple_usizeTransactionZ C2Tuple_usizeTransactionZ_new(uintptr_t a, struct LDKTransaction b);
@@ -1682,8 +1683,12 @@ public class bindings {
        public static native long CResult_NoneChannelMonitorUpdateErrZ_ok();
        // struct LDKCResult_NoneChannelMonitorUpdateErrZ CResult_NoneChannelMonitorUpdateErrZ_err(enum LDKChannelMonitorUpdateErr e);
        public static native long CResult_NoneChannelMonitorUpdateErrZ_err(ChannelMonitorUpdateErr e);
+       // bool CResult_NoneChannelMonitorUpdateErrZ_is_ok(const struct LDKCResult_NoneChannelMonitorUpdateErrZ *NONNULL_PTR o);
+       public static native boolean CResult_NoneChannelMonitorUpdateErrZ_is_ok(long o);
        // void CResult_NoneChannelMonitorUpdateErrZ_free(struct LDKCResult_NoneChannelMonitorUpdateErrZ _res);
        public static native void CResult_NoneChannelMonitorUpdateErrZ_free(long _res);
+       // uint64_t CResult_NoneChannelMonitorUpdateErrZ_clone_ptr(LDKCResult_NoneChannelMonitorUpdateErrZ *NONNULL_PTR arg);
+       public static native long CResult_NoneChannelMonitorUpdateErrZ_clone_ptr(long arg);
        // struct LDKCResult_NoneChannelMonitorUpdateErrZ CResult_NoneChannelMonitorUpdateErrZ_clone(const struct LDKCResult_NoneChannelMonitorUpdateErrZ *NONNULL_PTR orig);
        public static native long CResult_NoneChannelMonitorUpdateErrZ_clone(long orig);
        // void CVec_MonitorEventZ_free(struct LDKCVec_MonitorEventZ _res);
@@ -1694,88 +1699,166 @@ public class bindings {
        public static native long COption_C2Tuple_usizeTransactionZZ_none();
        // void COption_C2Tuple_usizeTransactionZZ_free(struct LDKCOption_C2Tuple_usizeTransactionZZ _res);
        public static native void COption_C2Tuple_usizeTransactionZZ_free(long _res);
+       // uint64_t COption_C2Tuple_usizeTransactionZZ_clone_ptr(LDKCOption_C2Tuple_usizeTransactionZZ *NONNULL_PTR arg);
+       public static native long COption_C2Tuple_usizeTransactionZZ_clone_ptr(long arg);
        // struct LDKCOption_C2Tuple_usizeTransactionZZ COption_C2Tuple_usizeTransactionZZ_clone(const struct LDKCOption_C2Tuple_usizeTransactionZZ *NONNULL_PTR orig);
        public static native long COption_C2Tuple_usizeTransactionZZ_clone(long orig);
+       // struct LDKCOption_ClosureReasonZ COption_ClosureReasonZ_some(struct LDKClosureReason o);
+       public static native long COption_ClosureReasonZ_some(long o);
+       // struct LDKCOption_ClosureReasonZ COption_ClosureReasonZ_none(void);
+       public static native long COption_ClosureReasonZ_none();
+       // void COption_ClosureReasonZ_free(struct LDKCOption_ClosureReasonZ _res);
+       public static native void COption_ClosureReasonZ_free(long _res);
+       // uint64_t COption_ClosureReasonZ_clone_ptr(LDKCOption_ClosureReasonZ *NONNULL_PTR arg);
+       public static native long COption_ClosureReasonZ_clone_ptr(long arg);
+       // struct LDKCOption_ClosureReasonZ COption_ClosureReasonZ_clone(const struct LDKCOption_ClosureReasonZ *NONNULL_PTR orig);
+       public static native long COption_ClosureReasonZ_clone(long orig);
+       // struct LDKCResult_COption_ClosureReasonZDecodeErrorZ CResult_COption_ClosureReasonZDecodeErrorZ_ok(struct LDKCOption_ClosureReasonZ o);
+       public static native long CResult_COption_ClosureReasonZDecodeErrorZ_ok(long o);
+       // struct LDKCResult_COption_ClosureReasonZDecodeErrorZ CResult_COption_ClosureReasonZDecodeErrorZ_err(struct LDKDecodeError e);
+       public static native long CResult_COption_ClosureReasonZDecodeErrorZ_err(long e);
+       // bool CResult_COption_ClosureReasonZDecodeErrorZ_is_ok(const struct LDKCResult_COption_ClosureReasonZDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_COption_ClosureReasonZDecodeErrorZ_is_ok(long o);
+       // void CResult_COption_ClosureReasonZDecodeErrorZ_free(struct LDKCResult_COption_ClosureReasonZDecodeErrorZ _res);
+       public static native void CResult_COption_ClosureReasonZDecodeErrorZ_free(long _res);
+       // uint64_t CResult_COption_ClosureReasonZDecodeErrorZ_clone_ptr(LDKCResult_COption_ClosureReasonZDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_COption_ClosureReasonZDecodeErrorZ_clone_ptr(long arg);
+       // struct LDKCResult_COption_ClosureReasonZDecodeErrorZ CResult_COption_ClosureReasonZDecodeErrorZ_clone(const struct LDKCResult_COption_ClosureReasonZDecodeErrorZ *NONNULL_PTR orig);
+       public static native long CResult_COption_ClosureReasonZDecodeErrorZ_clone(long orig);
        // struct LDKCOption_NetworkUpdateZ COption_NetworkUpdateZ_some(struct LDKNetworkUpdate o);
        public static native long COption_NetworkUpdateZ_some(long o);
        // struct LDKCOption_NetworkUpdateZ COption_NetworkUpdateZ_none(void);
        public static native long COption_NetworkUpdateZ_none();
        // void COption_NetworkUpdateZ_free(struct LDKCOption_NetworkUpdateZ _res);
        public static native void COption_NetworkUpdateZ_free(long _res);
+       // uint64_t COption_NetworkUpdateZ_clone_ptr(LDKCOption_NetworkUpdateZ *NONNULL_PTR arg);
+       public static native long COption_NetworkUpdateZ_clone_ptr(long arg);
        // struct LDKCOption_NetworkUpdateZ COption_NetworkUpdateZ_clone(const struct LDKCOption_NetworkUpdateZ *NONNULL_PTR orig);
        public static native long COption_NetworkUpdateZ_clone(long orig);
        // void CVec_SpendableOutputDescriptorZ_free(struct LDKCVec_SpendableOutputDescriptorZ _res);
        public static native void CVec_SpendableOutputDescriptorZ_free(long[] _res);
+       // struct LDKCOption_EventZ COption_EventZ_some(struct LDKEvent o);
+       public static native long COption_EventZ_some(long o);
+       // struct LDKCOption_EventZ COption_EventZ_none(void);
+       public static native long COption_EventZ_none();
+       // void COption_EventZ_free(struct LDKCOption_EventZ _res);
+       public static native void COption_EventZ_free(long _res);
+       // uint64_t COption_EventZ_clone_ptr(LDKCOption_EventZ *NONNULL_PTR arg);
+       public static native long COption_EventZ_clone_ptr(long arg);
+       // struct LDKCOption_EventZ COption_EventZ_clone(const struct LDKCOption_EventZ *NONNULL_PTR orig);
+       public static native long COption_EventZ_clone(long orig);
+       // struct LDKCResult_COption_EventZDecodeErrorZ CResult_COption_EventZDecodeErrorZ_ok(struct LDKCOption_EventZ o);
+       public static native long CResult_COption_EventZDecodeErrorZ_ok(long o);
+       // struct LDKCResult_COption_EventZDecodeErrorZ CResult_COption_EventZDecodeErrorZ_err(struct LDKDecodeError e);
+       public static native long CResult_COption_EventZDecodeErrorZ_err(long e);
+       // bool CResult_COption_EventZDecodeErrorZ_is_ok(const struct LDKCResult_COption_EventZDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_COption_EventZDecodeErrorZ_is_ok(long o);
+       // void CResult_COption_EventZDecodeErrorZ_free(struct LDKCResult_COption_EventZDecodeErrorZ _res);
+       public static native void CResult_COption_EventZDecodeErrorZ_free(long _res);
+       // uint64_t CResult_COption_EventZDecodeErrorZ_clone_ptr(LDKCResult_COption_EventZDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_COption_EventZDecodeErrorZ_clone_ptr(long arg);
+       // struct LDKCResult_COption_EventZDecodeErrorZ CResult_COption_EventZDecodeErrorZ_clone(const struct LDKCResult_COption_EventZDecodeErrorZ *NONNULL_PTR orig);
+       public static native long CResult_COption_EventZDecodeErrorZ_clone(long orig);
        // void CVec_MessageSendEventZ_free(struct LDKCVec_MessageSendEventZ _res);
        public static native void CVec_MessageSendEventZ_free(long[] _res);
        // struct LDKCResult_InitFeaturesDecodeErrorZ CResult_InitFeaturesDecodeErrorZ_ok(struct LDKInitFeatures o);
        public static native long CResult_InitFeaturesDecodeErrorZ_ok(long o);
        // struct LDKCResult_InitFeaturesDecodeErrorZ CResult_InitFeaturesDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_InitFeaturesDecodeErrorZ_err(long e);
+       // bool CResult_InitFeaturesDecodeErrorZ_is_ok(const struct LDKCResult_InitFeaturesDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_InitFeaturesDecodeErrorZ_is_ok(long o);
        // void CResult_InitFeaturesDecodeErrorZ_free(struct LDKCResult_InitFeaturesDecodeErrorZ _res);
        public static native void CResult_InitFeaturesDecodeErrorZ_free(long _res);
        // struct LDKCResult_NodeFeaturesDecodeErrorZ CResult_NodeFeaturesDecodeErrorZ_ok(struct LDKNodeFeatures o);
        public static native long CResult_NodeFeaturesDecodeErrorZ_ok(long o);
        // struct LDKCResult_NodeFeaturesDecodeErrorZ CResult_NodeFeaturesDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_NodeFeaturesDecodeErrorZ_err(long e);
+       // bool CResult_NodeFeaturesDecodeErrorZ_is_ok(const struct LDKCResult_NodeFeaturesDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_NodeFeaturesDecodeErrorZ_is_ok(long o);
        // void CResult_NodeFeaturesDecodeErrorZ_free(struct LDKCResult_NodeFeaturesDecodeErrorZ _res);
        public static native void CResult_NodeFeaturesDecodeErrorZ_free(long _res);
        // struct LDKCResult_ChannelFeaturesDecodeErrorZ CResult_ChannelFeaturesDecodeErrorZ_ok(struct LDKChannelFeatures o);
        public static native long CResult_ChannelFeaturesDecodeErrorZ_ok(long o);
        // struct LDKCResult_ChannelFeaturesDecodeErrorZ CResult_ChannelFeaturesDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_ChannelFeaturesDecodeErrorZ_err(long e);
+       // bool CResult_ChannelFeaturesDecodeErrorZ_is_ok(const struct LDKCResult_ChannelFeaturesDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_ChannelFeaturesDecodeErrorZ_is_ok(long o);
        // void CResult_ChannelFeaturesDecodeErrorZ_free(struct LDKCResult_ChannelFeaturesDecodeErrorZ _res);
        public static native void CResult_ChannelFeaturesDecodeErrorZ_free(long _res);
        // struct LDKCResult_InvoiceFeaturesDecodeErrorZ CResult_InvoiceFeaturesDecodeErrorZ_ok(struct LDKInvoiceFeatures o);
        public static native long CResult_InvoiceFeaturesDecodeErrorZ_ok(long o);
        // struct LDKCResult_InvoiceFeaturesDecodeErrorZ CResult_InvoiceFeaturesDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_InvoiceFeaturesDecodeErrorZ_err(long e);
+       // bool CResult_InvoiceFeaturesDecodeErrorZ_is_ok(const struct LDKCResult_InvoiceFeaturesDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_InvoiceFeaturesDecodeErrorZ_is_ok(long o);
        // void CResult_InvoiceFeaturesDecodeErrorZ_free(struct LDKCResult_InvoiceFeaturesDecodeErrorZ _res);
        public static native void CResult_InvoiceFeaturesDecodeErrorZ_free(long _res);
        // struct LDKCResult_ScoringParametersDecodeErrorZ CResult_ScoringParametersDecodeErrorZ_ok(struct LDKScoringParameters o);
        public static native long CResult_ScoringParametersDecodeErrorZ_ok(long o);
        // struct LDKCResult_ScoringParametersDecodeErrorZ CResult_ScoringParametersDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_ScoringParametersDecodeErrorZ_err(long e);
+       // bool CResult_ScoringParametersDecodeErrorZ_is_ok(const struct LDKCResult_ScoringParametersDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_ScoringParametersDecodeErrorZ_is_ok(long o);
        // void CResult_ScoringParametersDecodeErrorZ_free(struct LDKCResult_ScoringParametersDecodeErrorZ _res);
        public static native void CResult_ScoringParametersDecodeErrorZ_free(long _res);
        // struct LDKCResult_ScorerDecodeErrorZ CResult_ScorerDecodeErrorZ_ok(struct LDKScorer o);
        public static native long CResult_ScorerDecodeErrorZ_ok(long o);
        // struct LDKCResult_ScorerDecodeErrorZ CResult_ScorerDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_ScorerDecodeErrorZ_err(long e);
+       // bool CResult_ScorerDecodeErrorZ_is_ok(const struct LDKCResult_ScorerDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_ScorerDecodeErrorZ_is_ok(long o);
        // void CResult_ScorerDecodeErrorZ_free(struct LDKCResult_ScorerDecodeErrorZ _res);
        public static native void CResult_ScorerDecodeErrorZ_free(long _res);
        // struct LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_ok(struct LDKDelayedPaymentOutputDescriptor o);
        public static native long CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_ok(long o);
        // struct LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_err(long e);
+       // bool CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_is_ok(const struct LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_is_ok(long o);
        // void CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_free(struct LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ _res);
        public static native void CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_free(long _res);
+       // uint64_t CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_clone_ptr(LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_clone(const struct LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_clone(long orig);
        // struct LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ CResult_StaticPaymentOutputDescriptorDecodeErrorZ_ok(struct LDKStaticPaymentOutputDescriptor o);
        public static native long CResult_StaticPaymentOutputDescriptorDecodeErrorZ_ok(long o);
        // struct LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ CResult_StaticPaymentOutputDescriptorDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_StaticPaymentOutputDescriptorDecodeErrorZ_err(long e);
+       // bool CResult_StaticPaymentOutputDescriptorDecodeErrorZ_is_ok(const struct LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_StaticPaymentOutputDescriptorDecodeErrorZ_is_ok(long o);
        // void CResult_StaticPaymentOutputDescriptorDecodeErrorZ_free(struct LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ _res);
        public static native void CResult_StaticPaymentOutputDescriptorDecodeErrorZ_free(long _res);
+       // uint64_t CResult_StaticPaymentOutputDescriptorDecodeErrorZ_clone_ptr(LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_StaticPaymentOutputDescriptorDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ CResult_StaticPaymentOutputDescriptorDecodeErrorZ_clone(const struct LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_StaticPaymentOutputDescriptorDecodeErrorZ_clone(long orig);
        // struct LDKCResult_SpendableOutputDescriptorDecodeErrorZ CResult_SpendableOutputDescriptorDecodeErrorZ_ok(struct LDKSpendableOutputDescriptor o);
        public static native long CResult_SpendableOutputDescriptorDecodeErrorZ_ok(long o);
        // struct LDKCResult_SpendableOutputDescriptorDecodeErrorZ CResult_SpendableOutputDescriptorDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_SpendableOutputDescriptorDecodeErrorZ_err(long e);
+       // bool CResult_SpendableOutputDescriptorDecodeErrorZ_is_ok(const struct LDKCResult_SpendableOutputDescriptorDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_SpendableOutputDescriptorDecodeErrorZ_is_ok(long o);
        // void CResult_SpendableOutputDescriptorDecodeErrorZ_free(struct LDKCResult_SpendableOutputDescriptorDecodeErrorZ _res);
        public static native void CResult_SpendableOutputDescriptorDecodeErrorZ_free(long _res);
+       // uint64_t CResult_SpendableOutputDescriptorDecodeErrorZ_clone_ptr(LDKCResult_SpendableOutputDescriptorDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_SpendableOutputDescriptorDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_SpendableOutputDescriptorDecodeErrorZ CResult_SpendableOutputDescriptorDecodeErrorZ_clone(const struct LDKCResult_SpendableOutputDescriptorDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_SpendableOutputDescriptorDecodeErrorZ_clone(long orig);
        // struct LDKCResult_NoneNoneZ CResult_NoneNoneZ_ok(void);
        public static native long CResult_NoneNoneZ_ok();
        // struct LDKCResult_NoneNoneZ CResult_NoneNoneZ_err(void);
        public static native long CResult_NoneNoneZ_err();
+       // bool CResult_NoneNoneZ_is_ok(const struct LDKCResult_NoneNoneZ *NONNULL_PTR o);
+       public static native boolean CResult_NoneNoneZ_is_ok(long o);
        // void CResult_NoneNoneZ_free(struct LDKCResult_NoneNoneZ _res);
        public static native void CResult_NoneNoneZ_free(long _res);
+       // uint64_t CResult_NoneNoneZ_clone_ptr(LDKCResult_NoneNoneZ *NONNULL_PTR arg);
+       public static native long CResult_NoneNoneZ_clone_ptr(long arg);
        // struct LDKCResult_NoneNoneZ CResult_NoneNoneZ_clone(const struct LDKCResult_NoneNoneZ *NONNULL_PTR orig);
        public static native long CResult_NoneNoneZ_clone(long orig);
+       // uint64_t C2Tuple_SignatureCVec_SignatureZZ_clone_ptr(LDKC2Tuple_SignatureCVec_SignatureZZ *NONNULL_PTR arg);
+       public static native long C2Tuple_SignatureCVec_SignatureZZ_clone_ptr(long arg);
        // struct LDKC2Tuple_SignatureCVec_SignatureZZ C2Tuple_SignatureCVec_SignatureZZ_clone(const struct LDKC2Tuple_SignatureCVec_SignatureZZ *NONNULL_PTR orig);
        public static native long C2Tuple_SignatureCVec_SignatureZZ_clone(long orig);
        // struct LDKC2Tuple_SignatureCVec_SignatureZZ C2Tuple_SignatureCVec_SignatureZZ_new(struct LDKSignature a, struct LDKCVec_SignatureZ b);
@@ -1786,24 +1869,36 @@ public class bindings {
        public static native long CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_ok(long o);
        // struct LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_err(void);
        public static native long CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_err();
+       // bool CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_is_ok(const struct LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ *NONNULL_PTR o);
+       public static native boolean CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_is_ok(long o);
        // void CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_free(struct LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ _res);
        public static native void CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_free(long _res);
+       // uint64_t CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone_ptr(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ *NONNULL_PTR arg);
+       public static native long CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone_ptr(long arg);
        // struct LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone(const struct LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ *NONNULL_PTR orig);
        public static native long CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone(long orig);
        // struct LDKCResult_SignatureNoneZ CResult_SignatureNoneZ_ok(struct LDKSignature o);
        public static native long CResult_SignatureNoneZ_ok(byte[] o);
        // struct LDKCResult_SignatureNoneZ CResult_SignatureNoneZ_err(void);
        public static native long CResult_SignatureNoneZ_err();
+       // bool CResult_SignatureNoneZ_is_ok(const struct LDKCResult_SignatureNoneZ *NONNULL_PTR o);
+       public static native boolean CResult_SignatureNoneZ_is_ok(long o);
        // void CResult_SignatureNoneZ_free(struct LDKCResult_SignatureNoneZ _res);
        public static native void CResult_SignatureNoneZ_free(long _res);
+       // uint64_t CResult_SignatureNoneZ_clone_ptr(LDKCResult_SignatureNoneZ *NONNULL_PTR arg);
+       public static native long CResult_SignatureNoneZ_clone_ptr(long arg);
        // struct LDKCResult_SignatureNoneZ CResult_SignatureNoneZ_clone(const struct LDKCResult_SignatureNoneZ *NONNULL_PTR orig);
        public static native long CResult_SignatureNoneZ_clone(long orig);
        // struct LDKCResult_SignDecodeErrorZ CResult_SignDecodeErrorZ_ok(struct LDKSign o);
        public static native long CResult_SignDecodeErrorZ_ok(long o);
        // struct LDKCResult_SignDecodeErrorZ CResult_SignDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_SignDecodeErrorZ_err(long e);
+       // bool CResult_SignDecodeErrorZ_is_ok(const struct LDKCResult_SignDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_SignDecodeErrorZ_is_ok(long o);
        // void CResult_SignDecodeErrorZ_free(struct LDKCResult_SignDecodeErrorZ _res);
        public static native void CResult_SignDecodeErrorZ_free(long _res);
+       // uint64_t CResult_SignDecodeErrorZ_clone_ptr(LDKCResult_SignDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_SignDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_SignDecodeErrorZ CResult_SignDecodeErrorZ_clone(const struct LDKCResult_SignDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_SignDecodeErrorZ_clone(long orig);
        // void CVec_u8Z_free(struct LDKCVec_u8Z _res);
@@ -1812,8 +1907,12 @@ public class bindings {
        public static native long CResult_RecoverableSignatureNoneZ_ok(byte[] arg);
        // struct LDKCResult_RecoverableSignatureNoneZ CResult_RecoverableSignatureNoneZ_err(void);
        public static native long CResult_RecoverableSignatureNoneZ_err();
+       // bool CResult_RecoverableSignatureNoneZ_is_ok(const struct LDKCResult_RecoverableSignatureNoneZ *NONNULL_PTR o);
+       public static native boolean CResult_RecoverableSignatureNoneZ_is_ok(long o);
        // void CResult_RecoverableSignatureNoneZ_free(struct LDKCResult_RecoverableSignatureNoneZ _res);
        public static native void CResult_RecoverableSignatureNoneZ_free(long _res);
+       // uint64_t CResult_RecoverableSignatureNoneZ_clone_ptr(LDKCResult_RecoverableSignatureNoneZ *NONNULL_PTR arg);
+       public static native long CResult_RecoverableSignatureNoneZ_clone_ptr(long arg);
        // struct LDKCResult_RecoverableSignatureNoneZ CResult_RecoverableSignatureNoneZ_clone(const struct LDKCResult_RecoverableSignatureNoneZ *NONNULL_PTR orig);
        public static native long CResult_RecoverableSignatureNoneZ_clone(long orig);
        // void CVec_CVec_u8ZZ_free(struct LDKCVec_CVec_u8ZZ _res);
@@ -1822,16 +1921,24 @@ public class bindings {
        public static native long CResult_CVec_CVec_u8ZZNoneZ_ok(byte[][] o);
        // struct LDKCResult_CVec_CVec_u8ZZNoneZ CResult_CVec_CVec_u8ZZNoneZ_err(void);
        public static native long CResult_CVec_CVec_u8ZZNoneZ_err();
+       // bool CResult_CVec_CVec_u8ZZNoneZ_is_ok(const struct LDKCResult_CVec_CVec_u8ZZNoneZ *NONNULL_PTR o);
+       public static native boolean CResult_CVec_CVec_u8ZZNoneZ_is_ok(long o);
        // void CResult_CVec_CVec_u8ZZNoneZ_free(struct LDKCResult_CVec_CVec_u8ZZNoneZ _res);
        public static native void CResult_CVec_CVec_u8ZZNoneZ_free(long _res);
+       // uint64_t CResult_CVec_CVec_u8ZZNoneZ_clone_ptr(LDKCResult_CVec_CVec_u8ZZNoneZ *NONNULL_PTR arg);
+       public static native long CResult_CVec_CVec_u8ZZNoneZ_clone_ptr(long arg);
        // struct LDKCResult_CVec_CVec_u8ZZNoneZ CResult_CVec_CVec_u8ZZNoneZ_clone(const struct LDKCResult_CVec_CVec_u8ZZNoneZ *NONNULL_PTR orig);
        public static native long CResult_CVec_CVec_u8ZZNoneZ_clone(long orig);
        // struct LDKCResult_InMemorySignerDecodeErrorZ CResult_InMemorySignerDecodeErrorZ_ok(struct LDKInMemorySigner o);
        public static native long CResult_InMemorySignerDecodeErrorZ_ok(long o);
        // struct LDKCResult_InMemorySignerDecodeErrorZ CResult_InMemorySignerDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_InMemorySignerDecodeErrorZ_err(long e);
+       // bool CResult_InMemorySignerDecodeErrorZ_is_ok(const struct LDKCResult_InMemorySignerDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_InMemorySignerDecodeErrorZ_is_ok(long o);
        // void CResult_InMemorySignerDecodeErrorZ_free(struct LDKCResult_InMemorySignerDecodeErrorZ _res);
        public static native void CResult_InMemorySignerDecodeErrorZ_free(long _res);
+       // uint64_t CResult_InMemorySignerDecodeErrorZ_clone_ptr(LDKCResult_InMemorySignerDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_InMemorySignerDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_InMemorySignerDecodeErrorZ CResult_InMemorySignerDecodeErrorZ_clone(const struct LDKCResult_InMemorySignerDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_InMemorySignerDecodeErrorZ_clone(long orig);
        // void CVec_TxOutZ_free(struct LDKCVec_TxOutZ _res);
@@ -1840,10 +1947,16 @@ public class bindings {
        public static native long CResult_TransactionNoneZ_ok(byte[] o);
        // struct LDKCResult_TransactionNoneZ CResult_TransactionNoneZ_err(void);
        public static native long CResult_TransactionNoneZ_err();
+       // bool CResult_TransactionNoneZ_is_ok(const struct LDKCResult_TransactionNoneZ *NONNULL_PTR o);
+       public static native boolean CResult_TransactionNoneZ_is_ok(long o);
        // void CResult_TransactionNoneZ_free(struct LDKCResult_TransactionNoneZ _res);
        public static native void CResult_TransactionNoneZ_free(long _res);
+       // uint64_t CResult_TransactionNoneZ_clone_ptr(LDKCResult_TransactionNoneZ *NONNULL_PTR arg);
+       public static native long CResult_TransactionNoneZ_clone_ptr(long arg);
        // struct LDKCResult_TransactionNoneZ CResult_TransactionNoneZ_clone(const struct LDKCResult_TransactionNoneZ *NONNULL_PTR orig);
        public static native long CResult_TransactionNoneZ_clone(long orig);
+       // uint64_t C2Tuple_BlockHashChannelMonitorZ_clone_ptr(LDKC2Tuple_BlockHashChannelMonitorZ *NONNULL_PTR arg);
+       public static native long C2Tuple_BlockHashChannelMonitorZ_clone_ptr(long arg);
        // struct LDKC2Tuple_BlockHashChannelMonitorZ C2Tuple_BlockHashChannelMonitorZ_clone(const struct LDKC2Tuple_BlockHashChannelMonitorZ *NONNULL_PTR orig);
        public static native long C2Tuple_BlockHashChannelMonitorZ_clone(long orig);
        // struct LDKC2Tuple_BlockHashChannelMonitorZ C2Tuple_BlockHashChannelMonitorZ_new(struct LDKThirtyTwoBytes a, struct LDKChannelMonitor b);
@@ -1856,8 +1969,12 @@ public class bindings {
        public static native long CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_ok(long[] o);
        // struct LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_err(enum LDKIOError e);
        public static native long CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_err(IOError e);
+       // bool CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_is_ok(const struct LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_is_ok(long o);
        // void CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_free(struct LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ _res);
        public static native void CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_free(long _res);
+       // uint64_t CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_clone_ptr(LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ *NONNULL_PTR arg);
+       public static native long CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_clone_ptr(long arg);
        // struct LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_clone(const struct LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ *NONNULL_PTR orig);
        public static native long CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_clone(long orig);
        // struct LDKCOption_u16Z COption_u16Z_some(uint16_t o);
@@ -1866,14 +1983,20 @@ public class bindings {
        public static native long COption_u16Z_none();
        // void COption_u16Z_free(struct LDKCOption_u16Z _res);
        public static native void COption_u16Z_free(long _res);
+       // uint64_t COption_u16Z_clone_ptr(LDKCOption_u16Z *NONNULL_PTR arg);
+       public static native long COption_u16Z_clone_ptr(long arg);
        // struct LDKCOption_u16Z COption_u16Z_clone(const struct LDKCOption_u16Z *NONNULL_PTR orig);
        public static native long COption_u16Z_clone(long orig);
        // struct LDKCResult_NoneAPIErrorZ CResult_NoneAPIErrorZ_ok(void);
        public static native long CResult_NoneAPIErrorZ_ok();
        // struct LDKCResult_NoneAPIErrorZ CResult_NoneAPIErrorZ_err(struct LDKAPIError e);
        public static native long CResult_NoneAPIErrorZ_err(long e);
+       // bool CResult_NoneAPIErrorZ_is_ok(const struct LDKCResult_NoneAPIErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_NoneAPIErrorZ_is_ok(long o);
        // void CResult_NoneAPIErrorZ_free(struct LDKCResult_NoneAPIErrorZ _res);
        public static native void CResult_NoneAPIErrorZ_free(long _res);
+       // uint64_t CResult_NoneAPIErrorZ_clone_ptr(LDKCResult_NoneAPIErrorZ *NONNULL_PTR arg);
+       public static native long CResult_NoneAPIErrorZ_clone_ptr(long arg);
        // struct LDKCResult_NoneAPIErrorZ CResult_NoneAPIErrorZ_clone(const struct LDKCResult_NoneAPIErrorZ *NONNULL_PTR orig);
        public static native long CResult_NoneAPIErrorZ_clone(long orig);
        // void CVec_CResult_NoneAPIErrorZZ_free(struct LDKCVec_CResult_NoneAPIErrorZZ _res);
@@ -1884,26 +2007,40 @@ public class bindings {
        public static native long CResult__u832APIErrorZ_ok(byte[] o);
        // struct LDKCResult__u832APIErrorZ CResult__u832APIErrorZ_err(struct LDKAPIError e);
        public static native long CResult__u832APIErrorZ_err(long e);
+       // bool CResult__u832APIErrorZ_is_ok(const struct LDKCResult__u832APIErrorZ *NONNULL_PTR o);
+       public static native boolean CResult__u832APIErrorZ_is_ok(long o);
        // void CResult__u832APIErrorZ_free(struct LDKCResult__u832APIErrorZ _res);
        public static native void CResult__u832APIErrorZ_free(long _res);
+       // uint64_t CResult__u832APIErrorZ_clone_ptr(LDKCResult__u832APIErrorZ *NONNULL_PTR arg);
+       public static native long CResult__u832APIErrorZ_clone_ptr(long arg);
        // struct LDKCResult__u832APIErrorZ CResult__u832APIErrorZ_clone(const struct LDKCResult__u832APIErrorZ *NONNULL_PTR orig);
        public static native long CResult__u832APIErrorZ_clone(long orig);
        // struct LDKCResult_PaymentIdPaymentSendFailureZ CResult_PaymentIdPaymentSendFailureZ_ok(struct LDKThirtyTwoBytes o);
        public static native long CResult_PaymentIdPaymentSendFailureZ_ok(byte[] o);
        // struct LDKCResult_PaymentIdPaymentSendFailureZ CResult_PaymentIdPaymentSendFailureZ_err(struct LDKPaymentSendFailure e);
        public static native long CResult_PaymentIdPaymentSendFailureZ_err(long e);
+       // bool CResult_PaymentIdPaymentSendFailureZ_is_ok(const struct LDKCResult_PaymentIdPaymentSendFailureZ *NONNULL_PTR o);
+       public static native boolean CResult_PaymentIdPaymentSendFailureZ_is_ok(long o);
        // void CResult_PaymentIdPaymentSendFailureZ_free(struct LDKCResult_PaymentIdPaymentSendFailureZ _res);
        public static native void CResult_PaymentIdPaymentSendFailureZ_free(long _res);
+       // uint64_t CResult_PaymentIdPaymentSendFailureZ_clone_ptr(LDKCResult_PaymentIdPaymentSendFailureZ *NONNULL_PTR arg);
+       public static native long CResult_PaymentIdPaymentSendFailureZ_clone_ptr(long arg);
        // struct LDKCResult_PaymentIdPaymentSendFailureZ CResult_PaymentIdPaymentSendFailureZ_clone(const struct LDKCResult_PaymentIdPaymentSendFailureZ *NONNULL_PTR orig);
        public static native long CResult_PaymentIdPaymentSendFailureZ_clone(long orig);
        // struct LDKCResult_NonePaymentSendFailureZ CResult_NonePaymentSendFailureZ_ok(void);
        public static native long CResult_NonePaymentSendFailureZ_ok();
        // struct LDKCResult_NonePaymentSendFailureZ CResult_NonePaymentSendFailureZ_err(struct LDKPaymentSendFailure e);
        public static native long CResult_NonePaymentSendFailureZ_err(long e);
+       // bool CResult_NonePaymentSendFailureZ_is_ok(const struct LDKCResult_NonePaymentSendFailureZ *NONNULL_PTR o);
+       public static native boolean CResult_NonePaymentSendFailureZ_is_ok(long o);
        // void CResult_NonePaymentSendFailureZ_free(struct LDKCResult_NonePaymentSendFailureZ _res);
        public static native void CResult_NonePaymentSendFailureZ_free(long _res);
+       // uint64_t CResult_NonePaymentSendFailureZ_clone_ptr(LDKCResult_NonePaymentSendFailureZ *NONNULL_PTR arg);
+       public static native long CResult_NonePaymentSendFailureZ_clone_ptr(long arg);
        // struct LDKCResult_NonePaymentSendFailureZ CResult_NonePaymentSendFailureZ_clone(const struct LDKCResult_NonePaymentSendFailureZ *NONNULL_PTR orig);
        public static native long CResult_NonePaymentSendFailureZ_clone(long orig);
+       // uint64_t C2Tuple_PaymentHashPaymentIdZ_clone_ptr(LDKC2Tuple_PaymentHashPaymentIdZ *NONNULL_PTR arg);
+       public static native long C2Tuple_PaymentHashPaymentIdZ_clone_ptr(long arg);
        // struct LDKC2Tuple_PaymentHashPaymentIdZ C2Tuple_PaymentHashPaymentIdZ_clone(const struct LDKC2Tuple_PaymentHashPaymentIdZ *NONNULL_PTR orig);
        public static native long C2Tuple_PaymentHashPaymentIdZ_clone(long orig);
        // struct LDKC2Tuple_PaymentHashPaymentIdZ C2Tuple_PaymentHashPaymentIdZ_new(struct LDKThirtyTwoBytes a, struct LDKThirtyTwoBytes b);
@@ -1914,12 +2051,18 @@ public class bindings {
        public static native long CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_ok(long o);
        // struct LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_err(struct LDKPaymentSendFailure e);
        public static native long CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_err(long e);
+       // bool CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_is_ok(const struct LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ *NONNULL_PTR o);
+       public static native boolean CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_is_ok(long o);
        // void CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_free(struct LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ _res);
        public static native void CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_free(long _res);
+       // uint64_t CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_clone_ptr(LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ *NONNULL_PTR arg);
+       public static native long CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_clone_ptr(long arg);
        // struct LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_clone(const struct LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ *NONNULL_PTR orig);
        public static native long CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_clone(long orig);
        // void CVec_NetAddressZ_free(struct LDKCVec_NetAddressZ _res);
        public static native void CVec_NetAddressZ_free(long[] _res);
+       // uint64_t C2Tuple_PaymentHashPaymentSecretZ_clone_ptr(LDKC2Tuple_PaymentHashPaymentSecretZ *NONNULL_PTR arg);
+       public static native long C2Tuple_PaymentHashPaymentSecretZ_clone_ptr(long arg);
        // struct LDKC2Tuple_PaymentHashPaymentSecretZ C2Tuple_PaymentHashPaymentSecretZ_clone(const struct LDKC2Tuple_PaymentHashPaymentSecretZ *NONNULL_PTR orig);
        public static native long C2Tuple_PaymentHashPaymentSecretZ_clone(long orig);
        // struct LDKC2Tuple_PaymentHashPaymentSecretZ C2Tuple_PaymentHashPaymentSecretZ_new(struct LDKThirtyTwoBytes a, struct LDKThirtyTwoBytes b);
@@ -1930,8 +2073,12 @@ public class bindings {
        public static native long CResult_PaymentSecretAPIErrorZ_ok(byte[] o);
        // struct LDKCResult_PaymentSecretAPIErrorZ CResult_PaymentSecretAPIErrorZ_err(struct LDKAPIError e);
        public static native long CResult_PaymentSecretAPIErrorZ_err(long e);
+       // bool CResult_PaymentSecretAPIErrorZ_is_ok(const struct LDKCResult_PaymentSecretAPIErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_PaymentSecretAPIErrorZ_is_ok(long o);
        // void CResult_PaymentSecretAPIErrorZ_free(struct LDKCResult_PaymentSecretAPIErrorZ _res);
        public static native void CResult_PaymentSecretAPIErrorZ_free(long _res);
+       // uint64_t CResult_PaymentSecretAPIErrorZ_clone_ptr(LDKCResult_PaymentSecretAPIErrorZ *NONNULL_PTR arg);
+       public static native long CResult_PaymentSecretAPIErrorZ_clone_ptr(long arg);
        // struct LDKCResult_PaymentSecretAPIErrorZ CResult_PaymentSecretAPIErrorZ_clone(const struct LDKCResult_PaymentSecretAPIErrorZ *NONNULL_PTR orig);
        public static native long CResult_PaymentSecretAPIErrorZ_clone(long orig);
        // void CVec_ChannelMonitorZ_free(struct LDKCVec_ChannelMonitorZ _res);
@@ -1944,22 +2091,32 @@ public class bindings {
        public static native long CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_ok(long o);
        // struct LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_err(long e);
+       // bool CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_is_ok(const struct LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_is_ok(long o);
        // void CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_free(struct LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ _res);
        public static native void CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_free(long _res);
        // struct LDKCResult_ChannelConfigDecodeErrorZ CResult_ChannelConfigDecodeErrorZ_ok(struct LDKChannelConfig o);
        public static native long CResult_ChannelConfigDecodeErrorZ_ok(long o);
        // struct LDKCResult_ChannelConfigDecodeErrorZ CResult_ChannelConfigDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_ChannelConfigDecodeErrorZ_err(long e);
+       // bool CResult_ChannelConfigDecodeErrorZ_is_ok(const struct LDKCResult_ChannelConfigDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_ChannelConfigDecodeErrorZ_is_ok(long o);
        // void CResult_ChannelConfigDecodeErrorZ_free(struct LDKCResult_ChannelConfigDecodeErrorZ _res);
        public static native void CResult_ChannelConfigDecodeErrorZ_free(long _res);
+       // uint64_t CResult_ChannelConfigDecodeErrorZ_clone_ptr(LDKCResult_ChannelConfigDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_ChannelConfigDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_ChannelConfigDecodeErrorZ CResult_ChannelConfigDecodeErrorZ_clone(const struct LDKCResult_ChannelConfigDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_ChannelConfigDecodeErrorZ_clone(long orig);
        // struct LDKCResult_OutPointDecodeErrorZ CResult_OutPointDecodeErrorZ_ok(struct LDKOutPoint o);
        public static native long CResult_OutPointDecodeErrorZ_ok(long o);
        // struct LDKCResult_OutPointDecodeErrorZ CResult_OutPointDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_OutPointDecodeErrorZ_err(long e);
+       // bool CResult_OutPointDecodeErrorZ_is_ok(const struct LDKCResult_OutPointDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_OutPointDecodeErrorZ_is_ok(long o);
        // void CResult_OutPointDecodeErrorZ_free(struct LDKCResult_OutPointDecodeErrorZ _res);
        public static native void CResult_OutPointDecodeErrorZ_free(long _res);
+       // uint64_t CResult_OutPointDecodeErrorZ_clone_ptr(LDKCResult_OutPointDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_OutPointDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_OutPointDecodeErrorZ CResult_OutPointDecodeErrorZ_clone(const struct LDKCResult_OutPointDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_OutPointDecodeErrorZ_clone(long orig);
        // struct LDKCOption_TypeZ COption_TypeZ_some(struct LDKType o);
@@ -1968,48 +2125,72 @@ public class bindings {
        public static native long COption_TypeZ_none();
        // void COption_TypeZ_free(struct LDKCOption_TypeZ _res);
        public static native void COption_TypeZ_free(long _res);
+       // uint64_t COption_TypeZ_clone_ptr(LDKCOption_TypeZ *NONNULL_PTR arg);
+       public static native long COption_TypeZ_clone_ptr(long arg);
        // struct LDKCOption_TypeZ COption_TypeZ_clone(const struct LDKCOption_TypeZ *NONNULL_PTR orig);
        public static native long COption_TypeZ_clone(long orig);
        // struct LDKCResult_COption_TypeZDecodeErrorZ CResult_COption_TypeZDecodeErrorZ_ok(struct LDKCOption_TypeZ o);
        public static native long CResult_COption_TypeZDecodeErrorZ_ok(long o);
        // struct LDKCResult_COption_TypeZDecodeErrorZ CResult_COption_TypeZDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_COption_TypeZDecodeErrorZ_err(long e);
+       // bool CResult_COption_TypeZDecodeErrorZ_is_ok(const struct LDKCResult_COption_TypeZDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_COption_TypeZDecodeErrorZ_is_ok(long o);
        // void CResult_COption_TypeZDecodeErrorZ_free(struct LDKCResult_COption_TypeZDecodeErrorZ _res);
        public static native void CResult_COption_TypeZDecodeErrorZ_free(long _res);
+       // uint64_t CResult_COption_TypeZDecodeErrorZ_clone_ptr(LDKCResult_COption_TypeZDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_COption_TypeZDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_COption_TypeZDecodeErrorZ CResult_COption_TypeZDecodeErrorZ_clone(const struct LDKCResult_COption_TypeZDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_COption_TypeZDecodeErrorZ_clone(long orig);
        // struct LDKCResult_PaymentIdPaymentErrorZ CResult_PaymentIdPaymentErrorZ_ok(struct LDKThirtyTwoBytes o);
        public static native long CResult_PaymentIdPaymentErrorZ_ok(byte[] o);
        // struct LDKCResult_PaymentIdPaymentErrorZ CResult_PaymentIdPaymentErrorZ_err(struct LDKPaymentError e);
        public static native long CResult_PaymentIdPaymentErrorZ_err(long e);
+       // bool CResult_PaymentIdPaymentErrorZ_is_ok(const struct LDKCResult_PaymentIdPaymentErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_PaymentIdPaymentErrorZ_is_ok(long o);
        // void CResult_PaymentIdPaymentErrorZ_free(struct LDKCResult_PaymentIdPaymentErrorZ _res);
        public static native void CResult_PaymentIdPaymentErrorZ_free(long _res);
+       // uint64_t CResult_PaymentIdPaymentErrorZ_clone_ptr(LDKCResult_PaymentIdPaymentErrorZ *NONNULL_PTR arg);
+       public static native long CResult_PaymentIdPaymentErrorZ_clone_ptr(long arg);
        // struct LDKCResult_PaymentIdPaymentErrorZ CResult_PaymentIdPaymentErrorZ_clone(const struct LDKCResult_PaymentIdPaymentErrorZ *NONNULL_PTR orig);
        public static native long CResult_PaymentIdPaymentErrorZ_clone(long orig);
        // struct LDKCResult_SiPrefixNoneZ CResult_SiPrefixNoneZ_ok(enum LDKSiPrefix o);
        public static native long CResult_SiPrefixNoneZ_ok(SiPrefix o);
        // struct LDKCResult_SiPrefixNoneZ CResult_SiPrefixNoneZ_err(void);
        public static native long CResult_SiPrefixNoneZ_err();
+       // bool CResult_SiPrefixNoneZ_is_ok(const struct LDKCResult_SiPrefixNoneZ *NONNULL_PTR o);
+       public static native boolean CResult_SiPrefixNoneZ_is_ok(long o);
        // void CResult_SiPrefixNoneZ_free(struct LDKCResult_SiPrefixNoneZ _res);
        public static native void CResult_SiPrefixNoneZ_free(long _res);
+       // uint64_t CResult_SiPrefixNoneZ_clone_ptr(LDKCResult_SiPrefixNoneZ *NONNULL_PTR arg);
+       public static native long CResult_SiPrefixNoneZ_clone_ptr(long arg);
        // struct LDKCResult_SiPrefixNoneZ CResult_SiPrefixNoneZ_clone(const struct LDKCResult_SiPrefixNoneZ *NONNULL_PTR orig);
        public static native long CResult_SiPrefixNoneZ_clone(long orig);
        // struct LDKCResult_InvoiceNoneZ CResult_InvoiceNoneZ_ok(struct LDKInvoice o);
        public static native long CResult_InvoiceNoneZ_ok(long o);
        // struct LDKCResult_InvoiceNoneZ CResult_InvoiceNoneZ_err(void);
        public static native long CResult_InvoiceNoneZ_err();
+       // bool CResult_InvoiceNoneZ_is_ok(const struct LDKCResult_InvoiceNoneZ *NONNULL_PTR o);
+       public static native boolean CResult_InvoiceNoneZ_is_ok(long o);
        // void CResult_InvoiceNoneZ_free(struct LDKCResult_InvoiceNoneZ _res);
        public static native void CResult_InvoiceNoneZ_free(long _res);
+       // uint64_t CResult_InvoiceNoneZ_clone_ptr(LDKCResult_InvoiceNoneZ *NONNULL_PTR arg);
+       public static native long CResult_InvoiceNoneZ_clone_ptr(long arg);
        // struct LDKCResult_InvoiceNoneZ CResult_InvoiceNoneZ_clone(const struct LDKCResult_InvoiceNoneZ *NONNULL_PTR orig);
        public static native long CResult_InvoiceNoneZ_clone(long orig);
        // struct LDKCResult_SignedRawInvoiceNoneZ CResult_SignedRawInvoiceNoneZ_ok(struct LDKSignedRawInvoice o);
        public static native long CResult_SignedRawInvoiceNoneZ_ok(long o);
        // struct LDKCResult_SignedRawInvoiceNoneZ CResult_SignedRawInvoiceNoneZ_err(void);
        public static native long CResult_SignedRawInvoiceNoneZ_err();
+       // bool CResult_SignedRawInvoiceNoneZ_is_ok(const struct LDKCResult_SignedRawInvoiceNoneZ *NONNULL_PTR o);
+       public static native boolean CResult_SignedRawInvoiceNoneZ_is_ok(long o);
        // void CResult_SignedRawInvoiceNoneZ_free(struct LDKCResult_SignedRawInvoiceNoneZ _res);
        public static native void CResult_SignedRawInvoiceNoneZ_free(long _res);
+       // uint64_t CResult_SignedRawInvoiceNoneZ_clone_ptr(LDKCResult_SignedRawInvoiceNoneZ *NONNULL_PTR arg);
+       public static native long CResult_SignedRawInvoiceNoneZ_clone_ptr(long arg);
        // struct LDKCResult_SignedRawInvoiceNoneZ CResult_SignedRawInvoiceNoneZ_clone(const struct LDKCResult_SignedRawInvoiceNoneZ *NONNULL_PTR orig);
        public static native long CResult_SignedRawInvoiceNoneZ_clone(long orig);
+       // uint64_t C3Tuple_RawInvoice_u832InvoiceSignatureZ_clone_ptr(LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ *NONNULL_PTR arg);
+       public static native long C3Tuple_RawInvoice_u832InvoiceSignatureZ_clone_ptr(long arg);
        // struct LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ C3Tuple_RawInvoice_u832InvoiceSignatureZ_clone(const struct LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ *NONNULL_PTR orig);
        public static native long C3Tuple_RawInvoice_u832InvoiceSignatureZ_clone(long orig);
        // struct LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ C3Tuple_RawInvoice_u832InvoiceSignatureZ_new(struct LDKRawInvoice a, struct LDKThirtyTwoBytes b, struct LDKInvoiceSignature c);
@@ -2020,8 +2201,12 @@ public class bindings {
        public static native long CResult_PayeePubKeyErrorZ_ok(long o);
        // struct LDKCResult_PayeePubKeyErrorZ CResult_PayeePubKeyErrorZ_err(enum LDKSecp256k1Error e);
        public static native long CResult_PayeePubKeyErrorZ_err(Secp256k1Error e);
+       // bool CResult_PayeePubKeyErrorZ_is_ok(const struct LDKCResult_PayeePubKeyErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_PayeePubKeyErrorZ_is_ok(long o);
        // void CResult_PayeePubKeyErrorZ_free(struct LDKCResult_PayeePubKeyErrorZ _res);
        public static native void CResult_PayeePubKeyErrorZ_free(long _res);
+       // uint64_t CResult_PayeePubKeyErrorZ_clone_ptr(LDKCResult_PayeePubKeyErrorZ *NONNULL_PTR arg);
+       public static native long CResult_PayeePubKeyErrorZ_clone_ptr(long arg);
        // struct LDKCResult_PayeePubKeyErrorZ CResult_PayeePubKeyErrorZ_clone(const struct LDKCResult_PayeePubKeyErrorZ *NONNULL_PTR orig);
        public static native long CResult_PayeePubKeyErrorZ_clone(long orig);
        // void CVec_PrivateRouteZ_free(struct LDKCVec_PrivateRouteZ _res);
@@ -2030,86 +2215,150 @@ public class bindings {
        public static native long CResult_PositiveTimestampCreationErrorZ_ok(long o);
        // struct LDKCResult_PositiveTimestampCreationErrorZ CResult_PositiveTimestampCreationErrorZ_err(enum LDKCreationError e);
        public static native long CResult_PositiveTimestampCreationErrorZ_err(CreationError e);
+       // bool CResult_PositiveTimestampCreationErrorZ_is_ok(const struct LDKCResult_PositiveTimestampCreationErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_PositiveTimestampCreationErrorZ_is_ok(long o);
        // void CResult_PositiveTimestampCreationErrorZ_free(struct LDKCResult_PositiveTimestampCreationErrorZ _res);
        public static native void CResult_PositiveTimestampCreationErrorZ_free(long _res);
+       // uint64_t CResult_PositiveTimestampCreationErrorZ_clone_ptr(LDKCResult_PositiveTimestampCreationErrorZ *NONNULL_PTR arg);
+       public static native long CResult_PositiveTimestampCreationErrorZ_clone_ptr(long arg);
        // struct LDKCResult_PositiveTimestampCreationErrorZ CResult_PositiveTimestampCreationErrorZ_clone(const struct LDKCResult_PositiveTimestampCreationErrorZ *NONNULL_PTR orig);
        public static native long CResult_PositiveTimestampCreationErrorZ_clone(long orig);
        // struct LDKCResult_NoneSemanticErrorZ CResult_NoneSemanticErrorZ_ok(void);
        public static native long CResult_NoneSemanticErrorZ_ok();
        // struct LDKCResult_NoneSemanticErrorZ CResult_NoneSemanticErrorZ_err(enum LDKSemanticError e);
        public static native long CResult_NoneSemanticErrorZ_err(SemanticError e);
+       // bool CResult_NoneSemanticErrorZ_is_ok(const struct LDKCResult_NoneSemanticErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_NoneSemanticErrorZ_is_ok(long o);
        // void CResult_NoneSemanticErrorZ_free(struct LDKCResult_NoneSemanticErrorZ _res);
        public static native void CResult_NoneSemanticErrorZ_free(long _res);
+       // uint64_t CResult_NoneSemanticErrorZ_clone_ptr(LDKCResult_NoneSemanticErrorZ *NONNULL_PTR arg);
+       public static native long CResult_NoneSemanticErrorZ_clone_ptr(long arg);
        // struct LDKCResult_NoneSemanticErrorZ CResult_NoneSemanticErrorZ_clone(const struct LDKCResult_NoneSemanticErrorZ *NONNULL_PTR orig);
        public static native long CResult_NoneSemanticErrorZ_clone(long orig);
        // struct LDKCResult_InvoiceSemanticErrorZ CResult_InvoiceSemanticErrorZ_ok(struct LDKInvoice o);
        public static native long CResult_InvoiceSemanticErrorZ_ok(long o);
        // struct LDKCResult_InvoiceSemanticErrorZ CResult_InvoiceSemanticErrorZ_err(enum LDKSemanticError e);
        public static native long CResult_InvoiceSemanticErrorZ_err(SemanticError e);
+       // bool CResult_InvoiceSemanticErrorZ_is_ok(const struct LDKCResult_InvoiceSemanticErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_InvoiceSemanticErrorZ_is_ok(long o);
        // void CResult_InvoiceSemanticErrorZ_free(struct LDKCResult_InvoiceSemanticErrorZ _res);
        public static native void CResult_InvoiceSemanticErrorZ_free(long _res);
+       // uint64_t CResult_InvoiceSemanticErrorZ_clone_ptr(LDKCResult_InvoiceSemanticErrorZ *NONNULL_PTR arg);
+       public static native long CResult_InvoiceSemanticErrorZ_clone_ptr(long arg);
        // struct LDKCResult_InvoiceSemanticErrorZ CResult_InvoiceSemanticErrorZ_clone(const struct LDKCResult_InvoiceSemanticErrorZ *NONNULL_PTR orig);
        public static native long CResult_InvoiceSemanticErrorZ_clone(long orig);
        // struct LDKCResult_DescriptionCreationErrorZ CResult_DescriptionCreationErrorZ_ok(struct LDKDescription o);
        public static native long CResult_DescriptionCreationErrorZ_ok(long o);
        // struct LDKCResult_DescriptionCreationErrorZ CResult_DescriptionCreationErrorZ_err(enum LDKCreationError e);
        public static native long CResult_DescriptionCreationErrorZ_err(CreationError e);
+       // bool CResult_DescriptionCreationErrorZ_is_ok(const struct LDKCResult_DescriptionCreationErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_DescriptionCreationErrorZ_is_ok(long o);
        // void CResult_DescriptionCreationErrorZ_free(struct LDKCResult_DescriptionCreationErrorZ _res);
        public static native void CResult_DescriptionCreationErrorZ_free(long _res);
+       // uint64_t CResult_DescriptionCreationErrorZ_clone_ptr(LDKCResult_DescriptionCreationErrorZ *NONNULL_PTR arg);
+       public static native long CResult_DescriptionCreationErrorZ_clone_ptr(long arg);
        // struct LDKCResult_DescriptionCreationErrorZ CResult_DescriptionCreationErrorZ_clone(const struct LDKCResult_DescriptionCreationErrorZ *NONNULL_PTR orig);
        public static native long CResult_DescriptionCreationErrorZ_clone(long orig);
        // struct LDKCResult_ExpiryTimeCreationErrorZ CResult_ExpiryTimeCreationErrorZ_ok(struct LDKExpiryTime o);
        public static native long CResult_ExpiryTimeCreationErrorZ_ok(long o);
        // struct LDKCResult_ExpiryTimeCreationErrorZ CResult_ExpiryTimeCreationErrorZ_err(enum LDKCreationError e);
        public static native long CResult_ExpiryTimeCreationErrorZ_err(CreationError e);
+       // bool CResult_ExpiryTimeCreationErrorZ_is_ok(const struct LDKCResult_ExpiryTimeCreationErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_ExpiryTimeCreationErrorZ_is_ok(long o);
        // void CResult_ExpiryTimeCreationErrorZ_free(struct LDKCResult_ExpiryTimeCreationErrorZ _res);
        public static native void CResult_ExpiryTimeCreationErrorZ_free(long _res);
+       // uint64_t CResult_ExpiryTimeCreationErrorZ_clone_ptr(LDKCResult_ExpiryTimeCreationErrorZ *NONNULL_PTR arg);
+       public static native long CResult_ExpiryTimeCreationErrorZ_clone_ptr(long arg);
        // struct LDKCResult_ExpiryTimeCreationErrorZ CResult_ExpiryTimeCreationErrorZ_clone(const struct LDKCResult_ExpiryTimeCreationErrorZ *NONNULL_PTR orig);
        public static native long CResult_ExpiryTimeCreationErrorZ_clone(long orig);
        // struct LDKCResult_PrivateRouteCreationErrorZ CResult_PrivateRouteCreationErrorZ_ok(struct LDKPrivateRoute o);
        public static native long CResult_PrivateRouteCreationErrorZ_ok(long o);
        // struct LDKCResult_PrivateRouteCreationErrorZ CResult_PrivateRouteCreationErrorZ_err(enum LDKCreationError e);
        public static native long CResult_PrivateRouteCreationErrorZ_err(CreationError e);
+       // bool CResult_PrivateRouteCreationErrorZ_is_ok(const struct LDKCResult_PrivateRouteCreationErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_PrivateRouteCreationErrorZ_is_ok(long o);
        // void CResult_PrivateRouteCreationErrorZ_free(struct LDKCResult_PrivateRouteCreationErrorZ _res);
        public static native void CResult_PrivateRouteCreationErrorZ_free(long _res);
+       // uint64_t CResult_PrivateRouteCreationErrorZ_clone_ptr(LDKCResult_PrivateRouteCreationErrorZ *NONNULL_PTR arg);
+       public static native long CResult_PrivateRouteCreationErrorZ_clone_ptr(long arg);
        // struct LDKCResult_PrivateRouteCreationErrorZ CResult_PrivateRouteCreationErrorZ_clone(const struct LDKCResult_PrivateRouteCreationErrorZ *NONNULL_PTR orig);
        public static native long CResult_PrivateRouteCreationErrorZ_clone(long orig);
        // struct LDKCResult_StringErrorZ CResult_StringErrorZ_ok(struct LDKStr o);
        public static native long CResult_StringErrorZ_ok(String o);
        // struct LDKCResult_StringErrorZ CResult_StringErrorZ_err(enum LDKSecp256k1Error e);
        public static native long CResult_StringErrorZ_err(Secp256k1Error e);
+       // bool CResult_StringErrorZ_is_ok(const struct LDKCResult_StringErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_StringErrorZ_is_ok(long o);
        // void CResult_StringErrorZ_free(struct LDKCResult_StringErrorZ _res);
        public static native void CResult_StringErrorZ_free(long _res);
        // struct LDKCResult_ChannelMonitorUpdateDecodeErrorZ CResult_ChannelMonitorUpdateDecodeErrorZ_ok(struct LDKChannelMonitorUpdate o);
        public static native long CResult_ChannelMonitorUpdateDecodeErrorZ_ok(long o);
        // struct LDKCResult_ChannelMonitorUpdateDecodeErrorZ CResult_ChannelMonitorUpdateDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_ChannelMonitorUpdateDecodeErrorZ_err(long e);
+       // bool CResult_ChannelMonitorUpdateDecodeErrorZ_is_ok(const struct LDKCResult_ChannelMonitorUpdateDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_ChannelMonitorUpdateDecodeErrorZ_is_ok(long o);
        // void CResult_ChannelMonitorUpdateDecodeErrorZ_free(struct LDKCResult_ChannelMonitorUpdateDecodeErrorZ _res);
        public static native void CResult_ChannelMonitorUpdateDecodeErrorZ_free(long _res);
+       // uint64_t CResult_ChannelMonitorUpdateDecodeErrorZ_clone_ptr(LDKCResult_ChannelMonitorUpdateDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_ChannelMonitorUpdateDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_ChannelMonitorUpdateDecodeErrorZ CResult_ChannelMonitorUpdateDecodeErrorZ_clone(const struct LDKCResult_ChannelMonitorUpdateDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_ChannelMonitorUpdateDecodeErrorZ_clone(long orig);
+       // struct LDKCOption_MonitorEventZ COption_MonitorEventZ_some(struct LDKMonitorEvent o);
+       public static native long COption_MonitorEventZ_some(long o);
+       // struct LDKCOption_MonitorEventZ COption_MonitorEventZ_none(void);
+       public static native long COption_MonitorEventZ_none();
+       // void COption_MonitorEventZ_free(struct LDKCOption_MonitorEventZ _res);
+       public static native void COption_MonitorEventZ_free(long _res);
+       // uint64_t COption_MonitorEventZ_clone_ptr(LDKCOption_MonitorEventZ *NONNULL_PTR arg);
+       public static native long COption_MonitorEventZ_clone_ptr(long arg);
+       // struct LDKCOption_MonitorEventZ COption_MonitorEventZ_clone(const struct LDKCOption_MonitorEventZ *NONNULL_PTR orig);
+       public static native long COption_MonitorEventZ_clone(long orig);
+       // struct LDKCResult_COption_MonitorEventZDecodeErrorZ CResult_COption_MonitorEventZDecodeErrorZ_ok(struct LDKCOption_MonitorEventZ o);
+       public static native long CResult_COption_MonitorEventZDecodeErrorZ_ok(long o);
+       // struct LDKCResult_COption_MonitorEventZDecodeErrorZ CResult_COption_MonitorEventZDecodeErrorZ_err(struct LDKDecodeError e);
+       public static native long CResult_COption_MonitorEventZDecodeErrorZ_err(long e);
+       // bool CResult_COption_MonitorEventZDecodeErrorZ_is_ok(const struct LDKCResult_COption_MonitorEventZDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_COption_MonitorEventZDecodeErrorZ_is_ok(long o);
+       // void CResult_COption_MonitorEventZDecodeErrorZ_free(struct LDKCResult_COption_MonitorEventZDecodeErrorZ _res);
+       public static native void CResult_COption_MonitorEventZDecodeErrorZ_free(long _res);
+       // uint64_t CResult_COption_MonitorEventZDecodeErrorZ_clone_ptr(LDKCResult_COption_MonitorEventZDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_COption_MonitorEventZDecodeErrorZ_clone_ptr(long arg);
+       // struct LDKCResult_COption_MonitorEventZDecodeErrorZ CResult_COption_MonitorEventZDecodeErrorZ_clone(const struct LDKCResult_COption_MonitorEventZDecodeErrorZ *NONNULL_PTR orig);
+       public static native long CResult_COption_MonitorEventZDecodeErrorZ_clone(long orig);
        // struct LDKCResult_HTLCUpdateDecodeErrorZ CResult_HTLCUpdateDecodeErrorZ_ok(struct LDKHTLCUpdate o);
        public static native long CResult_HTLCUpdateDecodeErrorZ_ok(long o);
        // struct LDKCResult_HTLCUpdateDecodeErrorZ CResult_HTLCUpdateDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_HTLCUpdateDecodeErrorZ_err(long e);
+       // bool CResult_HTLCUpdateDecodeErrorZ_is_ok(const struct LDKCResult_HTLCUpdateDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_HTLCUpdateDecodeErrorZ_is_ok(long o);
        // void CResult_HTLCUpdateDecodeErrorZ_free(struct LDKCResult_HTLCUpdateDecodeErrorZ _res);
        public static native void CResult_HTLCUpdateDecodeErrorZ_free(long _res);
+       // uint64_t CResult_HTLCUpdateDecodeErrorZ_clone_ptr(LDKCResult_HTLCUpdateDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_HTLCUpdateDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_HTLCUpdateDecodeErrorZ CResult_HTLCUpdateDecodeErrorZ_clone(const struct LDKCResult_HTLCUpdateDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_HTLCUpdateDecodeErrorZ_clone(long orig);
        // struct LDKCResult_NoneMonitorUpdateErrorZ CResult_NoneMonitorUpdateErrorZ_ok(void);
        public static native long CResult_NoneMonitorUpdateErrorZ_ok();
        // struct LDKCResult_NoneMonitorUpdateErrorZ CResult_NoneMonitorUpdateErrorZ_err(struct LDKMonitorUpdateError e);
        public static native long CResult_NoneMonitorUpdateErrorZ_err(long e);
+       // bool CResult_NoneMonitorUpdateErrorZ_is_ok(const struct LDKCResult_NoneMonitorUpdateErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_NoneMonitorUpdateErrorZ_is_ok(long o);
        // void CResult_NoneMonitorUpdateErrorZ_free(struct LDKCResult_NoneMonitorUpdateErrorZ _res);
        public static native void CResult_NoneMonitorUpdateErrorZ_free(long _res);
+       // uint64_t CResult_NoneMonitorUpdateErrorZ_clone_ptr(LDKCResult_NoneMonitorUpdateErrorZ *NONNULL_PTR arg);
+       public static native long CResult_NoneMonitorUpdateErrorZ_clone_ptr(long arg);
        // struct LDKCResult_NoneMonitorUpdateErrorZ CResult_NoneMonitorUpdateErrorZ_clone(const struct LDKCResult_NoneMonitorUpdateErrorZ *NONNULL_PTR orig);
        public static native long CResult_NoneMonitorUpdateErrorZ_clone(long orig);
+       // uint64_t C2Tuple_OutPointScriptZ_clone_ptr(LDKC2Tuple_OutPointScriptZ *NONNULL_PTR arg);
+       public static native long C2Tuple_OutPointScriptZ_clone_ptr(long arg);
        // struct LDKC2Tuple_OutPointScriptZ C2Tuple_OutPointScriptZ_clone(const struct LDKC2Tuple_OutPointScriptZ *NONNULL_PTR orig);
        public static native long C2Tuple_OutPointScriptZ_clone(long orig);
        // struct LDKC2Tuple_OutPointScriptZ C2Tuple_OutPointScriptZ_new(struct LDKOutPoint a, struct LDKCVec_u8Z b);
        public static native long C2Tuple_OutPointScriptZ_new(long a, byte[] b);
        // void C2Tuple_OutPointScriptZ_free(struct LDKC2Tuple_OutPointScriptZ _res);
        public static native void C2Tuple_OutPointScriptZ_free(long _res);
+       // uint64_t C2Tuple_u32ScriptZ_clone_ptr(LDKC2Tuple_u32ScriptZ *NONNULL_PTR arg);
+       public static native long C2Tuple_u32ScriptZ_clone_ptr(long arg);
        // struct LDKC2Tuple_u32ScriptZ C2Tuple_u32ScriptZ_clone(const struct LDKC2Tuple_u32ScriptZ *NONNULL_PTR orig);
        public static native long C2Tuple_u32ScriptZ_clone(long orig);
        // struct LDKC2Tuple_u32ScriptZ C2Tuple_u32ScriptZ_new(uint32_t a, struct LDKCVec_u8Z b);
@@ -2118,6 +2367,8 @@ public class bindings {
        public static native void C2Tuple_u32ScriptZ_free(long _res);
        // void CVec_C2Tuple_u32ScriptZZ_free(struct LDKCVec_C2Tuple_u32ScriptZZ _res);
        public static native void CVec_C2Tuple_u32ScriptZZ_free(long[] _res);
+       // uint64_t C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_clone_ptr(LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ *NONNULL_PTR arg);
+       public static native long C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_clone_ptr(long arg);
        // struct LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_clone(const struct LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ *NONNULL_PTR orig);
        public static native long C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_clone(long orig);
        // struct LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_new(struct LDKThirtyTwoBytes a, struct LDKCVec_C2Tuple_u32ScriptZZ b);
@@ -2130,6 +2381,8 @@ public class bindings {
        public static native void CVec_EventZ_free(long[] _res);
        // void CVec_TransactionZ_free(struct LDKCVec_TransactionZ _res);
        public static native void CVec_TransactionZ_free(byte[][] _res);
+       // uint64_t C2Tuple_u32TxOutZ_clone_ptr(LDKC2Tuple_u32TxOutZ *NONNULL_PTR arg);
+       public static native long C2Tuple_u32TxOutZ_clone_ptr(long arg);
        // struct LDKC2Tuple_u32TxOutZ C2Tuple_u32TxOutZ_clone(const struct LDKC2Tuple_u32TxOutZ *NONNULL_PTR orig);
        public static native long C2Tuple_u32TxOutZ_clone(long orig);
        // struct LDKC2Tuple_u32TxOutZ C2Tuple_u32TxOutZ_new(uint32_t a, struct LDKTxOut b);
@@ -2138,6 +2391,8 @@ public class bindings {
        public static native void C2Tuple_u32TxOutZ_free(long _res);
        // void CVec_C2Tuple_u32TxOutZZ_free(struct LDKCVec_C2Tuple_u32TxOutZZ _res);
        public static native void CVec_C2Tuple_u32TxOutZZ_free(long[] _res);
+       // uint64_t C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_clone_ptr(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ *NONNULL_PTR arg);
+       public static native long C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_clone_ptr(long arg);
        // struct LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_clone(const struct LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ *NONNULL_PTR orig);
        public static native long C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_clone(long orig);
        // struct LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_new(struct LDKThirtyTwoBytes a, struct LDKCVec_C2Tuple_u32TxOutZZ b);
@@ -2152,18 +2407,28 @@ public class bindings {
        public static native long CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_ok(long o);
        // struct LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_err(long e);
+       // bool CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_is_ok(const struct LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_is_ok(long o);
        // void CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_free(struct LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ _res);
        public static native void CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_free(long _res);
+       // uint64_t CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_clone_ptr(LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_clone(const struct LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_clone(long orig);
        // struct LDKCResult_NoneLightningErrorZ CResult_NoneLightningErrorZ_ok(void);
        public static native long CResult_NoneLightningErrorZ_ok();
        // struct LDKCResult_NoneLightningErrorZ CResult_NoneLightningErrorZ_err(struct LDKLightningError e);
        public static native long CResult_NoneLightningErrorZ_err(long e);
+       // bool CResult_NoneLightningErrorZ_is_ok(const struct LDKCResult_NoneLightningErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_NoneLightningErrorZ_is_ok(long o);
        // void CResult_NoneLightningErrorZ_free(struct LDKCResult_NoneLightningErrorZ _res);
        public static native void CResult_NoneLightningErrorZ_free(long _res);
+       // uint64_t CResult_NoneLightningErrorZ_clone_ptr(LDKCResult_NoneLightningErrorZ *NONNULL_PTR arg);
+       public static native long CResult_NoneLightningErrorZ_clone_ptr(long arg);
        // struct LDKCResult_NoneLightningErrorZ CResult_NoneLightningErrorZ_clone(const struct LDKCResult_NoneLightningErrorZ *NONNULL_PTR orig);
        public static native long CResult_NoneLightningErrorZ_clone(long orig);
+       // uint64_t C2Tuple_PublicKeyTypeZ_clone_ptr(LDKC2Tuple_PublicKeyTypeZ *NONNULL_PTR arg);
+       public static native long C2Tuple_PublicKeyTypeZ_clone_ptr(long arg);
        // struct LDKC2Tuple_PublicKeyTypeZ C2Tuple_PublicKeyTypeZ_clone(const struct LDKC2Tuple_PublicKeyTypeZ *NONNULL_PTR orig);
        public static native long C2Tuple_PublicKeyTypeZ_clone(long orig);
        // struct LDKC2Tuple_PublicKeyTypeZ C2Tuple_PublicKeyTypeZ_new(struct LDKPublicKey a, struct LDKType b);
@@ -2176,10 +2441,16 @@ public class bindings {
        public static native long CResult_boolLightningErrorZ_ok(boolean o);
        // struct LDKCResult_boolLightningErrorZ CResult_boolLightningErrorZ_err(struct LDKLightningError e);
        public static native long CResult_boolLightningErrorZ_err(long e);
+       // bool CResult_boolLightningErrorZ_is_ok(const struct LDKCResult_boolLightningErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_boolLightningErrorZ_is_ok(long o);
        // void CResult_boolLightningErrorZ_free(struct LDKCResult_boolLightningErrorZ _res);
        public static native void CResult_boolLightningErrorZ_free(long _res);
+       // uint64_t CResult_boolLightningErrorZ_clone_ptr(LDKCResult_boolLightningErrorZ *NONNULL_PTR arg);
+       public static native long CResult_boolLightningErrorZ_clone_ptr(long arg);
        // struct LDKCResult_boolLightningErrorZ CResult_boolLightningErrorZ_clone(const struct LDKCResult_boolLightningErrorZ *NONNULL_PTR orig);
        public static native long CResult_boolLightningErrorZ_clone(long orig);
+       // uint64_t C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_clone_ptr(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ *NONNULL_PTR arg);
+       public static native long C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_clone_ptr(long arg);
        // struct LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_clone(const struct LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ *NONNULL_PTR orig);
        public static native long C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_clone(long orig);
        // struct LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_new(struct LDKChannelAnnouncement a, struct LDKChannelUpdate b, struct LDKChannelUpdate c);
@@ -2196,34 +2467,62 @@ public class bindings {
        public static native long CResult_CVec_u8ZPeerHandleErrorZ_ok(byte[] o);
        // struct LDKCResult_CVec_u8ZPeerHandleErrorZ CResult_CVec_u8ZPeerHandleErrorZ_err(struct LDKPeerHandleError e);
        public static native long CResult_CVec_u8ZPeerHandleErrorZ_err(long e);
+       // bool CResult_CVec_u8ZPeerHandleErrorZ_is_ok(const struct LDKCResult_CVec_u8ZPeerHandleErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_CVec_u8ZPeerHandleErrorZ_is_ok(long o);
        // void CResult_CVec_u8ZPeerHandleErrorZ_free(struct LDKCResult_CVec_u8ZPeerHandleErrorZ _res);
        public static native void CResult_CVec_u8ZPeerHandleErrorZ_free(long _res);
+       // uint64_t CResult_CVec_u8ZPeerHandleErrorZ_clone_ptr(LDKCResult_CVec_u8ZPeerHandleErrorZ *NONNULL_PTR arg);
+       public static native long CResult_CVec_u8ZPeerHandleErrorZ_clone_ptr(long arg);
        // struct LDKCResult_CVec_u8ZPeerHandleErrorZ CResult_CVec_u8ZPeerHandleErrorZ_clone(const struct LDKCResult_CVec_u8ZPeerHandleErrorZ *NONNULL_PTR orig);
        public static native long CResult_CVec_u8ZPeerHandleErrorZ_clone(long orig);
        // struct LDKCResult_NonePeerHandleErrorZ CResult_NonePeerHandleErrorZ_ok(void);
        public static native long CResult_NonePeerHandleErrorZ_ok();
        // struct LDKCResult_NonePeerHandleErrorZ CResult_NonePeerHandleErrorZ_err(struct LDKPeerHandleError e);
        public static native long CResult_NonePeerHandleErrorZ_err(long e);
+       // bool CResult_NonePeerHandleErrorZ_is_ok(const struct LDKCResult_NonePeerHandleErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_NonePeerHandleErrorZ_is_ok(long o);
        // void CResult_NonePeerHandleErrorZ_free(struct LDKCResult_NonePeerHandleErrorZ _res);
        public static native void CResult_NonePeerHandleErrorZ_free(long _res);
+       // uint64_t CResult_NonePeerHandleErrorZ_clone_ptr(LDKCResult_NonePeerHandleErrorZ *NONNULL_PTR arg);
+       public static native long CResult_NonePeerHandleErrorZ_clone_ptr(long arg);
        // struct LDKCResult_NonePeerHandleErrorZ CResult_NonePeerHandleErrorZ_clone(const struct LDKCResult_NonePeerHandleErrorZ *NONNULL_PTR orig);
        public static native long CResult_NonePeerHandleErrorZ_clone(long orig);
        // struct LDKCResult_boolPeerHandleErrorZ CResult_boolPeerHandleErrorZ_ok(bool o);
        public static native long CResult_boolPeerHandleErrorZ_ok(boolean o);
        // struct LDKCResult_boolPeerHandleErrorZ CResult_boolPeerHandleErrorZ_err(struct LDKPeerHandleError e);
        public static native long CResult_boolPeerHandleErrorZ_err(long e);
+       // bool CResult_boolPeerHandleErrorZ_is_ok(const struct LDKCResult_boolPeerHandleErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_boolPeerHandleErrorZ_is_ok(long o);
        // void CResult_boolPeerHandleErrorZ_free(struct LDKCResult_boolPeerHandleErrorZ _res);
        public static native void CResult_boolPeerHandleErrorZ_free(long _res);
+       // uint64_t CResult_boolPeerHandleErrorZ_clone_ptr(LDKCResult_boolPeerHandleErrorZ *NONNULL_PTR arg);
+       public static native long CResult_boolPeerHandleErrorZ_clone_ptr(long arg);
        // struct LDKCResult_boolPeerHandleErrorZ CResult_boolPeerHandleErrorZ_clone(const struct LDKCResult_boolPeerHandleErrorZ *NONNULL_PTR orig);
        public static native long CResult_boolPeerHandleErrorZ_clone(long orig);
        // struct LDKCResult_NodeIdDecodeErrorZ CResult_NodeIdDecodeErrorZ_ok(struct LDKNodeId o);
        public static native long CResult_NodeIdDecodeErrorZ_ok(long o);
        // struct LDKCResult_NodeIdDecodeErrorZ CResult_NodeIdDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_NodeIdDecodeErrorZ_err(long e);
+       // bool CResult_NodeIdDecodeErrorZ_is_ok(const struct LDKCResult_NodeIdDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_NodeIdDecodeErrorZ_is_ok(long o);
        // void CResult_NodeIdDecodeErrorZ_free(struct LDKCResult_NodeIdDecodeErrorZ _res);
        public static native void CResult_NodeIdDecodeErrorZ_free(long _res);
+       // uint64_t CResult_NodeIdDecodeErrorZ_clone_ptr(LDKCResult_NodeIdDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_NodeIdDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_NodeIdDecodeErrorZ CResult_NodeIdDecodeErrorZ_clone(const struct LDKCResult_NodeIdDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_NodeIdDecodeErrorZ_clone(long orig);
+       // struct LDKCResult_COption_NetworkUpdateZDecodeErrorZ CResult_COption_NetworkUpdateZDecodeErrorZ_ok(struct LDKCOption_NetworkUpdateZ o);
+       public static native long CResult_COption_NetworkUpdateZDecodeErrorZ_ok(long o);
+       // struct LDKCResult_COption_NetworkUpdateZDecodeErrorZ CResult_COption_NetworkUpdateZDecodeErrorZ_err(struct LDKDecodeError e);
+       public static native long CResult_COption_NetworkUpdateZDecodeErrorZ_err(long e);
+       // bool CResult_COption_NetworkUpdateZDecodeErrorZ_is_ok(const struct LDKCResult_COption_NetworkUpdateZDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_COption_NetworkUpdateZDecodeErrorZ_is_ok(long o);
+       // void CResult_COption_NetworkUpdateZDecodeErrorZ_free(struct LDKCResult_COption_NetworkUpdateZDecodeErrorZ _res);
+       public static native void CResult_COption_NetworkUpdateZDecodeErrorZ_free(long _res);
+       // uint64_t CResult_COption_NetworkUpdateZDecodeErrorZ_clone_ptr(LDKCResult_COption_NetworkUpdateZDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_COption_NetworkUpdateZDecodeErrorZ_clone_ptr(long arg);
+       // struct LDKCResult_COption_NetworkUpdateZDecodeErrorZ CResult_COption_NetworkUpdateZDecodeErrorZ_clone(const struct LDKCResult_COption_NetworkUpdateZDecodeErrorZ *NONNULL_PTR orig);
+       public static native long CResult_COption_NetworkUpdateZDecodeErrorZ_clone(long orig);
        // struct LDKCOption_AccessZ COption_AccessZ_some(struct LDKAccess o);
        public static native long COption_AccessZ_some(long o);
        // struct LDKCOption_AccessZ COption_AccessZ_none(void);
@@ -2234,32 +2533,48 @@ public class bindings {
        public static native long CResult_DirectionalChannelInfoDecodeErrorZ_ok(long o);
        // struct LDKCResult_DirectionalChannelInfoDecodeErrorZ CResult_DirectionalChannelInfoDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_DirectionalChannelInfoDecodeErrorZ_err(long e);
+       // bool CResult_DirectionalChannelInfoDecodeErrorZ_is_ok(const struct LDKCResult_DirectionalChannelInfoDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_DirectionalChannelInfoDecodeErrorZ_is_ok(long o);
        // void CResult_DirectionalChannelInfoDecodeErrorZ_free(struct LDKCResult_DirectionalChannelInfoDecodeErrorZ _res);
        public static native void CResult_DirectionalChannelInfoDecodeErrorZ_free(long _res);
+       // uint64_t CResult_DirectionalChannelInfoDecodeErrorZ_clone_ptr(LDKCResult_DirectionalChannelInfoDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_DirectionalChannelInfoDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_DirectionalChannelInfoDecodeErrorZ CResult_DirectionalChannelInfoDecodeErrorZ_clone(const struct LDKCResult_DirectionalChannelInfoDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_DirectionalChannelInfoDecodeErrorZ_clone(long orig);
        // struct LDKCResult_ChannelInfoDecodeErrorZ CResult_ChannelInfoDecodeErrorZ_ok(struct LDKChannelInfo o);
        public static native long CResult_ChannelInfoDecodeErrorZ_ok(long o);
        // struct LDKCResult_ChannelInfoDecodeErrorZ CResult_ChannelInfoDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_ChannelInfoDecodeErrorZ_err(long e);
+       // bool CResult_ChannelInfoDecodeErrorZ_is_ok(const struct LDKCResult_ChannelInfoDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_ChannelInfoDecodeErrorZ_is_ok(long o);
        // void CResult_ChannelInfoDecodeErrorZ_free(struct LDKCResult_ChannelInfoDecodeErrorZ _res);
        public static native void CResult_ChannelInfoDecodeErrorZ_free(long _res);
+       // uint64_t CResult_ChannelInfoDecodeErrorZ_clone_ptr(LDKCResult_ChannelInfoDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_ChannelInfoDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_ChannelInfoDecodeErrorZ CResult_ChannelInfoDecodeErrorZ_clone(const struct LDKCResult_ChannelInfoDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_ChannelInfoDecodeErrorZ_clone(long orig);
        // struct LDKCResult_RoutingFeesDecodeErrorZ CResult_RoutingFeesDecodeErrorZ_ok(struct LDKRoutingFees o);
        public static native long CResult_RoutingFeesDecodeErrorZ_ok(long o);
        // struct LDKCResult_RoutingFeesDecodeErrorZ CResult_RoutingFeesDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_RoutingFeesDecodeErrorZ_err(long e);
+       // bool CResult_RoutingFeesDecodeErrorZ_is_ok(const struct LDKCResult_RoutingFeesDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_RoutingFeesDecodeErrorZ_is_ok(long o);
        // void CResult_RoutingFeesDecodeErrorZ_free(struct LDKCResult_RoutingFeesDecodeErrorZ _res);
        public static native void CResult_RoutingFeesDecodeErrorZ_free(long _res);
+       // uint64_t CResult_RoutingFeesDecodeErrorZ_clone_ptr(LDKCResult_RoutingFeesDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_RoutingFeesDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_RoutingFeesDecodeErrorZ CResult_RoutingFeesDecodeErrorZ_clone(const struct LDKCResult_RoutingFeesDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_RoutingFeesDecodeErrorZ_clone(long orig);
        // struct LDKCResult_NodeAnnouncementInfoDecodeErrorZ CResult_NodeAnnouncementInfoDecodeErrorZ_ok(struct LDKNodeAnnouncementInfo o);
        public static native long CResult_NodeAnnouncementInfoDecodeErrorZ_ok(long o);
        // struct LDKCResult_NodeAnnouncementInfoDecodeErrorZ CResult_NodeAnnouncementInfoDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_NodeAnnouncementInfoDecodeErrorZ_err(long e);
+       // bool CResult_NodeAnnouncementInfoDecodeErrorZ_is_ok(const struct LDKCResult_NodeAnnouncementInfoDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_NodeAnnouncementInfoDecodeErrorZ_is_ok(long o);
        // void CResult_NodeAnnouncementInfoDecodeErrorZ_free(struct LDKCResult_NodeAnnouncementInfoDecodeErrorZ _res);
        public static native void CResult_NodeAnnouncementInfoDecodeErrorZ_free(long _res);
+       // uint64_t CResult_NodeAnnouncementInfoDecodeErrorZ_clone_ptr(LDKCResult_NodeAnnouncementInfoDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_NodeAnnouncementInfoDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_NodeAnnouncementInfoDecodeErrorZ CResult_NodeAnnouncementInfoDecodeErrorZ_clone(const struct LDKCResult_NodeAnnouncementInfoDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_NodeAnnouncementInfoDecodeErrorZ_clone(long orig);
        // void CVec_u64Z_free(struct LDKCVec_u64Z _res);
@@ -2268,16 +2583,24 @@ public class bindings {
        public static native long CResult_NodeInfoDecodeErrorZ_ok(long o);
        // struct LDKCResult_NodeInfoDecodeErrorZ CResult_NodeInfoDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_NodeInfoDecodeErrorZ_err(long e);
+       // bool CResult_NodeInfoDecodeErrorZ_is_ok(const struct LDKCResult_NodeInfoDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_NodeInfoDecodeErrorZ_is_ok(long o);
        // void CResult_NodeInfoDecodeErrorZ_free(struct LDKCResult_NodeInfoDecodeErrorZ _res);
        public static native void CResult_NodeInfoDecodeErrorZ_free(long _res);
+       // uint64_t CResult_NodeInfoDecodeErrorZ_clone_ptr(LDKCResult_NodeInfoDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_NodeInfoDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_NodeInfoDecodeErrorZ CResult_NodeInfoDecodeErrorZ_clone(const struct LDKCResult_NodeInfoDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_NodeInfoDecodeErrorZ_clone(long orig);
        // struct LDKCResult_NetworkGraphDecodeErrorZ CResult_NetworkGraphDecodeErrorZ_ok(struct LDKNetworkGraph o);
        public static native long CResult_NetworkGraphDecodeErrorZ_ok(long o);
        // struct LDKCResult_NetworkGraphDecodeErrorZ CResult_NetworkGraphDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_NetworkGraphDecodeErrorZ_err(long e);
+       // bool CResult_NetworkGraphDecodeErrorZ_is_ok(const struct LDKCResult_NetworkGraphDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_NetworkGraphDecodeErrorZ_is_ok(long o);
        // void CResult_NetworkGraphDecodeErrorZ_free(struct LDKCResult_NetworkGraphDecodeErrorZ _res);
        public static native void CResult_NetworkGraphDecodeErrorZ_free(long _res);
+       // uint64_t CResult_NetworkGraphDecodeErrorZ_clone_ptr(LDKCResult_NetworkGraphDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_NetworkGraphDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_NetworkGraphDecodeErrorZ CResult_NetworkGraphDecodeErrorZ_clone(const struct LDKCResult_NetworkGraphDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_NetworkGraphDecodeErrorZ_clone(long orig);
        // struct LDKCOption_CVec_NetAddressZZ COption_CVec_NetAddressZZ_some(struct LDKCVec_NetAddressZ o);
@@ -2286,14 +2609,20 @@ public class bindings {
        public static native long COption_CVec_NetAddressZZ_none();
        // void COption_CVec_NetAddressZZ_free(struct LDKCOption_CVec_NetAddressZZ _res);
        public static native void COption_CVec_NetAddressZZ_free(long _res);
+       // uint64_t COption_CVec_NetAddressZZ_clone_ptr(LDKCOption_CVec_NetAddressZZ *NONNULL_PTR arg);
+       public static native long COption_CVec_NetAddressZZ_clone_ptr(long arg);
        // struct LDKCOption_CVec_NetAddressZZ COption_CVec_NetAddressZZ_clone(const struct LDKCOption_CVec_NetAddressZZ *NONNULL_PTR orig);
        public static native long COption_CVec_NetAddressZZ_clone(long orig);
        // struct LDKCResult_NetAddressDecodeErrorZ CResult_NetAddressDecodeErrorZ_ok(struct LDKNetAddress o);
        public static native long CResult_NetAddressDecodeErrorZ_ok(long o);
        // struct LDKCResult_NetAddressDecodeErrorZ CResult_NetAddressDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_NetAddressDecodeErrorZ_err(long e);
+       // bool CResult_NetAddressDecodeErrorZ_is_ok(const struct LDKCResult_NetAddressDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_NetAddressDecodeErrorZ_is_ok(long o);
        // void CResult_NetAddressDecodeErrorZ_free(struct LDKCResult_NetAddressDecodeErrorZ _res);
        public static native void CResult_NetAddressDecodeErrorZ_free(long _res);
+       // uint64_t CResult_NetAddressDecodeErrorZ_clone_ptr(LDKCResult_NetAddressDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_NetAddressDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_NetAddressDecodeErrorZ CResult_NetAddressDecodeErrorZ_clone(const struct LDKCResult_NetAddressDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_NetAddressDecodeErrorZ_clone(long orig);
        // void CVec_UpdateAddHTLCZ_free(struct LDKCVec_UpdateAddHTLCZ _res);
@@ -2308,264 +2637,396 @@ public class bindings {
        public static native long CResult_AcceptChannelDecodeErrorZ_ok(long o);
        // struct LDKCResult_AcceptChannelDecodeErrorZ CResult_AcceptChannelDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_AcceptChannelDecodeErrorZ_err(long e);
+       // bool CResult_AcceptChannelDecodeErrorZ_is_ok(const struct LDKCResult_AcceptChannelDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_AcceptChannelDecodeErrorZ_is_ok(long o);
        // void CResult_AcceptChannelDecodeErrorZ_free(struct LDKCResult_AcceptChannelDecodeErrorZ _res);
        public static native void CResult_AcceptChannelDecodeErrorZ_free(long _res);
+       // uint64_t CResult_AcceptChannelDecodeErrorZ_clone_ptr(LDKCResult_AcceptChannelDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_AcceptChannelDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_AcceptChannelDecodeErrorZ CResult_AcceptChannelDecodeErrorZ_clone(const struct LDKCResult_AcceptChannelDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_AcceptChannelDecodeErrorZ_clone(long orig);
        // struct LDKCResult_AnnouncementSignaturesDecodeErrorZ CResult_AnnouncementSignaturesDecodeErrorZ_ok(struct LDKAnnouncementSignatures o);
        public static native long CResult_AnnouncementSignaturesDecodeErrorZ_ok(long o);
        // struct LDKCResult_AnnouncementSignaturesDecodeErrorZ CResult_AnnouncementSignaturesDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_AnnouncementSignaturesDecodeErrorZ_err(long e);
+       // bool CResult_AnnouncementSignaturesDecodeErrorZ_is_ok(const struct LDKCResult_AnnouncementSignaturesDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_AnnouncementSignaturesDecodeErrorZ_is_ok(long o);
        // void CResult_AnnouncementSignaturesDecodeErrorZ_free(struct LDKCResult_AnnouncementSignaturesDecodeErrorZ _res);
        public static native void CResult_AnnouncementSignaturesDecodeErrorZ_free(long _res);
+       // uint64_t CResult_AnnouncementSignaturesDecodeErrorZ_clone_ptr(LDKCResult_AnnouncementSignaturesDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_AnnouncementSignaturesDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_AnnouncementSignaturesDecodeErrorZ CResult_AnnouncementSignaturesDecodeErrorZ_clone(const struct LDKCResult_AnnouncementSignaturesDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_AnnouncementSignaturesDecodeErrorZ_clone(long orig);
        // struct LDKCResult_ChannelReestablishDecodeErrorZ CResult_ChannelReestablishDecodeErrorZ_ok(struct LDKChannelReestablish o);
        public static native long CResult_ChannelReestablishDecodeErrorZ_ok(long o);
        // struct LDKCResult_ChannelReestablishDecodeErrorZ CResult_ChannelReestablishDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_ChannelReestablishDecodeErrorZ_err(long e);
+       // bool CResult_ChannelReestablishDecodeErrorZ_is_ok(const struct LDKCResult_ChannelReestablishDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_ChannelReestablishDecodeErrorZ_is_ok(long o);
        // void CResult_ChannelReestablishDecodeErrorZ_free(struct LDKCResult_ChannelReestablishDecodeErrorZ _res);
        public static native void CResult_ChannelReestablishDecodeErrorZ_free(long _res);
+       // uint64_t CResult_ChannelReestablishDecodeErrorZ_clone_ptr(LDKCResult_ChannelReestablishDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_ChannelReestablishDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_ChannelReestablishDecodeErrorZ CResult_ChannelReestablishDecodeErrorZ_clone(const struct LDKCResult_ChannelReestablishDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_ChannelReestablishDecodeErrorZ_clone(long orig);
        // struct LDKCResult_ClosingSignedDecodeErrorZ CResult_ClosingSignedDecodeErrorZ_ok(struct LDKClosingSigned o);
        public static native long CResult_ClosingSignedDecodeErrorZ_ok(long o);
        // struct LDKCResult_ClosingSignedDecodeErrorZ CResult_ClosingSignedDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_ClosingSignedDecodeErrorZ_err(long e);
+       // bool CResult_ClosingSignedDecodeErrorZ_is_ok(const struct LDKCResult_ClosingSignedDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_ClosingSignedDecodeErrorZ_is_ok(long o);
        // void CResult_ClosingSignedDecodeErrorZ_free(struct LDKCResult_ClosingSignedDecodeErrorZ _res);
        public static native void CResult_ClosingSignedDecodeErrorZ_free(long _res);
+       // uint64_t CResult_ClosingSignedDecodeErrorZ_clone_ptr(LDKCResult_ClosingSignedDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_ClosingSignedDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_ClosingSignedDecodeErrorZ CResult_ClosingSignedDecodeErrorZ_clone(const struct LDKCResult_ClosingSignedDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_ClosingSignedDecodeErrorZ_clone(long orig);
        // struct LDKCResult_ClosingSignedFeeRangeDecodeErrorZ CResult_ClosingSignedFeeRangeDecodeErrorZ_ok(struct LDKClosingSignedFeeRange o);
        public static native long CResult_ClosingSignedFeeRangeDecodeErrorZ_ok(long o);
        // struct LDKCResult_ClosingSignedFeeRangeDecodeErrorZ CResult_ClosingSignedFeeRangeDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_ClosingSignedFeeRangeDecodeErrorZ_err(long e);
+       // bool CResult_ClosingSignedFeeRangeDecodeErrorZ_is_ok(const struct LDKCResult_ClosingSignedFeeRangeDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_ClosingSignedFeeRangeDecodeErrorZ_is_ok(long o);
        // void CResult_ClosingSignedFeeRangeDecodeErrorZ_free(struct LDKCResult_ClosingSignedFeeRangeDecodeErrorZ _res);
        public static native void CResult_ClosingSignedFeeRangeDecodeErrorZ_free(long _res);
+       // uint64_t CResult_ClosingSignedFeeRangeDecodeErrorZ_clone_ptr(LDKCResult_ClosingSignedFeeRangeDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_ClosingSignedFeeRangeDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_ClosingSignedFeeRangeDecodeErrorZ CResult_ClosingSignedFeeRangeDecodeErrorZ_clone(const struct LDKCResult_ClosingSignedFeeRangeDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_ClosingSignedFeeRangeDecodeErrorZ_clone(long orig);
        // struct LDKCResult_CommitmentSignedDecodeErrorZ CResult_CommitmentSignedDecodeErrorZ_ok(struct LDKCommitmentSigned o);
        public static native long CResult_CommitmentSignedDecodeErrorZ_ok(long o);
        // struct LDKCResult_CommitmentSignedDecodeErrorZ CResult_CommitmentSignedDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_CommitmentSignedDecodeErrorZ_err(long e);
+       // bool CResult_CommitmentSignedDecodeErrorZ_is_ok(const struct LDKCResult_CommitmentSignedDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_CommitmentSignedDecodeErrorZ_is_ok(long o);
        // void CResult_CommitmentSignedDecodeErrorZ_free(struct LDKCResult_CommitmentSignedDecodeErrorZ _res);
        public static native void CResult_CommitmentSignedDecodeErrorZ_free(long _res);
+       // uint64_t CResult_CommitmentSignedDecodeErrorZ_clone_ptr(LDKCResult_CommitmentSignedDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_CommitmentSignedDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_CommitmentSignedDecodeErrorZ CResult_CommitmentSignedDecodeErrorZ_clone(const struct LDKCResult_CommitmentSignedDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_CommitmentSignedDecodeErrorZ_clone(long orig);
        // struct LDKCResult_FundingCreatedDecodeErrorZ CResult_FundingCreatedDecodeErrorZ_ok(struct LDKFundingCreated o);
        public static native long CResult_FundingCreatedDecodeErrorZ_ok(long o);
        // struct LDKCResult_FundingCreatedDecodeErrorZ CResult_FundingCreatedDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_FundingCreatedDecodeErrorZ_err(long e);
+       // bool CResult_FundingCreatedDecodeErrorZ_is_ok(const struct LDKCResult_FundingCreatedDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_FundingCreatedDecodeErrorZ_is_ok(long o);
        // void CResult_FundingCreatedDecodeErrorZ_free(struct LDKCResult_FundingCreatedDecodeErrorZ _res);
        public static native void CResult_FundingCreatedDecodeErrorZ_free(long _res);
+       // uint64_t CResult_FundingCreatedDecodeErrorZ_clone_ptr(LDKCResult_FundingCreatedDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_FundingCreatedDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_FundingCreatedDecodeErrorZ CResult_FundingCreatedDecodeErrorZ_clone(const struct LDKCResult_FundingCreatedDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_FundingCreatedDecodeErrorZ_clone(long orig);
        // struct LDKCResult_FundingSignedDecodeErrorZ CResult_FundingSignedDecodeErrorZ_ok(struct LDKFundingSigned o);
        public static native long CResult_FundingSignedDecodeErrorZ_ok(long o);
        // struct LDKCResult_FundingSignedDecodeErrorZ CResult_FundingSignedDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_FundingSignedDecodeErrorZ_err(long e);
+       // bool CResult_FundingSignedDecodeErrorZ_is_ok(const struct LDKCResult_FundingSignedDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_FundingSignedDecodeErrorZ_is_ok(long o);
        // void CResult_FundingSignedDecodeErrorZ_free(struct LDKCResult_FundingSignedDecodeErrorZ _res);
        public static native void CResult_FundingSignedDecodeErrorZ_free(long _res);
+       // uint64_t CResult_FundingSignedDecodeErrorZ_clone_ptr(LDKCResult_FundingSignedDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_FundingSignedDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_FundingSignedDecodeErrorZ CResult_FundingSignedDecodeErrorZ_clone(const struct LDKCResult_FundingSignedDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_FundingSignedDecodeErrorZ_clone(long orig);
        // struct LDKCResult_FundingLockedDecodeErrorZ CResult_FundingLockedDecodeErrorZ_ok(struct LDKFundingLocked o);
        public static native long CResult_FundingLockedDecodeErrorZ_ok(long o);
        // struct LDKCResult_FundingLockedDecodeErrorZ CResult_FundingLockedDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_FundingLockedDecodeErrorZ_err(long e);
+       // bool CResult_FundingLockedDecodeErrorZ_is_ok(const struct LDKCResult_FundingLockedDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_FundingLockedDecodeErrorZ_is_ok(long o);
        // void CResult_FundingLockedDecodeErrorZ_free(struct LDKCResult_FundingLockedDecodeErrorZ _res);
        public static native void CResult_FundingLockedDecodeErrorZ_free(long _res);
+       // uint64_t CResult_FundingLockedDecodeErrorZ_clone_ptr(LDKCResult_FundingLockedDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_FundingLockedDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_FundingLockedDecodeErrorZ CResult_FundingLockedDecodeErrorZ_clone(const struct LDKCResult_FundingLockedDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_FundingLockedDecodeErrorZ_clone(long orig);
        // struct LDKCResult_InitDecodeErrorZ CResult_InitDecodeErrorZ_ok(struct LDKInit o);
        public static native long CResult_InitDecodeErrorZ_ok(long o);
        // struct LDKCResult_InitDecodeErrorZ CResult_InitDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_InitDecodeErrorZ_err(long e);
+       // bool CResult_InitDecodeErrorZ_is_ok(const struct LDKCResult_InitDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_InitDecodeErrorZ_is_ok(long o);
        // void CResult_InitDecodeErrorZ_free(struct LDKCResult_InitDecodeErrorZ _res);
        public static native void CResult_InitDecodeErrorZ_free(long _res);
+       // uint64_t CResult_InitDecodeErrorZ_clone_ptr(LDKCResult_InitDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_InitDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_InitDecodeErrorZ CResult_InitDecodeErrorZ_clone(const struct LDKCResult_InitDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_InitDecodeErrorZ_clone(long orig);
        // struct LDKCResult_OpenChannelDecodeErrorZ CResult_OpenChannelDecodeErrorZ_ok(struct LDKOpenChannel o);
        public static native long CResult_OpenChannelDecodeErrorZ_ok(long o);
        // struct LDKCResult_OpenChannelDecodeErrorZ CResult_OpenChannelDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_OpenChannelDecodeErrorZ_err(long e);
+       // bool CResult_OpenChannelDecodeErrorZ_is_ok(const struct LDKCResult_OpenChannelDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_OpenChannelDecodeErrorZ_is_ok(long o);
        // void CResult_OpenChannelDecodeErrorZ_free(struct LDKCResult_OpenChannelDecodeErrorZ _res);
        public static native void CResult_OpenChannelDecodeErrorZ_free(long _res);
+       // uint64_t CResult_OpenChannelDecodeErrorZ_clone_ptr(LDKCResult_OpenChannelDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_OpenChannelDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_OpenChannelDecodeErrorZ CResult_OpenChannelDecodeErrorZ_clone(const struct LDKCResult_OpenChannelDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_OpenChannelDecodeErrorZ_clone(long orig);
        // struct LDKCResult_RevokeAndACKDecodeErrorZ CResult_RevokeAndACKDecodeErrorZ_ok(struct LDKRevokeAndACK o);
        public static native long CResult_RevokeAndACKDecodeErrorZ_ok(long o);
        // struct LDKCResult_RevokeAndACKDecodeErrorZ CResult_RevokeAndACKDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_RevokeAndACKDecodeErrorZ_err(long e);
+       // bool CResult_RevokeAndACKDecodeErrorZ_is_ok(const struct LDKCResult_RevokeAndACKDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_RevokeAndACKDecodeErrorZ_is_ok(long o);
        // void CResult_RevokeAndACKDecodeErrorZ_free(struct LDKCResult_RevokeAndACKDecodeErrorZ _res);
        public static native void CResult_RevokeAndACKDecodeErrorZ_free(long _res);
+       // uint64_t CResult_RevokeAndACKDecodeErrorZ_clone_ptr(LDKCResult_RevokeAndACKDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_RevokeAndACKDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_RevokeAndACKDecodeErrorZ CResult_RevokeAndACKDecodeErrorZ_clone(const struct LDKCResult_RevokeAndACKDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_RevokeAndACKDecodeErrorZ_clone(long orig);
        // struct LDKCResult_ShutdownDecodeErrorZ CResult_ShutdownDecodeErrorZ_ok(struct LDKShutdown o);
        public static native long CResult_ShutdownDecodeErrorZ_ok(long o);
        // struct LDKCResult_ShutdownDecodeErrorZ CResult_ShutdownDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_ShutdownDecodeErrorZ_err(long e);
+       // bool CResult_ShutdownDecodeErrorZ_is_ok(const struct LDKCResult_ShutdownDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_ShutdownDecodeErrorZ_is_ok(long o);
        // void CResult_ShutdownDecodeErrorZ_free(struct LDKCResult_ShutdownDecodeErrorZ _res);
        public static native void CResult_ShutdownDecodeErrorZ_free(long _res);
+       // uint64_t CResult_ShutdownDecodeErrorZ_clone_ptr(LDKCResult_ShutdownDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_ShutdownDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_ShutdownDecodeErrorZ CResult_ShutdownDecodeErrorZ_clone(const struct LDKCResult_ShutdownDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_ShutdownDecodeErrorZ_clone(long orig);
        // struct LDKCResult_UpdateFailHTLCDecodeErrorZ CResult_UpdateFailHTLCDecodeErrorZ_ok(struct LDKUpdateFailHTLC o);
        public static native long CResult_UpdateFailHTLCDecodeErrorZ_ok(long o);
        // struct LDKCResult_UpdateFailHTLCDecodeErrorZ CResult_UpdateFailHTLCDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_UpdateFailHTLCDecodeErrorZ_err(long e);
+       // bool CResult_UpdateFailHTLCDecodeErrorZ_is_ok(const struct LDKCResult_UpdateFailHTLCDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_UpdateFailHTLCDecodeErrorZ_is_ok(long o);
        // void CResult_UpdateFailHTLCDecodeErrorZ_free(struct LDKCResult_UpdateFailHTLCDecodeErrorZ _res);
        public static native void CResult_UpdateFailHTLCDecodeErrorZ_free(long _res);
+       // uint64_t CResult_UpdateFailHTLCDecodeErrorZ_clone_ptr(LDKCResult_UpdateFailHTLCDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_UpdateFailHTLCDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_UpdateFailHTLCDecodeErrorZ CResult_UpdateFailHTLCDecodeErrorZ_clone(const struct LDKCResult_UpdateFailHTLCDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_UpdateFailHTLCDecodeErrorZ_clone(long orig);
        // struct LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ CResult_UpdateFailMalformedHTLCDecodeErrorZ_ok(struct LDKUpdateFailMalformedHTLC o);
        public static native long CResult_UpdateFailMalformedHTLCDecodeErrorZ_ok(long o);
        // struct LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ CResult_UpdateFailMalformedHTLCDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_UpdateFailMalformedHTLCDecodeErrorZ_err(long e);
+       // bool CResult_UpdateFailMalformedHTLCDecodeErrorZ_is_ok(const struct LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_UpdateFailMalformedHTLCDecodeErrorZ_is_ok(long o);
        // void CResult_UpdateFailMalformedHTLCDecodeErrorZ_free(struct LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ _res);
        public static native void CResult_UpdateFailMalformedHTLCDecodeErrorZ_free(long _res);
+       // uint64_t CResult_UpdateFailMalformedHTLCDecodeErrorZ_clone_ptr(LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_UpdateFailMalformedHTLCDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ CResult_UpdateFailMalformedHTLCDecodeErrorZ_clone(const struct LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_UpdateFailMalformedHTLCDecodeErrorZ_clone(long orig);
        // struct LDKCResult_UpdateFeeDecodeErrorZ CResult_UpdateFeeDecodeErrorZ_ok(struct LDKUpdateFee o);
        public static native long CResult_UpdateFeeDecodeErrorZ_ok(long o);
        // struct LDKCResult_UpdateFeeDecodeErrorZ CResult_UpdateFeeDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_UpdateFeeDecodeErrorZ_err(long e);
+       // bool CResult_UpdateFeeDecodeErrorZ_is_ok(const struct LDKCResult_UpdateFeeDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_UpdateFeeDecodeErrorZ_is_ok(long o);
        // void CResult_UpdateFeeDecodeErrorZ_free(struct LDKCResult_UpdateFeeDecodeErrorZ _res);
        public static native void CResult_UpdateFeeDecodeErrorZ_free(long _res);
+       // uint64_t CResult_UpdateFeeDecodeErrorZ_clone_ptr(LDKCResult_UpdateFeeDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_UpdateFeeDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_UpdateFeeDecodeErrorZ CResult_UpdateFeeDecodeErrorZ_clone(const struct LDKCResult_UpdateFeeDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_UpdateFeeDecodeErrorZ_clone(long orig);
        // struct LDKCResult_UpdateFulfillHTLCDecodeErrorZ CResult_UpdateFulfillHTLCDecodeErrorZ_ok(struct LDKUpdateFulfillHTLC o);
        public static native long CResult_UpdateFulfillHTLCDecodeErrorZ_ok(long o);
        // struct LDKCResult_UpdateFulfillHTLCDecodeErrorZ CResult_UpdateFulfillHTLCDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_UpdateFulfillHTLCDecodeErrorZ_err(long e);
+       // bool CResult_UpdateFulfillHTLCDecodeErrorZ_is_ok(const struct LDKCResult_UpdateFulfillHTLCDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_UpdateFulfillHTLCDecodeErrorZ_is_ok(long o);
        // void CResult_UpdateFulfillHTLCDecodeErrorZ_free(struct LDKCResult_UpdateFulfillHTLCDecodeErrorZ _res);
        public static native void CResult_UpdateFulfillHTLCDecodeErrorZ_free(long _res);
+       // uint64_t CResult_UpdateFulfillHTLCDecodeErrorZ_clone_ptr(LDKCResult_UpdateFulfillHTLCDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_UpdateFulfillHTLCDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_UpdateFulfillHTLCDecodeErrorZ CResult_UpdateFulfillHTLCDecodeErrorZ_clone(const struct LDKCResult_UpdateFulfillHTLCDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_UpdateFulfillHTLCDecodeErrorZ_clone(long orig);
        // struct LDKCResult_UpdateAddHTLCDecodeErrorZ CResult_UpdateAddHTLCDecodeErrorZ_ok(struct LDKUpdateAddHTLC o);
        public static native long CResult_UpdateAddHTLCDecodeErrorZ_ok(long o);
        // struct LDKCResult_UpdateAddHTLCDecodeErrorZ CResult_UpdateAddHTLCDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_UpdateAddHTLCDecodeErrorZ_err(long e);
+       // bool CResult_UpdateAddHTLCDecodeErrorZ_is_ok(const struct LDKCResult_UpdateAddHTLCDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_UpdateAddHTLCDecodeErrorZ_is_ok(long o);
        // void CResult_UpdateAddHTLCDecodeErrorZ_free(struct LDKCResult_UpdateAddHTLCDecodeErrorZ _res);
        public static native void CResult_UpdateAddHTLCDecodeErrorZ_free(long _res);
+       // uint64_t CResult_UpdateAddHTLCDecodeErrorZ_clone_ptr(LDKCResult_UpdateAddHTLCDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_UpdateAddHTLCDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_UpdateAddHTLCDecodeErrorZ CResult_UpdateAddHTLCDecodeErrorZ_clone(const struct LDKCResult_UpdateAddHTLCDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_UpdateAddHTLCDecodeErrorZ_clone(long orig);
        // struct LDKCResult_PingDecodeErrorZ CResult_PingDecodeErrorZ_ok(struct LDKPing o);
        public static native long CResult_PingDecodeErrorZ_ok(long o);
        // struct LDKCResult_PingDecodeErrorZ CResult_PingDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_PingDecodeErrorZ_err(long e);
+       // bool CResult_PingDecodeErrorZ_is_ok(const struct LDKCResult_PingDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_PingDecodeErrorZ_is_ok(long o);
        // void CResult_PingDecodeErrorZ_free(struct LDKCResult_PingDecodeErrorZ _res);
        public static native void CResult_PingDecodeErrorZ_free(long _res);
+       // uint64_t CResult_PingDecodeErrorZ_clone_ptr(LDKCResult_PingDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_PingDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_PingDecodeErrorZ CResult_PingDecodeErrorZ_clone(const struct LDKCResult_PingDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_PingDecodeErrorZ_clone(long orig);
        // struct LDKCResult_PongDecodeErrorZ CResult_PongDecodeErrorZ_ok(struct LDKPong o);
        public static native long CResult_PongDecodeErrorZ_ok(long o);
        // struct LDKCResult_PongDecodeErrorZ CResult_PongDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_PongDecodeErrorZ_err(long e);
+       // bool CResult_PongDecodeErrorZ_is_ok(const struct LDKCResult_PongDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_PongDecodeErrorZ_is_ok(long o);
        // void CResult_PongDecodeErrorZ_free(struct LDKCResult_PongDecodeErrorZ _res);
        public static native void CResult_PongDecodeErrorZ_free(long _res);
+       // uint64_t CResult_PongDecodeErrorZ_clone_ptr(LDKCResult_PongDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_PongDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_PongDecodeErrorZ CResult_PongDecodeErrorZ_clone(const struct LDKCResult_PongDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_PongDecodeErrorZ_clone(long orig);
        // struct LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ CResult_UnsignedChannelAnnouncementDecodeErrorZ_ok(struct LDKUnsignedChannelAnnouncement o);
        public static native long CResult_UnsignedChannelAnnouncementDecodeErrorZ_ok(long o);
        // struct LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ CResult_UnsignedChannelAnnouncementDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_UnsignedChannelAnnouncementDecodeErrorZ_err(long e);
+       // bool CResult_UnsignedChannelAnnouncementDecodeErrorZ_is_ok(const struct LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_UnsignedChannelAnnouncementDecodeErrorZ_is_ok(long o);
        // void CResult_UnsignedChannelAnnouncementDecodeErrorZ_free(struct LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ _res);
        public static native void CResult_UnsignedChannelAnnouncementDecodeErrorZ_free(long _res);
+       // uint64_t CResult_UnsignedChannelAnnouncementDecodeErrorZ_clone_ptr(LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_UnsignedChannelAnnouncementDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ CResult_UnsignedChannelAnnouncementDecodeErrorZ_clone(const struct LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_UnsignedChannelAnnouncementDecodeErrorZ_clone(long orig);
        // struct LDKCResult_ChannelAnnouncementDecodeErrorZ CResult_ChannelAnnouncementDecodeErrorZ_ok(struct LDKChannelAnnouncement o);
        public static native long CResult_ChannelAnnouncementDecodeErrorZ_ok(long o);
        // struct LDKCResult_ChannelAnnouncementDecodeErrorZ CResult_ChannelAnnouncementDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_ChannelAnnouncementDecodeErrorZ_err(long e);
+       // bool CResult_ChannelAnnouncementDecodeErrorZ_is_ok(const struct LDKCResult_ChannelAnnouncementDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_ChannelAnnouncementDecodeErrorZ_is_ok(long o);
        // void CResult_ChannelAnnouncementDecodeErrorZ_free(struct LDKCResult_ChannelAnnouncementDecodeErrorZ _res);
        public static native void CResult_ChannelAnnouncementDecodeErrorZ_free(long _res);
+       // uint64_t CResult_ChannelAnnouncementDecodeErrorZ_clone_ptr(LDKCResult_ChannelAnnouncementDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_ChannelAnnouncementDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_ChannelAnnouncementDecodeErrorZ CResult_ChannelAnnouncementDecodeErrorZ_clone(const struct LDKCResult_ChannelAnnouncementDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_ChannelAnnouncementDecodeErrorZ_clone(long orig);
        // struct LDKCResult_UnsignedChannelUpdateDecodeErrorZ CResult_UnsignedChannelUpdateDecodeErrorZ_ok(struct LDKUnsignedChannelUpdate o);
        public static native long CResult_UnsignedChannelUpdateDecodeErrorZ_ok(long o);
        // struct LDKCResult_UnsignedChannelUpdateDecodeErrorZ CResult_UnsignedChannelUpdateDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_UnsignedChannelUpdateDecodeErrorZ_err(long e);
+       // bool CResult_UnsignedChannelUpdateDecodeErrorZ_is_ok(const struct LDKCResult_UnsignedChannelUpdateDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_UnsignedChannelUpdateDecodeErrorZ_is_ok(long o);
        // void CResult_UnsignedChannelUpdateDecodeErrorZ_free(struct LDKCResult_UnsignedChannelUpdateDecodeErrorZ _res);
        public static native void CResult_UnsignedChannelUpdateDecodeErrorZ_free(long _res);
+       // uint64_t CResult_UnsignedChannelUpdateDecodeErrorZ_clone_ptr(LDKCResult_UnsignedChannelUpdateDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_UnsignedChannelUpdateDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_UnsignedChannelUpdateDecodeErrorZ CResult_UnsignedChannelUpdateDecodeErrorZ_clone(const struct LDKCResult_UnsignedChannelUpdateDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_UnsignedChannelUpdateDecodeErrorZ_clone(long orig);
        // struct LDKCResult_ChannelUpdateDecodeErrorZ CResult_ChannelUpdateDecodeErrorZ_ok(struct LDKChannelUpdate o);
        public static native long CResult_ChannelUpdateDecodeErrorZ_ok(long o);
        // struct LDKCResult_ChannelUpdateDecodeErrorZ CResult_ChannelUpdateDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_ChannelUpdateDecodeErrorZ_err(long e);
+       // bool CResult_ChannelUpdateDecodeErrorZ_is_ok(const struct LDKCResult_ChannelUpdateDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_ChannelUpdateDecodeErrorZ_is_ok(long o);
        // void CResult_ChannelUpdateDecodeErrorZ_free(struct LDKCResult_ChannelUpdateDecodeErrorZ _res);
        public static native void CResult_ChannelUpdateDecodeErrorZ_free(long _res);
+       // uint64_t CResult_ChannelUpdateDecodeErrorZ_clone_ptr(LDKCResult_ChannelUpdateDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_ChannelUpdateDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_ChannelUpdateDecodeErrorZ CResult_ChannelUpdateDecodeErrorZ_clone(const struct LDKCResult_ChannelUpdateDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_ChannelUpdateDecodeErrorZ_clone(long orig);
        // struct LDKCResult_ErrorMessageDecodeErrorZ CResult_ErrorMessageDecodeErrorZ_ok(struct LDKErrorMessage o);
        public static native long CResult_ErrorMessageDecodeErrorZ_ok(long o);
        // struct LDKCResult_ErrorMessageDecodeErrorZ CResult_ErrorMessageDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_ErrorMessageDecodeErrorZ_err(long e);
+       // bool CResult_ErrorMessageDecodeErrorZ_is_ok(const struct LDKCResult_ErrorMessageDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_ErrorMessageDecodeErrorZ_is_ok(long o);
        // void CResult_ErrorMessageDecodeErrorZ_free(struct LDKCResult_ErrorMessageDecodeErrorZ _res);
        public static native void CResult_ErrorMessageDecodeErrorZ_free(long _res);
+       // uint64_t CResult_ErrorMessageDecodeErrorZ_clone_ptr(LDKCResult_ErrorMessageDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_ErrorMessageDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_ErrorMessageDecodeErrorZ CResult_ErrorMessageDecodeErrorZ_clone(const struct LDKCResult_ErrorMessageDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_ErrorMessageDecodeErrorZ_clone(long orig);
        // struct LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ CResult_UnsignedNodeAnnouncementDecodeErrorZ_ok(struct LDKUnsignedNodeAnnouncement o);
        public static native long CResult_UnsignedNodeAnnouncementDecodeErrorZ_ok(long o);
        // struct LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ CResult_UnsignedNodeAnnouncementDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_UnsignedNodeAnnouncementDecodeErrorZ_err(long e);
+       // bool CResult_UnsignedNodeAnnouncementDecodeErrorZ_is_ok(const struct LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_UnsignedNodeAnnouncementDecodeErrorZ_is_ok(long o);
        // void CResult_UnsignedNodeAnnouncementDecodeErrorZ_free(struct LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ _res);
        public static native void CResult_UnsignedNodeAnnouncementDecodeErrorZ_free(long _res);
+       // uint64_t CResult_UnsignedNodeAnnouncementDecodeErrorZ_clone_ptr(LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_UnsignedNodeAnnouncementDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ CResult_UnsignedNodeAnnouncementDecodeErrorZ_clone(const struct LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_UnsignedNodeAnnouncementDecodeErrorZ_clone(long orig);
        // struct LDKCResult_NodeAnnouncementDecodeErrorZ CResult_NodeAnnouncementDecodeErrorZ_ok(struct LDKNodeAnnouncement o);
        public static native long CResult_NodeAnnouncementDecodeErrorZ_ok(long o);
        // struct LDKCResult_NodeAnnouncementDecodeErrorZ CResult_NodeAnnouncementDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_NodeAnnouncementDecodeErrorZ_err(long e);
+       // bool CResult_NodeAnnouncementDecodeErrorZ_is_ok(const struct LDKCResult_NodeAnnouncementDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_NodeAnnouncementDecodeErrorZ_is_ok(long o);
        // void CResult_NodeAnnouncementDecodeErrorZ_free(struct LDKCResult_NodeAnnouncementDecodeErrorZ _res);
        public static native void CResult_NodeAnnouncementDecodeErrorZ_free(long _res);
+       // uint64_t CResult_NodeAnnouncementDecodeErrorZ_clone_ptr(LDKCResult_NodeAnnouncementDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_NodeAnnouncementDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_NodeAnnouncementDecodeErrorZ CResult_NodeAnnouncementDecodeErrorZ_clone(const struct LDKCResult_NodeAnnouncementDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_NodeAnnouncementDecodeErrorZ_clone(long orig);
        // struct LDKCResult_QueryShortChannelIdsDecodeErrorZ CResult_QueryShortChannelIdsDecodeErrorZ_ok(struct LDKQueryShortChannelIds o);
        public static native long CResult_QueryShortChannelIdsDecodeErrorZ_ok(long o);
        // struct LDKCResult_QueryShortChannelIdsDecodeErrorZ CResult_QueryShortChannelIdsDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_QueryShortChannelIdsDecodeErrorZ_err(long e);
+       // bool CResult_QueryShortChannelIdsDecodeErrorZ_is_ok(const struct LDKCResult_QueryShortChannelIdsDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_QueryShortChannelIdsDecodeErrorZ_is_ok(long o);
        // void CResult_QueryShortChannelIdsDecodeErrorZ_free(struct LDKCResult_QueryShortChannelIdsDecodeErrorZ _res);
        public static native void CResult_QueryShortChannelIdsDecodeErrorZ_free(long _res);
+       // uint64_t CResult_QueryShortChannelIdsDecodeErrorZ_clone_ptr(LDKCResult_QueryShortChannelIdsDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_QueryShortChannelIdsDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_QueryShortChannelIdsDecodeErrorZ CResult_QueryShortChannelIdsDecodeErrorZ_clone(const struct LDKCResult_QueryShortChannelIdsDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_QueryShortChannelIdsDecodeErrorZ_clone(long orig);
        // struct LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ CResult_ReplyShortChannelIdsEndDecodeErrorZ_ok(struct LDKReplyShortChannelIdsEnd o);
        public static native long CResult_ReplyShortChannelIdsEndDecodeErrorZ_ok(long o);
        // struct LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ CResult_ReplyShortChannelIdsEndDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_ReplyShortChannelIdsEndDecodeErrorZ_err(long e);
+       // bool CResult_ReplyShortChannelIdsEndDecodeErrorZ_is_ok(const struct LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_ReplyShortChannelIdsEndDecodeErrorZ_is_ok(long o);
        // void CResult_ReplyShortChannelIdsEndDecodeErrorZ_free(struct LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ _res);
        public static native void CResult_ReplyShortChannelIdsEndDecodeErrorZ_free(long _res);
+       // uint64_t CResult_ReplyShortChannelIdsEndDecodeErrorZ_clone_ptr(LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_ReplyShortChannelIdsEndDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ CResult_ReplyShortChannelIdsEndDecodeErrorZ_clone(const struct LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_ReplyShortChannelIdsEndDecodeErrorZ_clone(long orig);
        // struct LDKCResult_QueryChannelRangeDecodeErrorZ CResult_QueryChannelRangeDecodeErrorZ_ok(struct LDKQueryChannelRange o);
        public static native long CResult_QueryChannelRangeDecodeErrorZ_ok(long o);
        // struct LDKCResult_QueryChannelRangeDecodeErrorZ CResult_QueryChannelRangeDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_QueryChannelRangeDecodeErrorZ_err(long e);
+       // bool CResult_QueryChannelRangeDecodeErrorZ_is_ok(const struct LDKCResult_QueryChannelRangeDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_QueryChannelRangeDecodeErrorZ_is_ok(long o);
        // void CResult_QueryChannelRangeDecodeErrorZ_free(struct LDKCResult_QueryChannelRangeDecodeErrorZ _res);
        public static native void CResult_QueryChannelRangeDecodeErrorZ_free(long _res);
+       // uint64_t CResult_QueryChannelRangeDecodeErrorZ_clone_ptr(LDKCResult_QueryChannelRangeDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_QueryChannelRangeDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_QueryChannelRangeDecodeErrorZ CResult_QueryChannelRangeDecodeErrorZ_clone(const struct LDKCResult_QueryChannelRangeDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_QueryChannelRangeDecodeErrorZ_clone(long orig);
        // struct LDKCResult_ReplyChannelRangeDecodeErrorZ CResult_ReplyChannelRangeDecodeErrorZ_ok(struct LDKReplyChannelRange o);
        public static native long CResult_ReplyChannelRangeDecodeErrorZ_ok(long o);
        // struct LDKCResult_ReplyChannelRangeDecodeErrorZ CResult_ReplyChannelRangeDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_ReplyChannelRangeDecodeErrorZ_err(long e);
+       // bool CResult_ReplyChannelRangeDecodeErrorZ_is_ok(const struct LDKCResult_ReplyChannelRangeDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_ReplyChannelRangeDecodeErrorZ_is_ok(long o);
        // void CResult_ReplyChannelRangeDecodeErrorZ_free(struct LDKCResult_ReplyChannelRangeDecodeErrorZ _res);
        public static native void CResult_ReplyChannelRangeDecodeErrorZ_free(long _res);
+       // uint64_t CResult_ReplyChannelRangeDecodeErrorZ_clone_ptr(LDKCResult_ReplyChannelRangeDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_ReplyChannelRangeDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_ReplyChannelRangeDecodeErrorZ CResult_ReplyChannelRangeDecodeErrorZ_clone(const struct LDKCResult_ReplyChannelRangeDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_ReplyChannelRangeDecodeErrorZ_clone(long orig);
        // struct LDKCResult_GossipTimestampFilterDecodeErrorZ CResult_GossipTimestampFilterDecodeErrorZ_ok(struct LDKGossipTimestampFilter o);
        public static native long CResult_GossipTimestampFilterDecodeErrorZ_ok(long o);
        // struct LDKCResult_GossipTimestampFilterDecodeErrorZ CResult_GossipTimestampFilterDecodeErrorZ_err(struct LDKDecodeError e);
        public static native long CResult_GossipTimestampFilterDecodeErrorZ_err(long e);
+       // bool CResult_GossipTimestampFilterDecodeErrorZ_is_ok(const struct LDKCResult_GossipTimestampFilterDecodeErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_GossipTimestampFilterDecodeErrorZ_is_ok(long o);
        // void CResult_GossipTimestampFilterDecodeErrorZ_free(struct LDKCResult_GossipTimestampFilterDecodeErrorZ _res);
        public static native void CResult_GossipTimestampFilterDecodeErrorZ_free(long _res);
+       // uint64_t CResult_GossipTimestampFilterDecodeErrorZ_clone_ptr(LDKCResult_GossipTimestampFilterDecodeErrorZ *NONNULL_PTR arg);
+       public static native long CResult_GossipTimestampFilterDecodeErrorZ_clone_ptr(long arg);
        // struct LDKCResult_GossipTimestampFilterDecodeErrorZ CResult_GossipTimestampFilterDecodeErrorZ_clone(const struct LDKCResult_GossipTimestampFilterDecodeErrorZ *NONNULL_PTR orig);
        public static native long CResult_GossipTimestampFilterDecodeErrorZ_clone(long orig);
        // struct LDKCResult_InvoiceSignOrCreationErrorZ CResult_InvoiceSignOrCreationErrorZ_ok(struct LDKInvoice o);
        public static native long CResult_InvoiceSignOrCreationErrorZ_ok(long o);
        // struct LDKCResult_InvoiceSignOrCreationErrorZ CResult_InvoiceSignOrCreationErrorZ_err(struct LDKSignOrCreationError e);
        public static native long CResult_InvoiceSignOrCreationErrorZ_err(long e);
+       // bool CResult_InvoiceSignOrCreationErrorZ_is_ok(const struct LDKCResult_InvoiceSignOrCreationErrorZ *NONNULL_PTR o);
+       public static native boolean CResult_InvoiceSignOrCreationErrorZ_is_ok(long o);
        // void CResult_InvoiceSignOrCreationErrorZ_free(struct LDKCResult_InvoiceSignOrCreationErrorZ _res);
        public static native void CResult_InvoiceSignOrCreationErrorZ_free(long _res);
+       // uint64_t CResult_InvoiceSignOrCreationErrorZ_clone_ptr(LDKCResult_InvoiceSignOrCreationErrorZ *NONNULL_PTR arg);
+       public static native long CResult_InvoiceSignOrCreationErrorZ_clone_ptr(long arg);
        // struct LDKCResult_InvoiceSignOrCreationErrorZ CResult_InvoiceSignOrCreationErrorZ_clone(const struct LDKCResult_InvoiceSignOrCreationErrorZ *NONNULL_PTR orig);
        public static native long CResult_InvoiceSignOrCreationErrorZ_clone(long orig);
        // struct LDKCOption_FilterZ COption_FilterZ_some(struct LDKFilter o);
@@ -2578,12 +3039,16 @@ public class bindings {
        public static native long CResult_LockedChannelMonitorNoneZ_ok(long o);
        // struct LDKCResult_LockedChannelMonitorNoneZ CResult_LockedChannelMonitorNoneZ_err(void);
        public static native long CResult_LockedChannelMonitorNoneZ_err();
+       // bool CResult_LockedChannelMonitorNoneZ_is_ok(const struct LDKCResult_LockedChannelMonitorNoneZ *NONNULL_PTR o);
+       public static native boolean CResult_LockedChannelMonitorNoneZ_is_ok(long o);
        // void CResult_LockedChannelMonitorNoneZ_free(struct LDKCResult_LockedChannelMonitorNoneZ _res);
        public static native void CResult_LockedChannelMonitorNoneZ_free(long _res);
        // void CVec_OutPointZ_free(struct LDKCVec_OutPointZ _res);
        public static native void CVec_OutPointZ_free(long[] _res);
        // void PaymentPurpose_free(struct LDKPaymentPurpose this_ptr);
        public static native void PaymentPurpose_free(long this_ptr);
+       // uint64_t PaymentPurpose_clone_ptr(LDKPaymentPurpose *NONNULL_PTR arg);
+       public static native long PaymentPurpose_clone_ptr(long arg);
        // struct LDKPaymentPurpose PaymentPurpose_clone(const struct LDKPaymentPurpose *NONNULL_PTR orig);
        public static native long PaymentPurpose_clone(long orig);
        // struct LDKPaymentPurpose PaymentPurpose_invoice_payment(struct LDKThirtyTwoBytes payment_preimage, struct LDKThirtyTwoBytes payment_secret, uint64_t user_payment_id);
@@ -2592,6 +3057,8 @@ public class bindings {
        public static native long PaymentPurpose_spontaneous_payment(byte[] a);
        // void ClosureReason_free(struct LDKClosureReason this_ptr);
        public static native void ClosureReason_free(long this_ptr);
+       // uint64_t ClosureReason_clone_ptr(LDKClosureReason *NONNULL_PTR arg);
+       public static native long ClosureReason_clone_ptr(long arg);
        // struct LDKClosureReason ClosureReason_clone(const struct LDKClosureReason *NONNULL_PTR orig);
        public static native long ClosureReason_clone(long orig);
        // struct LDKClosureReason ClosureReason_counterparty_force_closed(struct LDKStr peer_msg);
@@ -2610,8 +3077,12 @@ public class bindings {
        public static native long ClosureReason_outdated_channel_manager();
        // struct LDKCVec_u8Z ClosureReason_write(const struct LDKClosureReason *NONNULL_PTR obj);
        public static native byte[] ClosureReason_write(long obj);
+       // struct LDKCResult_COption_ClosureReasonZDecodeErrorZ ClosureReason_read(struct LDKu8slice ser);
+       public static native long ClosureReason_read(byte[] ser);
        // void Event_free(struct LDKEvent this_ptr);
        public static native void Event_free(long this_ptr);
+       // uint64_t Event_clone_ptr(LDKEvent *NONNULL_PTR arg);
+       public static native long Event_clone_ptr(long arg);
        // struct LDKEvent Event_clone(const struct LDKEvent *NONNULL_PTR orig);
        public static native long Event_clone(long orig);
        // struct LDKEvent Event_funding_generation_ready(struct LDKThirtyTwoBytes temporary_channel_id, uint64_t channel_value_satoshis, struct LDKCVec_u8Z output_script, uint64_t user_channel_id);
@@ -2634,8 +3105,12 @@ public class bindings {
        public static native long Event_discard_funding(byte[] channel_id, byte[] transaction);
        // struct LDKCVec_u8Z Event_write(const struct LDKEvent *NONNULL_PTR obj);
        public static native byte[] Event_write(long obj);
+       // struct LDKCResult_COption_EventZDecodeErrorZ Event_read(struct LDKu8slice ser);
+       public static native long Event_read(byte[] ser);
        // void MessageSendEvent_free(struct LDKMessageSendEvent this_ptr);
        public static native void MessageSendEvent_free(long this_ptr);
+       // uint64_t MessageSendEvent_clone_ptr(LDKMessageSendEvent *NONNULL_PTR arg);
+       public static native long MessageSendEvent_clone_ptr(long arg);
        // struct LDKMessageSendEvent MessageSendEvent_clone(const struct LDKMessageSendEvent *NONNULL_PTR orig);
        public static native long MessageSendEvent_clone(long orig);
        // struct LDKMessageSendEvent MessageSendEvent_send_accept_channel(struct LDKPublicKey node_id, struct LDKAcceptChannel msg);
@@ -2684,6 +3159,8 @@ public class bindings {
        public static native void EventHandler_free(long this_ptr);
        // void APIError_free(struct LDKAPIError this_ptr);
        public static native void APIError_free(long this_ptr);
+       // uint64_t APIError_clone_ptr(LDKAPIError *NONNULL_PTR arg);
+       public static native long APIError_clone_ptr(long arg);
        // struct LDKAPIError APIError_clone(const struct LDKAPIError *NONNULL_PTR orig);
        public static native long APIError_clone(long orig);
        // struct LDKAPIError APIError_apimisuse_error(struct LDKStr err);
@@ -2722,6 +3199,32 @@ public class bindings {
        public static native long Level_hash(long o);
        // MUST_USE_RES enum LDKLevel Level_max(void);
        public static native Level Level_max();
+       // void Record_free(struct LDKRecord this_obj);
+       public static native void Record_free(long this_obj);
+       // enum LDKLevel Record_get_level(const struct LDKRecord *NONNULL_PTR this_ptr);
+       public static native Level Record_get_level(long this_ptr);
+       // void Record_set_level(struct LDKRecord *NONNULL_PTR this_ptr, enum LDKLevel val);
+       public static native void Record_set_level(long this_ptr, Level val);
+       // struct LDKStr Record_get_args(const struct LDKRecord *NONNULL_PTR this_ptr);
+       public static native String Record_get_args(long this_ptr);
+       // void Record_set_args(struct LDKRecord *NONNULL_PTR this_ptr, struct LDKStr val);
+       public static native void Record_set_args(long this_ptr, String val);
+       // struct LDKStr Record_get_module_path(const struct LDKRecord *NONNULL_PTR this_ptr);
+       public static native String Record_get_module_path(long this_ptr);
+       // void Record_set_module_path(struct LDKRecord *NONNULL_PTR this_ptr, struct LDKStr val);
+       public static native void Record_set_module_path(long this_ptr, String val);
+       // struct LDKStr Record_get_file(const struct LDKRecord *NONNULL_PTR this_ptr);
+       public static native String Record_get_file(long this_ptr);
+       // void Record_set_file(struct LDKRecord *NONNULL_PTR this_ptr, struct LDKStr val);
+       public static native void Record_set_file(long this_ptr, String val);
+       // uint32_t Record_get_line(const struct LDKRecord *NONNULL_PTR this_ptr);
+       public static native int Record_get_line(long this_ptr);
+       // void Record_set_line(struct LDKRecord *NONNULL_PTR this_ptr, uint32_t val);
+       public static native void Record_set_line(long this_ptr, int val);
+       // uint64_t Record_clone_ptr(LDKRecord *NONNULL_PTR arg);
+       public static native long Record_clone_ptr(long arg);
+       // struct LDKRecord Record_clone(const struct LDKRecord *NONNULL_PTR orig);
+       public static native long Record_clone(long orig);
        // void Logger_free(struct LDKLogger this_ptr);
        public static native void Logger_free(long this_ptr);
        // void ChannelHandshakeConfig_free(struct LDKChannelHandshakeConfig this_obj);
@@ -2740,6 +3243,8 @@ public class bindings {
        public static native void ChannelHandshakeConfig_set_our_htlc_minimum_msat(long this_ptr, long val);
        // MUST_USE_RES struct LDKChannelHandshakeConfig ChannelHandshakeConfig_new(uint32_t minimum_depth_arg, uint16_t our_to_self_delay_arg, uint64_t our_htlc_minimum_msat_arg);
        public static native long ChannelHandshakeConfig_new(int minimum_depth_arg, short our_to_self_delay_arg, long our_htlc_minimum_msat_arg);
+       // uint64_t ChannelHandshakeConfig_clone_ptr(LDKChannelHandshakeConfig *NONNULL_PTR arg);
+       public static native long ChannelHandshakeConfig_clone_ptr(long arg);
        // struct LDKChannelHandshakeConfig ChannelHandshakeConfig_clone(const struct LDKChannelHandshakeConfig *NONNULL_PTR orig);
        public static native long ChannelHandshakeConfig_clone(long orig);
        // MUST_USE_RES struct LDKChannelHandshakeConfig ChannelHandshakeConfig_default(void);
@@ -2780,6 +3285,8 @@ public class bindings {
        public static native void ChannelHandshakeLimits_set_their_to_self_delay(long this_ptr, short val);
        // MUST_USE_RES struct LDKChannelHandshakeLimits ChannelHandshakeLimits_new(uint64_t min_funding_satoshis_arg, uint64_t max_htlc_minimum_msat_arg, uint64_t min_max_htlc_value_in_flight_msat_arg, uint64_t max_channel_reserve_satoshis_arg, uint16_t min_max_accepted_htlcs_arg, uint32_t max_minimum_depth_arg, bool force_announced_channel_preference_arg, uint16_t their_to_self_delay_arg);
        public static native long ChannelHandshakeLimits_new(long min_funding_satoshis_arg, long max_htlc_minimum_msat_arg, long min_max_htlc_value_in_flight_msat_arg, long max_channel_reserve_satoshis_arg, short min_max_accepted_htlcs_arg, int max_minimum_depth_arg, boolean force_announced_channel_preference_arg, short their_to_self_delay_arg);
+       // uint64_t ChannelHandshakeLimits_clone_ptr(LDKChannelHandshakeLimits *NONNULL_PTR arg);
+       public static native long ChannelHandshakeLimits_clone_ptr(long arg);
        // struct LDKChannelHandshakeLimits ChannelHandshakeLimits_clone(const struct LDKChannelHandshakeLimits *NONNULL_PTR orig);
        public static native long ChannelHandshakeLimits_clone(long orig);
        // MUST_USE_RES struct LDKChannelHandshakeLimits ChannelHandshakeLimits_default(void);
@@ -2816,6 +3323,8 @@ public class bindings {
        public static native void ChannelConfig_set_force_close_avoidance_max_fee_satoshis(long this_ptr, long val);
        // MUST_USE_RES struct LDKChannelConfig ChannelConfig_new(uint32_t forwarding_fee_proportional_millionths_arg, uint32_t forwarding_fee_base_msat_arg, uint16_t cltv_expiry_delta_arg, bool announced_channel_arg, bool commit_upfront_shutdown_pubkey_arg, uint64_t max_dust_htlc_exposure_msat_arg, uint64_t force_close_avoidance_max_fee_satoshis_arg);
        public static native long ChannelConfig_new(int forwarding_fee_proportional_millionths_arg, int forwarding_fee_base_msat_arg, short cltv_expiry_delta_arg, boolean announced_channel_arg, boolean commit_upfront_shutdown_pubkey_arg, long max_dust_htlc_exposure_msat_arg, long force_close_avoidance_max_fee_satoshis_arg);
+       // uint64_t ChannelConfig_clone_ptr(LDKChannelConfig *NONNULL_PTR arg);
+       public static native long ChannelConfig_clone_ptr(long arg);
        // struct LDKChannelConfig ChannelConfig_clone(const struct LDKChannelConfig *NONNULL_PTR orig);
        public static native long ChannelConfig_clone(long orig);
        // MUST_USE_RES struct LDKChannelConfig ChannelConfig_default(void);
@@ -2844,12 +3353,16 @@ public class bindings {
        public static native void UserConfig_set_accept_forwards_to_priv_channels(long this_ptr, boolean val);
        // MUST_USE_RES struct LDKUserConfig UserConfig_new(struct LDKChannelHandshakeConfig own_channel_config_arg, struct LDKChannelHandshakeLimits peer_channel_config_limits_arg, struct LDKChannelConfig channel_options_arg, bool accept_forwards_to_priv_channels_arg);
        public static native long UserConfig_new(long own_channel_config_arg, long peer_channel_config_limits_arg, long channel_options_arg, boolean accept_forwards_to_priv_channels_arg);
+       // uint64_t UserConfig_clone_ptr(LDKUserConfig *NONNULL_PTR arg);
+       public static native long UserConfig_clone_ptr(long arg);
        // struct LDKUserConfig UserConfig_clone(const struct LDKUserConfig *NONNULL_PTR orig);
        public static native long UserConfig_clone(long orig);
        // MUST_USE_RES struct LDKUserConfig UserConfig_default(void);
        public static native long UserConfig_default();
        // void BestBlock_free(struct LDKBestBlock this_obj);
        public static native void BestBlock_free(long this_obj);
+       // uint64_t BestBlock_clone_ptr(LDKBestBlock *NONNULL_PTR arg);
+       public static native long BestBlock_clone_ptr(long arg);
        // struct LDKBestBlock BestBlock_clone(const struct LDKBestBlock *NONNULL_PTR orig);
        public static native long BestBlock_clone(long orig);
        // MUST_USE_RES struct LDKBestBlock BestBlock_from_genesis(enum LDKNetwork network);
@@ -2898,6 +3411,8 @@ public class bindings {
        public static native void WatchedOutput_set_script_pubkey(long this_ptr, byte[] val);
        // MUST_USE_RES struct LDKWatchedOutput WatchedOutput_new(struct LDKThirtyTwoBytes block_hash_arg, struct LDKOutPoint outpoint_arg, struct LDKCVec_u8Z script_pubkey_arg);
        public static native long WatchedOutput_new(byte[] block_hash_arg, long outpoint_arg, byte[] script_pubkey_arg);
+       // uint64_t WatchedOutput_clone_ptr(LDKWatchedOutput *NONNULL_PTR arg);
+       public static native long WatchedOutput_clone_ptr(long arg);
        // struct LDKWatchedOutput WatchedOutput_clone(const struct LDKWatchedOutput *NONNULL_PTR orig);
        public static native long WatchedOutput_clone(long orig);
        // uint64_t WatchedOutput_hash(const struct LDKWatchedOutput *NONNULL_PTR o);
@@ -2918,6 +3433,8 @@ public class bindings {
        public static native void FeeEstimator_free(long this_ptr);
        // void MonitorUpdateId_free(struct LDKMonitorUpdateId this_obj);
        public static native void MonitorUpdateId_free(long this_obj);
+       // uint64_t MonitorUpdateId_clone_ptr(LDKMonitorUpdateId *NONNULL_PTR arg);
+       public static native long MonitorUpdateId_clone_ptr(long arg);
        // struct LDKMonitorUpdateId MonitorUpdateId_clone(const struct LDKMonitorUpdateId *NONNULL_PTR orig);
        public static native long MonitorUpdateId_clone(long orig);
        // uint64_t MonitorUpdateId_hash(const struct LDKMonitorUpdateId *NONNULL_PTR o);
@@ -2954,6 +3471,8 @@ public class bindings {
        public static native long ChannelMonitorUpdate_get_update_id(long this_ptr);
        // void ChannelMonitorUpdate_set_update_id(struct LDKChannelMonitorUpdate *NONNULL_PTR this_ptr, uint64_t val);
        public static native void ChannelMonitorUpdate_set_update_id(long this_ptr, long val);
+       // uint64_t ChannelMonitorUpdate_clone_ptr(LDKChannelMonitorUpdate *NONNULL_PTR arg);
+       public static native long ChannelMonitorUpdate_clone_ptr(long arg);
        // struct LDKChannelMonitorUpdate ChannelMonitorUpdate_clone(const struct LDKChannelMonitorUpdate *NONNULL_PTR orig);
        public static native long ChannelMonitorUpdate_clone(long orig);
        // struct LDKCVec_u8Z ChannelMonitorUpdate_write(const struct LDKChannelMonitorUpdate *NONNULL_PTR obj);
@@ -2968,10 +3487,14 @@ public class bindings {
        public static native void MonitorUpdateError_set_a(long this_ptr, String val);
        // MUST_USE_RES struct LDKMonitorUpdateError MonitorUpdateError_new(struct LDKStr a_arg);
        public static native long MonitorUpdateError_new(String a_arg);
+       // uint64_t MonitorUpdateError_clone_ptr(LDKMonitorUpdateError *NONNULL_PTR arg);
+       public static native long MonitorUpdateError_clone_ptr(long arg);
        // struct LDKMonitorUpdateError MonitorUpdateError_clone(const struct LDKMonitorUpdateError *NONNULL_PTR orig);
        public static native long MonitorUpdateError_clone(long orig);
        // void MonitorEvent_free(struct LDKMonitorEvent this_ptr);
        public static native void MonitorEvent_free(long this_ptr);
+       // uint64_t MonitorEvent_clone_ptr(LDKMonitorEvent *NONNULL_PTR arg);
+       public static native long MonitorEvent_clone_ptr(long arg);
        // struct LDKMonitorEvent MonitorEvent_clone(const struct LDKMonitorEvent *NONNULL_PTR orig);
        public static native long MonitorEvent_clone(long orig);
        // struct LDKMonitorEvent MonitorEvent_htlcevent(struct LDKHTLCUpdate a);
@@ -2984,8 +3507,12 @@ public class bindings {
        public static native long MonitorEvent_update_failed(long a);
        // struct LDKCVec_u8Z MonitorEvent_write(const struct LDKMonitorEvent *NONNULL_PTR obj);
        public static native byte[] MonitorEvent_write(long obj);
+       // struct LDKCResult_COption_MonitorEventZDecodeErrorZ MonitorEvent_read(struct LDKu8slice ser);
+       public static native long MonitorEvent_read(byte[] ser);
        // void HTLCUpdate_free(struct LDKHTLCUpdate this_obj);
        public static native void HTLCUpdate_free(long this_obj);
+       // uint64_t HTLCUpdate_clone_ptr(LDKHTLCUpdate *NONNULL_PTR arg);
+       public static native long HTLCUpdate_clone_ptr(long arg);
        // struct LDKHTLCUpdate HTLCUpdate_clone(const struct LDKHTLCUpdate *NONNULL_PTR orig);
        public static native long HTLCUpdate_clone(long orig);
        // struct LDKCVec_u8Z HTLCUpdate_write(const struct LDKHTLCUpdate *NONNULL_PTR obj);
@@ -2994,6 +3521,8 @@ public class bindings {
        public static native long HTLCUpdate_read(byte[] ser);
        // void Balance_free(struct LDKBalance this_ptr);
        public static native void Balance_free(long this_ptr);
+       // uint64_t Balance_clone_ptr(LDKBalance *NONNULL_PTR arg);
+       public static native long Balance_clone_ptr(long arg);
        // struct LDKBalance Balance_clone(const struct LDKBalance *NONNULL_PTR orig);
        public static native long Balance_clone(long orig);
        // struct LDKBalance Balance_claimable_on_channel_close(uint64_t claimable_amount_satoshis);
@@ -3008,6 +3537,8 @@ public class bindings {
        public static native boolean Balance_eq(long a, long b);
        // void ChannelMonitor_free(struct LDKChannelMonitor this_obj);
        public static native void ChannelMonitor_free(long this_obj);
+       // uint64_t ChannelMonitor_clone_ptr(LDKChannelMonitor *NONNULL_PTR arg);
+       public static native long ChannelMonitor_clone_ptr(long arg);
        // struct LDKChannelMonitor ChannelMonitor_clone(const struct LDKChannelMonitor *NONNULL_PTR orig);
        public static native long ChannelMonitor_clone(long orig);
        // struct LDKCVec_u8Z ChannelMonitor_write(const struct LDKChannelMonitor *NONNULL_PTR obj);
@@ -3058,6 +3589,8 @@ public class bindings {
        public static native void OutPoint_set_index(long this_ptr, short val);
        // MUST_USE_RES struct LDKOutPoint OutPoint_new(struct LDKThirtyTwoBytes txid_arg, uint16_t index_arg);
        public static native long OutPoint_new(byte[] txid_arg, short index_arg);
+       // uint64_t OutPoint_clone_ptr(LDKOutPoint *NONNULL_PTR arg);
+       public static native long OutPoint_clone_ptr(long arg);
        // struct LDKOutPoint OutPoint_clone(const struct LDKOutPoint *NONNULL_PTR orig);
        public static native long OutPoint_clone(long orig);
        // bool OutPoint_eq(const struct LDKOutPoint *NONNULL_PTR a, const struct LDKOutPoint *NONNULL_PTR b);
@@ -3100,6 +3633,8 @@ public class bindings {
        public static native void DelayedPaymentOutputDescriptor_set_channel_value_satoshis(long this_ptr, long val);
        // MUST_USE_RES struct LDKDelayedPaymentOutputDescriptor DelayedPaymentOutputDescriptor_new(struct LDKOutPoint outpoint_arg, struct LDKPublicKey per_commitment_point_arg, uint16_t to_self_delay_arg, struct LDKTxOut output_arg, struct LDKPublicKey revocation_pubkey_arg, struct LDKThirtyTwoBytes channel_keys_id_arg, uint64_t channel_value_satoshis_arg);
        public static native long DelayedPaymentOutputDescriptor_new(long outpoint_arg, byte[] per_commitment_point_arg, short to_self_delay_arg, long output_arg, byte[] revocation_pubkey_arg, byte[] channel_keys_id_arg, long channel_value_satoshis_arg);
+       // uint64_t DelayedPaymentOutputDescriptor_clone_ptr(LDKDelayedPaymentOutputDescriptor *NONNULL_PTR arg);
+       public static native long DelayedPaymentOutputDescriptor_clone_ptr(long arg);
        // struct LDKDelayedPaymentOutputDescriptor DelayedPaymentOutputDescriptor_clone(const struct LDKDelayedPaymentOutputDescriptor *NONNULL_PTR orig);
        public static native long DelayedPaymentOutputDescriptor_clone(long orig);
        // struct LDKCVec_u8Z DelayedPaymentOutputDescriptor_write(const struct LDKDelayedPaymentOutputDescriptor *NONNULL_PTR obj);
@@ -3124,6 +3659,8 @@ public class bindings {
        public static native void StaticPaymentOutputDescriptor_set_channel_value_satoshis(long this_ptr, long val);
        // MUST_USE_RES struct LDKStaticPaymentOutputDescriptor StaticPaymentOutputDescriptor_new(struct LDKOutPoint outpoint_arg, struct LDKTxOut output_arg, struct LDKThirtyTwoBytes channel_keys_id_arg, uint64_t channel_value_satoshis_arg);
        public static native long StaticPaymentOutputDescriptor_new(long outpoint_arg, long output_arg, byte[] channel_keys_id_arg, long channel_value_satoshis_arg);
+       // uint64_t StaticPaymentOutputDescriptor_clone_ptr(LDKStaticPaymentOutputDescriptor *NONNULL_PTR arg);
+       public static native long StaticPaymentOutputDescriptor_clone_ptr(long arg);
        // struct LDKStaticPaymentOutputDescriptor StaticPaymentOutputDescriptor_clone(const struct LDKStaticPaymentOutputDescriptor *NONNULL_PTR orig);
        public static native long StaticPaymentOutputDescriptor_clone(long orig);
        // struct LDKCVec_u8Z StaticPaymentOutputDescriptor_write(const struct LDKStaticPaymentOutputDescriptor *NONNULL_PTR obj);
@@ -3132,6 +3669,8 @@ public class bindings {
        public static native long StaticPaymentOutputDescriptor_read(byte[] ser);
        // void SpendableOutputDescriptor_free(struct LDKSpendableOutputDescriptor this_ptr);
        public static native void SpendableOutputDescriptor_free(long this_ptr);
+       // uint64_t SpendableOutputDescriptor_clone_ptr(LDKSpendableOutputDescriptor *NONNULL_PTR arg);
+       public static native long SpendableOutputDescriptor_clone_ptr(long arg);
        // struct LDKSpendableOutputDescriptor SpendableOutputDescriptor_clone(const struct LDKSpendableOutputDescriptor *NONNULL_PTR orig);
        public static native long SpendableOutputDescriptor_clone(long orig);
        // struct LDKSpendableOutputDescriptor SpendableOutputDescriptor_static_output(struct LDKOutPoint outpoint, struct LDKTxOut output);
@@ -3146,6 +3685,8 @@ public class bindings {
        public static native long SpendableOutputDescriptor_read(byte[] ser);
        // void BaseSign_free(struct LDKBaseSign this_ptr);
        public static native void BaseSign_free(long this_ptr);
+       // uint64_t Sign_clone_ptr(LDKSign *NONNULL_PTR arg);
+       public static native long Sign_clone_ptr(long arg);
        // struct LDKSign Sign_clone(const struct LDKSign *NONNULL_PTR orig);
        public static native long Sign_clone(long orig);
        // void Sign_free(struct LDKSign this_ptr);
@@ -3178,6 +3719,8 @@ public class bindings {
        public static native byte[] InMemorySigner_get_commitment_seed(long this_ptr);
        // void InMemorySigner_set_commitment_seed(struct LDKInMemorySigner *NONNULL_PTR this_ptr, struct LDKThirtyTwoBytes val);
        public static native void InMemorySigner_set_commitment_seed(long this_ptr, byte[] val);
+       // uint64_t InMemorySigner_clone_ptr(LDKInMemorySigner *NONNULL_PTR arg);
+       public static native long InMemorySigner_clone_ptr(long arg);
        // struct LDKInMemorySigner InMemorySigner_clone(const struct LDKInMemorySigner *NONNULL_PTR orig);
        public static native long InMemorySigner_clone(long orig);
        // MUST_USE_RES struct LDKInMemorySigner InMemorySigner_new(struct LDKSecretKey funding_key, struct LDKSecretKey revocation_base_key, struct LDKSecretKey payment_key, struct LDKSecretKey delayed_payment_base_key, struct LDKSecretKey htlc_base_key, struct LDKThirtyTwoBytes commitment_seed, uint64_t channel_value_satoshis, struct LDKThirtyTwoBytes channel_keys_id);
@@ -3230,6 +3773,8 @@ public class bindings {
        public static native void ChainParameters_set_best_block(long this_ptr, long val);
        // MUST_USE_RES struct LDKChainParameters ChainParameters_new(enum LDKNetwork network_arg, struct LDKBestBlock best_block_arg);
        public static native long ChainParameters_new(Network network_arg, long best_block_arg);
+       // uint64_t ChainParameters_clone_ptr(LDKChainParameters *NONNULL_PTR arg);
+       public static native long ChainParameters_clone_ptr(long arg);
        // struct LDKChainParameters ChainParameters_clone(const struct LDKChainParameters *NONNULL_PTR orig);
        public static native long ChainParameters_clone(long orig);
        // void CounterpartyForwardingInfo_free(struct LDKCounterpartyForwardingInfo this_obj);
@@ -3248,6 +3793,8 @@ public class bindings {
        public static native void CounterpartyForwardingInfo_set_cltv_expiry_delta(long this_ptr, short val);
        // MUST_USE_RES struct LDKCounterpartyForwardingInfo CounterpartyForwardingInfo_new(uint32_t fee_base_msat_arg, uint32_t fee_proportional_millionths_arg, uint16_t cltv_expiry_delta_arg);
        public static native long CounterpartyForwardingInfo_new(int fee_base_msat_arg, int fee_proportional_millionths_arg, short cltv_expiry_delta_arg);
+       // uint64_t CounterpartyForwardingInfo_clone_ptr(LDKCounterpartyForwardingInfo *NONNULL_PTR arg);
+       public static native long CounterpartyForwardingInfo_clone_ptr(long arg);
        // struct LDKCounterpartyForwardingInfo CounterpartyForwardingInfo_clone(const struct LDKCounterpartyForwardingInfo *NONNULL_PTR orig);
        public static native long CounterpartyForwardingInfo_clone(long orig);
        // void ChannelCounterparty_free(struct LDKChannelCounterparty this_obj);
@@ -3270,6 +3817,8 @@ public class bindings {
        public static native void ChannelCounterparty_set_forwarding_info(long this_ptr, long val);
        // MUST_USE_RES struct LDKChannelCounterparty ChannelCounterparty_new(struct LDKPublicKey node_id_arg, struct LDKInitFeatures features_arg, uint64_t unspendable_punishment_reserve_arg, struct LDKCounterpartyForwardingInfo forwarding_info_arg);
        public static native long ChannelCounterparty_new(byte[] node_id_arg, long features_arg, long unspendable_punishment_reserve_arg, long forwarding_info_arg);
+       // uint64_t ChannelCounterparty_clone_ptr(LDKChannelCounterparty *NONNULL_PTR arg);
+       public static native long ChannelCounterparty_clone_ptr(long arg);
        // struct LDKChannelCounterparty ChannelCounterparty_clone(const struct LDKChannelCounterparty *NONNULL_PTR orig);
        public static native long ChannelCounterparty_clone(long orig);
        // void ChannelDetails_free(struct LDKChannelDetails this_obj);
@@ -3336,10 +3885,14 @@ public class bindings {
        public static native void ChannelDetails_set_is_public(long this_ptr, boolean val);
        // MUST_USE_RES struct LDKChannelDetails ChannelDetails_new(struct LDKThirtyTwoBytes channel_id_arg, struct LDKChannelCounterparty counterparty_arg, struct LDKOutPoint funding_txo_arg, struct LDKCOption_u64Z short_channel_id_arg, uint64_t channel_value_satoshis_arg, struct LDKCOption_u64Z unspendable_punishment_reserve_arg, uint64_t user_channel_id_arg, uint64_t outbound_capacity_msat_arg, uint64_t inbound_capacity_msat_arg, struct LDKCOption_u32Z confirmations_required_arg, struct LDKCOption_u16Z force_close_spend_delay_arg, bool is_outbound_arg, bool is_funding_locked_arg, bool is_usable_arg, bool is_public_arg);
        public static native long ChannelDetails_new(byte[] channel_id_arg, long counterparty_arg, long funding_txo_arg, long short_channel_id_arg, long channel_value_satoshis_arg, long unspendable_punishment_reserve_arg, long user_channel_id_arg, long outbound_capacity_msat_arg, long inbound_capacity_msat_arg, long confirmations_required_arg, long force_close_spend_delay_arg, boolean is_outbound_arg, boolean is_funding_locked_arg, boolean is_usable_arg, boolean is_public_arg);
+       // uint64_t ChannelDetails_clone_ptr(LDKChannelDetails *NONNULL_PTR arg);
+       public static native long ChannelDetails_clone_ptr(long arg);
        // struct LDKChannelDetails ChannelDetails_clone(const struct LDKChannelDetails *NONNULL_PTR orig);
        public static native long ChannelDetails_clone(long orig);
        // void PaymentSendFailure_free(struct LDKPaymentSendFailure this_ptr);
        public static native void PaymentSendFailure_free(long this_ptr);
+       // uint64_t PaymentSendFailure_clone_ptr(LDKPaymentSendFailure *NONNULL_PTR arg);
+       public static native long PaymentSendFailure_clone_ptr(long arg);
        // struct LDKPaymentSendFailure PaymentSendFailure_clone(const struct LDKPaymentSendFailure *NONNULL_PTR orig);
        public static native long PaymentSendFailure_clone(long orig);
        // struct LDKPaymentSendFailure PaymentSendFailure_parameter_error(struct LDKAPIError a);
@@ -3442,6 +3995,8 @@ public class bindings {
        public static native long C2Tuple_BlockHashChannelManagerZ_read(byte[] ser, long arg);
        // void DecodeError_free(struct LDKDecodeError this_obj);
        public static native void DecodeError_free(long this_obj);
+       // uint64_t DecodeError_clone_ptr(LDKDecodeError *NONNULL_PTR arg);
+       public static native long DecodeError_clone_ptr(long arg);
        // struct LDKDecodeError DecodeError_clone(const struct LDKDecodeError *NONNULL_PTR orig);
        public static native long DecodeError_clone(long orig);
        // void Init_free(struct LDKInit this_obj);
@@ -3452,6 +4007,8 @@ public class bindings {
        public static native void Init_set_features(long this_ptr, long val);
        // MUST_USE_RES struct LDKInit Init_new(struct LDKInitFeatures features_arg);
        public static native long Init_new(long features_arg);
+       // uint64_t Init_clone_ptr(LDKInit *NONNULL_PTR arg);
+       public static native long Init_clone_ptr(long arg);
        // struct LDKInit Init_clone(const struct LDKInit *NONNULL_PTR orig);
        public static native long Init_clone(long orig);
        // void ErrorMessage_free(struct LDKErrorMessage this_obj);
@@ -3466,6 +4023,8 @@ public class bindings {
        public static native void ErrorMessage_set_data(long this_ptr, String val);
        // MUST_USE_RES struct LDKErrorMessage ErrorMessage_new(struct LDKThirtyTwoBytes channel_id_arg, struct LDKStr data_arg);
        public static native long ErrorMessage_new(byte[] channel_id_arg, String data_arg);
+       // uint64_t ErrorMessage_clone_ptr(LDKErrorMessage *NONNULL_PTR arg);
+       public static native long ErrorMessage_clone_ptr(long arg);
        // struct LDKErrorMessage ErrorMessage_clone(const struct LDKErrorMessage *NONNULL_PTR orig);
        public static native long ErrorMessage_clone(long orig);
        // void Ping_free(struct LDKPing this_obj);
@@ -3480,6 +4039,8 @@ public class bindings {
        public static native void Ping_set_byteslen(long this_ptr, short val);
        // MUST_USE_RES struct LDKPing Ping_new(uint16_t ponglen_arg, uint16_t byteslen_arg);
        public static native long Ping_new(short ponglen_arg, short byteslen_arg);
+       // uint64_t Ping_clone_ptr(LDKPing *NONNULL_PTR arg);
+       public static native long Ping_clone_ptr(long arg);
        // struct LDKPing Ping_clone(const struct LDKPing *NONNULL_PTR orig);
        public static native long Ping_clone(long orig);
        // void Pong_free(struct LDKPong this_obj);
@@ -3490,6 +4051,8 @@ public class bindings {
        public static native void Pong_set_byteslen(long this_ptr, short val);
        // MUST_USE_RES struct LDKPong Pong_new(uint16_t byteslen_arg);
        public static native long Pong_new(short byteslen_arg);
+       // uint64_t Pong_clone_ptr(LDKPong *NONNULL_PTR arg);
+       public static native long Pong_clone_ptr(long arg);
        // struct LDKPong Pong_clone(const struct LDKPong *NONNULL_PTR orig);
        public static native long Pong_clone(long orig);
        // void OpenChannel_free(struct LDKOpenChannel this_obj);
@@ -3566,6 +4129,8 @@ public class bindings {
        public static native byte OpenChannel_get_channel_flags(long this_ptr);
        // void OpenChannel_set_channel_flags(struct LDKOpenChannel *NONNULL_PTR this_ptr, uint8_t val);
        public static native void OpenChannel_set_channel_flags(long this_ptr, byte val);
+       // uint64_t OpenChannel_clone_ptr(LDKOpenChannel *NONNULL_PTR arg);
+       public static native long OpenChannel_clone_ptr(long arg);
        // struct LDKOpenChannel OpenChannel_clone(const struct LDKOpenChannel *NONNULL_PTR orig);
        public static native long OpenChannel_clone(long orig);
        // void AcceptChannel_free(struct LDKAcceptChannel this_obj);
@@ -3626,6 +4191,8 @@ public class bindings {
        public static native byte[] AcceptChannel_get_first_per_commitment_point(long this_ptr);
        // void AcceptChannel_set_first_per_commitment_point(struct LDKAcceptChannel *NONNULL_PTR this_ptr, struct LDKPublicKey val);
        public static native void AcceptChannel_set_first_per_commitment_point(long this_ptr, byte[] val);
+       // uint64_t AcceptChannel_clone_ptr(LDKAcceptChannel *NONNULL_PTR arg);
+       public static native long AcceptChannel_clone_ptr(long arg);
        // struct LDKAcceptChannel AcceptChannel_clone(const struct LDKAcceptChannel *NONNULL_PTR orig);
        public static native long AcceptChannel_clone(long orig);
        // void FundingCreated_free(struct LDKFundingCreated this_obj);
@@ -3648,6 +4215,8 @@ public class bindings {
        public static native void FundingCreated_set_signature(long this_ptr, byte[] val);
        // MUST_USE_RES struct LDKFundingCreated FundingCreated_new(struct LDKThirtyTwoBytes temporary_channel_id_arg, struct LDKThirtyTwoBytes funding_txid_arg, uint16_t funding_output_index_arg, struct LDKSignature signature_arg);
        public static native long FundingCreated_new(byte[] temporary_channel_id_arg, byte[] funding_txid_arg, short funding_output_index_arg, byte[] signature_arg);
+       // uint64_t FundingCreated_clone_ptr(LDKFundingCreated *NONNULL_PTR arg);
+       public static native long FundingCreated_clone_ptr(long arg);
        // struct LDKFundingCreated FundingCreated_clone(const struct LDKFundingCreated *NONNULL_PTR orig);
        public static native long FundingCreated_clone(long orig);
        // void FundingSigned_free(struct LDKFundingSigned this_obj);
@@ -3662,6 +4231,8 @@ public class bindings {
        public static native void FundingSigned_set_signature(long this_ptr, byte[] val);
        // MUST_USE_RES struct LDKFundingSigned FundingSigned_new(struct LDKThirtyTwoBytes channel_id_arg, struct LDKSignature signature_arg);
        public static native long FundingSigned_new(byte[] channel_id_arg, byte[] signature_arg);
+       // uint64_t FundingSigned_clone_ptr(LDKFundingSigned *NONNULL_PTR arg);
+       public static native long FundingSigned_clone_ptr(long arg);
        // struct LDKFundingSigned FundingSigned_clone(const struct LDKFundingSigned *NONNULL_PTR orig);
        public static native long FundingSigned_clone(long orig);
        // void FundingLocked_free(struct LDKFundingLocked this_obj);
@@ -3676,6 +4247,8 @@ public class bindings {
        public static native void FundingLocked_set_next_per_commitment_point(long this_ptr, byte[] val);
        // MUST_USE_RES struct LDKFundingLocked FundingLocked_new(struct LDKThirtyTwoBytes channel_id_arg, struct LDKPublicKey next_per_commitment_point_arg);
        public static native long FundingLocked_new(byte[] channel_id_arg, byte[] next_per_commitment_point_arg);
+       // uint64_t FundingLocked_clone_ptr(LDKFundingLocked *NONNULL_PTR arg);
+       public static native long FundingLocked_clone_ptr(long arg);
        // struct LDKFundingLocked FundingLocked_clone(const struct LDKFundingLocked *NONNULL_PTR orig);
        public static native long FundingLocked_clone(long orig);
        // void Shutdown_free(struct LDKShutdown this_obj);
@@ -3690,6 +4263,8 @@ public class bindings {
        public static native void Shutdown_set_scriptpubkey(long this_ptr, byte[] val);
        // MUST_USE_RES struct LDKShutdown Shutdown_new(struct LDKThirtyTwoBytes channel_id_arg, struct LDKCVec_u8Z scriptpubkey_arg);
        public static native long Shutdown_new(byte[] channel_id_arg, byte[] scriptpubkey_arg);
+       // uint64_t Shutdown_clone_ptr(LDKShutdown *NONNULL_PTR arg);
+       public static native long Shutdown_clone_ptr(long arg);
        // struct LDKShutdown Shutdown_clone(const struct LDKShutdown *NONNULL_PTR orig);
        public static native long Shutdown_clone(long orig);
        // void ClosingSignedFeeRange_free(struct LDKClosingSignedFeeRange this_obj);
@@ -3704,6 +4279,8 @@ public class bindings {
        public static native void ClosingSignedFeeRange_set_max_fee_satoshis(long this_ptr, long val);
        // MUST_USE_RES struct LDKClosingSignedFeeRange ClosingSignedFeeRange_new(uint64_t min_fee_satoshis_arg, uint64_t max_fee_satoshis_arg);
        public static native long ClosingSignedFeeRange_new(long min_fee_satoshis_arg, long max_fee_satoshis_arg);
+       // uint64_t ClosingSignedFeeRange_clone_ptr(LDKClosingSignedFeeRange *NONNULL_PTR arg);
+       public static native long ClosingSignedFeeRange_clone_ptr(long arg);
        // struct LDKClosingSignedFeeRange ClosingSignedFeeRange_clone(const struct LDKClosingSignedFeeRange *NONNULL_PTR orig);
        public static native long ClosingSignedFeeRange_clone(long orig);
        // void ClosingSigned_free(struct LDKClosingSigned this_obj);
@@ -3726,6 +4303,8 @@ public class bindings {
        public static native void ClosingSigned_set_fee_range(long this_ptr, long val);
        // MUST_USE_RES struct LDKClosingSigned ClosingSigned_new(struct LDKThirtyTwoBytes channel_id_arg, uint64_t fee_satoshis_arg, struct LDKSignature signature_arg, struct LDKClosingSignedFeeRange fee_range_arg);
        public static native long ClosingSigned_new(byte[] channel_id_arg, long fee_satoshis_arg, byte[] signature_arg, long fee_range_arg);
+       // uint64_t ClosingSigned_clone_ptr(LDKClosingSigned *NONNULL_PTR arg);
+       public static native long ClosingSigned_clone_ptr(long arg);
        // struct LDKClosingSigned ClosingSigned_clone(const struct LDKClosingSigned *NONNULL_PTR orig);
        public static native long ClosingSigned_clone(long orig);
        // void UpdateAddHTLC_free(struct LDKUpdateAddHTLC this_obj);
@@ -3750,6 +4329,8 @@ public class bindings {
        public static native int UpdateAddHTLC_get_cltv_expiry(long this_ptr);
        // void UpdateAddHTLC_set_cltv_expiry(struct LDKUpdateAddHTLC *NONNULL_PTR this_ptr, uint32_t val);
        public static native void UpdateAddHTLC_set_cltv_expiry(long this_ptr, int val);
+       // uint64_t UpdateAddHTLC_clone_ptr(LDKUpdateAddHTLC *NONNULL_PTR arg);
+       public static native long UpdateAddHTLC_clone_ptr(long arg);
        // struct LDKUpdateAddHTLC UpdateAddHTLC_clone(const struct LDKUpdateAddHTLC *NONNULL_PTR orig);
        public static native long UpdateAddHTLC_clone(long orig);
        // void UpdateFulfillHTLC_free(struct LDKUpdateFulfillHTLC this_obj);
@@ -3768,6 +4349,8 @@ public class bindings {
        public static native void UpdateFulfillHTLC_set_payment_preimage(long this_ptr, byte[] val);
        // MUST_USE_RES struct LDKUpdateFulfillHTLC UpdateFulfillHTLC_new(struct LDKThirtyTwoBytes channel_id_arg, uint64_t htlc_id_arg, struct LDKThirtyTwoBytes payment_preimage_arg);
        public static native long UpdateFulfillHTLC_new(byte[] channel_id_arg, long htlc_id_arg, byte[] payment_preimage_arg);
+       // uint64_t UpdateFulfillHTLC_clone_ptr(LDKUpdateFulfillHTLC *NONNULL_PTR arg);
+       public static native long UpdateFulfillHTLC_clone_ptr(long arg);
        // struct LDKUpdateFulfillHTLC UpdateFulfillHTLC_clone(const struct LDKUpdateFulfillHTLC *NONNULL_PTR orig);
        public static native long UpdateFulfillHTLC_clone(long orig);
        // void UpdateFailHTLC_free(struct LDKUpdateFailHTLC this_obj);
@@ -3780,6 +4363,8 @@ public class bindings {
        public static native long UpdateFailHTLC_get_htlc_id(long this_ptr);
        // void UpdateFailHTLC_set_htlc_id(struct LDKUpdateFailHTLC *NONNULL_PTR this_ptr, uint64_t val);
        public static native void UpdateFailHTLC_set_htlc_id(long this_ptr, long val);
+       // uint64_t UpdateFailHTLC_clone_ptr(LDKUpdateFailHTLC *NONNULL_PTR arg);
+       public static native long UpdateFailHTLC_clone_ptr(long arg);
        // struct LDKUpdateFailHTLC UpdateFailHTLC_clone(const struct LDKUpdateFailHTLC *NONNULL_PTR orig);
        public static native long UpdateFailHTLC_clone(long orig);
        // void UpdateFailMalformedHTLC_free(struct LDKUpdateFailMalformedHTLC this_obj);
@@ -3796,6 +4381,8 @@ public class bindings {
        public static native short UpdateFailMalformedHTLC_get_failure_code(long this_ptr);
        // void UpdateFailMalformedHTLC_set_failure_code(struct LDKUpdateFailMalformedHTLC *NONNULL_PTR this_ptr, uint16_t val);
        public static native void UpdateFailMalformedHTLC_set_failure_code(long this_ptr, short val);
+       // uint64_t UpdateFailMalformedHTLC_clone_ptr(LDKUpdateFailMalformedHTLC *NONNULL_PTR arg);
+       public static native long UpdateFailMalformedHTLC_clone_ptr(long arg);
        // struct LDKUpdateFailMalformedHTLC UpdateFailMalformedHTLC_clone(const struct LDKUpdateFailMalformedHTLC *NONNULL_PTR orig);
        public static native long UpdateFailMalformedHTLC_clone(long orig);
        // void CommitmentSigned_free(struct LDKCommitmentSigned this_obj);
@@ -3812,6 +4399,8 @@ public class bindings {
        public static native void CommitmentSigned_set_htlc_signatures(long this_ptr, byte[][] val);
        // MUST_USE_RES struct LDKCommitmentSigned CommitmentSigned_new(struct LDKThirtyTwoBytes channel_id_arg, struct LDKSignature signature_arg, struct LDKCVec_SignatureZ htlc_signatures_arg);
        public static native long CommitmentSigned_new(byte[] channel_id_arg, byte[] signature_arg, byte[][] htlc_signatures_arg);
+       // uint64_t CommitmentSigned_clone_ptr(LDKCommitmentSigned *NONNULL_PTR arg);
+       public static native long CommitmentSigned_clone_ptr(long arg);
        // struct LDKCommitmentSigned CommitmentSigned_clone(const struct LDKCommitmentSigned *NONNULL_PTR orig);
        public static native long CommitmentSigned_clone(long orig);
        // void RevokeAndACK_free(struct LDKRevokeAndACK this_obj);
@@ -3830,6 +4419,8 @@ public class bindings {
        public static native void RevokeAndACK_set_next_per_commitment_point(long this_ptr, byte[] val);
        // MUST_USE_RES struct LDKRevokeAndACK RevokeAndACK_new(struct LDKThirtyTwoBytes channel_id_arg, struct LDKThirtyTwoBytes per_commitment_secret_arg, struct LDKPublicKey next_per_commitment_point_arg);
        public static native long RevokeAndACK_new(byte[] channel_id_arg, byte[] per_commitment_secret_arg, byte[] next_per_commitment_point_arg);
+       // uint64_t RevokeAndACK_clone_ptr(LDKRevokeAndACK *NONNULL_PTR arg);
+       public static native long RevokeAndACK_clone_ptr(long arg);
        // struct LDKRevokeAndACK RevokeAndACK_clone(const struct LDKRevokeAndACK *NONNULL_PTR orig);
        public static native long RevokeAndACK_clone(long orig);
        // void UpdateFee_free(struct LDKUpdateFee this_obj);
@@ -3844,6 +4435,8 @@ public class bindings {
        public static native void UpdateFee_set_feerate_per_kw(long this_ptr, int val);
        // MUST_USE_RES struct LDKUpdateFee UpdateFee_new(struct LDKThirtyTwoBytes channel_id_arg, uint32_t feerate_per_kw_arg);
        public static native long UpdateFee_new(byte[] channel_id_arg, int feerate_per_kw_arg);
+       // uint64_t UpdateFee_clone_ptr(LDKUpdateFee *NONNULL_PTR arg);
+       public static native long UpdateFee_clone_ptr(long arg);
        // struct LDKUpdateFee UpdateFee_clone(const struct LDKUpdateFee *NONNULL_PTR orig);
        public static native long UpdateFee_clone(long orig);
        // void DataLossProtect_free(struct LDKDataLossProtect this_obj);
@@ -3858,6 +4451,8 @@ public class bindings {
        public static native void DataLossProtect_set_my_current_per_commitment_point(long this_ptr, byte[] val);
        // MUST_USE_RES struct LDKDataLossProtect DataLossProtect_new(struct LDKThirtyTwoBytes your_last_per_commitment_secret_arg, struct LDKPublicKey my_current_per_commitment_point_arg);
        public static native long DataLossProtect_new(byte[] your_last_per_commitment_secret_arg, byte[] my_current_per_commitment_point_arg);
+       // uint64_t DataLossProtect_clone_ptr(LDKDataLossProtect *NONNULL_PTR arg);
+       public static native long DataLossProtect_clone_ptr(long arg);
        // struct LDKDataLossProtect DataLossProtect_clone(const struct LDKDataLossProtect *NONNULL_PTR orig);
        public static native long DataLossProtect_clone(long orig);
        // void ChannelReestablish_free(struct LDKChannelReestablish this_obj);
@@ -3874,6 +4469,8 @@ public class bindings {
        public static native long ChannelReestablish_get_next_remote_commitment_number(long this_ptr);
        // void ChannelReestablish_set_next_remote_commitment_number(struct LDKChannelReestablish *NONNULL_PTR this_ptr, uint64_t val);
        public static native void ChannelReestablish_set_next_remote_commitment_number(long this_ptr, long val);
+       // uint64_t ChannelReestablish_clone_ptr(LDKChannelReestablish *NONNULL_PTR arg);
+       public static native long ChannelReestablish_clone_ptr(long arg);
        // struct LDKChannelReestablish ChannelReestablish_clone(const struct LDKChannelReestablish *NONNULL_PTR orig);
        public static native long ChannelReestablish_clone(long orig);
        // void AnnouncementSignatures_free(struct LDKAnnouncementSignatures this_obj);
@@ -3896,10 +4493,14 @@ public class bindings {
        public static native void AnnouncementSignatures_set_bitcoin_signature(long this_ptr, byte[] val);
        // MUST_USE_RES struct LDKAnnouncementSignatures AnnouncementSignatures_new(struct LDKThirtyTwoBytes channel_id_arg, uint64_t short_channel_id_arg, struct LDKSignature node_signature_arg, struct LDKSignature bitcoin_signature_arg);
        public static native long AnnouncementSignatures_new(byte[] channel_id_arg, long short_channel_id_arg, byte[] node_signature_arg, byte[] bitcoin_signature_arg);
+       // uint64_t AnnouncementSignatures_clone_ptr(LDKAnnouncementSignatures *NONNULL_PTR arg);
+       public static native long AnnouncementSignatures_clone_ptr(long arg);
        // struct LDKAnnouncementSignatures AnnouncementSignatures_clone(const struct LDKAnnouncementSignatures *NONNULL_PTR orig);
        public static native long AnnouncementSignatures_clone(long orig);
        // void NetAddress_free(struct LDKNetAddress this_ptr);
        public static native void NetAddress_free(long this_ptr);
+       // uint64_t NetAddress_clone_ptr(LDKNetAddress *NONNULL_PTR arg);
+       public static native long NetAddress_clone_ptr(long arg);
        // struct LDKNetAddress NetAddress_clone(const struct LDKNetAddress *NONNULL_PTR orig);
        public static native long NetAddress_clone(long orig);
        // struct LDKNetAddress NetAddress_ipv4(struct LDKFourBytes addr, uint16_t port);
@@ -3938,6 +4539,8 @@ public class bindings {
        public static native void UnsignedNodeAnnouncement_set_alias(long this_ptr, byte[] val);
        // void UnsignedNodeAnnouncement_set_addresses(struct LDKUnsignedNodeAnnouncement *NONNULL_PTR this_ptr, struct LDKCVec_NetAddressZ val);
        public static native void UnsignedNodeAnnouncement_set_addresses(long this_ptr, long[] val);
+       // uint64_t UnsignedNodeAnnouncement_clone_ptr(LDKUnsignedNodeAnnouncement *NONNULL_PTR arg);
+       public static native long UnsignedNodeAnnouncement_clone_ptr(long arg);
        // struct LDKUnsignedNodeAnnouncement UnsignedNodeAnnouncement_clone(const struct LDKUnsignedNodeAnnouncement *NONNULL_PTR orig);
        public static native long UnsignedNodeAnnouncement_clone(long orig);
        // void NodeAnnouncement_free(struct LDKNodeAnnouncement this_obj);
@@ -3952,6 +4555,8 @@ public class bindings {
        public static native void NodeAnnouncement_set_contents(long this_ptr, long val);
        // MUST_USE_RES struct LDKNodeAnnouncement NodeAnnouncement_new(struct LDKSignature signature_arg, struct LDKUnsignedNodeAnnouncement contents_arg);
        public static native long NodeAnnouncement_new(byte[] signature_arg, long contents_arg);
+       // uint64_t NodeAnnouncement_clone_ptr(LDKNodeAnnouncement *NONNULL_PTR arg);
+       public static native long NodeAnnouncement_clone_ptr(long arg);
        // struct LDKNodeAnnouncement NodeAnnouncement_clone(const struct LDKNodeAnnouncement *NONNULL_PTR orig);
        public static native long NodeAnnouncement_clone(long orig);
        // void UnsignedChannelAnnouncement_free(struct LDKUnsignedChannelAnnouncement this_obj);
@@ -3984,6 +4589,8 @@ public class bindings {
        public static native byte[] UnsignedChannelAnnouncement_get_bitcoin_key_2(long this_ptr);
        // void UnsignedChannelAnnouncement_set_bitcoin_key_2(struct LDKUnsignedChannelAnnouncement *NONNULL_PTR this_ptr, struct LDKPublicKey val);
        public static native void UnsignedChannelAnnouncement_set_bitcoin_key_2(long this_ptr, byte[] val);
+       // uint64_t UnsignedChannelAnnouncement_clone_ptr(LDKUnsignedChannelAnnouncement *NONNULL_PTR arg);
+       public static native long UnsignedChannelAnnouncement_clone_ptr(long arg);
        // struct LDKUnsignedChannelAnnouncement UnsignedChannelAnnouncement_clone(const struct LDKUnsignedChannelAnnouncement *NONNULL_PTR orig);
        public static native long UnsignedChannelAnnouncement_clone(long orig);
        // void ChannelAnnouncement_free(struct LDKChannelAnnouncement this_obj);
@@ -4010,6 +4617,8 @@ public class bindings {
        public static native void ChannelAnnouncement_set_contents(long this_ptr, long val);
        // MUST_USE_RES struct LDKChannelAnnouncement ChannelAnnouncement_new(struct LDKSignature node_signature_1_arg, struct LDKSignature node_signature_2_arg, struct LDKSignature bitcoin_signature_1_arg, struct LDKSignature bitcoin_signature_2_arg, struct LDKUnsignedChannelAnnouncement contents_arg);
        public static native long ChannelAnnouncement_new(byte[] node_signature_1_arg, byte[] node_signature_2_arg, byte[] bitcoin_signature_1_arg, byte[] bitcoin_signature_2_arg, long contents_arg);
+       // uint64_t ChannelAnnouncement_clone_ptr(LDKChannelAnnouncement *NONNULL_PTR arg);
+       public static native long ChannelAnnouncement_clone_ptr(long arg);
        // struct LDKChannelAnnouncement ChannelAnnouncement_clone(const struct LDKChannelAnnouncement *NONNULL_PTR orig);
        public static native long ChannelAnnouncement_clone(long orig);
        // void UnsignedChannelUpdate_free(struct LDKUnsignedChannelUpdate this_obj);
@@ -4046,6 +4655,8 @@ public class bindings {
        public static native int UnsignedChannelUpdate_get_fee_proportional_millionths(long this_ptr);
        // void UnsignedChannelUpdate_set_fee_proportional_millionths(struct LDKUnsignedChannelUpdate *NONNULL_PTR this_ptr, uint32_t val);
        public static native void UnsignedChannelUpdate_set_fee_proportional_millionths(long this_ptr, int val);
+       // uint64_t UnsignedChannelUpdate_clone_ptr(LDKUnsignedChannelUpdate *NONNULL_PTR arg);
+       public static native long UnsignedChannelUpdate_clone_ptr(long arg);
        // struct LDKUnsignedChannelUpdate UnsignedChannelUpdate_clone(const struct LDKUnsignedChannelUpdate *NONNULL_PTR orig);
        public static native long UnsignedChannelUpdate_clone(long orig);
        // void ChannelUpdate_free(struct LDKChannelUpdate this_obj);
@@ -4060,6 +4671,8 @@ public class bindings {
        public static native void ChannelUpdate_set_contents(long this_ptr, long val);
        // MUST_USE_RES struct LDKChannelUpdate ChannelUpdate_new(struct LDKSignature signature_arg, struct LDKUnsignedChannelUpdate contents_arg);
        public static native long ChannelUpdate_new(byte[] signature_arg, long contents_arg);
+       // uint64_t ChannelUpdate_clone_ptr(LDKChannelUpdate *NONNULL_PTR arg);
+       public static native long ChannelUpdate_clone_ptr(long arg);
        // struct LDKChannelUpdate ChannelUpdate_clone(const struct LDKChannelUpdate *NONNULL_PTR orig);
        public static native long ChannelUpdate_clone(long orig);
        // void QueryChannelRange_free(struct LDKQueryChannelRange this_obj);
@@ -4078,6 +4691,8 @@ public class bindings {
        public static native void QueryChannelRange_set_number_of_blocks(long this_ptr, int val);
        // MUST_USE_RES struct LDKQueryChannelRange QueryChannelRange_new(struct LDKThirtyTwoBytes chain_hash_arg, uint32_t first_blocknum_arg, uint32_t number_of_blocks_arg);
        public static native long QueryChannelRange_new(byte[] chain_hash_arg, int first_blocknum_arg, int number_of_blocks_arg);
+       // uint64_t QueryChannelRange_clone_ptr(LDKQueryChannelRange *NONNULL_PTR arg);
+       public static native long QueryChannelRange_clone_ptr(long arg);
        // struct LDKQueryChannelRange QueryChannelRange_clone(const struct LDKQueryChannelRange *NONNULL_PTR orig);
        public static native long QueryChannelRange_clone(long orig);
        // void ReplyChannelRange_free(struct LDKReplyChannelRange this_obj);
@@ -4102,6 +4717,8 @@ public class bindings {
        public static native void ReplyChannelRange_set_short_channel_ids(long this_ptr, long[] val);
        // MUST_USE_RES struct LDKReplyChannelRange ReplyChannelRange_new(struct LDKThirtyTwoBytes chain_hash_arg, uint32_t first_blocknum_arg, uint32_t number_of_blocks_arg, bool sync_complete_arg, struct LDKCVec_u64Z short_channel_ids_arg);
        public static native long ReplyChannelRange_new(byte[] chain_hash_arg, int first_blocknum_arg, int number_of_blocks_arg, boolean sync_complete_arg, long[] short_channel_ids_arg);
+       // uint64_t ReplyChannelRange_clone_ptr(LDKReplyChannelRange *NONNULL_PTR arg);
+       public static native long ReplyChannelRange_clone_ptr(long arg);
        // struct LDKReplyChannelRange ReplyChannelRange_clone(const struct LDKReplyChannelRange *NONNULL_PTR orig);
        public static native long ReplyChannelRange_clone(long orig);
        // void QueryShortChannelIds_free(struct LDKQueryShortChannelIds this_obj);
@@ -4114,6 +4731,8 @@ public class bindings {
        public static native void QueryShortChannelIds_set_short_channel_ids(long this_ptr, long[] val);
        // MUST_USE_RES struct LDKQueryShortChannelIds QueryShortChannelIds_new(struct LDKThirtyTwoBytes chain_hash_arg, struct LDKCVec_u64Z short_channel_ids_arg);
        public static native long QueryShortChannelIds_new(byte[] chain_hash_arg, long[] short_channel_ids_arg);
+       // uint64_t QueryShortChannelIds_clone_ptr(LDKQueryShortChannelIds *NONNULL_PTR arg);
+       public static native long QueryShortChannelIds_clone_ptr(long arg);
        // struct LDKQueryShortChannelIds QueryShortChannelIds_clone(const struct LDKQueryShortChannelIds *NONNULL_PTR orig);
        public static native long QueryShortChannelIds_clone(long orig);
        // void ReplyShortChannelIdsEnd_free(struct LDKReplyShortChannelIdsEnd this_obj);
@@ -4128,6 +4747,8 @@ public class bindings {
        public static native void ReplyShortChannelIdsEnd_set_full_information(long this_ptr, boolean val);
        // MUST_USE_RES struct LDKReplyShortChannelIdsEnd ReplyShortChannelIdsEnd_new(struct LDKThirtyTwoBytes chain_hash_arg, bool full_information_arg);
        public static native long ReplyShortChannelIdsEnd_new(byte[] chain_hash_arg, boolean full_information_arg);
+       // uint64_t ReplyShortChannelIdsEnd_clone_ptr(LDKReplyShortChannelIdsEnd *NONNULL_PTR arg);
+       public static native long ReplyShortChannelIdsEnd_clone_ptr(long arg);
        // struct LDKReplyShortChannelIdsEnd ReplyShortChannelIdsEnd_clone(const struct LDKReplyShortChannelIdsEnd *NONNULL_PTR orig);
        public static native long ReplyShortChannelIdsEnd_clone(long orig);
        // void GossipTimestampFilter_free(struct LDKGossipTimestampFilter this_obj);
@@ -4146,10 +4767,14 @@ public class bindings {
        public static native void GossipTimestampFilter_set_timestamp_range(long this_ptr, int val);
        // MUST_USE_RES struct LDKGossipTimestampFilter GossipTimestampFilter_new(struct LDKThirtyTwoBytes chain_hash_arg, uint32_t first_timestamp_arg, uint32_t timestamp_range_arg);
        public static native long GossipTimestampFilter_new(byte[] chain_hash_arg, int first_timestamp_arg, int timestamp_range_arg);
+       // uint64_t GossipTimestampFilter_clone_ptr(LDKGossipTimestampFilter *NONNULL_PTR arg);
+       public static native long GossipTimestampFilter_clone_ptr(long arg);
        // struct LDKGossipTimestampFilter GossipTimestampFilter_clone(const struct LDKGossipTimestampFilter *NONNULL_PTR orig);
        public static native long GossipTimestampFilter_clone(long orig);
        // void ErrorAction_free(struct LDKErrorAction this_ptr);
        public static native void ErrorAction_free(long this_ptr);
+       // uint64_t ErrorAction_clone_ptr(LDKErrorAction *NONNULL_PTR arg);
+       public static native long ErrorAction_clone_ptr(long arg);
        // struct LDKErrorAction ErrorAction_clone(const struct LDKErrorAction *NONNULL_PTR orig);
        public static native long ErrorAction_clone(long orig);
        // struct LDKErrorAction ErrorAction_disconnect_peer(struct LDKErrorMessage msg);
@@ -4172,6 +4797,8 @@ public class bindings {
        public static native void LightningError_set_action(long this_ptr, long val);
        // MUST_USE_RES struct LDKLightningError LightningError_new(struct LDKStr err_arg, struct LDKErrorAction action_arg);
        public static native long LightningError_new(String err_arg, long action_arg);
+       // uint64_t LightningError_clone_ptr(LDKLightningError *NONNULL_PTR arg);
+       public static native long LightningError_clone_ptr(long arg);
        // struct LDKLightningError LightningError_clone(const struct LDKLightningError *NONNULL_PTR orig);
        public static native long LightningError_clone(long orig);
        // void CommitmentUpdate_free(struct LDKCommitmentUpdate this_obj);
@@ -4202,6 +4829,8 @@ public class bindings {
        public static native void CommitmentUpdate_set_commitment_signed(long this_ptr, long val);
        // MUST_USE_RES struct LDKCommitmentUpdate CommitmentUpdate_new(struct LDKCVec_UpdateAddHTLCZ update_add_htlcs_arg, struct LDKCVec_UpdateFulfillHTLCZ update_fulfill_htlcs_arg, struct LDKCVec_UpdateFailHTLCZ update_fail_htlcs_arg, struct LDKCVec_UpdateFailMalformedHTLCZ update_fail_malformed_htlcs_arg, struct LDKUpdateFee update_fee_arg, struct LDKCommitmentSigned commitment_signed_arg);
        public static native long CommitmentUpdate_new(long[] update_add_htlcs_arg, long[] update_fulfill_htlcs_arg, long[] update_fail_htlcs_arg, long[] update_fail_malformed_htlcs_arg, long update_fee_arg, long commitment_signed_arg);
+       // uint64_t CommitmentUpdate_clone_ptr(LDKCommitmentUpdate *NONNULL_PTR arg);
+       public static native long CommitmentUpdate_clone_ptr(long arg);
        // struct LDKCommitmentUpdate CommitmentUpdate_clone(const struct LDKCommitmentUpdate *NONNULL_PTR orig);
        public static native long CommitmentUpdate_clone(long orig);
        // void ChannelMessageHandler_free(struct LDKChannelMessageHandler this_ptr);
@@ -4372,6 +5001,8 @@ public class bindings {
        public static native void MessageHandler_set_route_handler(long this_ptr, long val);
        // MUST_USE_RES struct LDKMessageHandler MessageHandler_new(struct LDKChannelMessageHandler chan_handler_arg, struct LDKRoutingMessageHandler route_handler_arg);
        public static native long MessageHandler_new(long chan_handler_arg, long route_handler_arg);
+       // uint64_t SocketDescriptor_clone_ptr(LDKSocketDescriptor *NONNULL_PTR arg);
+       public static native long SocketDescriptor_clone_ptr(long arg);
        // struct LDKSocketDescriptor SocketDescriptor_clone(const struct LDKSocketDescriptor *NONNULL_PTR orig);
        public static native long SocketDescriptor_clone(long orig);
        // void SocketDescriptor_free(struct LDKSocketDescriptor this_ptr);
@@ -4384,6 +5015,8 @@ public class bindings {
        public static native void PeerHandleError_set_no_connection_possible(long this_ptr, boolean val);
        // MUST_USE_RES struct LDKPeerHandleError PeerHandleError_new(bool no_connection_possible_arg);
        public static native long PeerHandleError_new(boolean no_connection_possible_arg);
+       // uint64_t PeerHandleError_clone_ptr(LDKPeerHandleError *NONNULL_PTR arg);
+       public static native long PeerHandleError_clone_ptr(long arg);
        // struct LDKPeerHandleError PeerHandleError_clone(const struct LDKPeerHandleError *NONNULL_PTR orig);
        public static native long PeerHandleError_clone(long orig);
        // void PeerManager_free(struct LDKPeerManager this_obj);
@@ -4446,6 +5079,8 @@ public class bindings {
        public static native void TxCreationKeys_set_broadcaster_delayed_payment_key(long this_ptr, byte[] val);
        // MUST_USE_RES struct LDKTxCreationKeys TxCreationKeys_new(struct LDKPublicKey per_commitment_point_arg, struct LDKPublicKey revocation_key_arg, struct LDKPublicKey broadcaster_htlc_key_arg, struct LDKPublicKey countersignatory_htlc_key_arg, struct LDKPublicKey broadcaster_delayed_payment_key_arg);
        public static native long TxCreationKeys_new(byte[] per_commitment_point_arg, byte[] revocation_key_arg, byte[] broadcaster_htlc_key_arg, byte[] countersignatory_htlc_key_arg, byte[] broadcaster_delayed_payment_key_arg);
+       // uint64_t TxCreationKeys_clone_ptr(LDKTxCreationKeys *NONNULL_PTR arg);
+       public static native long TxCreationKeys_clone_ptr(long arg);
        // struct LDKTxCreationKeys TxCreationKeys_clone(const struct LDKTxCreationKeys *NONNULL_PTR orig);
        public static native long TxCreationKeys_clone(long orig);
        // struct LDKCVec_u8Z TxCreationKeys_write(const struct LDKTxCreationKeys *NONNULL_PTR obj);
@@ -4476,6 +5111,8 @@ public class bindings {
        public static native void ChannelPublicKeys_set_htlc_basepoint(long this_ptr, byte[] val);
        // MUST_USE_RES struct LDKChannelPublicKeys ChannelPublicKeys_new(struct LDKPublicKey funding_pubkey_arg, struct LDKPublicKey revocation_basepoint_arg, struct LDKPublicKey payment_point_arg, struct LDKPublicKey delayed_payment_basepoint_arg, struct LDKPublicKey htlc_basepoint_arg);
        public static native long ChannelPublicKeys_new(byte[] funding_pubkey_arg, byte[] revocation_basepoint_arg, byte[] payment_point_arg, byte[] delayed_payment_basepoint_arg, byte[] htlc_basepoint_arg);
+       // uint64_t ChannelPublicKeys_clone_ptr(LDKChannelPublicKeys *NONNULL_PTR arg);
+       public static native long ChannelPublicKeys_clone_ptr(long arg);
        // struct LDKChannelPublicKeys ChannelPublicKeys_clone(const struct LDKChannelPublicKeys *NONNULL_PTR orig);
        public static native long ChannelPublicKeys_clone(long orig);
        // struct LDKCVec_u8Z ChannelPublicKeys_write(const struct LDKChannelPublicKeys *NONNULL_PTR obj);
@@ -4512,6 +5149,8 @@ public class bindings {
        public static native void HTLCOutputInCommitment_set_transaction_output_index(long this_ptr, long val);
        // MUST_USE_RES struct LDKHTLCOutputInCommitment HTLCOutputInCommitment_new(bool offered_arg, uint64_t amount_msat_arg, uint32_t cltv_expiry_arg, struct LDKThirtyTwoBytes payment_hash_arg, struct LDKCOption_u32Z transaction_output_index_arg);
        public static native long HTLCOutputInCommitment_new(boolean offered_arg, long amount_msat_arg, int cltv_expiry_arg, byte[] payment_hash_arg, long transaction_output_index_arg);
+       // uint64_t HTLCOutputInCommitment_clone_ptr(LDKHTLCOutputInCommitment *NONNULL_PTR arg);
+       public static native long HTLCOutputInCommitment_clone_ptr(long arg);
        // struct LDKHTLCOutputInCommitment HTLCOutputInCommitment_clone(const struct LDKHTLCOutputInCommitment *NONNULL_PTR orig);
        public static native long HTLCOutputInCommitment_clone(long orig);
        // struct LDKCVec_u8Z HTLCOutputInCommitment_write(const struct LDKHTLCOutputInCommitment *NONNULL_PTR obj);
@@ -4548,6 +5187,8 @@ public class bindings {
        public static native void ChannelTransactionParameters_set_funding_outpoint(long this_ptr, long val);
        // MUST_USE_RES struct LDKChannelTransactionParameters ChannelTransactionParameters_new(struct LDKChannelPublicKeys holder_pubkeys_arg, uint16_t holder_selected_contest_delay_arg, bool is_outbound_from_holder_arg, struct LDKCounterpartyChannelTransactionParameters counterparty_parameters_arg, struct LDKOutPoint funding_outpoint_arg);
        public static native long ChannelTransactionParameters_new(long holder_pubkeys_arg, short holder_selected_contest_delay_arg, boolean is_outbound_from_holder_arg, long counterparty_parameters_arg, long funding_outpoint_arg);
+       // uint64_t ChannelTransactionParameters_clone_ptr(LDKChannelTransactionParameters *NONNULL_PTR arg);
+       public static native long ChannelTransactionParameters_clone_ptr(long arg);
        // struct LDKChannelTransactionParameters ChannelTransactionParameters_clone(const struct LDKChannelTransactionParameters *NONNULL_PTR orig);
        public static native long ChannelTransactionParameters_clone(long orig);
        // void CounterpartyChannelTransactionParameters_free(struct LDKCounterpartyChannelTransactionParameters this_obj);
@@ -4562,6 +5203,8 @@ public class bindings {
        public static native void CounterpartyChannelTransactionParameters_set_selected_contest_delay(long this_ptr, short val);
        // MUST_USE_RES struct LDKCounterpartyChannelTransactionParameters CounterpartyChannelTransactionParameters_new(struct LDKChannelPublicKeys pubkeys_arg, uint16_t selected_contest_delay_arg);
        public static native long CounterpartyChannelTransactionParameters_new(long pubkeys_arg, short selected_contest_delay_arg);
+       // uint64_t CounterpartyChannelTransactionParameters_clone_ptr(LDKCounterpartyChannelTransactionParameters *NONNULL_PTR arg);
+       public static native long CounterpartyChannelTransactionParameters_clone_ptr(long arg);
        // struct LDKCounterpartyChannelTransactionParameters CounterpartyChannelTransactionParameters_clone(const struct LDKCounterpartyChannelTransactionParameters *NONNULL_PTR orig);
        public static native long CounterpartyChannelTransactionParameters_clone(long orig);
        // MUST_USE_RES bool ChannelTransactionParameters_is_populated(const struct LDKChannelTransactionParameters *NONNULL_PTR this_arg);
@@ -4598,6 +5241,8 @@ public class bindings {
        public static native void HolderCommitmentTransaction_set_counterparty_sig(long this_ptr, byte[] val);
        // void HolderCommitmentTransaction_set_counterparty_htlc_sigs(struct LDKHolderCommitmentTransaction *NONNULL_PTR this_ptr, struct LDKCVec_SignatureZ val);
        public static native void HolderCommitmentTransaction_set_counterparty_htlc_sigs(long this_ptr, byte[][] val);
+       // uint64_t HolderCommitmentTransaction_clone_ptr(LDKHolderCommitmentTransaction *NONNULL_PTR arg);
+       public static native long HolderCommitmentTransaction_clone_ptr(long arg);
        // struct LDKHolderCommitmentTransaction HolderCommitmentTransaction_clone(const struct LDKHolderCommitmentTransaction *NONNULL_PTR orig);
        public static native long HolderCommitmentTransaction_clone(long orig);
        // struct LDKCVec_u8Z HolderCommitmentTransaction_write(const struct LDKHolderCommitmentTransaction *NONNULL_PTR obj);
@@ -4618,6 +5263,8 @@ public class bindings {
        public static native void BuiltCommitmentTransaction_set_txid(long this_ptr, byte[] val);
        // MUST_USE_RES struct LDKBuiltCommitmentTransaction BuiltCommitmentTransaction_new(struct LDKTransaction transaction_arg, struct LDKThirtyTwoBytes txid_arg);
        public static native long BuiltCommitmentTransaction_new(byte[] transaction_arg, byte[] txid_arg);
+       // uint64_t BuiltCommitmentTransaction_clone_ptr(LDKBuiltCommitmentTransaction *NONNULL_PTR arg);
+       public static native long BuiltCommitmentTransaction_clone_ptr(long arg);
        // struct LDKBuiltCommitmentTransaction BuiltCommitmentTransaction_clone(const struct LDKBuiltCommitmentTransaction *NONNULL_PTR orig);
        public static native long BuiltCommitmentTransaction_clone(long orig);
        // struct LDKCVec_u8Z BuiltCommitmentTransaction_write(const struct LDKBuiltCommitmentTransaction *NONNULL_PTR obj);
@@ -4630,6 +5277,8 @@ public class bindings {
        public static native byte[] BuiltCommitmentTransaction_sign(long this_arg, byte[] funding_key, byte[] funding_redeemscript, long channel_value_satoshis);
        // void ClosingTransaction_free(struct LDKClosingTransaction this_obj);
        public static native void ClosingTransaction_free(long this_obj);
+       // uint64_t ClosingTransaction_clone_ptr(LDKClosingTransaction *NONNULL_PTR arg);
+       public static native long ClosingTransaction_clone_ptr(long arg);
        // struct LDKClosingTransaction ClosingTransaction_clone(const struct LDKClosingTransaction *NONNULL_PTR orig);
        public static native long ClosingTransaction_clone(long orig);
        // uint64_t ClosingTransaction_hash(const struct LDKClosingTransaction *NONNULL_PTR o);
@@ -4658,6 +5307,8 @@ public class bindings {
        public static native byte[] TrustedClosingTransaction_sign(long this_arg, byte[] funding_key, byte[] funding_redeemscript, long channel_value_satoshis);
        // void CommitmentTransaction_free(struct LDKCommitmentTransaction this_obj);
        public static native void CommitmentTransaction_free(long this_obj);
+       // uint64_t CommitmentTransaction_clone_ptr(LDKCommitmentTransaction *NONNULL_PTR arg);
+       public static native long CommitmentTransaction_clone_ptr(long arg);
        // struct LDKCommitmentTransaction CommitmentTransaction_clone(const struct LDKCommitmentTransaction *NONNULL_PTR orig);
        public static native long CommitmentTransaction_clone(long orig);
        // struct LDKCVec_u8Z CommitmentTransaction_write(const struct LDKCommitmentTransaction *NONNULL_PTR obj);
@@ -4696,12 +5347,20 @@ public class bindings {
        public static native boolean ChannelFeatures_eq(long a, long b);
        // bool InvoiceFeatures_eq(const struct LDKInvoiceFeatures *NONNULL_PTR a, const struct LDKInvoiceFeatures *NONNULL_PTR b);
        public static native boolean InvoiceFeatures_eq(long a, long b);
+       // uint64_t InitFeatures_clone_ptr(LDKInitFeatures *NONNULL_PTR arg);
+       public static native long InitFeatures_clone_ptr(long arg);
        // struct LDKInitFeatures InitFeatures_clone(const struct LDKInitFeatures *NONNULL_PTR orig);
        public static native long InitFeatures_clone(long orig);
+       // uint64_t NodeFeatures_clone_ptr(LDKNodeFeatures *NONNULL_PTR arg);
+       public static native long NodeFeatures_clone_ptr(long arg);
        // struct LDKNodeFeatures NodeFeatures_clone(const struct LDKNodeFeatures *NONNULL_PTR orig);
        public static native long NodeFeatures_clone(long orig);
+       // uint64_t ChannelFeatures_clone_ptr(LDKChannelFeatures *NONNULL_PTR arg);
+       public static native long ChannelFeatures_clone_ptr(long arg);
        // struct LDKChannelFeatures ChannelFeatures_clone(const struct LDKChannelFeatures *NONNULL_PTR orig);
        public static native long ChannelFeatures_clone(long orig);
+       // uint64_t InvoiceFeatures_clone_ptr(LDKInvoiceFeatures *NONNULL_PTR arg);
+       public static native long InvoiceFeatures_clone_ptr(long arg);
        // struct LDKInvoiceFeatures InvoiceFeatures_clone(const struct LDKInvoiceFeatures *NONNULL_PTR orig);
        public static native long InvoiceFeatures_clone(long orig);
        // void InitFeatures_free(struct LDKInitFeatures this_obj);
@@ -4760,6 +5419,8 @@ public class bindings {
        public static native long InvoiceFeatures_read(byte[] ser);
        // void ShutdownScript_free(struct LDKShutdownScript this_obj);
        public static native void ShutdownScript_free(long this_obj);
+       // uint64_t ShutdownScript_clone_ptr(LDKShutdownScript *NONNULL_PTR arg);
+       public static native long ShutdownScript_clone_ptr(long arg);
        // struct LDKShutdownScript ShutdownScript_clone(const struct LDKShutdownScript *NONNULL_PTR orig);
        public static native long ShutdownScript_clone(long orig);
        // void InvalidShutdownScript_free(struct LDKInvalidShutdownScript this_obj);
@@ -4770,6 +5431,8 @@ public class bindings {
        public static native void InvalidShutdownScript_set_script(long this_ptr, byte[] val);
        // MUST_USE_RES struct LDKInvalidShutdownScript InvalidShutdownScript_new(struct LDKCVec_u8Z script_arg);
        public static native long InvalidShutdownScript_new(byte[] script_arg);
+       // uint64_t InvalidShutdownScript_clone_ptr(LDKInvalidShutdownScript *NONNULL_PTR arg);
+       public static native long InvalidShutdownScript_clone_ptr(long arg);
        // struct LDKInvalidShutdownScript InvalidShutdownScript_clone(const struct LDKInvalidShutdownScript *NONNULL_PTR orig);
        public static native long InvalidShutdownScript_clone(long orig);
        // struct LDKCVec_u8Z ShutdownScript_write(const struct LDKShutdownScript *NONNULL_PTR obj);
@@ -4790,6 +5453,8 @@ public class bindings {
        public static native boolean ShutdownScript_is_compatible(long this_arg, long features);
        // void CustomMessageReader_free(struct LDKCustomMessageReader this_ptr);
        public static native void CustomMessageReader_free(long this_ptr);
+       // uint64_t Type_clone_ptr(LDKType *NONNULL_PTR arg);
+       public static native long Type_clone_ptr(long arg);
        // struct LDKType Type_clone(const struct LDKType *NONNULL_PTR orig);
        public static native long Type_clone(long orig);
        // void Type_free(struct LDKType this_ptr);
@@ -4804,6 +5469,8 @@ public class bindings {
        public static native byte[] LockableScore_write(long obj);
        // void NodeId_free(struct LDKNodeId this_obj);
        public static native void NodeId_free(long this_obj);
+       // uint64_t NodeId_clone_ptr(LDKNodeId *NONNULL_PTR arg);
+       public static native long NodeId_clone_ptr(long arg);
        // struct LDKNodeId NodeId_clone(const struct LDKNodeId *NONNULL_PTR orig);
        public static native long NodeId_clone(long orig);
        // MUST_USE_RES struct LDKNodeId NodeId_from_pubkey(struct LDKPublicKey pubkey);
@@ -4818,12 +5485,16 @@ public class bindings {
        public static native long NodeId_read(byte[] ser);
        // void NetworkGraph_free(struct LDKNetworkGraph this_obj);
        public static native void NetworkGraph_free(long this_obj);
+       // uint64_t NetworkGraph_clone_ptr(LDKNetworkGraph *NONNULL_PTR arg);
+       public static native long NetworkGraph_clone_ptr(long arg);
        // struct LDKNetworkGraph NetworkGraph_clone(const struct LDKNetworkGraph *NONNULL_PTR orig);
        public static native long NetworkGraph_clone(long orig);
        // void ReadOnlyNetworkGraph_free(struct LDKReadOnlyNetworkGraph this_obj);
        public static native void ReadOnlyNetworkGraph_free(long this_obj);
        // void NetworkUpdate_free(struct LDKNetworkUpdate this_ptr);
        public static native void NetworkUpdate_free(long this_ptr);
+       // uint64_t NetworkUpdate_clone_ptr(LDKNetworkUpdate *NONNULL_PTR arg);
+       public static native long NetworkUpdate_clone_ptr(long arg);
        // struct LDKNetworkUpdate NetworkUpdate_clone(const struct LDKNetworkUpdate *NONNULL_PTR orig);
        public static native long NetworkUpdate_clone(long orig);
        // struct LDKNetworkUpdate NetworkUpdate_channel_update_message(struct LDKChannelUpdate msg);
@@ -4834,6 +5505,8 @@ public class bindings {
        public static native long NetworkUpdate_node_failure(byte[] node_id, boolean is_permanent);
        // struct LDKCVec_u8Z NetworkUpdate_write(const struct LDKNetworkUpdate *NONNULL_PTR obj);
        public static native byte[] NetworkUpdate_write(long obj);
+       // struct LDKCResult_COption_NetworkUpdateZDecodeErrorZ NetworkUpdate_read(struct LDKu8slice ser);
+       public static native long NetworkUpdate_read(byte[] ser);
        // struct LDKEventHandler NetGraphMsgHandler_as_EventHandler(const struct LDKNetGraphMsgHandler *NONNULL_PTR this_arg);
        public static native long NetGraphMsgHandler_as_EventHandler(long this_arg);
        // void NetGraphMsgHandler_free(struct LDKNetGraphMsgHandler this_obj);
@@ -4878,6 +5551,8 @@ public class bindings {
        public static native void DirectionalChannelInfo_set_last_update_message(long this_ptr, long val);
        // MUST_USE_RES struct LDKDirectionalChannelInfo DirectionalChannelInfo_new(uint32_t last_update_arg, bool enabled_arg, uint16_t cltv_expiry_delta_arg, uint64_t htlc_minimum_msat_arg, struct LDKCOption_u64Z htlc_maximum_msat_arg, struct LDKRoutingFees fees_arg, struct LDKChannelUpdate last_update_message_arg);
        public static native long DirectionalChannelInfo_new(int last_update_arg, boolean enabled_arg, short cltv_expiry_delta_arg, long htlc_minimum_msat_arg, long htlc_maximum_msat_arg, long fees_arg, long last_update_message_arg);
+       // uint64_t DirectionalChannelInfo_clone_ptr(LDKDirectionalChannelInfo *NONNULL_PTR arg);
+       public static native long DirectionalChannelInfo_clone_ptr(long arg);
        // struct LDKDirectionalChannelInfo DirectionalChannelInfo_clone(const struct LDKDirectionalChannelInfo *NONNULL_PTR orig);
        public static native long DirectionalChannelInfo_clone(long orig);
        // struct LDKCVec_u8Z DirectionalChannelInfo_write(const struct LDKDirectionalChannelInfo *NONNULL_PTR obj);
@@ -4916,6 +5591,8 @@ public class bindings {
        public static native void ChannelInfo_set_announcement_message(long this_ptr, long val);
        // MUST_USE_RES struct LDKChannelInfo ChannelInfo_new(struct LDKChannelFeatures features_arg, struct LDKNodeId node_one_arg, struct LDKDirectionalChannelInfo one_to_two_arg, struct LDKNodeId node_two_arg, struct LDKDirectionalChannelInfo two_to_one_arg, struct LDKCOption_u64Z capacity_sats_arg, struct LDKChannelAnnouncement announcement_message_arg);
        public static native long ChannelInfo_new(long features_arg, long node_one_arg, long one_to_two_arg, long node_two_arg, long two_to_one_arg, long capacity_sats_arg, long announcement_message_arg);
+       // uint64_t ChannelInfo_clone_ptr(LDKChannelInfo *NONNULL_PTR arg);
+       public static native long ChannelInfo_clone_ptr(long arg);
        // struct LDKChannelInfo ChannelInfo_clone(const struct LDKChannelInfo *NONNULL_PTR orig);
        public static native long ChannelInfo_clone(long orig);
        // struct LDKCVec_u8Z ChannelInfo_write(const struct LDKChannelInfo *NONNULL_PTR obj);
@@ -4936,6 +5613,8 @@ public class bindings {
        public static native long RoutingFees_new(int base_msat_arg, int proportional_millionths_arg);
        // bool RoutingFees_eq(const struct LDKRoutingFees *NONNULL_PTR a, const struct LDKRoutingFees *NONNULL_PTR b);
        public static native boolean RoutingFees_eq(long a, long b);
+       // uint64_t RoutingFees_clone_ptr(LDKRoutingFees *NONNULL_PTR arg);
+       public static native long RoutingFees_clone_ptr(long arg);
        // struct LDKRoutingFees RoutingFees_clone(const struct LDKRoutingFees *NONNULL_PTR orig);
        public static native long RoutingFees_clone(long orig);
        // uint64_t RoutingFees_hash(const struct LDKRoutingFees *NONNULL_PTR o);
@@ -4970,6 +5649,8 @@ public class bindings {
        public static native void NodeAnnouncementInfo_set_announcement_message(long this_ptr, long val);
        // MUST_USE_RES struct LDKNodeAnnouncementInfo NodeAnnouncementInfo_new(struct LDKNodeFeatures features_arg, uint32_t last_update_arg, struct LDKThreeBytes rgb_arg, struct LDKThirtyTwoBytes alias_arg, struct LDKCVec_NetAddressZ addresses_arg, struct LDKNodeAnnouncement announcement_message_arg);
        public static native long NodeAnnouncementInfo_new(long features_arg, int last_update_arg, byte[] rgb_arg, byte[] alias_arg, long[] addresses_arg, long announcement_message_arg);
+       // uint64_t NodeAnnouncementInfo_clone_ptr(LDKNodeAnnouncementInfo *NONNULL_PTR arg);
+       public static native long NodeAnnouncementInfo_clone_ptr(long arg);
        // struct LDKNodeAnnouncementInfo NodeAnnouncementInfo_clone(const struct LDKNodeAnnouncementInfo *NONNULL_PTR orig);
        public static native long NodeAnnouncementInfo_clone(long orig);
        // struct LDKCVec_u8Z NodeAnnouncementInfo_write(const struct LDKNodeAnnouncementInfo *NONNULL_PTR obj);
@@ -4990,6 +5671,8 @@ public class bindings {
        public static native void NodeInfo_set_announcement_info(long this_ptr, long val);
        // MUST_USE_RES struct LDKNodeInfo NodeInfo_new(struct LDKCVec_u64Z channels_arg, struct LDKRoutingFees lowest_inbound_channel_fees_arg, struct LDKNodeAnnouncementInfo announcement_info_arg);
        public static native long NodeInfo_new(long[] channels_arg, long lowest_inbound_channel_fees_arg, long announcement_info_arg);
+       // uint64_t NodeInfo_clone_ptr(LDKNodeInfo *NONNULL_PTR arg);
+       public static native long NodeInfo_clone_ptr(long arg);
        // struct LDKNodeInfo NodeInfo_clone(const struct LDKNodeInfo *NONNULL_PTR orig);
        public static native long NodeInfo_clone(long orig);
        // struct LDKCVec_u8Z NodeInfo_write(const struct LDKNodeInfo *NONNULL_PTR obj);
@@ -5050,6 +5733,8 @@ public class bindings {
        public static native void RouteHop_set_cltv_expiry_delta(long this_ptr, int val);
        // MUST_USE_RES struct LDKRouteHop RouteHop_new(struct LDKPublicKey pubkey_arg, struct LDKNodeFeatures node_features_arg, uint64_t short_channel_id_arg, struct LDKChannelFeatures channel_features_arg, uint64_t fee_msat_arg, uint32_t cltv_expiry_delta_arg);
        public static native long RouteHop_new(byte[] pubkey_arg, long node_features_arg, long short_channel_id_arg, long channel_features_arg, long fee_msat_arg, int cltv_expiry_delta_arg);
+       // uint64_t RouteHop_clone_ptr(LDKRouteHop *NONNULL_PTR arg);
+       public static native long RouteHop_clone_ptr(long arg);
        // struct LDKRouteHop RouteHop_clone(const struct LDKRouteHop *NONNULL_PTR orig);
        public static native long RouteHop_clone(long orig);
        // uint64_t RouteHop_hash(const struct LDKRouteHop *NONNULL_PTR o);
@@ -5072,6 +5757,8 @@ public class bindings {
        public static native void Route_set_payee(long this_ptr, long val);
        // MUST_USE_RES struct LDKRoute Route_new(struct LDKCVec_CVec_RouteHopZZ paths_arg, struct LDKPayee payee_arg);
        public static native long Route_new(long[][] paths_arg, long payee_arg);
+       // uint64_t Route_clone_ptr(LDKRoute *NONNULL_PTR arg);
+       public static native long Route_clone_ptr(long arg);
        // struct LDKRoute Route_clone(const struct LDKRoute *NONNULL_PTR orig);
        public static native long Route_clone(long orig);
        // uint64_t Route_hash(const struct LDKRoute *NONNULL_PTR o);
@@ -5102,6 +5789,8 @@ public class bindings {
        public static native void RouteParameters_set_final_cltv_expiry_delta(long this_ptr, int val);
        // MUST_USE_RES struct LDKRouteParameters RouteParameters_new(struct LDKPayee payee_arg, uint64_t final_value_msat_arg, uint32_t final_cltv_expiry_delta_arg);
        public static native long RouteParameters_new(long payee_arg, long final_value_msat_arg, int final_cltv_expiry_delta_arg);
+       // uint64_t RouteParameters_clone_ptr(LDKRouteParameters *NONNULL_PTR arg);
+       public static native long RouteParameters_clone_ptr(long arg);
        // struct LDKRouteParameters RouteParameters_clone(const struct LDKRouteParameters *NONNULL_PTR orig);
        public static native long RouteParameters_clone(long orig);
        // struct LDKCVec_u8Z RouteParameters_write(const struct LDKRouteParameters *NONNULL_PTR obj);
@@ -5128,6 +5817,8 @@ public class bindings {
        public static native void Payee_set_expiry_time(long this_ptr, long val);
        // MUST_USE_RES struct LDKPayee Payee_new(struct LDKPublicKey pubkey_arg, struct LDKInvoiceFeatures features_arg, struct LDKCVec_RouteHintZ route_hints_arg, struct LDKCOption_u64Z expiry_time_arg);
        public static native long Payee_new(byte[] pubkey_arg, long features_arg, long[] route_hints_arg, long expiry_time_arg);
+       // uint64_t Payee_clone_ptr(LDKPayee *NONNULL_PTR arg);
+       public static native long Payee_clone_ptr(long arg);
        // struct LDKPayee Payee_clone(const struct LDKPayee *NONNULL_PTR orig);
        public static native long Payee_clone(long orig);
        // uint64_t Payee_hash(const struct LDKPayee *NONNULL_PTR o);
@@ -5150,6 +5841,8 @@ public class bindings {
        public static native void RouteHint_set_a(long this_ptr, long[] val);
        // MUST_USE_RES struct LDKRouteHint RouteHint_new(struct LDKCVec_RouteHintHopZ a_arg);
        public static native long RouteHint_new(long[] a_arg);
+       // uint64_t RouteHint_clone_ptr(LDKRouteHint *NONNULL_PTR arg);
+       public static native long RouteHint_clone_ptr(long arg);
        // struct LDKRouteHint RouteHint_clone(const struct LDKRouteHint *NONNULL_PTR orig);
        public static native long RouteHint_clone(long orig);
        // uint64_t RouteHint_hash(const struct LDKRouteHint *NONNULL_PTR o);
@@ -5188,6 +5881,8 @@ public class bindings {
        public static native void RouteHintHop_set_htlc_maximum_msat(long this_ptr, long val);
        // MUST_USE_RES struct LDKRouteHintHop RouteHintHop_new(struct LDKPublicKey src_node_id_arg, uint64_t short_channel_id_arg, struct LDKRoutingFees fees_arg, uint16_t cltv_expiry_delta_arg, struct LDKCOption_u64Z htlc_minimum_msat_arg, struct LDKCOption_u64Z htlc_maximum_msat_arg);
        public static native long RouteHintHop_new(byte[] src_node_id_arg, long short_channel_id_arg, long fees_arg, short cltv_expiry_delta_arg, long htlc_minimum_msat_arg, long htlc_maximum_msat_arg);
+       // uint64_t RouteHintHop_clone_ptr(LDKRouteHintHop *NONNULL_PTR arg);
+       public static native long RouteHintHop_clone_ptr(long arg);
        // struct LDKRouteHintHop RouteHintHop_clone(const struct LDKRouteHintHop *NONNULL_PTR orig);
        public static native long RouteHintHop_clone(long orig);
        // uint64_t RouteHintHop_hash(const struct LDKRouteHintHop *NONNULL_PTR o);
@@ -5262,12 +5957,16 @@ public class bindings {
        public static native void Invoice_free(long this_obj);
        // bool Invoice_eq(const struct LDKInvoice *NONNULL_PTR a, const struct LDKInvoice *NONNULL_PTR b);
        public static native boolean Invoice_eq(long a, long b);
+       // uint64_t Invoice_clone_ptr(LDKInvoice *NONNULL_PTR arg);
+       public static native long Invoice_clone_ptr(long arg);
        // struct LDKInvoice Invoice_clone(const struct LDKInvoice *NONNULL_PTR orig);
        public static native long Invoice_clone(long orig);
        // void SignedRawInvoice_free(struct LDKSignedRawInvoice this_obj);
        public static native void SignedRawInvoice_free(long this_obj);
        // bool SignedRawInvoice_eq(const struct LDKSignedRawInvoice *NONNULL_PTR a, const struct LDKSignedRawInvoice *NONNULL_PTR b);
        public static native boolean SignedRawInvoice_eq(long a, long b);
+       // uint64_t SignedRawInvoice_clone_ptr(LDKSignedRawInvoice *NONNULL_PTR arg);
+       public static native long SignedRawInvoice_clone_ptr(long arg);
        // struct LDKSignedRawInvoice SignedRawInvoice_clone(const struct LDKSignedRawInvoice *NONNULL_PTR orig);
        public static native long SignedRawInvoice_clone(long orig);
        // void RawInvoice_free(struct LDKRawInvoice this_obj);
@@ -5278,6 +5977,8 @@ public class bindings {
        public static native void RawInvoice_set_data(long this_ptr, long val);
        // bool RawInvoice_eq(const struct LDKRawInvoice *NONNULL_PTR a, const struct LDKRawInvoice *NONNULL_PTR b);
        public static native boolean RawInvoice_eq(long a, long b);
+       // uint64_t RawInvoice_clone_ptr(LDKRawInvoice *NONNULL_PTR arg);
+       public static native long RawInvoice_clone_ptr(long arg);
        // struct LDKRawInvoice RawInvoice_clone(const struct LDKRawInvoice *NONNULL_PTR orig);
        public static native long RawInvoice_clone(long orig);
        // void RawDataPart_free(struct LDKRawDataPart this_obj);
@@ -5288,12 +5989,16 @@ public class bindings {
        public static native void RawDataPart_set_timestamp(long this_ptr, long val);
        // bool RawDataPart_eq(const struct LDKRawDataPart *NONNULL_PTR a, const struct LDKRawDataPart *NONNULL_PTR b);
        public static native boolean RawDataPart_eq(long a, long b);
+       // uint64_t RawDataPart_clone_ptr(LDKRawDataPart *NONNULL_PTR arg);
+       public static native long RawDataPart_clone_ptr(long arg);
        // struct LDKRawDataPart RawDataPart_clone(const struct LDKRawDataPart *NONNULL_PTR orig);
        public static native long RawDataPart_clone(long orig);
        // void PositiveTimestamp_free(struct LDKPositiveTimestamp this_obj);
        public static native void PositiveTimestamp_free(long this_obj);
        // bool PositiveTimestamp_eq(const struct LDKPositiveTimestamp *NONNULL_PTR a, const struct LDKPositiveTimestamp *NONNULL_PTR b);
        public static native boolean PositiveTimestamp_eq(long a, long b);
+       // uint64_t PositiveTimestamp_clone_ptr(LDKPositiveTimestamp *NONNULL_PTR arg);
+       public static native long PositiveTimestamp_clone_ptr(long arg);
        // struct LDKPositiveTimestamp PositiveTimestamp_clone(const struct LDKPositiveTimestamp *NONNULL_PTR orig);
        public static native long PositiveTimestamp_clone(long orig);
        // enum LDKSiPrefix SiPrefix_clone(const enum LDKSiPrefix *NONNULL_PTR orig);
@@ -5328,6 +6033,8 @@ public class bindings {
        public static native boolean Currency_eq(long a, long b);
        // void Sha256_free(struct LDKSha256 this_obj);
        public static native void Sha256_free(long this_obj);
+       // uint64_t Sha256_clone_ptr(LDKSha256 *NONNULL_PTR arg);
+       public static native long Sha256_clone_ptr(long arg);
        // struct LDKSha256 Sha256_clone(const struct LDKSha256 *NONNULL_PTR orig);
        public static native long Sha256_clone(long orig);
        // uint64_t Sha256_hash(const struct LDKSha256 *NONNULL_PTR o);
@@ -5336,6 +6043,8 @@ public class bindings {
        public static native boolean Sha256_eq(long a, long b);
        // void Description_free(struct LDKDescription this_obj);
        public static native void Description_free(long this_obj);
+       // uint64_t Description_clone_ptr(LDKDescription *NONNULL_PTR arg);
+       public static native long Description_clone_ptr(long arg);
        // struct LDKDescription Description_clone(const struct LDKDescription *NONNULL_PTR orig);
        public static native long Description_clone(long orig);
        // uint64_t Description_hash(const struct LDKDescription *NONNULL_PTR o);
@@ -5350,6 +6059,8 @@ public class bindings {
        public static native void PayeePubKey_set_a(long this_ptr, byte[] val);
        // MUST_USE_RES struct LDKPayeePubKey PayeePubKey_new(struct LDKPublicKey a_arg);
        public static native long PayeePubKey_new(byte[] a_arg);
+       // uint64_t PayeePubKey_clone_ptr(LDKPayeePubKey *NONNULL_PTR arg);
+       public static native long PayeePubKey_clone_ptr(long arg);
        // struct LDKPayeePubKey PayeePubKey_clone(const struct LDKPayeePubKey *NONNULL_PTR orig);
        public static native long PayeePubKey_clone(long orig);
        // uint64_t PayeePubKey_hash(const struct LDKPayeePubKey *NONNULL_PTR o);
@@ -5358,6 +6069,8 @@ public class bindings {
        public static native boolean PayeePubKey_eq(long a, long b);
        // void ExpiryTime_free(struct LDKExpiryTime this_obj);
        public static native void ExpiryTime_free(long this_obj);
+       // uint64_t ExpiryTime_clone_ptr(LDKExpiryTime *NONNULL_PTR arg);
+       public static native long ExpiryTime_clone_ptr(long arg);
        // struct LDKExpiryTime ExpiryTime_clone(const struct LDKExpiryTime *NONNULL_PTR orig);
        public static native long ExpiryTime_clone(long orig);
        // uint64_t ExpiryTime_hash(const struct LDKExpiryTime *NONNULL_PTR o);
@@ -5372,6 +6085,8 @@ public class bindings {
        public static native void MinFinalCltvExpiry_set_a(long this_ptr, long val);
        // MUST_USE_RES struct LDKMinFinalCltvExpiry MinFinalCltvExpiry_new(uint64_t a_arg);
        public static native long MinFinalCltvExpiry_new(long a_arg);
+       // uint64_t MinFinalCltvExpiry_clone_ptr(LDKMinFinalCltvExpiry *NONNULL_PTR arg);
+       public static native long MinFinalCltvExpiry_clone_ptr(long arg);
        // struct LDKMinFinalCltvExpiry MinFinalCltvExpiry_clone(const struct LDKMinFinalCltvExpiry *NONNULL_PTR orig);
        public static native long MinFinalCltvExpiry_clone(long orig);
        // uint64_t MinFinalCltvExpiry_hash(const struct LDKMinFinalCltvExpiry *NONNULL_PTR o);
@@ -5380,6 +6095,8 @@ public class bindings {
        public static native boolean MinFinalCltvExpiry_eq(long a, long b);
        // void Fallback_free(struct LDKFallback this_ptr);
        public static native void Fallback_free(long this_ptr);
+       // uint64_t Fallback_clone_ptr(LDKFallback *NONNULL_PTR arg);
+       public static native long Fallback_clone_ptr(long arg);
        // struct LDKFallback Fallback_clone(const struct LDKFallback *NONNULL_PTR orig);
        public static native long Fallback_clone(long orig);
        // struct LDKFallback Fallback_seg_wit_program(struct LDKu5 version, struct LDKCVec_u8Z program);
@@ -5394,12 +6111,16 @@ public class bindings {
        public static native boolean Fallback_eq(long a, long b);
        // void InvoiceSignature_free(struct LDKInvoiceSignature this_obj);
        public static native void InvoiceSignature_free(long this_obj);
+       // uint64_t InvoiceSignature_clone_ptr(LDKInvoiceSignature *NONNULL_PTR arg);
+       public static native long InvoiceSignature_clone_ptr(long arg);
        // struct LDKInvoiceSignature InvoiceSignature_clone(const struct LDKInvoiceSignature *NONNULL_PTR orig);
        public static native long InvoiceSignature_clone(long orig);
        // bool InvoiceSignature_eq(const struct LDKInvoiceSignature *NONNULL_PTR a, const struct LDKInvoiceSignature *NONNULL_PTR b);
        public static native boolean InvoiceSignature_eq(long a, long b);
        // void PrivateRoute_free(struct LDKPrivateRoute this_obj);
        public static native void PrivateRoute_free(long this_obj);
+       // uint64_t PrivateRoute_clone_ptr(LDKPrivateRoute *NONNULL_PTR arg);
+       public static native long PrivateRoute_clone_ptr(long arg);
        // struct LDKPrivateRoute PrivateRoute_clone(const struct LDKPrivateRoute *NONNULL_PTR orig);
        public static native long PrivateRoute_clone(long orig);
        // uint64_t PrivateRoute_hash(const struct LDKPrivateRoute *NONNULL_PTR o);
@@ -5540,6 +6261,8 @@ public class bindings {
        public static native String SemanticError_to_str(long o);
        // void SignOrCreationError_free(struct LDKSignOrCreationError this_ptr);
        public static native void SignOrCreationError_free(long this_ptr);
+       // uint64_t SignOrCreationError_clone_ptr(LDKSignOrCreationError *NONNULL_PTR arg);
+       public static native long SignOrCreationError_clone_ptr(long arg);
        // struct LDKSignOrCreationError SignOrCreationError_clone(const struct LDKSignOrCreationError *NONNULL_PTR orig);
        public static native long SignOrCreationError_clone(long orig);
        // struct LDKSignOrCreationError SignOrCreationError_sign_error(void);
@@ -5564,6 +6287,8 @@ public class bindings {
        public static native void RetryAttempts_set_a(long this_ptr, long val);
        // MUST_USE_RES struct LDKRetryAttempts RetryAttempts_new(uintptr_t a_arg);
        public static native long RetryAttempts_new(long a_arg);
+       // uint64_t RetryAttempts_clone_ptr(LDKRetryAttempts *NONNULL_PTR arg);
+       public static native long RetryAttempts_clone_ptr(long arg);
        // struct LDKRetryAttempts RetryAttempts_clone(const struct LDKRetryAttempts *NONNULL_PTR orig);
        public static native long RetryAttempts_clone(long orig);
        // bool RetryAttempts_eq(const struct LDKRetryAttempts *NONNULL_PTR a, const struct LDKRetryAttempts *NONNULL_PTR b);
@@ -5572,6 +6297,8 @@ public class bindings {
        public static native long RetryAttempts_hash(long o);
        // void PaymentError_free(struct LDKPaymentError this_ptr);
        public static native void PaymentError_free(long this_ptr);
+       // uint64_t PaymentError_clone_ptr(LDKPaymentError *NONNULL_PTR arg);
+       public static native long PaymentError_clone_ptr(long arg);
        // struct LDKPaymentError PaymentError_clone(const struct LDKPaymentError *NONNULL_PTR orig);
        public static native long PaymentError_clone(long orig);
        // struct LDKPaymentError PaymentError_invoice(struct LDKStr a);
index e2613fd9e6a343a7655a5e40dcb0414d095f1d35..1410b0e51d6954c751f9b7528ab0bb9956d0636b 100644 (file)
@@ -42,6 +42,10 @@ public class APIError extends CommonBase {
                assert false; return null; // Unreachable without extending the (internal) bindings interface
        }
 
+       /**
+        * Indicates the API was wholly misused (see err for more). Cases where these can be returned
+        * are documented, but generally indicates some precondition of a function was violated.
+        */
        public final static class APIMisuseError extends APIError {
                /**
                 * A human-readable error message
@@ -52,6 +56,11 @@ public class APIError extends CommonBase {
                        this.err = obj.err;
                }
        }
+       /**
+        * Due to a high feerate, we were unable to complete the request.
+        * For example, this may be returned if the feerate implies we cannot open a channel at the
+        * requested value, but opening a larger channel would succeed.
+        */
        public final static class FeeRateTooHigh extends APIError {
                /**
                 * A human-readable error message
@@ -67,6 +76,10 @@ public class APIError extends CommonBase {
                        this.feerate = obj.feerate;
                }
        }
+       /**
+        * A malformed Route was provided (eg overflowed value, node id mismatch, overly-looped route,
+        * too-many-hops, etc).
+        */
        public final static class RouteError extends APIError {
                /**
                 * A human-readable error message
@@ -77,6 +90,11 @@ public class APIError extends CommonBase {
                        this.err = obj.err;
                }
        }
+       /**
+        * We were unable to complete the request as the Channel required to do so is unable to
+        * complete the request (or was not found). This can take many forms, including disconnected
+        * peer, channel at capacity, channel shutting down, etc.
+        */
        public final static class ChannelUnavailable extends APIError {
                /**
                 * A human-readable error message
@@ -87,11 +105,25 @@ public class APIError extends CommonBase {
                        this.err = obj.err;
                }
        }
+       /**
+        * An attempt to call watch/update_channel returned an Err (ie you did this!), causing the
+        * attempted action to fail.
+        */
        public final static class MonitorUpdateFailed extends APIError {
                private MonitorUpdateFailed(long ptr, bindings.LDKAPIError.MonitorUpdateFailed obj) {
                        super(null, ptr);
                }
        }
+       /**
+        * [`KeysInterface::get_shutdown_scriptpubkey`] returned a shutdown scriptpubkey incompatible
+        * with the channel counterparty as negotiated in [`InitFeatures`].
+        * 
+        * Using a SegWit v0 script should resolve this issue. If you cannot, you won't be able to open
+        * a channel or cooperatively close one with this peer (and will have to force-close instead).
+        * 
+        * [`KeysInterface::get_shutdown_scriptpubkey`]: crate::chain::keysinterface::KeysInterface::get_shutdown_scriptpubkey
+        * [`InitFeatures`]: crate::ln::features::InitFeatures
+        */
        public final static class IncompatibleShutdownScript extends APIError {
                /**
                 * The incompatible shutdown script.
@@ -105,6 +137,11 @@ public class APIError extends CommonBase {
                        this.script = script_hu_conv;
                }
        }
+       long clone_ptr() {
+               long ret = bindings.APIError_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the APIError
         */
index 09125fe31b528e7520fcaf7b0d758a1576b6f000..ada6053ccc4d8674ad118b70276de89cf16f5710 100644 (file)
@@ -31,7 +31,7 @@ public class AcceptChannel extends CommonBase {
         * A temporary channel ID, until the funding outpoint is announced
         */
        public void set_temporary_channel_id(byte[] val) {
-               bindings.AcceptChannel_set_temporary_channel_id(this.ptr, val);
+               bindings.AcceptChannel_set_temporary_channel_id(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        /**
@@ -151,7 +151,7 @@ public class AcceptChannel extends CommonBase {
         * The sender's key controlling the funding transaction
         */
        public void set_funding_pubkey(byte[] val) {
-               bindings.AcceptChannel_set_funding_pubkey(this.ptr, val);
+               bindings.AcceptChannel_set_funding_pubkey(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        /**
@@ -166,7 +166,7 @@ public class AcceptChannel extends CommonBase {
         * Used to derive a revocation key for transactions broadcast by counterparty
         */
        public void set_revocation_basepoint(byte[] val) {
-               bindings.AcceptChannel_set_revocation_basepoint(this.ptr, val);
+               bindings.AcceptChannel_set_revocation_basepoint(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        /**
@@ -181,7 +181,7 @@ public class AcceptChannel extends CommonBase {
         * A payment key to sender for transactions broadcast by counterparty
         */
        public void set_payment_point(byte[] val) {
-               bindings.AcceptChannel_set_payment_point(this.ptr, val);
+               bindings.AcceptChannel_set_payment_point(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        /**
@@ -196,7 +196,7 @@ public class AcceptChannel extends CommonBase {
         * Used to derive a payment key to sender for transactions broadcast by sender
         */
        public void set_delayed_payment_basepoint(byte[] val) {
-               bindings.AcceptChannel_set_delayed_payment_basepoint(this.ptr, val);
+               bindings.AcceptChannel_set_delayed_payment_basepoint(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        /**
@@ -211,7 +211,7 @@ public class AcceptChannel extends CommonBase {
         * Used to derive an HTLC payment key to sender for transactions broadcast by counterparty
         */
        public void set_htlc_basepoint(byte[] val) {
-               bindings.AcceptChannel_set_htlc_basepoint(this.ptr, val);
+               bindings.AcceptChannel_set_htlc_basepoint(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        /**
@@ -226,7 +226,12 @@ public class AcceptChannel extends CommonBase {
         * The first to-be-broadcast-by-sender transaction's per commitment point
         */
        public void set_first_per_commitment_point(byte[] val) {
-               bindings.AcceptChannel_set_first_per_commitment_point(this.ptr, val);
+               bindings.AcceptChannel_set_first_per_commitment_point(this.ptr, InternalUtils.check_arr_len(val, 33));
+       }
+
+       long clone_ptr() {
+               long ret = bindings.AcceptChannel_clone_ptr(this.ptr);
+               return ret;
        }
 
        /**
index 47f0c93667197bef58cd6ebd3fea387743901869..e4c1954e37638016036de6ca027d33ecd2447186 100644 (file)
@@ -40,7 +40,7 @@ public class Access extends CommonBase {
                impl_holder.held = new Access(new bindings.LDKAccess() {
                        @Override public long get_utxo(byte[] genesis_hash, long short_channel_id) {
                                Result_TxOutAccessErrorZ ret = arg.get_utxo(genesis_hash, short_channel_id);
-                               long result = ret != null ? ret.ptr : 0;
+                               long result = ret == null ? 0 : ret.clone_ptr();
                                return result;
                        }
                });
@@ -54,7 +54,7 @@ public class Access extends CommonBase {
         * [`short_channel_id`]: https://github.com/lightningnetwork/lightning-rfc/blob/master/07-routing-gossip.md#definition-of-short_channel_id
         */
        public Result_TxOutAccessErrorZ get_utxo(byte[] genesis_hash, long short_channel_id) {
-               long ret = bindings.Access_get_utxo(this.ptr, genesis_hash, short_channel_id);
+               long ret = bindings.Access_get_utxo(this.ptr, InternalUtils.check_arr_len(genesis_hash, 32), short_channel_id);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_TxOutAccessErrorZ ret_hu_conv = Result_TxOutAccessErrorZ.constr_from_ptr(ret);
                return ret_hu_conv;
index 61e6ce021a182062d22cc870cf2633a266bb88fd..48e31a41e197d5baae888be8a0aff60145877247 100644 (file)
@@ -31,7 +31,7 @@ public class AnnouncementSignatures extends CommonBase {
         * The channel ID
         */
        public void set_channel_id(byte[] val) {
-               bindings.AnnouncementSignatures_set_channel_id(this.ptr, val);
+               bindings.AnnouncementSignatures_set_channel_id(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        /**
@@ -61,7 +61,7 @@ public class AnnouncementSignatures extends CommonBase {
         * A signature by the node key
         */
        public void set_node_signature(byte[] val) {
-               bindings.AnnouncementSignatures_set_node_signature(this.ptr, val);
+               bindings.AnnouncementSignatures_set_node_signature(this.ptr, InternalUtils.check_arr_len(val, 64));
        }
 
        /**
@@ -76,20 +76,25 @@ public class AnnouncementSignatures extends CommonBase {
         * A signature by the funding key
         */
        public void set_bitcoin_signature(byte[] val) {
-               bindings.AnnouncementSignatures_set_bitcoin_signature(this.ptr, val);
+               bindings.AnnouncementSignatures_set_bitcoin_signature(this.ptr, InternalUtils.check_arr_len(val, 64));
        }
 
        /**
         * Constructs a new AnnouncementSignatures given each field
         */
        public static AnnouncementSignatures of(byte[] channel_id_arg, long short_channel_id_arg, byte[] node_signature_arg, byte[] bitcoin_signature_arg) {
-               long ret = bindings.AnnouncementSignatures_new(channel_id_arg, short_channel_id_arg, node_signature_arg, bitcoin_signature_arg);
+               long ret = bindings.AnnouncementSignatures_new(InternalUtils.check_arr_len(channel_id_arg, 32), short_channel_id_arg, InternalUtils.check_arr_len(node_signature_arg, 64), InternalUtils.check_arr_len(bitcoin_signature_arg, 64));
                if (ret >= 0 && ret <= 4096) { return null; }
                AnnouncementSignatures ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new AnnouncementSignatures(null, ret); }
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.AnnouncementSignatures_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the AnnouncementSignatures
         */
index 52d28898e2de9afd553febb0f18499d9f88ce657..429335b4cb451bcd878c41160989f4e39def266a 100644 (file)
@@ -38,6 +38,11 @@ public class Balance extends CommonBase {
                assert false; return null; // Unreachable without extending the (internal) bindings interface
        }
 
+       /**
+        * The channel is not yet closed (or the commitment or closing transaction has not yet
+        * appeared in a block). The given balance is claimable (less on-chain fees) if the channel is
+        * force-closed now.
+        */
        public final static class ClaimableOnChannelClose extends Balance {
                /**
                 * The amount available to claim, in satoshis, excluding the on-chain fees which will be
@@ -49,6 +54,10 @@ public class Balance extends CommonBase {
                        this.claimable_amount_satoshis = obj.claimable_amount_satoshis;
                }
        }
+       /**
+        * The channel has been closed, and the given balance is ours but awaiting confirmations until
+        * we consider it spendable.
+        */
        public final static class ClaimableAwaitingConfirmations extends Balance {
                /**
                 * The amount available to claim, in satoshis, possibly excluding the on-chain fees which
@@ -66,6 +75,15 @@ public class Balance extends CommonBase {
                        this.confirmation_height = obj.confirmation_height;
                }
        }
+       /**
+        * The channel has been closed, and the given balance should be ours but awaiting spending
+        * transaction confirmation. If the spending transaction does not confirm in time, it is
+        * possible our counterparty can take the funds by broadcasting an HTLC timeout on-chain.
+        * 
+        * Once the spending transaction confirms, before it has reached enough confirmations to be
+        * considered safe from chain reorganizations, the balance will instead be provided via
+        * [`Balance::ClaimableAwaitingConfirmations`].
+        */
        public final static class ContentiousClaimable extends Balance {
                /**
                 * The amount available to claim, in satoshis, excluding the on-chain fees which will be
@@ -83,6 +101,11 @@ public class Balance extends CommonBase {
                        this.timeout_height = obj.timeout_height;
                }
        }
+       /**
+        * HTLCs which we sent to our counterparty which are claimable after a timeout (less on-chain
+        * fees) if the counterparty does not know the preimage for the HTLCs. These are somewhat
+        * likely to be claimed by our counterparty before we do.
+        */
        public final static class MaybeClaimableHTLCAwaitingTimeout extends Balance {
                /**
                 * The amount available to claim, in satoshis, excluding the on-chain fees which will be
@@ -100,6 +123,11 @@ public class Balance extends CommonBase {
                        this.claimable_height = obj.claimable_height;
                }
        }
+       long clone_ptr() {
+               long ret = bindings.Balance_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the Balance
         */
index b502674c740885f1cd262e2a184468c037a5dd61..267da1e7e3443dabc944f02e580b043b9fcba036 100644 (file)
@@ -30,7 +30,7 @@ public class BaseSign extends CommonBase {
        final bindings.LDKBaseSign bindings_instance;
        BaseSign(Object _dummy, long ptr) { super(ptr); bindings_instance = null; }
        private BaseSign(bindings.LDKBaseSign arg, ChannelPublicKeys pubkeys) {
-               super(bindings.LDKBaseSign_new(arg, pubkeys == null ? 0 : pubkeys.ptr & ~1));
+               super(bindings.LDKBaseSign_new(arg, pubkeys == null ? 0 : pubkeys.clone_ptr()));
                this.ptrs_to.add(arg);
                this.bindings_instance = arg;
        }
@@ -195,66 +195,69 @@ public class BaseSign extends CommonBase {
                impl_holder.held = new BaseSign(new bindings.LDKBaseSign() {
                        @Override public byte[] get_per_commitment_point(long idx) {
                                byte[] ret = arg.get_per_commitment_point(idx);
-                               return ret;
+                               byte[] result = InternalUtils.check_arr_len(ret, 33);
+                               return result;
                        }
                        @Override public byte[] release_commitment_secret(long idx) {
                                byte[] ret = arg.release_commitment_secret(idx);
-                               return ret;
+                               byte[] result = InternalUtils.check_arr_len(ret, 32);
+                               return result;
                        }
                        @Override public long validate_holder_commitment(long holder_tx) {
                                HolderCommitmentTransaction holder_tx_hu_conv = null; if (holder_tx < 0 || holder_tx > 4096) { holder_tx_hu_conv = new HolderCommitmentTransaction(null, holder_tx); }
                                Result_NoneNoneZ ret = arg.validate_holder_commitment(holder_tx_hu_conv);
-                               long result = ret != null ? ret.ptr : 0;
+                               long result = ret == null ? 0 : ret.clone_ptr();
                                return result;
                        }
                        @Override public byte[] channel_keys_id() {
                                byte[] ret = arg.channel_keys_id();
-                               return ret;
+                               byte[] result = InternalUtils.check_arr_len(ret, 32);
+                               return result;
                        }
                        @Override public long sign_counterparty_commitment(long commitment_tx) {
                                CommitmentTransaction commitment_tx_hu_conv = null; if (commitment_tx < 0 || commitment_tx > 4096) { commitment_tx_hu_conv = new CommitmentTransaction(null, commitment_tx); }
                                Result_C2Tuple_SignatureCVec_SignatureZZNoneZ ret = arg.sign_counterparty_commitment(commitment_tx_hu_conv);
-                               long result = ret != null ? ret.ptr : 0;
+                               long result = ret == null ? 0 : ret.clone_ptr();
                                return result;
                        }
                        @Override public long validate_counterparty_revocation(long idx, byte[] secret) {
                                Result_NoneNoneZ ret = arg.validate_counterparty_revocation(idx, secret);
-                               long result = ret != null ? ret.ptr : 0;
+                               long result = ret == null ? 0 : ret.clone_ptr();
                                return result;
                        }
                        @Override public long sign_holder_commitment_and_htlcs(long commitment_tx) {
                                HolderCommitmentTransaction commitment_tx_hu_conv = null; if (commitment_tx < 0 || commitment_tx > 4096) { commitment_tx_hu_conv = new HolderCommitmentTransaction(null, commitment_tx); }
                                Result_C2Tuple_SignatureCVec_SignatureZZNoneZ ret = arg.sign_holder_commitment_and_htlcs(commitment_tx_hu_conv);
-                               long result = ret != null ? ret.ptr : 0;
+                               long result = ret == null ? 0 : ret.clone_ptr();
                                return result;
                        }
                        @Override public long sign_justice_revoked_output(byte[] justice_tx, long input, long amount, byte[] per_commitment_key) {
                                Result_SignatureNoneZ ret = arg.sign_justice_revoked_output(justice_tx, input, amount, per_commitment_key);
-                               long result = ret != null ? ret.ptr : 0;
+                               long result = ret == null ? 0 : ret.clone_ptr();
                                return result;
                        }
                        @Override public long sign_justice_revoked_htlc(byte[] justice_tx, long input, long amount, byte[] per_commitment_key, long htlc) {
                                HTLCOutputInCommitment htlc_hu_conv = null; if (htlc < 0 || htlc > 4096) { htlc_hu_conv = new HTLCOutputInCommitment(null, htlc); }
                                Result_SignatureNoneZ ret = arg.sign_justice_revoked_htlc(justice_tx, input, amount, per_commitment_key, htlc_hu_conv);
-                               long result = ret != null ? ret.ptr : 0;
+                               long result = ret == null ? 0 : ret.clone_ptr();
                                return result;
                        }
                        @Override public long sign_counterparty_htlc_transaction(byte[] htlc_tx, long input, long amount, byte[] per_commitment_point, long htlc) {
                                HTLCOutputInCommitment htlc_hu_conv = null; if (htlc < 0 || htlc > 4096) { htlc_hu_conv = new HTLCOutputInCommitment(null, htlc); }
                                Result_SignatureNoneZ ret = arg.sign_counterparty_htlc_transaction(htlc_tx, input, amount, per_commitment_point, htlc_hu_conv);
-                               long result = ret != null ? ret.ptr : 0;
+                               long result = ret == null ? 0 : ret.clone_ptr();
                                return result;
                        }
                        @Override public long sign_closing_transaction(long closing_tx) {
                                ClosingTransaction closing_tx_hu_conv = null; if (closing_tx < 0 || closing_tx > 4096) { closing_tx_hu_conv = new ClosingTransaction(null, closing_tx); }
                                Result_SignatureNoneZ ret = arg.sign_closing_transaction(closing_tx_hu_conv);
-                               long result = ret != null ? ret.ptr : 0;
+                               long result = ret == null ? 0 : ret.clone_ptr();
                                return result;
                        }
                        @Override public long sign_channel_announcement(long msg) {
                                UnsignedChannelAnnouncement msg_hu_conv = null; if (msg < 0 || msg > 4096) { msg_hu_conv = new UnsignedChannelAnnouncement(null, msg); }
                                Result_SignatureNoneZ ret = arg.sign_channel_announcement(msg_hu_conv);
-                               long result = ret != null ? ret.ptr : 0;
+                               long result = ret == null ? 0 : ret.clone_ptr();
                                return result;
                        }
                        @Override public void ready_channel(long channel_parameters) {
@@ -338,7 +341,7 @@ public class BaseSign extends CommonBase {
         * forward and it is safe to sign the next counterparty commitment.
         */
        public Result_NoneNoneZ validate_counterparty_revocation(long idx, byte[] secret) {
-               long ret = bindings.BaseSign_validate_counterparty_revocation(this.ptr, idx, secret);
+               long ret = bindings.BaseSign_validate_counterparty_revocation(this.ptr, idx, InternalUtils.check_arr_len(secret, 32));
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_NoneNoneZ ret_hu_conv = Result_NoneNoneZ.constr_from_ptr(ret);
                return ret_hu_conv;
@@ -382,7 +385,7 @@ public class BaseSign extends CommonBase {
         * so).
         */
        public Result_SignatureNoneZ sign_justice_revoked_output(byte[] justice_tx, long input, long amount, byte[] per_commitment_key) {
-               long ret = bindings.BaseSign_sign_justice_revoked_output(this.ptr, justice_tx, input, amount, per_commitment_key);
+               long ret = bindings.BaseSign_sign_justice_revoked_output(this.ptr, justice_tx, input, amount, InternalUtils.check_arr_len(per_commitment_key, 32));
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_SignatureNoneZ ret_hu_conv = Result_SignatureNoneZ.constr_from_ptr(ret);
                return ret_hu_conv;
@@ -408,7 +411,7 @@ public class BaseSign extends CommonBase {
         * (which is committed to in the BIP 143 signatures).
         */
        public Result_SignatureNoneZ sign_justice_revoked_htlc(byte[] justice_tx, long input, long amount, byte[] per_commitment_key, HTLCOutputInCommitment htlc) {
-               long ret = bindings.BaseSign_sign_justice_revoked_htlc(this.ptr, justice_tx, input, amount, per_commitment_key, htlc == null ? 0 : htlc.ptr & ~1);
+               long ret = bindings.BaseSign_sign_justice_revoked_htlc(this.ptr, justice_tx, input, amount, InternalUtils.check_arr_len(per_commitment_key, 32), htlc == null ? 0 : htlc.ptr & ~1);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_SignatureNoneZ ret_hu_conv = Result_SignatureNoneZ.constr_from_ptr(ret);
                this.ptrs_to.add(htlc);
@@ -435,7 +438,7 @@ public class BaseSign extends CommonBase {
         * BIP 143 signature.
         */
        public Result_SignatureNoneZ sign_counterparty_htlc_transaction(byte[] htlc_tx, long input, long amount, byte[] per_commitment_point, HTLCOutputInCommitment htlc) {
-               long ret = bindings.BaseSign_sign_counterparty_htlc_transaction(this.ptr, htlc_tx, input, amount, per_commitment_point, htlc == null ? 0 : htlc.ptr & ~1);
+               long ret = bindings.BaseSign_sign_counterparty_htlc_transaction(this.ptr, htlc_tx, input, amount, InternalUtils.check_arr_len(per_commitment_point, 33), htlc == null ? 0 : htlc.ptr & ~1);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_SignatureNoneZ ret_hu_conv = Result_SignatureNoneZ.constr_from_ptr(ret);
                this.ptrs_to.add(htlc);
index 9d3629ebe4c016a63fe31e4eff59802e69ef6118..a595ed02f62723c4b0c33d1fde8a3c4fd300b7a9 100644 (file)
@@ -19,6 +19,11 @@ public class BestBlock extends CommonBase {
                if (ptr != 0) { bindings.BestBlock_free(ptr); }
        }
 
+       long clone_ptr() {
+               long ret = bindings.BestBlock_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the BestBlock
         */
@@ -46,7 +51,7 @@ public class BestBlock extends CommonBase {
         * Returns a `BestBlock` as identified by the given block hash and height.
         */
        public static BestBlock of(byte[] block_hash, int height) {
-               long ret = bindings.BestBlock_new(block_hash, height);
+               long ret = bindings.BestBlock_new(InternalUtils.check_arr_len(block_hash, 32), height);
                if (ret >= 0 && ret <= 4096) { return null; }
                BestBlock ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new BestBlock(null, ret); }
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
index ba33bd311aa862ea253d11990f37cd2ee4cb0bb6..e30cbf022697261c0adbf4ad3b6ab4633b27cdfa 100644 (file)
@@ -52,20 +52,25 @@ public class BuiltCommitmentTransaction extends CommonBase {
         * multiple times.
         */
        public void set_txid(byte[] val) {
-               bindings.BuiltCommitmentTransaction_set_txid(this.ptr, val);
+               bindings.BuiltCommitmentTransaction_set_txid(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        /**
         * Constructs a new BuiltCommitmentTransaction given each field
         */
        public static BuiltCommitmentTransaction of(byte[] transaction_arg, byte[] txid_arg) {
-               long ret = bindings.BuiltCommitmentTransaction_new(transaction_arg, txid_arg);
+               long ret = bindings.BuiltCommitmentTransaction_new(transaction_arg, InternalUtils.check_arr_len(txid_arg, 32));
                if (ret >= 0 && ret <= 4096) { return null; }
                BuiltCommitmentTransaction ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new BuiltCommitmentTransaction(null, ret); }
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.BuiltCommitmentTransaction_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the BuiltCommitmentTransaction
         */
@@ -110,7 +115,7 @@ public class BuiltCommitmentTransaction extends CommonBase {
         * because we are about to broadcast a holder transaction.
         */
        public byte[] sign(byte[] funding_key, byte[] funding_redeemscript, long channel_value_satoshis) {
-               byte[] ret = bindings.BuiltCommitmentTransaction_sign(this.ptr, funding_key, funding_redeemscript, channel_value_satoshis);
+               byte[] ret = bindings.BuiltCommitmentTransaction_sign(this.ptr, InternalUtils.check_arr_len(funding_key, 32), funding_redeemscript, channel_value_satoshis);
                return ret;
        }
 
index c3ccf961b96766344fa394a30743c9928c84f686..c9a4c6e17919b1d10be0338edaffa7223ad56b68 100644 (file)
@@ -41,6 +41,7 @@ public class ChainMonitor extends CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                ChainMonitor ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new ChainMonitor(null, ret); }
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
+               ret_hu_conv.ptrs_to.add(chain_source);
                ret_hu_conv.ptrs_to.add(broadcaster);
                ret_hu_conv.ptrs_to.add(logger);
                ret_hu_conv.ptrs_to.add(feeest);
index 403a4d36236a28ff0d17ed6dd606176705b20ed2..3d047d0b8714a82bd0be6423e77f09837dd7d7ca 100644 (file)
@@ -71,6 +71,11 @@ public class ChainParameters extends CommonBase {
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.ChainParameters_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the ChainParameters
         */
index 808d0a679b0488ec01c0b87310d3c4ac434d0de8..9382ad91b91a67ea5b52c7e8aa54ee3fc86ebe5f 100644 (file)
@@ -31,7 +31,7 @@ public class ChannelAnnouncement extends CommonBase {
         * Authentication of the announcement by the first public node
         */
        public void set_node_signature_1(byte[] val) {
-               bindings.ChannelAnnouncement_set_node_signature_1(this.ptr, val);
+               bindings.ChannelAnnouncement_set_node_signature_1(this.ptr, InternalUtils.check_arr_len(val, 64));
        }
 
        /**
@@ -46,7 +46,7 @@ public class ChannelAnnouncement extends CommonBase {
         * Authentication of the announcement by the second public node
         */
        public void set_node_signature_2(byte[] val) {
-               bindings.ChannelAnnouncement_set_node_signature_2(this.ptr, val);
+               bindings.ChannelAnnouncement_set_node_signature_2(this.ptr, InternalUtils.check_arr_len(val, 64));
        }
 
        /**
@@ -61,7 +61,7 @@ public class ChannelAnnouncement extends CommonBase {
         * Proof of funding UTXO ownership by the first public node
         */
        public void set_bitcoin_signature_1(byte[] val) {
-               bindings.ChannelAnnouncement_set_bitcoin_signature_1(this.ptr, val);
+               bindings.ChannelAnnouncement_set_bitcoin_signature_1(this.ptr, InternalUtils.check_arr_len(val, 64));
        }
 
        /**
@@ -76,7 +76,7 @@ public class ChannelAnnouncement extends CommonBase {
         * Proof of funding UTXO ownership by the second public node
         */
        public void set_bitcoin_signature_2(byte[] val) {
-               bindings.ChannelAnnouncement_set_bitcoin_signature_2(this.ptr, val);
+               bindings.ChannelAnnouncement_set_bitcoin_signature_2(this.ptr, InternalUtils.check_arr_len(val, 64));
        }
 
        /**
@@ -101,13 +101,18 @@ public class ChannelAnnouncement extends CommonBase {
         * Constructs a new ChannelAnnouncement given each field
         */
        public static ChannelAnnouncement of(byte[] node_signature_1_arg, byte[] node_signature_2_arg, byte[] bitcoin_signature_1_arg, byte[] bitcoin_signature_2_arg, UnsignedChannelAnnouncement contents_arg) {
-               long ret = bindings.ChannelAnnouncement_new(node_signature_1_arg, node_signature_2_arg, bitcoin_signature_1_arg, bitcoin_signature_2_arg, contents_arg == null ? 0 : contents_arg.ptr & ~1);
+               long ret = bindings.ChannelAnnouncement_new(InternalUtils.check_arr_len(node_signature_1_arg, 64), InternalUtils.check_arr_len(node_signature_2_arg, 64), InternalUtils.check_arr_len(bitcoin_signature_1_arg, 64), InternalUtils.check_arr_len(bitcoin_signature_2_arg, 64), contents_arg == null ? 0 : contents_arg.ptr & ~1);
                if (ret >= 0 && ret <= 4096) { return null; }
                ChannelAnnouncement ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new ChannelAnnouncement(null, ret); }
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.ChannelAnnouncement_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the ChannelAnnouncement
         */
index c1ec909fe7812789a83660bc9bea54eba679cb92..e1c95b64b001cf4f96069eabd485bdfd3c90d4f9 100644 (file)
@@ -314,6 +314,11 @@ public class ChannelConfig extends CommonBase {
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.ChannelConfig_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the ChannelConfig
         */
index db770c86498631aafcb497caee8172a2fa2a11f7..51de1b271fc7b9e3a5167e326cafd9406cfadce9 100644 (file)
@@ -32,7 +32,7 @@ public class ChannelCounterparty extends CommonBase {
         * The node_id of our counterparty
         */
        public void set_node_id(byte[] val) {
-               bindings.ChannelCounterparty_set_node_id(this.ptr, val);
+               bindings.ChannelCounterparty_set_node_id(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        /**
@@ -113,13 +113,18 @@ public class ChannelCounterparty extends CommonBase {
         * Constructs a new ChannelCounterparty given each field
         */
        public static ChannelCounterparty of(byte[] node_id_arg, InitFeatures features_arg, long unspendable_punishment_reserve_arg, CounterpartyForwardingInfo forwarding_info_arg) {
-               long ret = bindings.ChannelCounterparty_new(node_id_arg, features_arg == null ? 0 : features_arg.ptr & ~1, unspendable_punishment_reserve_arg, forwarding_info_arg == null ? 0 : forwarding_info_arg.ptr & ~1);
+               long ret = bindings.ChannelCounterparty_new(InternalUtils.check_arr_len(node_id_arg, 33), features_arg == null ? 0 : features_arg.ptr & ~1, unspendable_punishment_reserve_arg, forwarding_info_arg == null ? 0 : forwarding_info_arg.ptr & ~1);
                if (ret >= 0 && ret <= 4096) { return null; }
                ChannelCounterparty ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new ChannelCounterparty(null, ret); }
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.ChannelCounterparty_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the ChannelCounterparty
         */
index 75db7b25dd55d1087d4ed8d1bcff2e5ee2c855fd..85a710f8dfb7db09643617785e3b4e0a71d5ee52 100644 (file)
@@ -37,7 +37,7 @@ public class ChannelDetails extends CommonBase {
         * lifetime of the channel.
         */
        public void set_channel_id(byte[] val) {
-               bindings.ChannelDetails_set_channel_id(this.ptr, val);
+               bindings.ChannelDetails_set_channel_id(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        /**
@@ -383,13 +383,18 @@ public class ChannelDetails extends CommonBase {
         * Constructs a new ChannelDetails given each field
         */
        public static ChannelDetails of(byte[] channel_id_arg, ChannelCounterparty counterparty_arg, OutPoint funding_txo_arg, Option_u64Z short_channel_id_arg, long channel_value_satoshis_arg, Option_u64Z unspendable_punishment_reserve_arg, long user_channel_id_arg, long outbound_capacity_msat_arg, long inbound_capacity_msat_arg, Option_u32Z confirmations_required_arg, Option_u16Z force_close_spend_delay_arg, boolean is_outbound_arg, boolean is_funding_locked_arg, boolean is_usable_arg, boolean is_public_arg) {
-               long ret = bindings.ChannelDetails_new(channel_id_arg, counterparty_arg == null ? 0 : counterparty_arg.ptr & ~1, funding_txo_arg == null ? 0 : funding_txo_arg.ptr & ~1, short_channel_id_arg.ptr, channel_value_satoshis_arg, unspendable_punishment_reserve_arg.ptr, user_channel_id_arg, outbound_capacity_msat_arg, inbound_capacity_msat_arg, confirmations_required_arg.ptr, force_close_spend_delay_arg.ptr, is_outbound_arg, is_funding_locked_arg, is_usable_arg, is_public_arg);
+               long ret = bindings.ChannelDetails_new(InternalUtils.check_arr_len(channel_id_arg, 32), counterparty_arg == null ? 0 : counterparty_arg.ptr & ~1, funding_txo_arg == null ? 0 : funding_txo_arg.ptr & ~1, short_channel_id_arg.ptr, channel_value_satoshis_arg, unspendable_punishment_reserve_arg.ptr, user_channel_id_arg, outbound_capacity_msat_arg, inbound_capacity_msat_arg, confirmations_required_arg.ptr, force_close_spend_delay_arg.ptr, is_outbound_arg, is_funding_locked_arg, is_usable_arg, is_public_arg);
                if (ret >= 0 && ret <= 4096) { return null; }
                ChannelDetails ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new ChannelDetails(null, ret); }
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.ChannelDetails_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the ChannelDetails
         */
index 79e9c605d6e09e3973487e1abac2ad842c3a8a1d..40add60c89cc09985320c7c866984e3ed47bb55e 100644 (file)
@@ -30,6 +30,11 @@ public class ChannelFeatures extends CommonBase {
                return ret;
        }
 
+       long clone_ptr() {
+               long ret = bindings.ChannelFeatures_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the ChannelFeatures
         */
index e4b3e944ffe9afbb5e4042e99bc7a647844d03d0..1e487f87d7adcd756133c7899415deffde171166 100644 (file)
@@ -125,6 +125,11 @@ public class ChannelHandshakeConfig extends CommonBase {
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.ChannelHandshakeConfig_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the ChannelHandshakeConfig
         */
index b54ed69f673b20c9264c2d3d0c42364e66136296..3b16709b82d0b24827bae556f56da01136096e48 100644 (file)
@@ -228,6 +228,11 @@ public class ChannelHandshakeLimits extends CommonBase {
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.ChannelHandshakeLimits_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the ChannelHandshakeLimits
         */
index c351b05271f4e14703596e03c3df9c79b650223c..61b4bce3e2b0f0251f990c3cf1fe11847c9e8952 100644 (file)
@@ -178,6 +178,11 @@ public class ChannelInfo extends CommonBase {
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.ChannelInfo_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the ChannelInfo
         */
index 121809b064fa6ea7d16172072f09963048752758..9ec3a2870e0fd76ae1766075937c343f5e68d575 100644 (file)
@@ -123,7 +123,7 @@ public class ChannelManager extends CommonBase {
         * Note that override_config (or a relevant inner pointer) may be NULL or all-0s to represent None
         */
        public Result__u832APIErrorZ create_channel(byte[] their_network_key, long channel_value_satoshis, long push_msat, long user_channel_id, @Nullable UserConfig override_config) {
-               long ret = bindings.ChannelManager_create_channel(this.ptr, their_network_key, channel_value_satoshis, push_msat, user_channel_id, override_config == null ? 0 : override_config.ptr & ~1);
+               long ret = bindings.ChannelManager_create_channel(this.ptr, InternalUtils.check_arr_len(their_network_key, 33), channel_value_satoshis, push_msat, user_channel_id, override_config == null ? 0 : override_config.ptr & ~1);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result__u832APIErrorZ ret_hu_conv = Result__u832APIErrorZ.constr_from_ptr(ret);
                return ret_hu_conv;
@@ -185,7 +185,7 @@ public class ChannelManager extends CommonBase {
         * [`Normal`]: crate::chain::chaininterface::ConfirmationTarget::Normal
         */
        public Result_NoneAPIErrorZ close_channel(byte[] channel_id) {
-               long ret = bindings.ChannelManager_close_channel(this.ptr, channel_id);
+               long ret = bindings.ChannelManager_close_channel(this.ptr, InternalUtils.check_arr_len(channel_id, 32));
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_NoneAPIErrorZ ret_hu_conv = Result_NoneAPIErrorZ.constr_from_ptr(ret);
                return ret_hu_conv;
@@ -213,7 +213,7 @@ public class ChannelManager extends CommonBase {
         * [`Normal`]: crate::chain::chaininterface::ConfirmationTarget::Normal
         */
        public Result_NoneAPIErrorZ close_channel_with_target_feerate(byte[] channel_id, int target_feerate_sats_per_1000_weight) {
-               long ret = bindings.ChannelManager_close_channel_with_target_feerate(this.ptr, channel_id, target_feerate_sats_per_1000_weight);
+               long ret = bindings.ChannelManager_close_channel_with_target_feerate(this.ptr, InternalUtils.check_arr_len(channel_id, 32), target_feerate_sats_per_1000_weight);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_NoneAPIErrorZ ret_hu_conv = Result_NoneAPIErrorZ.constr_from_ptr(ret);
                return ret_hu_conv;
@@ -224,7 +224,7 @@ public class ChannelManager extends CommonBase {
         * the chain and rejecting new HTLCs on the given channel. Fails if channel_id is unknown to the manager.
         */
        public Result_NoneAPIErrorZ force_close_channel(byte[] channel_id) {
-               long ret = bindings.ChannelManager_force_close_channel(this.ptr, channel_id);
+               long ret = bindings.ChannelManager_force_close_channel(this.ptr, InternalUtils.check_arr_len(channel_id, 32));
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_NoneAPIErrorZ ret_hu_conv = Result_NoneAPIErrorZ.constr_from_ptr(ret);
                return ret_hu_conv;
@@ -282,7 +282,7 @@ public class ChannelManager extends CommonBase {
         * Note that payment_secret (or a relevant inner pointer) may be NULL or all-0s to represent None
         */
        public Result_PaymentIdPaymentSendFailureZ send_payment(Route route, byte[] payment_hash, @Nullable byte[] payment_secret) {
-               long ret = bindings.ChannelManager_send_payment(this.ptr, route == null ? 0 : route.ptr & ~1, payment_hash, payment_secret);
+               long ret = bindings.ChannelManager_send_payment(this.ptr, route == null ? 0 : route.ptr & ~1, InternalUtils.check_arr_len(payment_hash, 32), InternalUtils.check_arr_len(payment_secret, 32));
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_PaymentIdPaymentSendFailureZ ret_hu_conv = Result_PaymentIdPaymentSendFailureZ.constr_from_ptr(ret);
                this.ptrs_to.add(route);
@@ -300,7 +300,7 @@ public class ChannelManager extends CommonBase {
         * [`send_payment`]: [`ChannelManager::send_payment`]
         */
        public Result_NonePaymentSendFailureZ retry_payment(Route route, byte[] payment_id) {
-               long ret = bindings.ChannelManager_retry_payment(this.ptr, route == null ? 0 : route.ptr & ~1, payment_id);
+               long ret = bindings.ChannelManager_retry_payment(this.ptr, route == null ? 0 : route.ptr & ~1, InternalUtils.check_arr_len(payment_id, 32));
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_NonePaymentSendFailureZ ret_hu_conv = Result_NonePaymentSendFailureZ.constr_from_ptr(ret);
                this.ptrs_to.add(route);
@@ -326,7 +326,7 @@ public class ChannelManager extends CommonBase {
         * Note that payment_preimage (or a relevant inner pointer) may be NULL or all-0s to represent None
         */
        public Result_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ send_spontaneous_payment(Route route, @Nullable byte[] payment_preimage) {
-               long ret = bindings.ChannelManager_send_spontaneous_payment(this.ptr, route == null ? 0 : route.ptr & ~1, payment_preimage);
+               long ret = bindings.ChannelManager_send_spontaneous_payment(this.ptr, route == null ? 0 : route.ptr & ~1, InternalUtils.check_arr_len(payment_preimage, 32));
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ ret_hu_conv = Result_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ.constr_from_ptr(ret);
                this.ptrs_to.add(route);
@@ -356,7 +356,7 @@ public class ChannelManager extends CommonBase {
         * [`Event::FundingGenerationReady`]: crate::util::events::Event::FundingGenerationReady
         */
        public Result_NoneAPIErrorZ funding_transaction_generated(byte[] temporary_channel_id, byte[] funding_transaction) {
-               long ret = bindings.ChannelManager_funding_transaction_generated(this.ptr, temporary_channel_id, funding_transaction);
+               long ret = bindings.ChannelManager_funding_transaction_generated(this.ptr, InternalUtils.check_arr_len(temporary_channel_id, 32), funding_transaction);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_NoneAPIErrorZ ret_hu_conv = Result_NoneAPIErrorZ.constr_from_ptr(ret);
                return ret_hu_conv;
@@ -383,7 +383,7 @@ public class ChannelManager extends CommonBase {
         * [`get_and_clear_pending_msg_events`]: MessageSendEventsProvider::get_and_clear_pending_msg_events
         */
        public void broadcast_node_announcement(byte[] rgb, byte[] alias, NetAddress[] addresses) {
-               bindings.ChannelManager_broadcast_node_announcement(this.ptr, rgb, alias, addresses != null ? Arrays.stream(addresses).mapToLong(addresses_conv_12 -> addresses_conv_12.ptr).toArray() : null);
+               bindings.ChannelManager_broadcast_node_announcement(this.ptr, InternalUtils.check_arr_len(rgb, 3), InternalUtils.check_arr_len(alias, 32), addresses != null ? Arrays.stream(addresses).mapToLong(addresses_conv_12 -> addresses_conv_12.ptr).toArray() : null);
        }
 
        /**
@@ -420,7 +420,7 @@ public class ChannelManager extends CommonBase {
         * HTLC backwards has been started.
         */
        public boolean fail_htlc_backwards(byte[] payment_hash) {
-               boolean ret = bindings.ChannelManager_fail_htlc_backwards(this.ptr, payment_hash);
+               boolean ret = bindings.ChannelManager_fail_htlc_backwards(this.ptr, InternalUtils.check_arr_len(payment_hash, 32));
                return ret;
        }
 
@@ -440,7 +440,7 @@ public class ChannelManager extends CommonBase {
         * [`create_inbound_payment_for_hash`]: Self::create_inbound_payment_for_hash
         */
        public boolean claim_funds(byte[] payment_preimage) {
-               boolean ret = bindings.ChannelManager_claim_funds(this.ptr, payment_preimage);
+               boolean ret = bindings.ChannelManager_claim_funds(this.ptr, InternalUtils.check_arr_len(payment_preimage, 32));
                return ret;
        }
 
@@ -526,7 +526,7 @@ public class ChannelManager extends CommonBase {
         * [`PaymentPurpose::InvoicePayment::user_payment_id`]: events::PaymentPurpose::InvoicePayment::user_payment_id
         */
        public Result_PaymentSecretAPIErrorZ create_inbound_payment_for_hash(byte[] payment_hash, Option_u64Z min_value_msat, int invoice_expiry_delta_secs, long user_payment_id) {
-               long ret = bindings.ChannelManager_create_inbound_payment_for_hash(this.ptr, payment_hash, min_value_msat.ptr, invoice_expiry_delta_secs, user_payment_id);
+               long ret = bindings.ChannelManager_create_inbound_payment_for_hash(this.ptr, InternalUtils.check_arr_len(payment_hash, 32), min_value_msat.ptr, invoice_expiry_delta_secs, user_payment_id);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_PaymentSecretAPIErrorZ ret_hu_conv = Result_PaymentSecretAPIErrorZ.constr_from_ptr(ret);
                return ret_hu_conv;
index cac176ade7a83df977aa60c51faa327b5a790706..c27ea3ef59a5e1434ea08b3c0e994f96825bbfc6 100644 (file)
@@ -41,7 +41,7 @@ public class ChannelManagerPersister extends CommonBase {
                        @Override public long persist_manager(long channel_manager) {
                                ChannelManager channel_manager_hu_conv = null; if (channel_manager < 0 || channel_manager > 4096) { channel_manager_hu_conv = new ChannelManager(null, channel_manager); }
                                Result_NoneErrorZ ret = arg.persist_manager(channel_manager_hu_conv);
-                               long result = ret != null ? ret.ptr : 0;
+                               long result = ret == null ? 0 : ret.clone_ptr();
                                return result;
                        }
                });
index c6604d115130af0d2df7e6dc61b2a3b5003ecf42..f4546bd4f6c4d329802e645d26ea66959bdfbbf7 100644 (file)
@@ -217,7 +217,7 @@ public class ChannelMessageHandler extends CommonBase {
         * Handle an incoming open_channel message from the given peer.
         */
        public void handle_open_channel(byte[] their_node_id, InitFeatures their_features, OpenChannel msg) {
-               bindings.ChannelMessageHandler_handle_open_channel(this.ptr, their_node_id, their_features == null ? 0 : their_features.ptr & ~1, msg == null ? 0 : msg.ptr & ~1);
+               bindings.ChannelMessageHandler_handle_open_channel(this.ptr, InternalUtils.check_arr_len(their_node_id, 33), their_features == null ? 0 : their_features.ptr & ~1, msg == null ? 0 : msg.ptr & ~1);
                this.ptrs_to.add(msg);
        }
 
@@ -225,7 +225,7 @@ public class ChannelMessageHandler extends CommonBase {
         * Handle an incoming accept_channel message from the given peer.
         */
        public void handle_accept_channel(byte[] their_node_id, InitFeatures their_features, AcceptChannel msg) {
-               bindings.ChannelMessageHandler_handle_accept_channel(this.ptr, their_node_id, their_features == null ? 0 : their_features.ptr & ~1, msg == null ? 0 : msg.ptr & ~1);
+               bindings.ChannelMessageHandler_handle_accept_channel(this.ptr, InternalUtils.check_arr_len(their_node_id, 33), their_features == null ? 0 : their_features.ptr & ~1, msg == null ? 0 : msg.ptr & ~1);
                this.ptrs_to.add(msg);
        }
 
@@ -233,7 +233,7 @@ public class ChannelMessageHandler extends CommonBase {
         * Handle an incoming funding_created message from the given peer.
         */
        public void handle_funding_created(byte[] their_node_id, FundingCreated msg) {
-               bindings.ChannelMessageHandler_handle_funding_created(this.ptr, their_node_id, msg == null ? 0 : msg.ptr & ~1);
+               bindings.ChannelMessageHandler_handle_funding_created(this.ptr, InternalUtils.check_arr_len(their_node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                this.ptrs_to.add(msg);
        }
 
@@ -241,7 +241,7 @@ public class ChannelMessageHandler extends CommonBase {
         * Handle an incoming funding_signed message from the given peer.
         */
        public void handle_funding_signed(byte[] their_node_id, FundingSigned msg) {
-               bindings.ChannelMessageHandler_handle_funding_signed(this.ptr, their_node_id, msg == null ? 0 : msg.ptr & ~1);
+               bindings.ChannelMessageHandler_handle_funding_signed(this.ptr, InternalUtils.check_arr_len(their_node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                this.ptrs_to.add(msg);
        }
 
@@ -249,7 +249,7 @@ public class ChannelMessageHandler extends CommonBase {
         * Handle an incoming funding_locked message from the given peer.
         */
        public void handle_funding_locked(byte[] their_node_id, FundingLocked msg) {
-               bindings.ChannelMessageHandler_handle_funding_locked(this.ptr, their_node_id, msg == null ? 0 : msg.ptr & ~1);
+               bindings.ChannelMessageHandler_handle_funding_locked(this.ptr, InternalUtils.check_arr_len(their_node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                this.ptrs_to.add(msg);
        }
 
@@ -257,7 +257,7 @@ public class ChannelMessageHandler extends CommonBase {
         * Handle an incoming shutdown message from the given peer.
         */
        public void handle_shutdown(byte[] their_node_id, InitFeatures their_features, Shutdown msg) {
-               bindings.ChannelMessageHandler_handle_shutdown(this.ptr, their_node_id, their_features == null ? 0 : their_features.ptr & ~1, msg == null ? 0 : msg.ptr & ~1);
+               bindings.ChannelMessageHandler_handle_shutdown(this.ptr, InternalUtils.check_arr_len(their_node_id, 33), their_features == null ? 0 : their_features.ptr & ~1, msg == null ? 0 : msg.ptr & ~1);
                this.ptrs_to.add(their_features);
                this.ptrs_to.add(msg);
        }
@@ -266,7 +266,7 @@ public class ChannelMessageHandler extends CommonBase {
         * Handle an incoming closing_signed message from the given peer.
         */
        public void handle_closing_signed(byte[] their_node_id, ClosingSigned msg) {
-               bindings.ChannelMessageHandler_handle_closing_signed(this.ptr, their_node_id, msg == null ? 0 : msg.ptr & ~1);
+               bindings.ChannelMessageHandler_handle_closing_signed(this.ptr, InternalUtils.check_arr_len(their_node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                this.ptrs_to.add(msg);
        }
 
@@ -274,7 +274,7 @@ public class ChannelMessageHandler extends CommonBase {
         * Handle an incoming update_add_htlc message from the given peer.
         */
        public void handle_update_add_htlc(byte[] their_node_id, UpdateAddHTLC msg) {
-               bindings.ChannelMessageHandler_handle_update_add_htlc(this.ptr, their_node_id, msg == null ? 0 : msg.ptr & ~1);
+               bindings.ChannelMessageHandler_handle_update_add_htlc(this.ptr, InternalUtils.check_arr_len(their_node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                this.ptrs_to.add(msg);
        }
 
@@ -282,7 +282,7 @@ public class ChannelMessageHandler extends CommonBase {
         * Handle an incoming update_fulfill_htlc message from the given peer.
         */
        public void handle_update_fulfill_htlc(byte[] their_node_id, UpdateFulfillHTLC msg) {
-               bindings.ChannelMessageHandler_handle_update_fulfill_htlc(this.ptr, their_node_id, msg == null ? 0 : msg.ptr & ~1);
+               bindings.ChannelMessageHandler_handle_update_fulfill_htlc(this.ptr, InternalUtils.check_arr_len(their_node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                this.ptrs_to.add(msg);
        }
 
@@ -290,7 +290,7 @@ public class ChannelMessageHandler extends CommonBase {
         * Handle an incoming update_fail_htlc message from the given peer.
         */
        public void handle_update_fail_htlc(byte[] their_node_id, UpdateFailHTLC msg) {
-               bindings.ChannelMessageHandler_handle_update_fail_htlc(this.ptr, their_node_id, msg == null ? 0 : msg.ptr & ~1);
+               bindings.ChannelMessageHandler_handle_update_fail_htlc(this.ptr, InternalUtils.check_arr_len(their_node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                this.ptrs_to.add(msg);
        }
 
@@ -298,7 +298,7 @@ public class ChannelMessageHandler extends CommonBase {
         * Handle an incoming update_fail_malformed_htlc message from the given peer.
         */
        public void handle_update_fail_malformed_htlc(byte[] their_node_id, UpdateFailMalformedHTLC msg) {
-               bindings.ChannelMessageHandler_handle_update_fail_malformed_htlc(this.ptr, their_node_id, msg == null ? 0 : msg.ptr & ~1);
+               bindings.ChannelMessageHandler_handle_update_fail_malformed_htlc(this.ptr, InternalUtils.check_arr_len(their_node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                this.ptrs_to.add(msg);
        }
 
@@ -306,7 +306,7 @@ public class ChannelMessageHandler extends CommonBase {
         * Handle an incoming commitment_signed message from the given peer.
         */
        public void handle_commitment_signed(byte[] their_node_id, CommitmentSigned msg) {
-               bindings.ChannelMessageHandler_handle_commitment_signed(this.ptr, their_node_id, msg == null ? 0 : msg.ptr & ~1);
+               bindings.ChannelMessageHandler_handle_commitment_signed(this.ptr, InternalUtils.check_arr_len(their_node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                this.ptrs_to.add(msg);
        }
 
@@ -314,7 +314,7 @@ public class ChannelMessageHandler extends CommonBase {
         * Handle an incoming revoke_and_ack message from the given peer.
         */
        public void handle_revoke_and_ack(byte[] their_node_id, RevokeAndACK msg) {
-               bindings.ChannelMessageHandler_handle_revoke_and_ack(this.ptr, their_node_id, msg == null ? 0 : msg.ptr & ~1);
+               bindings.ChannelMessageHandler_handle_revoke_and_ack(this.ptr, InternalUtils.check_arr_len(their_node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                this.ptrs_to.add(msg);
        }
 
@@ -322,7 +322,7 @@ public class ChannelMessageHandler extends CommonBase {
         * Handle an incoming update_fee message from the given peer.
         */
        public void handle_update_fee(byte[] their_node_id, UpdateFee msg) {
-               bindings.ChannelMessageHandler_handle_update_fee(this.ptr, their_node_id, msg == null ? 0 : msg.ptr & ~1);
+               bindings.ChannelMessageHandler_handle_update_fee(this.ptr, InternalUtils.check_arr_len(their_node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                this.ptrs_to.add(msg);
        }
 
@@ -330,7 +330,7 @@ public class ChannelMessageHandler extends CommonBase {
         * Handle an incoming announcement_signatures message from the given peer.
         */
        public void handle_announcement_signatures(byte[] their_node_id, AnnouncementSignatures msg) {
-               bindings.ChannelMessageHandler_handle_announcement_signatures(this.ptr, their_node_id, msg == null ? 0 : msg.ptr & ~1);
+               bindings.ChannelMessageHandler_handle_announcement_signatures(this.ptr, InternalUtils.check_arr_len(their_node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                this.ptrs_to.add(msg);
        }
 
@@ -341,14 +341,14 @@ public class ChannelMessageHandler extends CommonBase {
         * and any outstanding channels should be failed.
         */
        public void peer_disconnected(byte[] their_node_id, boolean no_connection_possible) {
-               bindings.ChannelMessageHandler_peer_disconnected(this.ptr, their_node_id, no_connection_possible);
+               bindings.ChannelMessageHandler_peer_disconnected(this.ptr, InternalUtils.check_arr_len(their_node_id, 33), no_connection_possible);
        }
 
        /**
         * Handle a peer reconnecting, possibly generating channel_reestablish message(s).
         */
        public void peer_connected(byte[] their_node_id, Init msg) {
-               bindings.ChannelMessageHandler_peer_connected(this.ptr, their_node_id, msg == null ? 0 : msg.ptr & ~1);
+               bindings.ChannelMessageHandler_peer_connected(this.ptr, InternalUtils.check_arr_len(their_node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                this.ptrs_to.add(msg);
        }
 
@@ -356,7 +356,7 @@ public class ChannelMessageHandler extends CommonBase {
         * Handle an incoming channel_reestablish message from the given peer.
         */
        public void handle_channel_reestablish(byte[] their_node_id, ChannelReestablish msg) {
-               bindings.ChannelMessageHandler_handle_channel_reestablish(this.ptr, their_node_id, msg == null ? 0 : msg.ptr & ~1);
+               bindings.ChannelMessageHandler_handle_channel_reestablish(this.ptr, InternalUtils.check_arr_len(their_node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                this.ptrs_to.add(msg);
        }
 
@@ -364,7 +364,7 @@ public class ChannelMessageHandler extends CommonBase {
         * Handle an incoming channel update from the given peer.
         */
        public void handle_channel_update(byte[] their_node_id, ChannelUpdate msg) {
-               bindings.ChannelMessageHandler_handle_channel_update(this.ptr, their_node_id, msg == null ? 0 : msg.ptr & ~1);
+               bindings.ChannelMessageHandler_handle_channel_update(this.ptr, InternalUtils.check_arr_len(their_node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                this.ptrs_to.add(msg);
        }
 
@@ -372,7 +372,7 @@ public class ChannelMessageHandler extends CommonBase {
         * Handle an incoming error message from the given peer.
         */
        public void handle_error(byte[] their_node_id, ErrorMessage msg) {
-               bindings.ChannelMessageHandler_handle_error(this.ptr, their_node_id, msg == null ? 0 : msg.ptr & ~1);
+               bindings.ChannelMessageHandler_handle_error(this.ptr, InternalUtils.check_arr_len(their_node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                this.ptrs_to.add(msg);
        }
 
index 3e3f9f0dda4ee47fe6f047b8da593aad55df8a4a..c9b5444efcdab28b2292d2c4b5b17089b06b84ff 100644 (file)
@@ -34,6 +34,11 @@ public class ChannelMonitor extends CommonBase {
                if (ptr != 0) { bindings.ChannelMonitor_free(ptr); }
        }
 
+       long clone_ptr() {
+               long ret = bindings.ChannelMonitor_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the ChannelMonitor
         */
@@ -183,7 +188,7 @@ public class ChannelMonitor extends CommonBase {
         * [`get_outputs_to_watch`]: #method.get_outputs_to_watch
         */
        public TwoTuple_TxidCVec_C2Tuple_u32TxOutZZZ[] block_connected(byte[] header, TwoTuple_usizeTransactionZ[] txdata, int height, BroadcasterInterface broadcaster, FeeEstimator fee_estimator, Logger logger) {
-               long[] ret = bindings.ChannelMonitor_block_connected(this.ptr, header, txdata != null ? Arrays.stream(txdata).mapToLong(txdata_conv_28 -> txdata_conv_28 != null ? txdata_conv_28.ptr : 0).toArray() : null, height, broadcaster == null ? 0 : broadcaster.ptr, fee_estimator == null ? 0 : fee_estimator.ptr, logger == null ? 0 : logger.ptr);
+               long[] ret = bindings.ChannelMonitor_block_connected(this.ptr, InternalUtils.check_arr_len(header, 80), txdata != null ? Arrays.stream(txdata).mapToLong(txdata_conv_28 -> txdata_conv_28 != null ? txdata_conv_28.ptr : 0).toArray() : null, height, broadcaster == null ? 0 : broadcaster.ptr, fee_estimator == null ? 0 : fee_estimator.ptr, logger == null ? 0 : logger.ptr);
                TwoTuple_TxidCVec_C2Tuple_u32TxOutZZZ[] ret_conv_39_arr = new TwoTuple_TxidCVec_C2Tuple_u32TxOutZZZ[ret.length];
                for (int n = 0; n < ret.length; n++) {
                        long ret_conv_39 = ret[n];
@@ -202,7 +207,7 @@ public class ChannelMonitor extends CommonBase {
         * appropriately.
         */
        public void block_disconnected(byte[] header, int height, BroadcasterInterface broadcaster, FeeEstimator fee_estimator, Logger logger) {
-               bindings.ChannelMonitor_block_disconnected(this.ptr, header, height, broadcaster == null ? 0 : broadcaster.ptr, fee_estimator == null ? 0 : fee_estimator.ptr, logger == null ? 0 : logger.ptr);
+               bindings.ChannelMonitor_block_disconnected(this.ptr, InternalUtils.check_arr_len(header, 80), height, broadcaster == null ? 0 : broadcaster.ptr, fee_estimator == null ? 0 : fee_estimator.ptr, logger == null ? 0 : logger.ptr);
                this.ptrs_to.add(broadcaster);
                this.ptrs_to.add(fee_estimator);
                this.ptrs_to.add(logger);
@@ -218,7 +223,7 @@ public class ChannelMonitor extends CommonBase {
         * [`block_connected`]: Self::block_connected
         */
        public TwoTuple_TxidCVec_C2Tuple_u32TxOutZZZ[] transactions_confirmed(byte[] header, TwoTuple_usizeTransactionZ[] txdata, int height, BroadcasterInterface broadcaster, FeeEstimator fee_estimator, Logger logger) {
-               long[] ret = bindings.ChannelMonitor_transactions_confirmed(this.ptr, header, txdata != null ? Arrays.stream(txdata).mapToLong(txdata_conv_28 -> txdata_conv_28 != null ? txdata_conv_28.ptr : 0).toArray() : null, height, broadcaster == null ? 0 : broadcaster.ptr, fee_estimator == null ? 0 : fee_estimator.ptr, logger == null ? 0 : logger.ptr);
+               long[] ret = bindings.ChannelMonitor_transactions_confirmed(this.ptr, InternalUtils.check_arr_len(header, 80), txdata != null ? Arrays.stream(txdata).mapToLong(txdata_conv_28 -> txdata_conv_28 != null ? txdata_conv_28.ptr : 0).toArray() : null, height, broadcaster == null ? 0 : broadcaster.ptr, fee_estimator == null ? 0 : fee_estimator.ptr, logger == null ? 0 : logger.ptr);
                TwoTuple_TxidCVec_C2Tuple_u32TxOutZZZ[] ret_conv_39_arr = new TwoTuple_TxidCVec_C2Tuple_u32TxOutZZZ[ret.length];
                for (int n = 0; n < ret.length; n++) {
                        long ret_conv_39 = ret[n];
@@ -241,7 +246,7 @@ public class ChannelMonitor extends CommonBase {
         * [`block_disconnected`]: Self::block_disconnected
         */
        public void transaction_unconfirmed(byte[] txid, BroadcasterInterface broadcaster, FeeEstimator fee_estimator, Logger logger) {
-               bindings.ChannelMonitor_transaction_unconfirmed(this.ptr, txid, broadcaster == null ? 0 : broadcaster.ptr, fee_estimator == null ? 0 : fee_estimator.ptr, logger == null ? 0 : logger.ptr);
+               bindings.ChannelMonitor_transaction_unconfirmed(this.ptr, InternalUtils.check_arr_len(txid, 32), broadcaster == null ? 0 : broadcaster.ptr, fee_estimator == null ? 0 : fee_estimator.ptr, logger == null ? 0 : logger.ptr);
                this.ptrs_to.add(broadcaster);
                this.ptrs_to.add(fee_estimator);
                this.ptrs_to.add(logger);
@@ -257,7 +262,7 @@ public class ChannelMonitor extends CommonBase {
         * [`block_connected`]: Self::block_connected
         */
        public TwoTuple_TxidCVec_C2Tuple_u32TxOutZZZ[] best_block_updated(byte[] header, int height, BroadcasterInterface broadcaster, FeeEstimator fee_estimator, Logger logger) {
-               long[] ret = bindings.ChannelMonitor_best_block_updated(this.ptr, header, height, broadcaster == null ? 0 : broadcaster.ptr, fee_estimator == null ? 0 : fee_estimator.ptr, logger == null ? 0 : logger.ptr);
+               long[] ret = bindings.ChannelMonitor_best_block_updated(this.ptr, InternalUtils.check_arr_len(header, 80), height, broadcaster == null ? 0 : broadcaster.ptr, fee_estimator == null ? 0 : fee_estimator.ptr, logger == null ? 0 : logger.ptr);
                TwoTuple_TxidCVec_C2Tuple_u32TxOutZZZ[] ret_conv_39_arr = new TwoTuple_TxidCVec_C2Tuple_u32TxOutZZZ[ret.length];
                for (int n = 0; n < ret.length; n++) {
                        long ret_conv_39 = ret[n];
index 2f4d00a5a2ef552295a56665e87343ed33875201..815b26325bd1096f3be00c8f367c45d2379f560e 100644 (file)
@@ -55,6 +55,11 @@ public class ChannelMonitorUpdate extends CommonBase {
                bindings.ChannelMonitorUpdate_set_update_id(this.ptr, val);
        }
 
+       long clone_ptr() {
+               long ret = bindings.ChannelMonitorUpdate_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the ChannelMonitorUpdate
         */
index 2d98499be413b7c47652bac4f634d731a278d2ed..fe4c4058a9e01118386539780112da4ca286174d 100644 (file)
@@ -33,7 +33,7 @@ public class ChannelPublicKeys extends CommonBase {
         * on-chain channel lock-in 2-of-2 multisig output.
         */
        public void set_funding_pubkey(byte[] val) {
-               bindings.ChannelPublicKeys_set_funding_pubkey(this.ptr, val);
+               bindings.ChannelPublicKeys_set_funding_pubkey(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        /**
@@ -54,7 +54,7 @@ public class ChannelPublicKeys extends CommonBase {
         * states.
         */
        public void set_revocation_basepoint(byte[] val) {
-               bindings.ChannelPublicKeys_set_revocation_basepoint(this.ptr, val);
+               bindings.ChannelPublicKeys_set_revocation_basepoint(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        /**
@@ -73,7 +73,7 @@ public class ChannelPublicKeys extends CommonBase {
         * static across every commitment transaction.
         */
        public void set_payment_point(byte[] val) {
-               bindings.ChannelPublicKeys_set_payment_point(this.ptr, val);
+               bindings.ChannelPublicKeys_set_payment_point(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        /**
@@ -92,7 +92,7 @@ public class ChannelPublicKeys extends CommonBase {
         * after some delay (or can be claimed via the revocation path).
         */
        public void set_delayed_payment_basepoint(byte[] val) {
-               bindings.ChannelPublicKeys_set_delayed_payment_basepoint(this.ptr, val);
+               bindings.ChannelPublicKeys_set_delayed_payment_basepoint(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        /**
@@ -109,20 +109,25 @@ public class ChannelPublicKeys extends CommonBase {
         * which is used to encumber HTLC-in-flight outputs.
         */
        public void set_htlc_basepoint(byte[] val) {
-               bindings.ChannelPublicKeys_set_htlc_basepoint(this.ptr, val);
+               bindings.ChannelPublicKeys_set_htlc_basepoint(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        /**
         * Constructs a new ChannelPublicKeys given each field
         */
        public static ChannelPublicKeys of(byte[] funding_pubkey_arg, byte[] revocation_basepoint_arg, byte[] payment_point_arg, byte[] delayed_payment_basepoint_arg, byte[] htlc_basepoint_arg) {
-               long ret = bindings.ChannelPublicKeys_new(funding_pubkey_arg, revocation_basepoint_arg, payment_point_arg, delayed_payment_basepoint_arg, htlc_basepoint_arg);
+               long ret = bindings.ChannelPublicKeys_new(InternalUtils.check_arr_len(funding_pubkey_arg, 33), InternalUtils.check_arr_len(revocation_basepoint_arg, 33), InternalUtils.check_arr_len(payment_point_arg, 33), InternalUtils.check_arr_len(delayed_payment_basepoint_arg, 33), InternalUtils.check_arr_len(htlc_basepoint_arg, 33));
                if (ret >= 0 && ret <= 4096) { return null; }
                ChannelPublicKeys ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new ChannelPublicKeys(null, ret); }
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.ChannelPublicKeys_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the ChannelPublicKeys
         */
index cf589693f792f444c51303f0f1a1076b551ce19c..6e50f61707c6e5a2f0ed38de57ebe053dda720f0 100644 (file)
@@ -31,7 +31,7 @@ public class ChannelReestablish extends CommonBase {
         * The channel ID
         */
        public void set_channel_id(byte[] val) {
-               bindings.ChannelReestablish_set_channel_id(this.ptr, val);
+               bindings.ChannelReestablish_set_channel_id(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        /**
@@ -64,6 +64,11 @@ public class ChannelReestablish extends CommonBase {
                bindings.ChannelReestablish_set_next_remote_commitment_number(this.ptr, val);
        }
 
+       long clone_ptr() {
+               long ret = bindings.ChannelReestablish_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the ChannelReestablish
         */
index 3145a4f14848ade67006bc66f820a027caaeee4b..3835ee09599646e0092af030cc479a0eaa691006 100644 (file)
@@ -132,6 +132,11 @@ public class ChannelTransactionParameters extends CommonBase {
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.ChannelTransactionParameters_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the ChannelTransactionParameters
         */
index 1f0f43b19688ece56b8419b948b2bf46087e57a6..12f66e65efac71a61fb0f6fe029f9c56d27fb4ee 100644 (file)
@@ -31,7 +31,7 @@ public class ChannelUpdate extends CommonBase {
         * A signature of the channel update
         */
        public void set_signature(byte[] val) {
-               bindings.ChannelUpdate_set_signature(this.ptr, val);
+               bindings.ChannelUpdate_set_signature(this.ptr, InternalUtils.check_arr_len(val, 64));
        }
 
        /**
@@ -56,13 +56,18 @@ public class ChannelUpdate extends CommonBase {
         * Constructs a new ChannelUpdate given each field
         */
        public static ChannelUpdate of(byte[] signature_arg, UnsignedChannelUpdate contents_arg) {
-               long ret = bindings.ChannelUpdate_new(signature_arg, contents_arg == null ? 0 : contents_arg.ptr & ~1);
+               long ret = bindings.ChannelUpdate_new(InternalUtils.check_arr_len(signature_arg, 64), contents_arg == null ? 0 : contents_arg.ptr & ~1);
                if (ret >= 0 && ret <= 4096) { return null; }
                ChannelUpdate ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new ChannelUpdate(null, ret); }
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.ChannelUpdate_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the ChannelUpdate
         */
index a7fb48ba6a0e87dd0b6ab963efa6a6edb6c7cf6d..a67baf21b158a3f0e371d6a17d95a15060d97cbd 100644 (file)
@@ -31,7 +31,7 @@ public class ClosingSigned extends CommonBase {
         * The channel ID
         */
        public void set_channel_id(byte[] val) {
-               bindings.ClosingSigned_set_channel_id(this.ptr, val);
+               bindings.ClosingSigned_set_channel_id(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        /**
@@ -61,7 +61,7 @@ public class ClosingSigned extends CommonBase {
         * A signature on the closing transaction
         */
        public void set_signature(byte[] val) {
-               bindings.ClosingSigned_set_signature(this.ptr, val);
+               bindings.ClosingSigned_set_signature(this.ptr, InternalUtils.check_arr_len(val, 64));
        }
 
        /**
@@ -93,13 +93,18 @@ public class ClosingSigned extends CommonBase {
         * Constructs a new ClosingSigned given each field
         */
        public static ClosingSigned of(byte[] channel_id_arg, long fee_satoshis_arg, byte[] signature_arg, ClosingSignedFeeRange fee_range_arg) {
-               long ret = bindings.ClosingSigned_new(channel_id_arg, fee_satoshis_arg, signature_arg, fee_range_arg == null ? 0 : fee_range_arg.ptr & ~1);
+               long ret = bindings.ClosingSigned_new(InternalUtils.check_arr_len(channel_id_arg, 32), fee_satoshis_arg, InternalUtils.check_arr_len(signature_arg, 64), fee_range_arg == null ? 0 : fee_range_arg.ptr & ~1);
                if (ret >= 0 && ret <= 4096) { return null; }
                ClosingSigned ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new ClosingSigned(null, ret); }
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.ClosingSigned_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the ClosingSigned
         */
index 6f4e79c1d8571f76d073baffae95995726f1e313..7d17307ed579ee086abe995cbf4c063f566d3f92 100644 (file)
@@ -66,6 +66,11 @@ public class ClosingSignedFeeRange extends CommonBase {
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.ClosingSignedFeeRange_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the ClosingSignedFeeRange
         */
index 198d2a489de0c05a7394fcaa8e2073462307ba70..35de3c8395e21be4ce02f1e20b47f73e56420471 100644 (file)
@@ -23,6 +23,11 @@ public class ClosingTransaction extends CommonBase {
                if (ptr != 0) { bindings.ClosingTransaction_free(ptr); }
        }
 
+       long clone_ptr() {
+               long ret = bindings.ClosingTransaction_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the ClosingTransaction
         */
index b50f886170e2817a2e3f782fac6269b4f02bff87..88ac15738986e379f8fb1fb346a484dbaf7ed1aa 100644 (file)
@@ -44,6 +44,12 @@ public class ClosureReason extends CommonBase {
                assert false; return null; // Unreachable without extending the (internal) bindings interface
        }
 
+       /**
+        * Closure generated from receiving a peer error message.
+        * 
+        * Our counterparty may have broadcasted their latest commitment state, and we have
+        * as well.
+        */
        public final static class CounterpartyForceClosed extends ClosureReason {
                /**
                 * The error which the peer sent us.
@@ -58,21 +64,38 @@ public class ClosureReason extends CommonBase {
                        this.peer_msg = obj.peer_msg;
                }
        }
+       /**
+        * Closure generated from [`ChannelManager::force_close_channel`], called by the user.
+        * 
+        * [`ChannelManager::force_close_channel`]: crate::ln::channelmanager::ChannelManager::force_close_channel.
+        */
        public final static class HolderForceClosed extends ClosureReason {
                private HolderForceClosed(long ptr, bindings.LDKClosureReason.HolderForceClosed obj) {
                        super(null, ptr);
                }
        }
+       /**
+        * The channel was closed after negotiating a cooperative close and we've now broadcasted
+        * the cooperative close transaction. Note the shutdown may have been initiated by us.
+        */
        public final static class CooperativeClosure extends ClosureReason {
                private CooperativeClosure(long ptr, bindings.LDKClosureReason.CooperativeClosure obj) {
                        super(null, ptr);
                }
        }
+       /**
+        * A commitment transaction was confirmed on chain, closing the channel. Most likely this
+        * commitment transaction came from our counterparty, but it may also have come from
+        * a copy of our own `ChannelMonitor`.
+        */
        public final static class CommitmentTxConfirmed extends ClosureReason {
                private CommitmentTxConfirmed(long ptr, bindings.LDKClosureReason.CommitmentTxConfirmed obj) {
                        super(null, ptr);
                }
        }
+       /**
+        * Closure generated from processing an event, likely a HTLC forward/relay/reception.
+        */
        public final static class ProcessingError extends ClosureReason {
                /**
                 * A developer-readable error message which we generated.
@@ -83,16 +106,32 @@ public class ClosureReason extends CommonBase {
                        this.err = obj.err;
                }
        }
+       /**
+        * The `PeerManager` informed us that we've disconnected from the peer. We close channels
+        * if the `PeerManager` informed us that it is unlikely we'll be able to connect to the
+        * peer again in the future or if the peer disconnected before we finished negotiating
+        * the channel open. The first case may be caused by incompatible features which our
+        * counterparty, or we, require.
+        */
        public final static class DisconnectedPeer extends ClosureReason {
                private DisconnectedPeer(long ptr, bindings.LDKClosureReason.DisconnectedPeer obj) {
                        super(null, ptr);
                }
        }
+       /**
+        * Closure generated from `ChannelManager::read` if the ChannelMonitor is newer than
+        * the ChannelManager deserialized.
+        */
        public final static class OutdatedChannelManager extends ClosureReason {
                private OutdatedChannelManager(long ptr, bindings.LDKClosureReason.OutdatedChannelManager obj) {
                        super(null, ptr);
                }
        }
+       long clone_ptr() {
+               long ret = bindings.ClosureReason_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the ClosureReason
         */
index 85266a6e5943ce6c55edd71590ee8849edaa0d7f..adce70a4749179344745d7d7590541b083326b85 100644 (file)
@@ -31,7 +31,7 @@ public class CommitmentSigned extends CommonBase {
         * The channel ID
         */
        public void set_channel_id(byte[] val) {
-               bindings.CommitmentSigned_set_channel_id(this.ptr, val);
+               bindings.CommitmentSigned_set_channel_id(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        /**
@@ -46,27 +46,32 @@ public class CommitmentSigned extends CommonBase {
         * A signature on the commitment transaction
         */
        public void set_signature(byte[] val) {
-               bindings.CommitmentSigned_set_signature(this.ptr, val);
+               bindings.CommitmentSigned_set_signature(this.ptr, InternalUtils.check_arr_len(val, 64));
        }
 
        /**
         * Signatures on the HTLC transactions
         */
        public void set_htlc_signatures(byte[][] val) {
-               bindings.CommitmentSigned_set_htlc_signatures(this.ptr, val);
+               bindings.CommitmentSigned_set_htlc_signatures(this.ptr, val != null ? Arrays.stream(val).map(val_conv_8 -> InternalUtils.check_arr_len(val_conv_8, 64)).toArray(byte[][]::new) : null);
        }
 
        /**
         * Constructs a new CommitmentSigned given each field
         */
        public static CommitmentSigned of(byte[] channel_id_arg, byte[] signature_arg, byte[][] htlc_signatures_arg) {
-               long ret = bindings.CommitmentSigned_new(channel_id_arg, signature_arg, htlc_signatures_arg);
+               long ret = bindings.CommitmentSigned_new(InternalUtils.check_arr_len(channel_id_arg, 32), InternalUtils.check_arr_len(signature_arg, 64), htlc_signatures_arg != null ? Arrays.stream(htlc_signatures_arg).map(htlc_signatures_arg_conv_8 -> InternalUtils.check_arr_len(htlc_signatures_arg_conv_8, 64)).toArray(byte[][]::new) : null);
                if (ret >= 0 && ret <= 4096) { return null; }
                CommitmentSigned ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new CommitmentSigned(null, ret); }
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.CommitmentSigned_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the CommitmentSigned
         */
index 276a69d05befe92ec30c0115d5a0861851d02f35..b4dda5259391b6000a26166524dbcf03196603c4 100644 (file)
@@ -24,6 +24,11 @@ public class CommitmentTransaction extends CommonBase {
                if (ptr != 0) { bindings.CommitmentTransaction_free(ptr); }
        }
 
+       long clone_ptr() {
+               long ret = bindings.CommitmentTransaction_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the CommitmentTransaction
         */
index fe5bcf0c6378c1b8e19f61486c76afa01095ac12..8b8e32ddf12468e0edd4ff7896325b9544f8359c 100644 (file)
@@ -160,6 +160,11 @@ public class CommitmentUpdate extends CommonBase {
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.CommitmentUpdate_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the CommitmentUpdate
         */
index 6f1ab54441b0a4c9385275c634b84c2f7cd79edf..bfa6bbe60101827a3a69476e5cb8df5db0fdd1e1 100644 (file)
@@ -128,7 +128,8 @@ public class Confirm extends CommonBase {
                        }
                        @Override public byte[][] get_relevant_txids() {
                                byte[][] ret = arg.get_relevant_txids();
-                               return ret;
+                               byte[][] result = ret != null ? Arrays.stream(ret).map(ret_conv_8 -> InternalUtils.check_arr_len(ret_conv_8, 32)).toArray(byte[][]::new) : null;
+                               return result;
                        }
                });
                return impl_holder.held;
@@ -149,7 +150,7 @@ public class Confirm extends CommonBase {
         * [`best_block_updated`]: Self::best_block_updated
         */
        public void transactions_confirmed(byte[] header, TwoTuple_usizeTransactionZ[] txdata, int height) {
-               bindings.Confirm_transactions_confirmed(this.ptr, header, txdata != null ? Arrays.stream(txdata).mapToLong(txdata_conv_28 -> txdata_conv_28 != null ? txdata_conv_28.ptr : 0).toArray() : null, height);
+               bindings.Confirm_transactions_confirmed(this.ptr, InternalUtils.check_arr_len(header, 80), txdata != null ? Arrays.stream(txdata).mapToLong(txdata_conv_28 -> txdata_conv_28 != null ? txdata_conv_28.ptr : 0).toArray() : null, height);
        }
 
        /**
@@ -163,7 +164,7 @@ public class Confirm extends CommonBase {
         * [`transactions_confirmed`]: Self::transactions_confirmed
         */
        public void transaction_unconfirmed(byte[] txid) {
-               bindings.Confirm_transaction_unconfirmed(this.ptr, txid);
+               bindings.Confirm_transaction_unconfirmed(this.ptr, InternalUtils.check_arr_len(txid, 32));
        }
 
        /**
@@ -173,7 +174,7 @@ public class Confirm extends CommonBase {
         * if they become available at the same time.
         */
        public void best_block_updated(byte[] header, int height) {
-               bindings.Confirm_best_block_updated(this.ptr, header, height);
+               bindings.Confirm_best_block_updated(this.ptr, InternalUtils.check_arr_len(header, 80), height);
        }
 
        /**
index 52ccf569e9a4e57a5e09f7dada374b20792150ee..e43170353d671e41ab367bb37e5c60121c0d16e1 100644 (file)
@@ -63,6 +63,11 @@ public class CounterpartyChannelTransactionParameters extends CommonBase {
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.CounterpartyChannelTransactionParameters_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the CounterpartyChannelTransactionParameters
         */
index 7912abfe4306e0a906f9aebd58e61534184e7bfb..cfd35f4fd4321ee57fca46725d5988fb3dbd76cc 100644 (file)
@@ -79,6 +79,11 @@ public class CounterpartyForwardingInfo extends CommonBase {
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.CounterpartyForwardingInfo_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the CounterpartyForwardingInfo
         */
index 81a32f934f480e4d163d3573f2965782ac79f52b..06354d6a3188758734f810a03e92667d7e686c24 100644 (file)
@@ -46,12 +46,12 @@ public class CustomMessageHandler extends CommonBase {
                                Type ret_hu_conv = new Type(null, msg);
                                ret_hu_conv.ptrs_to.add(this);
                                Result_NoneLightningErrorZ ret = arg.handle_custom_message(ret_hu_conv, sender_node_id);
-                               long result = ret != null ? ret.ptr : 0;
+                               long result = ret == null ? 0 : ret.clone_ptr();
                                return result;
                        }
                        @Override public long[] get_and_clear_pending_msg() {
                                TwoTuple_PublicKeyTypeZ[] ret = arg.get_and_clear_pending_msg();
-                               long[] result = ret != null ? Arrays.stream(ret).mapToLong(ret_conv_25 -> ret_conv_25 != null ? ret_conv_25.ptr : 0).toArray() : null;
+                               long[] result = ret != null ? Arrays.stream(ret).mapToLong(ret_conv_25 -> ret_conv_25 == null ? 0 : ret_conv_25.clone_ptr()).toArray() : null;
                                return result;
                        }
                }, CustomMessageReader.new_impl(CustomMessageReader_impl).bindings_instance);
@@ -72,7 +72,7 @@ public class CustomMessageHandler extends CommonBase {
         * Can return a `MessageHandlingError` if the message could not be handled.
         */
        public Result_NoneLightningErrorZ handle_custom_message(Type msg, byte[] sender_node_id) {
-               long ret = bindings.CustomMessageHandler_handle_custom_message(this.ptr, msg == null ? 0 : msg.ptr, sender_node_id);
+               long ret = bindings.CustomMessageHandler_handle_custom_message(this.ptr, msg == null ? 0 : msg.ptr, InternalUtils.check_arr_len(sender_node_id, 33));
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_NoneLightningErrorZ ret_hu_conv = Result_NoneLightningErrorZ.constr_from_ptr(ret);
                this.ptrs_to.add(msg);
index 792dbb88377f580ecb3a7230e28444f0fe6f56ad..816d378328883ef129b5f5d49b7e01df3756b24d 100644 (file)
@@ -39,7 +39,7 @@ public class CustomMessageReader extends CommonBase {
                impl_holder.held = new CustomMessageReader(new bindings.LDKCustomMessageReader() {
                        @Override public long read(short message_type, byte[] buffer) {
                                Result_COption_TypeZDecodeErrorZ ret = arg.read(message_type, buffer);
-                               long result = ret != null ? ret.ptr : 0;
+                               long result = ret == null ? 0 : ret.clone_ptr();
                                return result;
                        }
                });
index 70b3f3e16776fde4cebacaf82dab3759746b8f93..2b36e90a2883b60c671966b43224d8992647860d 100644 (file)
@@ -36,7 +36,7 @@ public class DataLossProtect extends CommonBase {
         * belonging to the recipient
         */
        public void set_your_last_per_commitment_secret(byte[] val) {
-               bindings.DataLossProtect_set_your_last_per_commitment_secret(this.ptr, val);
+               bindings.DataLossProtect_set_your_last_per_commitment_secret(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        /**
@@ -51,20 +51,25 @@ public class DataLossProtect extends CommonBase {
         * The sender's per-commitment point for their current commitment transaction
         */
        public void set_my_current_per_commitment_point(byte[] val) {
-               bindings.DataLossProtect_set_my_current_per_commitment_point(this.ptr, val);
+               bindings.DataLossProtect_set_my_current_per_commitment_point(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        /**
         * Constructs a new DataLossProtect given each field
         */
        public static DataLossProtect of(byte[] your_last_per_commitment_secret_arg, byte[] my_current_per_commitment_point_arg) {
-               long ret = bindings.DataLossProtect_new(your_last_per_commitment_secret_arg, my_current_per_commitment_point_arg);
+               long ret = bindings.DataLossProtect_new(InternalUtils.check_arr_len(your_last_per_commitment_secret_arg, 32), InternalUtils.check_arr_len(my_current_per_commitment_point_arg, 33));
                if (ret >= 0 && ret <= 4096) { return null; }
                DataLossProtect ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new DataLossProtect(null, ret); }
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.DataLossProtect_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the DataLossProtect
         */
index 5f7d8809b8b3b98763ef0c3614ea6b262d94d2c4..64206c55438800bff30c1338a40e5f64febecda7 100644 (file)
@@ -19,6 +19,11 @@ public class DecodeError extends CommonBase {
                if (ptr != 0) { bindings.DecodeError_free(ptr); }
        }
 
+       long clone_ptr() {
+               long ret = bindings.DecodeError_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the DecodeError
         */
index c0b84328a43f7c4cbd3b4133330e55fae42f377c..a8ddbf3f57c851f8342c4add13bb7d4a7d3194bc 100644 (file)
@@ -50,7 +50,7 @@ public class DelayedPaymentOutputDescriptor extends CommonBase {
         * Per commitment point to derive delayed_payment_key by key holder
         */
        public void set_per_commitment_point(byte[] val) {
-               bindings.DelayedPaymentOutputDescriptor_set_per_commitment_point(this.ptr, val);
+               bindings.DelayedPaymentOutputDescriptor_set_per_commitment_point(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        /**
@@ -91,7 +91,7 @@ public class DelayedPaymentOutputDescriptor extends CommonBase {
         * derive the witnessScript for this output.
         */
        public void set_revocation_pubkey(byte[] val) {
-               bindings.DelayedPaymentOutputDescriptor_set_revocation_pubkey(this.ptr, val);
+               bindings.DelayedPaymentOutputDescriptor_set_revocation_pubkey(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        /**
@@ -110,7 +110,7 @@ public class DelayedPaymentOutputDescriptor extends CommonBase {
         * the channel to spend the output.
         */
        public void set_channel_keys_id(byte[] val) {
-               bindings.DelayedPaymentOutputDescriptor_set_channel_keys_id(this.ptr, val);
+               bindings.DelayedPaymentOutputDescriptor_set_channel_keys_id(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        /**
@@ -132,13 +132,18 @@ public class DelayedPaymentOutputDescriptor extends CommonBase {
         * Constructs a new DelayedPaymentOutputDescriptor given each field
         */
        public static DelayedPaymentOutputDescriptor of(OutPoint outpoint_arg, byte[] per_commitment_point_arg, short to_self_delay_arg, TxOut output_arg, byte[] revocation_pubkey_arg, byte[] channel_keys_id_arg, long channel_value_satoshis_arg) {
-               long ret = bindings.DelayedPaymentOutputDescriptor_new(outpoint_arg == null ? 0 : outpoint_arg.ptr & ~1, per_commitment_point_arg, to_self_delay_arg, output_arg.ptr, revocation_pubkey_arg, channel_keys_id_arg, channel_value_satoshis_arg);
+               long ret = bindings.DelayedPaymentOutputDescriptor_new(outpoint_arg == null ? 0 : outpoint_arg.ptr & ~1, InternalUtils.check_arr_len(per_commitment_point_arg, 33), to_self_delay_arg, output_arg.ptr, InternalUtils.check_arr_len(revocation_pubkey_arg, 33), InternalUtils.check_arr_len(channel_keys_id_arg, 32), channel_value_satoshis_arg);
                if (ret >= 0 && ret <= 4096) { return null; }
                DelayedPaymentOutputDescriptor ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new DelayedPaymentOutputDescriptor(null, ret); }
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.DelayedPaymentOutputDescriptor_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the DelayedPaymentOutputDescriptor
         */
index 707fff23af366e60af6894255701d16493308e15..8e8f68ff63dabcac67d6068c943755d5d32403f5 100644 (file)
@@ -22,6 +22,11 @@ public class Description extends CommonBase {
                if (ptr != 0) { bindings.Description_free(ptr); }
        }
 
+       long clone_ptr() {
+               long ret = bindings.Description_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the Description
         */
index d90c4fc50b7ebf7c80ed4b5b7ace1681dc856f34..55da78714859010785cdbbe555e387c82ab8ec4f 100644 (file)
@@ -158,6 +158,11 @@ public class DirectionalChannelInfo extends CommonBase {
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.DirectionalChannelInfo_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the DirectionalChannelInfo
         */
index c13b9e519198f5066b68ddef4b855057f135b571..ec2ae18f0843b36773230af1fadaebd13106dd08 100644 (file)
@@ -35,6 +35,9 @@ public class ErrorAction extends CommonBase {
                assert false; return null; // Unreachable without extending the (internal) bindings interface
        }
 
+       /**
+        * The peer took some action which made us think they were useless. Disconnect them.
+        */
        public final static class DisconnectPeer extends ErrorAction {
                /**
                 * An error message which we should make an effort to send before we disconnect.
@@ -50,11 +53,18 @@ public class ErrorAction extends CommonBase {
                        this.msg = msg_hu_conv;
                }
        }
+       /**
+        * The peer did something harmless that we weren't able to process, just log and ignore
+        */
        public final static class IgnoreError extends ErrorAction {
                private IgnoreError(long ptr, bindings.LDKErrorAction.IgnoreError obj) {
                        super(null, ptr);
                }
        }
+       /**
+        * The peer did something harmless that we weren't able to meaningfully process.
+        * If the error is logged, log it at the given level.
+        */
        public final static class IgnoreAndLog extends ErrorAction {
                public final Level ignore_and_log;
                private IgnoreAndLog(long ptr, bindings.LDKErrorAction.IgnoreAndLog obj) {
@@ -62,6 +72,9 @@ public class ErrorAction extends CommonBase {
                        this.ignore_and_log = obj.ignore_and_log;
                }
        }
+       /**
+        * The peer did something incorrect. Tell them.
+        */
        public final static class SendErrorMessage extends ErrorAction {
                /**
                 * The message to send.
@@ -75,6 +88,11 @@ public class ErrorAction extends CommonBase {
                        this.msg = msg_hu_conv;
                }
        }
+       long clone_ptr() {
+               long ret = bindings.ErrorAction_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the ErrorAction
         */
index 1fcb6d257f0d81b276e75f431f8381acd6c5fb2b..cf7b9f50c6c1863419d105fe4c55fa3987539817 100644 (file)
@@ -31,7 +31,7 @@ public class ErrorMessage extends CommonBase {
         * The channel ID involved in the error
         */
        public void set_channel_id(byte[] val) {
-               bindings.ErrorMessage_set_channel_id(this.ptr, val);
+               bindings.ErrorMessage_set_channel_id(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        /**
@@ -59,13 +59,18 @@ public class ErrorMessage extends CommonBase {
         * Constructs a new ErrorMessage given each field
         */
        public static ErrorMessage of(byte[] channel_id_arg, java.lang.String data_arg) {
-               long ret = bindings.ErrorMessage_new(channel_id_arg, data_arg);
+               long ret = bindings.ErrorMessage_new(InternalUtils.check_arr_len(channel_id_arg, 32), data_arg);
                if (ret >= 0 && ret <= 4096) { return null; }
                ErrorMessage ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new ErrorMessage(null, ret); }
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.ErrorMessage_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the ErrorMessage
         */
index d3f85fed9e8df907eea826de13b43fd18d0268ef..06124414bfdc3696fc61e3fc098d6842da85ce5d 100644 (file)
@@ -54,6 +54,13 @@ public class Event extends CommonBase {
                assert false; return null; // Unreachable without extending the (internal) bindings interface
        }
 
+       /**
+        * Used to indicate that the client should generate a funding transaction with the given
+        * parameters and then call ChannelManager::funding_transaction_generated.
+        * Generated in ChannelManager message handling.
+        * Note that *all inputs* in the funding transaction must spend SegWit outputs or your
+        * counterparty can steal your funds!
+        */
        public final static class FundingGenerationReady extends Event {
                /**
                 * The random channel_id we picked which you'll need to pass into
@@ -83,6 +90,19 @@ public class Event extends CommonBase {
                        this.user_channel_id = obj.user_channel_id;
                }
        }
+       /**
+        * Indicates we've received money! Just gotta dig out that payment preimage and feed it to
+        * [`ChannelManager::claim_funds`] to get it....
+        * Note that if the preimage is not known, you should call
+        * [`ChannelManager::fail_htlc_backwards`] to free up resources for this HTLC and avoid
+        * network congestion.
+        * If you fail to call either [`ChannelManager::claim_funds`] or
+        * [`ChannelManager::fail_htlc_backwards`] within the HTLC's timeout, the HTLC will be
+        * automatically failed.
+        * 
+        * [`ChannelManager::claim_funds`]: crate::ln::channelmanager::ChannelManager::claim_funds
+        * [`ChannelManager::fail_htlc_backwards`]: crate::ln::channelmanager::ChannelManager::fail_htlc_backwards
+        */
        public final static class PaymentReceived extends Event {
                /**
                 * The hash for which the preimage should be handed to the ChannelManager.
@@ -107,6 +127,13 @@ public class Event extends CommonBase {
                        this.purpose = purpose_hu_conv;
                }
        }
+       /**
+        * Indicates an outbound payment we made succeeded (i.e. it made it all the way to its target
+        * and we got back the payment preimage for it).
+        * 
+        * Note for MPP payments: in rare cases, this event may be preceded by a `PaymentPathFailed`
+        * event. In this situation, you SHOULD treat this payment as having succeeded.
+        */
        public final static class PaymentSent extends Event {
                /**
                 * The id returned by [`ChannelManager::send_payment`] and used with
@@ -153,6 +180,10 @@ public class Event extends CommonBase {
                        this.fee_paid_msat = fee_paid_msat_hu_conv;
                }
        }
+       /**
+        * Indicates an outbound payment we made failed. Probably some intermediary node dropped
+        * something. You may wish to retry with a different route.
+        */
        public final static class PaymentPathFailed extends Event {
                /**
                 * The id returned by [`ChannelManager::send_payment`] and used with
@@ -242,6 +273,10 @@ public class Event extends CommonBase {
                        this.retry = retry_hu_conv;
                }
        }
+       /**
+        * Used to indicate that ChannelManager::process_pending_htlc_forwards should be called at a
+        * time in the future.
+        */
        public final static class PendingHTLCsForwardable extends Event {
                /**
                 * The minimum amount of time that should be waited prior to calling
@@ -255,6 +290,13 @@ public class Event extends CommonBase {
                        this.time_forwardable = obj.time_forwardable;
                }
        }
+       /**
+        * Used to indicate that an output which you should know how to spend was confirmed on chain
+        * and is now spendable.
+        * Such an output will *not* ever be spent by rust-lightning, and are not at risk of your
+        * counterparty spending them due to some kind of timeout. Thus, you need to store them
+        * somewhere and spend them when you create on-chain transactions.
+        */
        public final static class SpendableOutputs extends Event {
                /**
                 * The outputs which you should store as spendable by you.
@@ -273,6 +315,10 @@ public class Event extends CommonBase {
                        this.outputs = outputs_conv_27_arr;
                }
        }
+       /**
+        * This event is generated when a payment has been successfully forwarded through us and a
+        * forwarding fee earned.
+        */
        public final static class PaymentForwarded extends Event {
                /**
                 * The fee, in milli-satoshis, which was earned as a result of the payment.
@@ -304,6 +350,9 @@ public class Event extends CommonBase {
                        this.claim_from_onchain_tx = obj.claim_from_onchain_tx;
                }
        }
+       /**
+        * Used to indicate that a channel with the given `channel_id` is in the process of closure.
+        */
        public final static class ChannelClosed extends Event {
                /**
                 * The channel_id of the channel which has been closed. Note that on-chain transactions
@@ -332,6 +381,10 @@ public class Event extends CommonBase {
                        this.reason = reason_hu_conv;
                }
        }
+       /**
+        * Used to indicate to the user that they can abandon the funding transaction and recycle the
+        * inputs for another purpose.
+        */
        public final static class DiscardFunding extends Event {
                /**
                 * The channel_id of the channel which has been closed.
@@ -347,6 +400,11 @@ public class Event extends CommonBase {
                        this.transaction = obj.transaction;
                }
        }
+       long clone_ptr() {
+               long ret = bindings.Event_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the Event
         */
@@ -362,7 +420,7 @@ public class Event extends CommonBase {
         * Utility method to constructs a new FundingGenerationReady-variant Event
         */
        public static Event funding_generation_ready(byte[] temporary_channel_id, long channel_value_satoshis, byte[] output_script, long user_channel_id) {
-               long ret = bindings.Event_funding_generation_ready(temporary_channel_id, channel_value_satoshis, output_script, user_channel_id);
+               long ret = bindings.Event_funding_generation_ready(InternalUtils.check_arr_len(temporary_channel_id, 32), channel_value_satoshis, output_script, user_channel_id);
                if (ret >= 0 && ret <= 4096) { return null; }
                Event ret_hu_conv = Event.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
@@ -373,7 +431,7 @@ public class Event extends CommonBase {
         * Utility method to constructs a new PaymentReceived-variant Event
         */
        public static Event payment_received(byte[] payment_hash, long amt, PaymentPurpose purpose) {
-               long ret = bindings.Event_payment_received(payment_hash, amt, purpose.ptr);
+               long ret = bindings.Event_payment_received(InternalUtils.check_arr_len(payment_hash, 32), amt, purpose.ptr);
                if (ret >= 0 && ret <= 4096) { return null; }
                Event ret_hu_conv = Event.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
@@ -384,7 +442,7 @@ public class Event extends CommonBase {
         * Utility method to constructs a new PaymentSent-variant Event
         */
        public static Event payment_sent(byte[] payment_id, byte[] payment_preimage, byte[] payment_hash, Option_u64Z fee_paid_msat) {
-               long ret = bindings.Event_payment_sent(payment_id, payment_preimage, payment_hash, fee_paid_msat.ptr);
+               long ret = bindings.Event_payment_sent(InternalUtils.check_arr_len(payment_id, 32), InternalUtils.check_arr_len(payment_preimage, 32), InternalUtils.check_arr_len(payment_hash, 32), fee_paid_msat.ptr);
                if (ret >= 0 && ret <= 4096) { return null; }
                Event ret_hu_conv = Event.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
@@ -395,7 +453,7 @@ public class Event extends CommonBase {
         * Utility method to constructs a new PaymentPathFailed-variant Event
         */
        public static Event payment_path_failed(byte[] payment_id, byte[] payment_hash, boolean rejected_by_dest, Option_NetworkUpdateZ network_update, boolean all_paths_failed, RouteHop[] path, Option_u64Z short_channel_id, RouteParameters retry) {
-               long ret = bindings.Event_payment_path_failed(payment_id, payment_hash, rejected_by_dest, network_update.ptr, all_paths_failed, path != null ? Arrays.stream(path).mapToLong(path_conv_10 -> path_conv_10 == null ? 0 : path_conv_10.ptr & ~1).toArray() : null, short_channel_id.ptr, retry == null ? 0 : retry.ptr & ~1);
+               long ret = bindings.Event_payment_path_failed(InternalUtils.check_arr_len(payment_id, 32), InternalUtils.check_arr_len(payment_hash, 32), rejected_by_dest, network_update.ptr, all_paths_failed, path != null ? Arrays.stream(path).mapToLong(path_conv_10 -> path_conv_10 == null ? 0 : path_conv_10.ptr & ~1).toArray() : null, short_channel_id.ptr, retry == null ? 0 : retry.ptr & ~1);
                if (ret >= 0 && ret <= 4096) { return null; }
                Event ret_hu_conv = Event.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
@@ -439,7 +497,7 @@ public class Event extends CommonBase {
         * Utility method to constructs a new ChannelClosed-variant Event
         */
        public static Event channel_closed(byte[] channel_id, long user_channel_id, ClosureReason reason) {
-               long ret = bindings.Event_channel_closed(channel_id, user_channel_id, reason.ptr);
+               long ret = bindings.Event_channel_closed(InternalUtils.check_arr_len(channel_id, 32), user_channel_id, reason.ptr);
                if (ret >= 0 && ret <= 4096) { return null; }
                Event ret_hu_conv = Event.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
@@ -450,7 +508,7 @@ public class Event extends CommonBase {
         * Utility method to constructs a new DiscardFunding-variant Event
         */
        public static Event discard_funding(byte[] channel_id, byte[] transaction) {
-               long ret = bindings.Event_discard_funding(channel_id, transaction);
+               long ret = bindings.Event_discard_funding(InternalUtils.check_arr_len(channel_id, 32), transaction);
                if (ret >= 0 && ret <= 4096) { return null; }
                Event ret_hu_conv = Event.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
index 60c7a2e0c75b1a17812aaf4ded54ba0bb4285f1d..c476b6c6de74e9835e38891c13da80ad12057e8b 100644 (file)
@@ -25,6 +25,11 @@ public class ExpiryTime extends CommonBase {
                if (ptr != 0) { bindings.ExpiryTime_free(ptr); }
        }
 
+       long clone_ptr() {
+               long ret = bindings.ExpiryTime_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the ExpiryTime
         */
index 3e687e7cf17d912704d3a02ec783016639beead1..c82d85c16c67ac2b3f85a0555546021d17618df8 100644 (file)
@@ -57,6 +57,11 @@ public class Fallback extends CommonBase {
                        this.script_hash = obj.script_hash;
                }
        }
+       long clone_ptr() {
+               long ret = bindings.Fallback_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the Fallback
         */
@@ -83,7 +88,7 @@ public class Fallback extends CommonBase {
         * Utility method to constructs a new PubKeyHash-variant Fallback
         */
        public static Fallback pub_key_hash(byte[] a) {
-               long ret = bindings.Fallback_pub_key_hash(a);
+               long ret = bindings.Fallback_pub_key_hash(InternalUtils.check_arr_len(a, 20));
                if (ret >= 0 && ret <= 4096) { return null; }
                Fallback ret_hu_conv = Fallback.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
@@ -94,7 +99,7 @@ public class Fallback extends CommonBase {
         * Utility method to constructs a new ScriptHash-variant Fallback
         */
        public static Fallback script_hash(byte[] a) {
-               long ret = bindings.Fallback_script_hash(a);
+               long ret = bindings.Fallback_script_hash(InternalUtils.check_arr_len(a, 20));
                if (ret >= 0 && ret <= 4096) { return null; }
                Fallback ret_hu_conv = Fallback.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
index f93f321da09b0bb601775c4939e90a16ada9fa56..764f2cbbd70f96b4427bd64d1e7fdc65199b3d81 100644 (file)
@@ -72,7 +72,7 @@ public class Filter extends CommonBase {
                                WatchedOutput output_hu_conv = null; if (output < 0 || output > 4096) { output_hu_conv = new WatchedOutput(null, output); }
                                output_hu_conv.ptrs_to.add(this);
                                Option_C2Tuple_usizeTransactionZZ ret = arg.register_output(output_hu_conv);
-                               long result = ret.ptr;
+                               long result = ret == null ? 0 : ret.clone_ptr();
                                return result;
                        }
                });
@@ -83,7 +83,7 @@ public class Filter extends CommonBase {
         * a spending condition.
         */
        public void register_tx(byte[] txid, byte[] script_pubkey) {
-               bindings.Filter_register_tx(this.ptr, txid, script_pubkey);
+               bindings.Filter_register_tx(this.ptr, InternalUtils.check_arr_len(txid, 32), script_pubkey);
        }
 
        /**
index 0585d27a0d55c24907c2383a8bae8de2d4a61756..ce30b15f8459bdb5d01ab7c63d99866ad38ecad0 100644 (file)
@@ -31,7 +31,7 @@ public class FundingCreated extends CommonBase {
         * A temporary channel ID, until the funding is established
         */
        public void set_temporary_channel_id(byte[] val) {
-               bindings.FundingCreated_set_temporary_channel_id(this.ptr, val);
+               bindings.FundingCreated_set_temporary_channel_id(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        /**
@@ -46,7 +46,7 @@ public class FundingCreated extends CommonBase {
         * The funding transaction ID
         */
        public void set_funding_txid(byte[] val) {
-               bindings.FundingCreated_set_funding_txid(this.ptr, val);
+               bindings.FundingCreated_set_funding_txid(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        /**
@@ -76,20 +76,25 @@ public class FundingCreated extends CommonBase {
         * The signature of the channel initiator (funder) on the initial commitment transaction
         */
        public void set_signature(byte[] val) {
-               bindings.FundingCreated_set_signature(this.ptr, val);
+               bindings.FundingCreated_set_signature(this.ptr, InternalUtils.check_arr_len(val, 64));
        }
 
        /**
         * Constructs a new FundingCreated given each field
         */
        public static FundingCreated of(byte[] temporary_channel_id_arg, byte[] funding_txid_arg, short funding_output_index_arg, byte[] signature_arg) {
-               long ret = bindings.FundingCreated_new(temporary_channel_id_arg, funding_txid_arg, funding_output_index_arg, signature_arg);
+               long ret = bindings.FundingCreated_new(InternalUtils.check_arr_len(temporary_channel_id_arg, 32), InternalUtils.check_arr_len(funding_txid_arg, 32), funding_output_index_arg, InternalUtils.check_arr_len(signature_arg, 64));
                if (ret >= 0 && ret <= 4096) { return null; }
                FundingCreated ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new FundingCreated(null, ret); }
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.FundingCreated_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the FundingCreated
         */
index b5f9b1e26147e121da99cd4e19c67dbb8f340235..4aa45f9874808bc8aec25ce1f98a60ec3b6cc014 100644 (file)
@@ -31,7 +31,7 @@ public class FundingLocked extends CommonBase {
         * The channel ID
         */
        public void set_channel_id(byte[] val) {
-               bindings.FundingLocked_set_channel_id(this.ptr, val);
+               bindings.FundingLocked_set_channel_id(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        /**
@@ -46,20 +46,25 @@ public class FundingLocked extends CommonBase {
         * The per-commitment point of the second commitment transaction
         */
        public void set_next_per_commitment_point(byte[] val) {
-               bindings.FundingLocked_set_next_per_commitment_point(this.ptr, val);
+               bindings.FundingLocked_set_next_per_commitment_point(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        /**
         * Constructs a new FundingLocked given each field
         */
        public static FundingLocked of(byte[] channel_id_arg, byte[] next_per_commitment_point_arg) {
-               long ret = bindings.FundingLocked_new(channel_id_arg, next_per_commitment_point_arg);
+               long ret = bindings.FundingLocked_new(InternalUtils.check_arr_len(channel_id_arg, 32), InternalUtils.check_arr_len(next_per_commitment_point_arg, 33));
                if (ret >= 0 && ret <= 4096) { return null; }
                FundingLocked ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new FundingLocked(null, ret); }
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.FundingLocked_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the FundingLocked
         */
index b56363bc3e780b8da995860eca484cd6830025fc..e612f54f444f2c0fb69587c5c571ce2a17463c56 100644 (file)
@@ -31,7 +31,7 @@ public class FundingSigned extends CommonBase {
         * The channel ID
         */
        public void set_channel_id(byte[] val) {
-               bindings.FundingSigned_set_channel_id(this.ptr, val);
+               bindings.FundingSigned_set_channel_id(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        /**
@@ -46,20 +46,25 @@ public class FundingSigned extends CommonBase {
         * The signature of the channel acceptor (fundee) on the initial commitment transaction
         */
        public void set_signature(byte[] val) {
-               bindings.FundingSigned_set_signature(this.ptr, val);
+               bindings.FundingSigned_set_signature(this.ptr, InternalUtils.check_arr_len(val, 64));
        }
 
        /**
         * Constructs a new FundingSigned given each field
         */
        public static FundingSigned of(byte[] channel_id_arg, byte[] signature_arg) {
-               long ret = bindings.FundingSigned_new(channel_id_arg, signature_arg);
+               long ret = bindings.FundingSigned_new(InternalUtils.check_arr_len(channel_id_arg, 32), InternalUtils.check_arr_len(signature_arg, 64));
                if (ret >= 0 && ret <= 4096) { return null; }
                FundingSigned ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new FundingSigned(null, ret); }
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.FundingSigned_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the FundingSigned
         */
index 2693985bcfab6913ccad310676a52249624f77ff..0e35356b2e4c428528157e7163678da7fcc2776d 100644 (file)
@@ -33,7 +33,7 @@ public class GossipTimestampFilter extends CommonBase {
         * The genesis hash of the blockchain for channel and node information
         */
        public void set_chain_hash(byte[] val) {
-               bindings.GossipTimestampFilter_set_chain_hash(this.ptr, val);
+               bindings.GossipTimestampFilter_set_chain_hash(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        /**
@@ -70,13 +70,18 @@ public class GossipTimestampFilter extends CommonBase {
         * Constructs a new GossipTimestampFilter given each field
         */
        public static GossipTimestampFilter of(byte[] chain_hash_arg, int first_timestamp_arg, int timestamp_range_arg) {
-               long ret = bindings.GossipTimestampFilter_new(chain_hash_arg, first_timestamp_arg, timestamp_range_arg);
+               long ret = bindings.GossipTimestampFilter_new(InternalUtils.check_arr_len(chain_hash_arg, 32), first_timestamp_arg, timestamp_range_arg);
                if (ret >= 0 && ret <= 4096) { return null; }
                GossipTimestampFilter ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new GossipTimestampFilter(null, ret); }
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.GossipTimestampFilter_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the GossipTimestampFilter
         */
index 55f2cb22660b110e45e1046c135075223d56e865..9eff5b40625a45fabe915e9f51a138bda04499c4 100644 (file)
@@ -84,7 +84,7 @@ public class HTLCOutputInCommitment extends CommonBase {
         * The hash of the preimage which unlocks this HTLC.
         */
        public void set_payment_hash(byte[] val) {
-               bindings.HTLCOutputInCommitment_set_payment_hash(this.ptr, val);
+               bindings.HTLCOutputInCommitment_set_payment_hash(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        /**
@@ -113,13 +113,18 @@ public class HTLCOutputInCommitment extends CommonBase {
         * Constructs a new HTLCOutputInCommitment given each field
         */
        public static HTLCOutputInCommitment of(boolean offered_arg, long amount_msat_arg, int cltv_expiry_arg, byte[] payment_hash_arg, Option_u32Z transaction_output_index_arg) {
-               long ret = bindings.HTLCOutputInCommitment_new(offered_arg, amount_msat_arg, cltv_expiry_arg, payment_hash_arg, transaction_output_index_arg.ptr);
+               long ret = bindings.HTLCOutputInCommitment_new(offered_arg, amount_msat_arg, cltv_expiry_arg, InternalUtils.check_arr_len(payment_hash_arg, 32), transaction_output_index_arg.ptr);
                if (ret >= 0 && ret <= 4096) { return null; }
                HTLCOutputInCommitment ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new HTLCOutputInCommitment(null, ret); }
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.HTLCOutputInCommitment_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the HTLCOutputInCommitment
         */
index 8831420b36588489cf6b8007a472b3447e6e2feb..c15590f4cc314acdd76dc1d61ccb1b26feef6720 100644 (file)
@@ -21,6 +21,11 @@ public class HTLCUpdate extends CommonBase {
                if (ptr != 0) { bindings.HTLCUpdate_free(ptr); }
        }
 
+       long clone_ptr() {
+               long ret = bindings.HTLCUpdate_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the HTLCUpdate
         */
index 5e32620174b516c9624be7017406777d1e03ed02..23716acf4c01b2f21b2ae6dffd50ccb5e4ce4ded 100644 (file)
@@ -33,14 +33,19 @@ public class HolderCommitmentTransaction extends CommonBase {
         * Our counterparty's signature for the transaction
         */
        public void set_counterparty_sig(byte[] val) {
-               bindings.HolderCommitmentTransaction_set_counterparty_sig(this.ptr, val);
+               bindings.HolderCommitmentTransaction_set_counterparty_sig(this.ptr, InternalUtils.check_arr_len(val, 64));
        }
 
        /**
         * All non-dust counterparty HTLC signatures, in the order they appear in the transaction
         */
        public void set_counterparty_htlc_sigs(byte[][] val) {
-               bindings.HolderCommitmentTransaction_set_counterparty_htlc_sigs(this.ptr, val);
+               bindings.HolderCommitmentTransaction_set_counterparty_htlc_sigs(this.ptr, val != null ? Arrays.stream(val).map(val_conv_8 -> InternalUtils.check_arr_len(val_conv_8, 64)).toArray(byte[][]::new) : null);
+       }
+
+       long clone_ptr() {
+               long ret = bindings.HolderCommitmentTransaction_clone_ptr(this.ptr);
+               return ret;
        }
 
        /**
@@ -77,7 +82,7 @@ public class HolderCommitmentTransaction extends CommonBase {
         * The funding keys are used to figure out which signature should go first when building the transaction for broadcast.
         */
        public static HolderCommitmentTransaction of(CommitmentTransaction commitment_tx, byte[] counterparty_sig, byte[][] counterparty_htlc_sigs, byte[] holder_funding_key, byte[] counterparty_funding_key) {
-               long ret = bindings.HolderCommitmentTransaction_new(commitment_tx == null ? 0 : commitment_tx.ptr & ~1, counterparty_sig, counterparty_htlc_sigs, holder_funding_key, counterparty_funding_key);
+               long ret = bindings.HolderCommitmentTransaction_new(commitment_tx == null ? 0 : commitment_tx.ptr & ~1, InternalUtils.check_arr_len(counterparty_sig, 64), counterparty_htlc_sigs != null ? Arrays.stream(counterparty_htlc_sigs).map(counterparty_htlc_sigs_conv_8 -> InternalUtils.check_arr_len(counterparty_htlc_sigs_conv_8, 64)).toArray(byte[][]::new) : null, InternalUtils.check_arr_len(holder_funding_key, 33), InternalUtils.check_arr_len(counterparty_funding_key, 33));
                if (ret >= 0 && ret <= 4096) { return null; }
                HolderCommitmentTransaction ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new HolderCommitmentTransaction(null, ret); }
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
index cdfc34ada54b416630b8c787d88bf52648fce278..5b4b67bcd4e16e35668c62733f02227bc560ada9 100644 (file)
@@ -34,7 +34,7 @@ public class InMemorySigner extends CommonBase {
         * Private key of anchor tx
         */
        public void set_funding_key(byte[] val) {
-               bindings.InMemorySigner_set_funding_key(this.ptr, val);
+               bindings.InMemorySigner_set_funding_key(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        /**
@@ -49,7 +49,7 @@ public class InMemorySigner extends CommonBase {
         * Holder secret key for blinded revocation pubkey
         */
        public void set_revocation_base_key(byte[] val) {
-               bindings.InMemorySigner_set_revocation_base_key(this.ptr, val);
+               bindings.InMemorySigner_set_revocation_base_key(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        /**
@@ -64,7 +64,7 @@ public class InMemorySigner extends CommonBase {
         * Holder secret key used for our balance in counterparty-broadcasted commitment transactions
         */
        public void set_payment_key(byte[] val) {
-               bindings.InMemorySigner_set_payment_key(this.ptr, val);
+               bindings.InMemorySigner_set_payment_key(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        /**
@@ -79,7 +79,7 @@ public class InMemorySigner extends CommonBase {
         * Holder secret key used in HTLC tx
         */
        public void set_delayed_payment_base_key(byte[] val) {
-               bindings.InMemorySigner_set_delayed_payment_base_key(this.ptr, val);
+               bindings.InMemorySigner_set_delayed_payment_base_key(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        /**
@@ -94,7 +94,7 @@ public class InMemorySigner extends CommonBase {
         * Holder htlc secret key used in commitment tx htlc outputs
         */
        public void set_htlc_base_key(byte[] val) {
-               bindings.InMemorySigner_set_htlc_base_key(this.ptr, val);
+               bindings.InMemorySigner_set_htlc_base_key(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        /**
@@ -109,7 +109,12 @@ public class InMemorySigner extends CommonBase {
         * Commitment seed
         */
        public void set_commitment_seed(byte[] val) {
-               bindings.InMemorySigner_set_commitment_seed(this.ptr, val);
+               bindings.InMemorySigner_set_commitment_seed(this.ptr, InternalUtils.check_arr_len(val, 32));
+       }
+
+       long clone_ptr() {
+               long ret = bindings.InMemorySigner_clone_ptr(this.ptr);
+               return ret;
        }
 
        /**
@@ -127,7 +132,7 @@ public class InMemorySigner extends CommonBase {
         * Create a new InMemorySigner
         */
        public static InMemorySigner of(byte[] funding_key, byte[] revocation_base_key, byte[] payment_key, byte[] delayed_payment_base_key, byte[] htlc_base_key, byte[] commitment_seed, long channel_value_satoshis, byte[] channel_keys_id) {
-               long ret = bindings.InMemorySigner_new(funding_key, revocation_base_key, payment_key, delayed_payment_base_key, htlc_base_key, commitment_seed, channel_value_satoshis, channel_keys_id);
+               long ret = bindings.InMemorySigner_new(InternalUtils.check_arr_len(funding_key, 32), InternalUtils.check_arr_len(revocation_base_key, 32), InternalUtils.check_arr_len(payment_key, 32), InternalUtils.check_arr_len(delayed_payment_base_key, 32), InternalUtils.check_arr_len(htlc_base_key, 32), InternalUtils.check_arr_len(commitment_seed, 32), channel_value_satoshis, InternalUtils.check_arr_len(channel_keys_id, 32));
                if (ret >= 0 && ret <= 4096) { return null; }
                InMemorySigner ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new InMemorySigner(null, ret); }
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
index 69f97fa9948ec2d194ac31f40d44b72cdf04f71c..c108fd98fccfa73262030f735f4979735d58e10a 100644 (file)
@@ -48,6 +48,11 @@ public class Init extends CommonBase {
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.Init_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the Init
         */
index d8ead50a65e8de3307d3f85ad95d45b071b86123..cdc9a58b489a397384cacb78d4bfae82c1e238be 100644 (file)
@@ -30,6 +30,11 @@ public class InitFeatures extends CommonBase {
                return ret;
        }
 
+       long clone_ptr() {
+               long ret = bindings.InitFeatures_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the InitFeatures
         */
index abea7e8098dfb38f72b3819b4633bcf6c4d5c4e6..89b502bc4951dca54e171ea95e65b47bfc34903e 100644 (file)
@@ -49,6 +49,11 @@ public class InvalidShutdownScript extends CommonBase {
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.InvalidShutdownScript_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the InvalidShutdownScript
         */
index 968b221ac58c07301c19a824b9ee649ad8027ed3..8817ed413f5c9b086fab29047c8559b744d948dc 100644 (file)
@@ -35,6 +35,11 @@ public class Invoice extends CommonBase {
                return ret;
        }
 
+       long clone_ptr() {
+               long ret = bindings.Invoice_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the Invoice
         */
index ccbf4f526897f51a8f19e1c6ae326b7b3517bf07..6d075ce92d9bd786649188aa968a92ff6d0a70ab 100644 (file)
@@ -30,6 +30,11 @@ public class InvoiceFeatures extends CommonBase {
                return ret;
        }
 
+       long clone_ptr() {
+               long ret = bindings.InvoiceFeatures_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the InvoiceFeatures
         */
index 4c6d63f0d8b956245d35884e5866f234b8587599..a54ee10b19506fcd2d2c0393704b5604aac149aa 100644 (file)
@@ -76,7 +76,7 @@ public class InvoicePayer extends CommonBase {
         * [`EventHandler`]. Otherwise, calling this method is unnecessary.
         */
        public void remove_cached_payment(byte[] payment_hash) {
-               bindings.InvoicePayer_remove_cached_payment(this.ptr, payment_hash);
+               bindings.InvoicePayer_remove_cached_payment(this.ptr, InternalUtils.check_arr_len(payment_hash, 32));
        }
 
        /**
index 8ff00fc63149835993d9c2c364abde30915740b6..c6f759108924e587594b5a943731b8224a737a2e 100644 (file)
@@ -19,6 +19,11 @@ public class InvoiceSignature extends CommonBase {
                if (ptr != 0) { bindings.InvoiceSignature_free(ptr); }
        }
 
+       long clone_ptr() {
+               long ret = bindings.InvoiceSignature_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the InvoiceSignature
         */
index ea88ec2c61a4377ba40ade74dfca2c7f54fd5058..e4c8e486312e0a048b46ddfbe4addda6d90a28b3 100644 (file)
@@ -82,7 +82,8 @@ public class KeysInterface extends CommonBase {
                impl_holder.held = new KeysInterface(new bindings.LDKKeysInterface() {
                        @Override public byte[] get_node_secret() {
                                byte[] ret = arg.get_node_secret();
-                               return ret;
+                               byte[] result = InternalUtils.check_arr_len(ret, 32);
+                               return result;
                        }
                        @Override public byte[] get_destination_script() {
                                byte[] ret = arg.get_destination_script();
@@ -90,27 +91,28 @@ public class KeysInterface extends CommonBase {
                        }
                        @Override public long get_shutdown_scriptpubkey() {
                                ShutdownScript ret = arg.get_shutdown_scriptpubkey();
-                               long result = ret == null ? 0 : ret.ptr & ~1;
+                               long result = ret == null ? 0 : ret.clone_ptr();
                                return result;
                        }
                        @Override public long get_channel_signer(boolean inbound, long channel_value_satoshis) {
                                Sign ret = arg.get_channel_signer(inbound, channel_value_satoshis);
-                               long result = ret == null ? 0 : ret.ptr;
+                               long result = ret == null ? 0 : ret.clone_ptr();
                                impl_holder.held.ptrs_to.add(ret);
                                return result;
                        }
                        @Override public byte[] get_secure_random_bytes() {
                                byte[] ret = arg.get_secure_random_bytes();
-                               return ret;
+                               byte[] result = InternalUtils.check_arr_len(ret, 32);
+                               return result;
                        }
                        @Override public long read_chan_signer(byte[] reader) {
                                Result_SignDecodeErrorZ ret = arg.read_chan_signer(reader);
-                               long result = ret != null ? ret.ptr : 0;
+                               long result = ret == null ? 0 : ret.clone_ptr();
                                return result;
                        }
                        @Override public long sign_invoice(byte[] invoice_preimage) {
                                Result_RecoverableSignatureNoneZ ret = arg.sign_invoice(invoice_preimage);
-                               long result = ret != null ? ret.ptr : 0;
+                               long result = ret == null ? 0 : ret.clone_ptr();
                                return result;
                        }
                });
index 04563c4273f94c58c8be11c3a1e945d3af6d779b..25107f069cdd3a65e1c110593163a29337bff7c1 100644 (file)
@@ -47,7 +47,7 @@ public class KeysManager extends CommonBase {
         * detailed description of the guarantee.
         */
        public static KeysManager of(byte[] seed, long starting_time_secs, int starting_time_nanos) {
-               long ret = bindings.KeysManager_new(seed, starting_time_secs, starting_time_nanos);
+               long ret = bindings.KeysManager_new(InternalUtils.check_arr_len(seed, 32), starting_time_secs, starting_time_nanos);
                if (ret >= 0 && ret <= 4096) { return null; }
                KeysManager ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new KeysManager(null, ret); }
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
@@ -62,7 +62,7 @@ public class KeysManager extends CommonBase {
         * onchain output detection for which a corresponding delayed_payment_key must be derived.
         */
        public InMemorySigner derive_channel_keys(long channel_value_satoshis, byte[] params) {
-               long ret = bindings.KeysManager_derive_channel_keys(this.ptr, channel_value_satoshis, params);
+               long ret = bindings.KeysManager_derive_channel_keys(this.ptr, channel_value_satoshis, InternalUtils.check_arr_len(params, 32));
                if (ret >= 0 && ret <= 4096) { return null; }
                InMemorySigner ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new InMemorySigner(null, ret); }
                ret_hu_conv.ptrs_to.add(this);
index 93785a268249475b1923cd44230cb202e9cc3b9d..74702588a399b43041da6734340fc12d2244039f 100644 (file)
@@ -63,6 +63,11 @@ public class LightningError extends CommonBase {
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.LightningError_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the LightningError
         */
index 2e6b835de1b8536c6b232ae79b4fab8d800c91fb..8c57278ad42581059ccfd49e23eb4af16736f816 100644 (file)
@@ -63,7 +63,7 @@ public class Listen extends CommonBase {
         * Notifies the listener that a block was removed at the given height.
         */
        public void block_disconnected(byte[] header, int height) {
-               bindings.Listen_block_disconnected(this.ptr, header, height);
+               bindings.Listen_block_disconnected(this.ptr, InternalUtils.check_arr_len(header, 80), height);
        }
 
 }
index 3535744d28a7e937907e65b4efb29fb0aa232116..8c5660d9be2d95f5c6af04167bbfe3bdc8885cb0 100644 (file)
@@ -27,14 +27,15 @@ public class Logger extends CommonBase {
                /**
                 * Logs the `Record`
                 */
-               void log(String record);
+               void log(Record record);
        }
        private static class LDKLoggerHolder { Logger held; }
        public static Logger new_impl(LoggerInterface arg) {
                final LDKLoggerHolder impl_holder = new LDKLoggerHolder();
                impl_holder.held = new Logger(new bindings.LDKLogger() {
-                       @Override public void log(String record) {
-                               arg.log(record);
+                       @Override public void log(long record) {
+                               Record record_hu_conv = null; if (record < 0 || record > 4096) { record_hu_conv = new Record(null, record); }
+                               arg.log(record_hu_conv);
                        }
                });
                return impl_holder.held;
index 2f8e79d313cd76be3354006fd4deb990d83041de..83e29cf72116308550a9b993c9484cc9adaff5f0 100644 (file)
@@ -82,6 +82,10 @@ public class MessageSendEvent extends CommonBase {
                assert false; return null; // Unreachable without extending the (internal) bindings interface
        }
 
+       /**
+        * Used to indicate that we've accepted a channel open and should send the accept_channel
+        * message provided to the given peer.
+        */
        public final static class SendAcceptChannel extends MessageSendEvent {
                /**
                 * The node_id of the node which should receive this message
@@ -100,6 +104,10 @@ public class MessageSendEvent extends CommonBase {
                        this.msg = msg_hu_conv;
                }
        }
+       /**
+        * Used to indicate that we've initiated a channel open and should send the open_channel
+        * message provided to the given peer.
+        */
        public final static class SendOpenChannel extends MessageSendEvent {
                /**
                 * The node_id of the node which should receive this message
@@ -118,6 +126,9 @@ public class MessageSendEvent extends CommonBase {
                        this.msg = msg_hu_conv;
                }
        }
+       /**
+        * Used to indicate that a funding_created message should be sent to the peer with the given node_id.
+        */
        public final static class SendFundingCreated extends MessageSendEvent {
                /**
                 * The node_id of the node which should receive this message
@@ -136,6 +147,9 @@ public class MessageSendEvent extends CommonBase {
                        this.msg = msg_hu_conv;
                }
        }
+       /**
+        * Used to indicate that a funding_signed message should be sent to the peer with the given node_id.
+        */
        public final static class SendFundingSigned extends MessageSendEvent {
                /**
                 * The node_id of the node which should receive this message
@@ -154,6 +168,9 @@ public class MessageSendEvent extends CommonBase {
                        this.msg = msg_hu_conv;
                }
        }
+       /**
+        * Used to indicate that a funding_locked message should be sent to the peer with the given node_id.
+        */
        public final static class SendFundingLocked extends MessageSendEvent {
                /**
                 * The node_id of the node which should receive these message(s)
@@ -172,6 +189,9 @@ public class MessageSendEvent extends CommonBase {
                        this.msg = msg_hu_conv;
                }
        }
+       /**
+        * Used to indicate that an announcement_signatures message should be sent to the peer with the given node_id.
+        */
        public final static class SendAnnouncementSignatures extends MessageSendEvent {
                /**
                 * The node_id of the node which should receive these message(s)
@@ -190,6 +210,10 @@ public class MessageSendEvent extends CommonBase {
                        this.msg = msg_hu_conv;
                }
        }
+       /**
+        * Used to indicate that a series of HTLC update messages, as well as a commitment_signed
+        * message should be sent to the peer with the given node_id.
+        */
        public final static class UpdateHTLCs extends MessageSendEvent {
                /**
                 * The node_id of the node which should receive these message(s)
@@ -208,6 +232,9 @@ public class MessageSendEvent extends CommonBase {
                        this.updates = updates_hu_conv;
                }
        }
+       /**
+        * Used to indicate that a revoke_and_ack message should be sent to the peer with the given node_id.
+        */
        public final static class SendRevokeAndACK extends MessageSendEvent {
                /**
                 * The node_id of the node which should receive this message
@@ -226,6 +253,9 @@ public class MessageSendEvent extends CommonBase {
                        this.msg = msg_hu_conv;
                }
        }
+       /**
+        * Used to indicate that a closing_signed message should be sent to the peer with the given node_id.
+        */
        public final static class SendClosingSigned extends MessageSendEvent {
                /**
                 * The node_id of the node which should receive this message
@@ -244,6 +274,9 @@ public class MessageSendEvent extends CommonBase {
                        this.msg = msg_hu_conv;
                }
        }
+       /**
+        * Used to indicate that a shutdown message should be sent to the peer with the given node_id.
+        */
        public final static class SendShutdown extends MessageSendEvent {
                /**
                 * The node_id of the node which should receive this message
@@ -262,6 +295,9 @@ public class MessageSendEvent extends CommonBase {
                        this.msg = msg_hu_conv;
                }
        }
+       /**
+        * Used to indicate that a channel_reestablish message should be sent to the peer with the given node_id.
+        */
        public final static class SendChannelReestablish extends MessageSendEvent {
                /**
                 * The node_id of the node which should receive this message
@@ -280,6 +316,16 @@ public class MessageSendEvent extends CommonBase {
                        this.msg = msg_hu_conv;
                }
        }
+       /**
+        * Used to indicate that a channel_announcement and channel_update should be broadcast to all
+        * peers (except the peer with node_id either msg.contents.node_id_1 or msg.contents.node_id_2).
+        * 
+        * Note that after doing so, you very likely (unless you did so very recently) want to call
+        * ChannelManager::broadcast_node_announcement to trigger a BroadcastNodeAnnouncement event.
+        * This ensures that any nodes which see our channel_announcement also have a relevant
+        * node_announcement, including relevant feature flags which may be important for routing
+        * through or to us.
+        */
        public final static class BroadcastChannelAnnouncement extends MessageSendEvent {
                /**
                 * The channel_announcement which should be sent.
@@ -301,6 +347,9 @@ public class MessageSendEvent extends CommonBase {
                        this.update_msg = update_msg_hu_conv;
                }
        }
+       /**
+        * Used to indicate that a node_announcement should be broadcast to all peers.
+        */
        public final static class BroadcastNodeAnnouncement extends MessageSendEvent {
                /**
                 * The node_announcement which should be sent.
@@ -314,6 +363,9 @@ public class MessageSendEvent extends CommonBase {
                        this.msg = msg_hu_conv;
                }
        }
+       /**
+        * Used to indicate that a channel_update should be broadcast to all peers.
+        */
        public final static class BroadcastChannelUpdate extends MessageSendEvent {
                /**
                 * The channel_update which should be sent.
@@ -327,6 +379,11 @@ public class MessageSendEvent extends CommonBase {
                        this.msg = msg_hu_conv;
                }
        }
+       /**
+        * Used to indicate that a channel_update should be sent to a single peer.
+        * In contrast to [`Self::BroadcastChannelUpdate`], this is used when the channel is a
+        * private channel and we shouldn't be informing all of our peers of channel parameters.
+        */
        public final static class SendChannelUpdate extends MessageSendEvent {
                /**
                 * The node_id of the node which should receive this message
@@ -345,6 +402,9 @@ public class MessageSendEvent extends CommonBase {
                        this.msg = msg_hu_conv;
                }
        }
+       /**
+        * Broadcast an error downstream to be handled
+        */
        public final static class HandleError extends MessageSendEvent {
                /**
                 * The node_id of the node which should receive this message
@@ -363,6 +423,9 @@ public class MessageSendEvent extends CommonBase {
                        this.action = action_hu_conv;
                }
        }
+       /**
+        * Query a peer for channels with funding transaction UTXOs in a block range.
+        */
        public final static class SendChannelRangeQuery extends MessageSendEvent {
                /**
                 * The node_id of this message recipient
@@ -381,6 +444,10 @@ public class MessageSendEvent extends CommonBase {
                        this.msg = msg_hu_conv;
                }
        }
+       /**
+        * Request routing gossip messages from a peer for a list of channels identified by
+        * their short_channel_ids.
+        */
        public final static class SendShortIdsQuery extends MessageSendEvent {
                /**
                 * The node_id of this message recipient
@@ -399,6 +466,10 @@ public class MessageSendEvent extends CommonBase {
                        this.msg = msg_hu_conv;
                }
        }
+       /**
+        * Sends a reply to a channel range query. This may be one of several SendReplyChannelRange events
+        * emitted during processing of the query.
+        */
        public final static class SendReplyChannelRange extends MessageSendEvent {
                /**
                 * The node_id of this message recipient
@@ -417,6 +488,11 @@ public class MessageSendEvent extends CommonBase {
                        this.msg = msg_hu_conv;
                }
        }
+       long clone_ptr() {
+               long ret = bindings.MessageSendEvent_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the MessageSendEvent
         */
@@ -432,7 +508,7 @@ public class MessageSendEvent extends CommonBase {
         * Utility method to constructs a new SendAcceptChannel-variant MessageSendEvent
         */
        public static MessageSendEvent send_accept_channel(byte[] node_id, AcceptChannel msg) {
-               long ret = bindings.MessageSendEvent_send_accept_channel(node_id, msg == null ? 0 : msg.ptr & ~1);
+               long ret = bindings.MessageSendEvent_send_accept_channel(InternalUtils.check_arr_len(node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                if (ret >= 0 && ret <= 4096) { return null; }
                MessageSendEvent ret_hu_conv = MessageSendEvent.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
@@ -443,7 +519,7 @@ public class MessageSendEvent extends CommonBase {
         * Utility method to constructs a new SendOpenChannel-variant MessageSendEvent
         */
        public static MessageSendEvent send_open_channel(byte[] node_id, OpenChannel msg) {
-               long ret = bindings.MessageSendEvent_send_open_channel(node_id, msg == null ? 0 : msg.ptr & ~1);
+               long ret = bindings.MessageSendEvent_send_open_channel(InternalUtils.check_arr_len(node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                if (ret >= 0 && ret <= 4096) { return null; }
                MessageSendEvent ret_hu_conv = MessageSendEvent.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
@@ -454,7 +530,7 @@ public class MessageSendEvent extends CommonBase {
         * Utility method to constructs a new SendFundingCreated-variant MessageSendEvent
         */
        public static MessageSendEvent send_funding_created(byte[] node_id, FundingCreated msg) {
-               long ret = bindings.MessageSendEvent_send_funding_created(node_id, msg == null ? 0 : msg.ptr & ~1);
+               long ret = bindings.MessageSendEvent_send_funding_created(InternalUtils.check_arr_len(node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                if (ret >= 0 && ret <= 4096) { return null; }
                MessageSendEvent ret_hu_conv = MessageSendEvent.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
@@ -465,7 +541,7 @@ public class MessageSendEvent extends CommonBase {
         * Utility method to constructs a new SendFundingSigned-variant MessageSendEvent
         */
        public static MessageSendEvent send_funding_signed(byte[] node_id, FundingSigned msg) {
-               long ret = bindings.MessageSendEvent_send_funding_signed(node_id, msg == null ? 0 : msg.ptr & ~1);
+               long ret = bindings.MessageSendEvent_send_funding_signed(InternalUtils.check_arr_len(node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                if (ret >= 0 && ret <= 4096) { return null; }
                MessageSendEvent ret_hu_conv = MessageSendEvent.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
@@ -476,7 +552,7 @@ public class MessageSendEvent extends CommonBase {
         * Utility method to constructs a new SendFundingLocked-variant MessageSendEvent
         */
        public static MessageSendEvent send_funding_locked(byte[] node_id, FundingLocked msg) {
-               long ret = bindings.MessageSendEvent_send_funding_locked(node_id, msg == null ? 0 : msg.ptr & ~1);
+               long ret = bindings.MessageSendEvent_send_funding_locked(InternalUtils.check_arr_len(node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                if (ret >= 0 && ret <= 4096) { return null; }
                MessageSendEvent ret_hu_conv = MessageSendEvent.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
@@ -487,7 +563,7 @@ public class MessageSendEvent extends CommonBase {
         * Utility method to constructs a new SendAnnouncementSignatures-variant MessageSendEvent
         */
        public static MessageSendEvent send_announcement_signatures(byte[] node_id, AnnouncementSignatures msg) {
-               long ret = bindings.MessageSendEvent_send_announcement_signatures(node_id, msg == null ? 0 : msg.ptr & ~1);
+               long ret = bindings.MessageSendEvent_send_announcement_signatures(InternalUtils.check_arr_len(node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                if (ret >= 0 && ret <= 4096) { return null; }
                MessageSendEvent ret_hu_conv = MessageSendEvent.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
@@ -498,7 +574,7 @@ public class MessageSendEvent extends CommonBase {
         * Utility method to constructs a new UpdateHTLCs-variant MessageSendEvent
         */
        public static MessageSendEvent update_htlcs(byte[] node_id, CommitmentUpdate updates) {
-               long ret = bindings.MessageSendEvent_update_htlcs(node_id, updates == null ? 0 : updates.ptr & ~1);
+               long ret = bindings.MessageSendEvent_update_htlcs(InternalUtils.check_arr_len(node_id, 33), updates == null ? 0 : updates.ptr & ~1);
                if (ret >= 0 && ret <= 4096) { return null; }
                MessageSendEvent ret_hu_conv = MessageSendEvent.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
@@ -509,7 +585,7 @@ public class MessageSendEvent extends CommonBase {
         * Utility method to constructs a new SendRevokeAndACK-variant MessageSendEvent
         */
        public static MessageSendEvent send_revoke_and_ack(byte[] node_id, RevokeAndACK msg) {
-               long ret = bindings.MessageSendEvent_send_revoke_and_ack(node_id, msg == null ? 0 : msg.ptr & ~1);
+               long ret = bindings.MessageSendEvent_send_revoke_and_ack(InternalUtils.check_arr_len(node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                if (ret >= 0 && ret <= 4096) { return null; }
                MessageSendEvent ret_hu_conv = MessageSendEvent.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
@@ -520,7 +596,7 @@ public class MessageSendEvent extends CommonBase {
         * Utility method to constructs a new SendClosingSigned-variant MessageSendEvent
         */
        public static MessageSendEvent send_closing_signed(byte[] node_id, ClosingSigned msg) {
-               long ret = bindings.MessageSendEvent_send_closing_signed(node_id, msg == null ? 0 : msg.ptr & ~1);
+               long ret = bindings.MessageSendEvent_send_closing_signed(InternalUtils.check_arr_len(node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                if (ret >= 0 && ret <= 4096) { return null; }
                MessageSendEvent ret_hu_conv = MessageSendEvent.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
@@ -531,7 +607,7 @@ public class MessageSendEvent extends CommonBase {
         * Utility method to constructs a new SendShutdown-variant MessageSendEvent
         */
        public static MessageSendEvent send_shutdown(byte[] node_id, Shutdown msg) {
-               long ret = bindings.MessageSendEvent_send_shutdown(node_id, msg == null ? 0 : msg.ptr & ~1);
+               long ret = bindings.MessageSendEvent_send_shutdown(InternalUtils.check_arr_len(node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                if (ret >= 0 && ret <= 4096) { return null; }
                MessageSendEvent ret_hu_conv = MessageSendEvent.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
@@ -542,7 +618,7 @@ public class MessageSendEvent extends CommonBase {
         * Utility method to constructs a new SendChannelReestablish-variant MessageSendEvent
         */
        public static MessageSendEvent send_channel_reestablish(byte[] node_id, ChannelReestablish msg) {
-               long ret = bindings.MessageSendEvent_send_channel_reestablish(node_id, msg == null ? 0 : msg.ptr & ~1);
+               long ret = bindings.MessageSendEvent_send_channel_reestablish(InternalUtils.check_arr_len(node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                if (ret >= 0 && ret <= 4096) { return null; }
                MessageSendEvent ret_hu_conv = MessageSendEvent.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
@@ -586,7 +662,7 @@ public class MessageSendEvent extends CommonBase {
         * Utility method to constructs a new SendChannelUpdate-variant MessageSendEvent
         */
        public static MessageSendEvent send_channel_update(byte[] node_id, ChannelUpdate msg) {
-               long ret = bindings.MessageSendEvent_send_channel_update(node_id, msg == null ? 0 : msg.ptr & ~1);
+               long ret = bindings.MessageSendEvent_send_channel_update(InternalUtils.check_arr_len(node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                if (ret >= 0 && ret <= 4096) { return null; }
                MessageSendEvent ret_hu_conv = MessageSendEvent.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
@@ -597,7 +673,7 @@ public class MessageSendEvent extends CommonBase {
         * Utility method to constructs a new HandleError-variant MessageSendEvent
         */
        public static MessageSendEvent handle_error(byte[] node_id, ErrorAction action) {
-               long ret = bindings.MessageSendEvent_handle_error(node_id, action.ptr);
+               long ret = bindings.MessageSendEvent_handle_error(InternalUtils.check_arr_len(node_id, 33), action.ptr);
                if (ret >= 0 && ret <= 4096) { return null; }
                MessageSendEvent ret_hu_conv = MessageSendEvent.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
@@ -608,7 +684,7 @@ public class MessageSendEvent extends CommonBase {
         * Utility method to constructs a new SendChannelRangeQuery-variant MessageSendEvent
         */
        public static MessageSendEvent send_channel_range_query(byte[] node_id, QueryChannelRange msg) {
-               long ret = bindings.MessageSendEvent_send_channel_range_query(node_id, msg == null ? 0 : msg.ptr & ~1);
+               long ret = bindings.MessageSendEvent_send_channel_range_query(InternalUtils.check_arr_len(node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                if (ret >= 0 && ret <= 4096) { return null; }
                MessageSendEvent ret_hu_conv = MessageSendEvent.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
@@ -619,7 +695,7 @@ public class MessageSendEvent extends CommonBase {
         * Utility method to constructs a new SendShortIdsQuery-variant MessageSendEvent
         */
        public static MessageSendEvent send_short_ids_query(byte[] node_id, QueryShortChannelIds msg) {
-               long ret = bindings.MessageSendEvent_send_short_ids_query(node_id, msg == null ? 0 : msg.ptr & ~1);
+               long ret = bindings.MessageSendEvent_send_short_ids_query(InternalUtils.check_arr_len(node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                if (ret >= 0 && ret <= 4096) { return null; }
                MessageSendEvent ret_hu_conv = MessageSendEvent.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
@@ -630,7 +706,7 @@ public class MessageSendEvent extends CommonBase {
         * Utility method to constructs a new SendReplyChannelRange-variant MessageSendEvent
         */
        public static MessageSendEvent send_reply_channel_range(byte[] node_id, ReplyChannelRange msg) {
-               long ret = bindings.MessageSendEvent_send_reply_channel_range(node_id, msg == null ? 0 : msg.ptr & ~1);
+               long ret = bindings.MessageSendEvent_send_reply_channel_range(InternalUtils.check_arr_len(node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                if (ret >= 0 && ret <= 4096) { return null; }
                MessageSendEvent ret_hu_conv = MessageSendEvent.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
index b4c54c2efab50ce8f0a5f1b99eb203d25a859f5c..85117b98ed66f308151750f972683205954d5e7b 100644 (file)
@@ -36,7 +36,7 @@ public class MessageSendEventsProvider extends CommonBase {
                impl_holder.held = new MessageSendEventsProvider(new bindings.LDKMessageSendEventsProvider() {
                        @Override public long[] get_and_clear_pending_msg_events() {
                                MessageSendEvent[] ret = arg.get_and_clear_pending_msg_events();
-                               long[] result = ret != null ? Arrays.stream(ret).mapToLong(ret_conv_18 -> ret_conv_18.ptr).toArray() : null;
+                               long[] result = ret != null ? Arrays.stream(ret).mapToLong(ret_conv_18 -> ret_conv_18 == null ? 0 : ret_conv_18.clone_ptr()).toArray() : null;
                                return result;
                        }
                });
index 5eab27cd4d16d2fcf322fcb2346c3da648c14dce..56f6937b6535d11c2590a1f973df8e9fb0e7dcd2 100644 (file)
@@ -39,6 +39,11 @@ public class MinFinalCltvExpiry extends CommonBase {
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.MinFinalCltvExpiry_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the MinFinalCltvExpiry
         */
index da40b184d900a8d90979bfa5e506dd087a2eab34..38a63b38a112bf8a488127346129cd09bdd5976b 100644 (file)
@@ -35,6 +35,9 @@ public class MonitorEvent extends CommonBase {
                assert false; return null; // Unreachable without extending the (internal) bindings interface
        }
 
+       /**
+        * A monitor event containing an HTLCUpdate.
+        */
        public final static class HTLCEvent extends MonitorEvent {
                public final HTLCUpdate htlc_event;
                private HTLCEvent(long ptr, bindings.LDKMonitorEvent.HTLCEvent obj) {
@@ -45,6 +48,9 @@ public class MonitorEvent extends CommonBase {
                        this.htlc_event = htlc_event_hu_conv;
                }
        }
+       /**
+        * A monitor event that the Channel's commitment transaction was confirmed.
+        */
        public final static class CommitmentTxConfirmed extends MonitorEvent {
                public final OutPoint commitment_tx_confirmed;
                private CommitmentTxConfirmed(long ptr, bindings.LDKMonitorEvent.CommitmentTxConfirmed obj) {
@@ -55,6 +61,12 @@ public class MonitorEvent extends CommonBase {
                        this.commitment_tx_confirmed = commitment_tx_confirmed_hu_conv;
                }
        }
+       /**
+        * Indicates a [`ChannelMonitor`] update has completed. See
+        * [`ChannelMonitorUpdateErr::TemporaryFailure`] for more information on how this is used.
+        * 
+        * [`ChannelMonitorUpdateErr::TemporaryFailure`]: super::ChannelMonitorUpdateErr::TemporaryFailure
+        */
        public final static class UpdateCompleted extends MonitorEvent {
                /**
                 * The funding outpoint of the [`ChannelMonitor`] that was updated
@@ -77,6 +89,12 @@ public class MonitorEvent extends CommonBase {
                        this.monitor_update_id = obj.monitor_update_id;
                }
        }
+       /**
+        * Indicates a [`ChannelMonitor`] update has failed. See
+        * [`ChannelMonitorUpdateErr::PermanentFailure`] for more information on how this is used.
+        * 
+        * [`ChannelMonitorUpdateErr::PermanentFailure`]: super::ChannelMonitorUpdateErr::PermanentFailure
+        */
        public final static class UpdateFailed extends MonitorEvent {
                public final OutPoint update_failed;
                private UpdateFailed(long ptr, bindings.LDKMonitorEvent.UpdateFailed obj) {
@@ -87,6 +105,11 @@ public class MonitorEvent extends CommonBase {
                        this.update_failed = update_failed_hu_conv;
                }
        }
+       long clone_ptr() {
+               long ret = bindings.MonitorEvent_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the MonitorEvent
         */
index cac258b2d96499e6fe761dc4f1a604348fb04d1d..aa425da91d960891cd793e1f537803c535ee7b28 100644 (file)
@@ -43,6 +43,11 @@ public class MonitorUpdateError extends CommonBase {
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.MonitorUpdateError_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the MonitorUpdateError
         */
index 8da5bb67b611bf0641bedde522540594b3a2050d..bdc9e7f18f4dd8b18b5a668ff3f8142b8c97553b 100644 (file)
@@ -19,6 +19,11 @@ public class MonitorUpdateId extends CommonBase {
                if (ptr != 0) { bindings.MonitorUpdateId_free(ptr); }
        }
 
+       long clone_ptr() {
+               long ret = bindings.MonitorUpdateId_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the MonitorUpdateId
         */
index 5a26a2a0f11525c62ecc5714ccbb9979f3a7a77c..242e169a35d64570e086c56e86eabf13dc665c22 100644 (file)
@@ -35,6 +35,9 @@ public class NetAddress extends CommonBase {
                assert false; return null; // Unreachable without extending the (internal) bindings interface
        }
 
+       /**
+        * An IPv4 address/port on which the peer is listening.
+        */
        public final static class IPv4 extends NetAddress {
                /**
                 * The 4-byte IPv4 address
@@ -50,6 +53,9 @@ public class NetAddress extends CommonBase {
                        this.port = obj.port;
                }
        }
+       /**
+        * An IPv6 address/port on which the peer is listening.
+        */
        public final static class IPv6 extends NetAddress {
                /**
                 * The 16-byte IPv6 address
@@ -65,6 +71,9 @@ public class NetAddress extends CommonBase {
                        this.port = obj.port;
                }
        }
+       /**
+        * An old-style Tor onion address/port on which the peer is listening.
+        */
        public final static class OnionV2 extends NetAddress {
                /**
                 * The bytes (usually encoded in base32 with \".onion\" appended)
@@ -80,6 +89,11 @@ public class NetAddress extends CommonBase {
                        this.port = obj.port;
                }
        }
+       /**
+        * A new-style Tor onion address/port on which the peer is listening.
+        * To create the human-readable \"hostname\", concatenate ed25519_pubkey, checksum, and version,
+        * wrap as base32 and append \".onion\".
+        */
        public final static class OnionV3 extends NetAddress {
                /**
                 * The ed25519 long-term public key of the peer
@@ -105,6 +119,11 @@ public class NetAddress extends CommonBase {
                        this.port = obj.port;
                }
        }
+       long clone_ptr() {
+               long ret = bindings.NetAddress_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the NetAddress
         */
@@ -120,7 +139,7 @@ public class NetAddress extends CommonBase {
         * Utility method to constructs a new IPv4-variant NetAddress
         */
        public static NetAddress ipv4(byte[] addr, short port) {
-               long ret = bindings.NetAddress_ipv4(addr, port);
+               long ret = bindings.NetAddress_ipv4(InternalUtils.check_arr_len(addr, 4), port);
                if (ret >= 0 && ret <= 4096) { return null; }
                NetAddress ret_hu_conv = NetAddress.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
@@ -131,7 +150,7 @@ public class NetAddress extends CommonBase {
         * Utility method to constructs a new IPv6-variant NetAddress
         */
        public static NetAddress ipv6(byte[] addr, short port) {
-               long ret = bindings.NetAddress_ipv6(addr, port);
+               long ret = bindings.NetAddress_ipv6(InternalUtils.check_arr_len(addr, 16), port);
                if (ret >= 0 && ret <= 4096) { return null; }
                NetAddress ret_hu_conv = NetAddress.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
@@ -142,7 +161,7 @@ public class NetAddress extends CommonBase {
         * Utility method to constructs a new OnionV2-variant NetAddress
         */
        public static NetAddress onion_v2(byte[] addr, short port) {
-               long ret = bindings.NetAddress_onion_v2(addr, port);
+               long ret = bindings.NetAddress_onion_v2(InternalUtils.check_arr_len(addr, 10), port);
                if (ret >= 0 && ret <= 4096) { return null; }
                NetAddress ret_hu_conv = NetAddress.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
@@ -153,7 +172,7 @@ public class NetAddress extends CommonBase {
         * Utility method to constructs a new OnionV3-variant NetAddress
         */
        public static NetAddress onion_v3(byte[] ed25519_pubkey, short checksum, byte version, short port) {
-               long ret = bindings.NetAddress_onion_v3(ed25519_pubkey, checksum, version, port);
+               long ret = bindings.NetAddress_onion_v3(InternalUtils.check_arr_len(ed25519_pubkey, 32), checksum, version, port);
                if (ret >= 0 && ret <= 4096) { return null; }
                NetAddress ret_hu_conv = NetAddress.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
index debc8fe4bea2b512c6fdf334d4723b7f6e39c975..4331c73f74877c79361636efe99614d7045a7975 100644 (file)
@@ -51,6 +51,7 @@ public class NetGraphMsgHandler extends CommonBase {
                NetGraphMsgHandler ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new NetGraphMsgHandler(null, ret); }
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                ret_hu_conv.ptrs_to.add(network_graph);
+               ret_hu_conv.ptrs_to.add(chain_access);
                ret_hu_conv.ptrs_to.add(logger);
                return ret_hu_conv;
        }
@@ -62,6 +63,7 @@ public class NetGraphMsgHandler extends CommonBase {
         */
        public void add_chain_access(Option_AccessZ chain_access) {
                bindings.NetGraphMsgHandler_add_chain_access(this.ptr, chain_access.ptr);
+               this.ptrs_to.add(chain_access);
        }
 
        /**
index 299f4547a19503de7542ee831826e365992597c7..1c2469d4db487ae0bbf67a081a73db4b6e96773d 100644 (file)
@@ -19,6 +19,11 @@ public class NetworkGraph extends CommonBase {
                if (ptr != 0) { bindings.NetworkGraph_free(ptr); }
        }
 
+       long clone_ptr() {
+               long ret = bindings.NetworkGraph_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the NetworkGraph
         */
@@ -52,7 +57,7 @@ public class NetworkGraph extends CommonBase {
         * Creates a new, empty, network graph.
         */
        public static NetworkGraph of(byte[] genesis_hash) {
-               long ret = bindings.NetworkGraph_new(genesis_hash);
+               long ret = bindings.NetworkGraph_new(InternalUtils.check_arr_len(genesis_hash, 32));
                if (ret >= 0 && ret <= 4096) { return null; }
                NetworkGraph ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new NetworkGraph(null, ret); }
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
@@ -115,6 +120,7 @@ public class NetworkGraph extends CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_NoneLightningErrorZ ret_hu_conv = Result_NoneLightningErrorZ.constr_from_ptr(ret);
                this.ptrs_to.add(msg);
+               this.ptrs_to.add(chain_access);
                return ret_hu_conv;
        }
 
@@ -131,6 +137,7 @@ public class NetworkGraph extends CommonBase {
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_NoneLightningErrorZ ret_hu_conv = Result_NoneLightningErrorZ.constr_from_ptr(ret);
                this.ptrs_to.add(msg);
+               this.ptrs_to.add(chain_access);
                return ret_hu_conv;
        }
 
@@ -148,7 +155,7 @@ public class NetworkGraph extends CommonBase {
         * Marks a node in the graph as failed.
         */
        public void fail_node(byte[] _node_id, boolean is_permanent) {
-               bindings.NetworkGraph_fail_node(this.ptr, _node_id, is_permanent);
+               bindings.NetworkGraph_fail_node(this.ptr, InternalUtils.check_arr_len(_node_id, 33), is_permanent);
        }
 
        /**
index 01e3614178b62ae8facb0b60404f3db414e4d966..8abc8b58ee59ce596220bb8abd4f1f63e059d584 100644 (file)
@@ -35,6 +35,10 @@ public class NetworkUpdate extends CommonBase {
                assert false; return null; // Unreachable without extending the (internal) bindings interface
        }
 
+       /**
+        * An error indicating a `channel_update` messages should be applied via
+        * [`NetworkGraph::update_channel`].
+        */
        public final static class ChannelUpdateMessage extends NetworkUpdate {
                /**
                 * The update to apply via [`NetworkGraph::update_channel`].
@@ -48,6 +52,10 @@ public class NetworkUpdate extends CommonBase {
                        this.msg = msg_hu_conv;
                }
        }
+       /**
+        * An error indicating only that a channel has been closed, which should be applied via
+        * [`NetworkGraph::close_channel_from_update`].
+        */
        public final static class ChannelClosed extends NetworkUpdate {
                /**
                 * The short channel id of the closed channel.
@@ -64,6 +72,10 @@ public class NetworkUpdate extends CommonBase {
                        this.is_permanent = obj.is_permanent;
                }
        }
+       /**
+        * An error indicating only that a node has failed, which should be applied via
+        * [`NetworkGraph::fail_node`].
+        */
        public final static class NodeFailure extends NetworkUpdate {
                /**
                 * The node id of the failed node.
@@ -80,6 +92,11 @@ public class NetworkUpdate extends CommonBase {
                        this.is_permanent = obj.is_permanent;
                }
        }
+       long clone_ptr() {
+               long ret = bindings.NetworkUpdate_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the NetworkUpdate
         */
@@ -117,7 +134,7 @@ public class NetworkUpdate extends CommonBase {
         * Utility method to constructs a new NodeFailure-variant NetworkUpdate
         */
        public static NetworkUpdate node_failure(byte[] node_id, boolean is_permanent) {
-               long ret = bindings.NetworkUpdate_node_failure(node_id, is_permanent);
+               long ret = bindings.NetworkUpdate_node_failure(InternalUtils.check_arr_len(node_id, 33), is_permanent);
                if (ret >= 0 && ret <= 4096) { return null; }
                NetworkUpdate ret_hu_conv = NetworkUpdate.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
index 40c01d80ac1a3c7a13b9827b078aaed972af45dd..da8ce46bf36ceaa50a4d94512c2cf240a20a8a01 100644 (file)
@@ -31,7 +31,7 @@ public class NodeAnnouncement extends CommonBase {
         * The signature by the node key
         */
        public void set_signature(byte[] val) {
-               bindings.NodeAnnouncement_set_signature(this.ptr, val);
+               bindings.NodeAnnouncement_set_signature(this.ptr, InternalUtils.check_arr_len(val, 64));
        }
 
        /**
@@ -56,13 +56,18 @@ public class NodeAnnouncement extends CommonBase {
         * Constructs a new NodeAnnouncement given each field
         */
        public static NodeAnnouncement of(byte[] signature_arg, UnsignedNodeAnnouncement contents_arg) {
-               long ret = bindings.NodeAnnouncement_new(signature_arg, contents_arg == null ? 0 : contents_arg.ptr & ~1);
+               long ret = bindings.NodeAnnouncement_new(InternalUtils.check_arr_len(signature_arg, 64), contents_arg == null ? 0 : contents_arg.ptr & ~1);
                if (ret >= 0 && ret <= 4096) { return null; }
                NodeAnnouncement ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new NodeAnnouncement(null, ret); }
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.NodeAnnouncement_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the NodeAnnouncement
         */
index f0a745f9230d95ed6d7121a4e1b963c0c71d0b3a..7b0293286db0ce70c12e6efff68fc5ab1c1a5c0e 100644 (file)
@@ -66,7 +66,7 @@ public class NodeAnnouncementInfo extends CommonBase {
         * Color assigned to the node
         */
        public void set_rgb(byte[] val) {
-               bindings.NodeAnnouncementInfo_set_rgb(this.ptr, val);
+               bindings.NodeAnnouncementInfo_set_rgb(this.ptr, InternalUtils.check_arr_len(val, 3));
        }
 
        /**
@@ -85,7 +85,7 @@ public class NodeAnnouncementInfo extends CommonBase {
         * should not be exposed to the user.
         */
        public void set_alias(byte[] val) {
-               bindings.NodeAnnouncementInfo_set_alias(this.ptr, val);
+               bindings.NodeAnnouncementInfo_set_alias(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        /**
@@ -128,13 +128,18 @@ public class NodeAnnouncementInfo extends CommonBase {
         * Constructs a new NodeAnnouncementInfo given each field
         */
        public static NodeAnnouncementInfo of(NodeFeatures features_arg, int last_update_arg, byte[] rgb_arg, byte[] alias_arg, NetAddress[] addresses_arg, NodeAnnouncement announcement_message_arg) {
-               long ret = bindings.NodeAnnouncementInfo_new(features_arg == null ? 0 : features_arg.ptr & ~1, last_update_arg, rgb_arg, alias_arg, addresses_arg != null ? Arrays.stream(addresses_arg).mapToLong(addresses_arg_conv_12 -> addresses_arg_conv_12.ptr).toArray() : null, announcement_message_arg == null ? 0 : announcement_message_arg.ptr & ~1);
+               long ret = bindings.NodeAnnouncementInfo_new(features_arg == null ? 0 : features_arg.ptr & ~1, last_update_arg, InternalUtils.check_arr_len(rgb_arg, 3), InternalUtils.check_arr_len(alias_arg, 32), addresses_arg != null ? Arrays.stream(addresses_arg).mapToLong(addresses_arg_conv_12 -> addresses_arg_conv_12.ptr).toArray() : null, announcement_message_arg == null ? 0 : announcement_message_arg.ptr & ~1);
                if (ret >= 0 && ret <= 4096) { return null; }
                NodeAnnouncementInfo ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new NodeAnnouncementInfo(null, ret); }
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.NodeAnnouncementInfo_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the NodeAnnouncementInfo
         */
index ebd78144b187394dd7c8441ff753908cf3bbebd5..1a05b6d5aad4cbca48d75e97f94566a1eb8dd5e3 100644 (file)
@@ -30,6 +30,11 @@ public class NodeFeatures extends CommonBase {
                return ret;
        }
 
+       long clone_ptr() {
+               long ret = bindings.NodeFeatures_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the NodeFeatures
         */
index e74d649ae688fa69a0c5b9770ee08929feaae4e4..a0074a6592c3f2841cf76b9b3983dd8d3df9c0e2 100644 (file)
@@ -19,6 +19,11 @@ public class NodeId extends CommonBase {
                if (ptr != 0) { bindings.NodeId_free(ptr); }
        }
 
+       long clone_ptr() {
+               long ret = bindings.NodeId_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the NodeId
         */
@@ -34,7 +39,7 @@ public class NodeId extends CommonBase {
         * Create a new NodeId from a public key
         */
        public static NodeId from_pubkey(byte[] pubkey) {
-               long ret = bindings.NodeId_from_pubkey(pubkey);
+               long ret = bindings.NodeId_from_pubkey(InternalUtils.check_arr_len(pubkey, 33));
                if (ret >= 0 && ret <= 4096) { return null; }
                NodeId ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new NodeId(null, ret); }
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
index f599db754cf56009b06d35538619d02cf06ebef1..e091c6c692e74fd1c0cbaeb2538c987657b63028 100644 (file)
@@ -91,6 +91,11 @@ public class NodeInfo extends CommonBase {
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.NodeInfo_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the NodeInfo
         */
index ff78eea1094e84df8136624cea66e83e956fe437..46dee55caec630e0e022638cf5fbe8fb0d4994a0 100644 (file)
@@ -31,7 +31,7 @@ public class OpenChannel extends CommonBase {
         * The genesis hash of the blockchain where the channel is to be opened
         */
        public void set_chain_hash(byte[] val) {
-               bindings.OpenChannel_set_chain_hash(this.ptr, val);
+               bindings.OpenChannel_set_chain_hash(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        /**
@@ -46,7 +46,7 @@ public class OpenChannel extends CommonBase {
         * A temporary channel ID, until the funding outpoint is announced
         */
        public void set_temporary_channel_id(byte[] val) {
-               bindings.OpenChannel_set_temporary_channel_id(this.ptr, val);
+               bindings.OpenChannel_set_temporary_channel_id(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        /**
@@ -196,7 +196,7 @@ public class OpenChannel extends CommonBase {
         * The sender's key controlling the funding transaction
         */
        public void set_funding_pubkey(byte[] val) {
-               bindings.OpenChannel_set_funding_pubkey(this.ptr, val);
+               bindings.OpenChannel_set_funding_pubkey(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        /**
@@ -211,7 +211,7 @@ public class OpenChannel extends CommonBase {
         * Used to derive a revocation key for transactions broadcast by counterparty
         */
        public void set_revocation_basepoint(byte[] val) {
-               bindings.OpenChannel_set_revocation_basepoint(this.ptr, val);
+               bindings.OpenChannel_set_revocation_basepoint(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        /**
@@ -226,7 +226,7 @@ public class OpenChannel extends CommonBase {
         * A payment key to sender for transactions broadcast by counterparty
         */
        public void set_payment_point(byte[] val) {
-               bindings.OpenChannel_set_payment_point(this.ptr, val);
+               bindings.OpenChannel_set_payment_point(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        /**
@@ -241,7 +241,7 @@ public class OpenChannel extends CommonBase {
         * Used to derive a payment key to sender for transactions broadcast by sender
         */
        public void set_delayed_payment_basepoint(byte[] val) {
-               bindings.OpenChannel_set_delayed_payment_basepoint(this.ptr, val);
+               bindings.OpenChannel_set_delayed_payment_basepoint(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        /**
@@ -256,7 +256,7 @@ public class OpenChannel extends CommonBase {
         * Used to derive an HTLC payment key to sender
         */
        public void set_htlc_basepoint(byte[] val) {
-               bindings.OpenChannel_set_htlc_basepoint(this.ptr, val);
+               bindings.OpenChannel_set_htlc_basepoint(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        /**
@@ -271,7 +271,7 @@ public class OpenChannel extends CommonBase {
         * The first to-be-broadcast-by-sender transaction's per commitment point
         */
        public void set_first_per_commitment_point(byte[] val) {
-               bindings.OpenChannel_set_first_per_commitment_point(this.ptr, val);
+               bindings.OpenChannel_set_first_per_commitment_point(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        /**
@@ -289,6 +289,11 @@ public class OpenChannel extends CommonBase {
                bindings.OpenChannel_set_channel_flags(this.ptr, val);
        }
 
+       long clone_ptr() {
+               long ret = bindings.OpenChannel_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the OpenChannel
         */
index 30119e33ad9e57eaae15af74c6657f4c213ed343..cb7b13256028a4e6d351c2a2506b319d32e62038 100644 (file)
@@ -29,6 +29,9 @@ public class Option_AccessZ extends CommonBase {
                assert false; return null; // Unreachable without extending the (internal) bindings interface
        }
 
+       /**
+        * When we're in this state, this COption_AccessZ contains a crate::lightning::chain::Access
+        */
        public final static class Some extends Option_AccessZ {
                public final Access some;
                private Some(long ptr, bindings.LDKCOption_AccessZ.Some obj) {
@@ -39,6 +42,9 @@ public class Option_AccessZ extends CommonBase {
                        this.some = ret_hu_conv;
                }
        }
+       /**
+        * When we're in this state, this COption_AccessZ contains nothing
+        */
        public final static class None extends Option_AccessZ {
                private None(long ptr, bindings.LDKCOption_AccessZ.None obj) {
                        super(null, ptr);
index 4c07583c6934ad18eea27993b9bdc333bc674017..429e51c267dd4bcfec45699e6cd82d0bf1899966 100644 (file)
@@ -29,6 +29,9 @@ public class Option_C2Tuple_usizeTransactionZZ extends CommonBase {
                assert false; return null; // Unreachable without extending the (internal) bindings interface
        }
 
+       /**
+        * When we're in this state, this COption_C2Tuple_usizeTransactionZZ contains a crate::c_types::derived::C2Tuple_usizeTransactionZ
+        */
        public final static class Some extends Option_C2Tuple_usizeTransactionZZ {
                public final TwoTuple_usizeTransactionZ some;
                private Some(long ptr, bindings.LDKCOption_C2Tuple_usizeTransactionZZ.Some obj) {
@@ -39,6 +42,9 @@ public class Option_C2Tuple_usizeTransactionZZ extends CommonBase {
                        this.some = some_hu_conv;
                }
        }
+       /**
+        * When we're in this state, this COption_C2Tuple_usizeTransactionZZ contains nothing
+        */
        public final static class None extends Option_C2Tuple_usizeTransactionZZ {
                private None(long ptr, bindings.LDKCOption_C2Tuple_usizeTransactionZZ.None obj) {
                        super(null, ptr);
@@ -66,6 +72,11 @@ public class Option_C2Tuple_usizeTransactionZZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.COption_C2Tuple_usizeTransactionZZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new COption_C2Tuple_usizeTransactionZZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 9ae23246e3627ce0706f5a1367c46db59dd35809..a3e77a308d68b6d43e38c2bc99df4ce87bc95ea1 100644 (file)
@@ -29,6 +29,9 @@ public class Option_CVec_NetAddressZZ extends CommonBase {
                assert false; return null; // Unreachable without extending the (internal) bindings interface
        }
 
+       /**
+        * When we're in this state, this COption_CVec_NetAddressZZ contains a crate::c_types::derived::CVec_NetAddressZ
+        */
        public final static class Some extends Option_CVec_NetAddressZZ {
                public final NetAddress[] some;
                private Some(long ptr, bindings.LDKCOption_CVec_NetAddressZZ.Some obj) {
@@ -44,6 +47,9 @@ public class Option_CVec_NetAddressZZ extends CommonBase {
                        this.some = some_conv_12_arr;
                }
        }
+       /**
+        * When we're in this state, this COption_CVec_NetAddressZZ contains nothing
+        */
        public final static class None extends Option_CVec_NetAddressZZ {
                private None(long ptr, bindings.LDKCOption_CVec_NetAddressZZ.None obj) {
                        super(null, ptr);
@@ -71,6 +77,11 @@ public class Option_CVec_NetAddressZZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.COption_CVec_NetAddressZZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new COption_CVec_NetAddressZZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
diff --git a/src/main/java/org/ldk/structs/Option_ClosureReasonZ.java b/src/main/java/org/ldk/structs/Option_ClosureReasonZ.java
new file mode 100644 (file)
index 0000000..6db3b38
--- /dev/null
@@ -0,0 +1,92 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import javax.annotation.Nullable;
+
+
+/**
+ * An enum which can either contain a crate::lightning::util::events::ClosureReason or not
+ */
+@SuppressWarnings("unchecked") // We correctly assign various generic arrays
+public class Option_ClosureReasonZ extends CommonBase {
+       private Option_ClosureReasonZ(Object _dummy, long ptr) { super(ptr); }
+       @Override @SuppressWarnings("deprecation")
+       protected void finalize() throws Throwable {
+               super.finalize();
+               if (ptr != 0) { bindings.COption_ClosureReasonZ_free(ptr); }
+       }
+       static Option_ClosureReasonZ constr_from_ptr(long ptr) {
+               bindings.LDKCOption_ClosureReasonZ raw_val = bindings.LDKCOption_ClosureReasonZ_ref_from_ptr(ptr);
+               if (raw_val.getClass() == bindings.LDKCOption_ClosureReasonZ.Some.class) {
+                       return new Some(ptr, (bindings.LDKCOption_ClosureReasonZ.Some)raw_val);
+               }
+               if (raw_val.getClass() == bindings.LDKCOption_ClosureReasonZ.None.class) {
+                       return new None(ptr, (bindings.LDKCOption_ClosureReasonZ.None)raw_val);
+               }
+               assert false; return null; // Unreachable without extending the (internal) bindings interface
+       }
+
+       /**
+        * When we're in this state, this COption_ClosureReasonZ contains a crate::lightning::util::events::ClosureReason
+        */
+       public final static class Some extends Option_ClosureReasonZ {
+               public final ClosureReason some;
+               private Some(long ptr, bindings.LDKCOption_ClosureReasonZ.Some obj) {
+                       super(null, ptr);
+                       long some = obj.some;
+                       ClosureReason some_hu_conv = ClosureReason.constr_from_ptr(some);
+                       some_hu_conv.ptrs_to.add(this);
+                       this.some = some_hu_conv;
+               }
+       }
+       /**
+        * When we're in this state, this COption_ClosureReasonZ contains nothing
+        */
+       public final static class None extends Option_ClosureReasonZ {
+               private None(long ptr, bindings.LDKCOption_ClosureReasonZ.None obj) {
+                       super(null, ptr);
+               }
+       }
+       /**
+        * Constructs a new COption_ClosureReasonZ containing a crate::lightning::util::events::ClosureReason
+        */
+       public static Option_ClosureReasonZ some(ClosureReason o) {
+               long ret = bindings.COption_ClosureReasonZ_some(o.ptr);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Option_ClosureReasonZ ret_hu_conv = Option_ClosureReasonZ.constr_from_ptr(ret);
+               ret_hu_conv.ptrs_to.add(ret_hu_conv);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Constructs a new COption_ClosureReasonZ containing nothing
+        */
+       public static Option_ClosureReasonZ none() {
+               long ret = bindings.COption_ClosureReasonZ_none();
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Option_ClosureReasonZ ret_hu_conv = Option_ClosureReasonZ.constr_from_ptr(ret);
+               ret_hu_conv.ptrs_to.add(ret_hu_conv);
+               return ret_hu_conv;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.COption_ClosureReasonZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
+       /**
+        * Creates a new COption_ClosureReasonZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Option_ClosureReasonZ clone() {
+               long ret = bindings.COption_ClosureReasonZ_clone(this.ptr);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Option_ClosureReasonZ ret_hu_conv = Option_ClosureReasonZ.constr_from_ptr(ret);
+               ret_hu_conv.ptrs_to.add(this);
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/Option_EventZ.java b/src/main/java/org/ldk/structs/Option_EventZ.java
new file mode 100644 (file)
index 0000000..aa22da9
--- /dev/null
@@ -0,0 +1,92 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import javax.annotation.Nullable;
+
+
+/**
+ * An enum which can either contain a crate::lightning::util::events::Event or not
+ */
+@SuppressWarnings("unchecked") // We correctly assign various generic arrays
+public class Option_EventZ extends CommonBase {
+       private Option_EventZ(Object _dummy, long ptr) { super(ptr); }
+       @Override @SuppressWarnings("deprecation")
+       protected void finalize() throws Throwable {
+               super.finalize();
+               if (ptr != 0) { bindings.COption_EventZ_free(ptr); }
+       }
+       static Option_EventZ constr_from_ptr(long ptr) {
+               bindings.LDKCOption_EventZ raw_val = bindings.LDKCOption_EventZ_ref_from_ptr(ptr);
+               if (raw_val.getClass() == bindings.LDKCOption_EventZ.Some.class) {
+                       return new Some(ptr, (bindings.LDKCOption_EventZ.Some)raw_val);
+               }
+               if (raw_val.getClass() == bindings.LDKCOption_EventZ.None.class) {
+                       return new None(ptr, (bindings.LDKCOption_EventZ.None)raw_val);
+               }
+               assert false; return null; // Unreachable without extending the (internal) bindings interface
+       }
+
+       /**
+        * When we're in this state, this COption_EventZ contains a crate::lightning::util::events::Event
+        */
+       public final static class Some extends Option_EventZ {
+               public final Event some;
+               private Some(long ptr, bindings.LDKCOption_EventZ.Some obj) {
+                       super(null, ptr);
+                       long some = obj.some;
+                       Event some_hu_conv = Event.constr_from_ptr(some);
+                       some_hu_conv.ptrs_to.add(this);
+                       this.some = some_hu_conv;
+               }
+       }
+       /**
+        * When we're in this state, this COption_EventZ contains nothing
+        */
+       public final static class None extends Option_EventZ {
+               private None(long ptr, bindings.LDKCOption_EventZ.None obj) {
+                       super(null, ptr);
+               }
+       }
+       /**
+        * Constructs a new COption_EventZ containing a crate::lightning::util::events::Event
+        */
+       public static Option_EventZ some(Event o) {
+               long ret = bindings.COption_EventZ_some(o.ptr);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Option_EventZ ret_hu_conv = Option_EventZ.constr_from_ptr(ret);
+               ret_hu_conv.ptrs_to.add(ret_hu_conv);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Constructs a new COption_EventZ containing nothing
+        */
+       public static Option_EventZ none() {
+               long ret = bindings.COption_EventZ_none();
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Option_EventZ ret_hu_conv = Option_EventZ.constr_from_ptr(ret);
+               ret_hu_conv.ptrs_to.add(ret_hu_conv);
+               return ret_hu_conv;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.COption_EventZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
+       /**
+        * Creates a new COption_EventZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Option_EventZ clone() {
+               long ret = bindings.COption_EventZ_clone(this.ptr);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Option_EventZ ret_hu_conv = Option_EventZ.constr_from_ptr(ret);
+               ret_hu_conv.ptrs_to.add(this);
+               return ret_hu_conv;
+       }
+
+}
index ac669f028aa4c7f0a13f60f5f6ff0930d8e01930..0561ae71b4d34079d382a3ef9af66bc07e82cbe8 100644 (file)
@@ -29,6 +29,9 @@ public class Option_FilterZ extends CommonBase {
                assert false; return null; // Unreachable without extending the (internal) bindings interface
        }
 
+       /**
+        * When we're in this state, this COption_FilterZ contains a crate::lightning::chain::Filter
+        */
        public final static class Some extends Option_FilterZ {
                public final Filter some;
                private Some(long ptr, bindings.LDKCOption_FilterZ.Some obj) {
@@ -39,6 +42,9 @@ public class Option_FilterZ extends CommonBase {
                        this.some = ret_hu_conv;
                }
        }
+       /**
+        * When we're in this state, this COption_FilterZ contains nothing
+        */
        public final static class None extends Option_FilterZ {
                private None(long ptr, bindings.LDKCOption_FilterZ.None obj) {
                        super(null, ptr);
diff --git a/src/main/java/org/ldk/structs/Option_MonitorEventZ.java b/src/main/java/org/ldk/structs/Option_MonitorEventZ.java
new file mode 100644 (file)
index 0000000..032e1f3
--- /dev/null
@@ -0,0 +1,92 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import javax.annotation.Nullable;
+
+
+/**
+ * An enum which can either contain a crate::lightning::chain::channelmonitor::MonitorEvent or not
+ */
+@SuppressWarnings("unchecked") // We correctly assign various generic arrays
+public class Option_MonitorEventZ extends CommonBase {
+       private Option_MonitorEventZ(Object _dummy, long ptr) { super(ptr); }
+       @Override @SuppressWarnings("deprecation")
+       protected void finalize() throws Throwable {
+               super.finalize();
+               if (ptr != 0) { bindings.COption_MonitorEventZ_free(ptr); }
+       }
+       static Option_MonitorEventZ constr_from_ptr(long ptr) {
+               bindings.LDKCOption_MonitorEventZ raw_val = bindings.LDKCOption_MonitorEventZ_ref_from_ptr(ptr);
+               if (raw_val.getClass() == bindings.LDKCOption_MonitorEventZ.Some.class) {
+                       return new Some(ptr, (bindings.LDKCOption_MonitorEventZ.Some)raw_val);
+               }
+               if (raw_val.getClass() == bindings.LDKCOption_MonitorEventZ.None.class) {
+                       return new None(ptr, (bindings.LDKCOption_MonitorEventZ.None)raw_val);
+               }
+               assert false; return null; // Unreachable without extending the (internal) bindings interface
+       }
+
+       /**
+        * When we're in this state, this COption_MonitorEventZ contains a crate::lightning::chain::channelmonitor::MonitorEvent
+        */
+       public final static class Some extends Option_MonitorEventZ {
+               public final MonitorEvent some;
+               private Some(long ptr, bindings.LDKCOption_MonitorEventZ.Some obj) {
+                       super(null, ptr);
+                       long some = obj.some;
+                       MonitorEvent some_hu_conv = MonitorEvent.constr_from_ptr(some);
+                       some_hu_conv.ptrs_to.add(this);
+                       this.some = some_hu_conv;
+               }
+       }
+       /**
+        * When we're in this state, this COption_MonitorEventZ contains nothing
+        */
+       public final static class None extends Option_MonitorEventZ {
+               private None(long ptr, bindings.LDKCOption_MonitorEventZ.None obj) {
+                       super(null, ptr);
+               }
+       }
+       /**
+        * Constructs a new COption_MonitorEventZ containing a crate::lightning::chain::channelmonitor::MonitorEvent
+        */
+       public static Option_MonitorEventZ some(MonitorEvent o) {
+               long ret = bindings.COption_MonitorEventZ_some(o.ptr);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Option_MonitorEventZ ret_hu_conv = Option_MonitorEventZ.constr_from_ptr(ret);
+               ret_hu_conv.ptrs_to.add(ret_hu_conv);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Constructs a new COption_MonitorEventZ containing nothing
+        */
+       public static Option_MonitorEventZ none() {
+               long ret = bindings.COption_MonitorEventZ_none();
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Option_MonitorEventZ ret_hu_conv = Option_MonitorEventZ.constr_from_ptr(ret);
+               ret_hu_conv.ptrs_to.add(ret_hu_conv);
+               return ret_hu_conv;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.COption_MonitorEventZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
+       /**
+        * Creates a new COption_MonitorEventZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Option_MonitorEventZ clone() {
+               long ret = bindings.COption_MonitorEventZ_clone(this.ptr);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Option_MonitorEventZ ret_hu_conv = Option_MonitorEventZ.constr_from_ptr(ret);
+               ret_hu_conv.ptrs_to.add(this);
+               return ret_hu_conv;
+       }
+
+}
index 6657b05e56058ae291c9b97afb45e4c3233e6bd1..dbd7fcbfe8992e206631f72fdeb309d087654c28 100644 (file)
@@ -29,6 +29,9 @@ public class Option_NetworkUpdateZ extends CommonBase {
                assert false; return null; // Unreachable without extending the (internal) bindings interface
        }
 
+       /**
+        * When we're in this state, this COption_NetworkUpdateZ contains a crate::lightning::routing::network_graph::NetworkUpdate
+        */
        public final static class Some extends Option_NetworkUpdateZ {
                public final NetworkUpdate some;
                private Some(long ptr, bindings.LDKCOption_NetworkUpdateZ.Some obj) {
@@ -39,6 +42,9 @@ public class Option_NetworkUpdateZ extends CommonBase {
                        this.some = some_hu_conv;
                }
        }
+       /**
+        * When we're in this state, this COption_NetworkUpdateZ contains nothing
+        */
        public final static class None extends Option_NetworkUpdateZ {
                private None(long ptr, bindings.LDKCOption_NetworkUpdateZ.None obj) {
                        super(null, ptr);
@@ -66,6 +72,11 @@ public class Option_NetworkUpdateZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.COption_NetworkUpdateZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new COption_NetworkUpdateZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index fffa4bb0bec7c81d94399c15e8634bf8d73fe486..e528bdcbdf35bf97b094eb1648ca2f64dd57abe9 100644 (file)
@@ -29,6 +29,9 @@ public class Option_TypeZ extends CommonBase {
                assert false; return null; // Unreachable without extending the (internal) bindings interface
        }
 
+       /**
+        * When we're in this state, this COption_TypeZ contains a crate::lightning::ln::wire::Type
+        */
        public final static class Some extends Option_TypeZ {
                public final Type some;
                private Some(long ptr, bindings.LDKCOption_TypeZ.Some obj) {
@@ -39,6 +42,9 @@ public class Option_TypeZ extends CommonBase {
                        this.some = ret_hu_conv;
                }
        }
+       /**
+        * When we're in this state, this COption_TypeZ contains nothing
+        */
        public final static class None extends Option_TypeZ {
                private None(long ptr, bindings.LDKCOption_TypeZ.None obj) {
                        super(null, ptr);
@@ -67,6 +73,11 @@ public class Option_TypeZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.COption_TypeZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new COption_TypeZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 1ed16f3f8acb7a777724f8cc993eb27eb28cfdc8..824247daae444a905623716c1c9978b056861f77 100644 (file)
@@ -29,6 +29,9 @@ public class Option_u16Z extends CommonBase {
                assert false; return null; // Unreachable without extending the (internal) bindings interface
        }
 
+       /**
+        * When we're in this state, this COption_u16Z contains a u16
+        */
        public final static class Some extends Option_u16Z {
                public final short some;
                private Some(long ptr, bindings.LDKCOption_u16Z.Some obj) {
@@ -36,6 +39,9 @@ public class Option_u16Z extends CommonBase {
                        this.some = obj.some;
                }
        }
+       /**
+        * When we're in this state, this COption_u16Z contains nothing
+        */
        public final static class None extends Option_u16Z {
                private None(long ptr, bindings.LDKCOption_u16Z.None obj) {
                        super(null, ptr);
@@ -63,6 +69,11 @@ public class Option_u16Z extends CommonBase {
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.COption_u16Z_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new COption_u16Z which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 3c4fcd68799fbed6858d2c3d22f44ef3140674f1..6a18abfbebc7f399e28f76c843e5ad14d375297b 100644 (file)
@@ -29,6 +29,9 @@ public class Option_u32Z extends CommonBase {
                assert false; return null; // Unreachable without extending the (internal) bindings interface
        }
 
+       /**
+        * When we're in this state, this COption_u32Z contains a u32
+        */
        public final static class Some extends Option_u32Z {
                public final int some;
                private Some(long ptr, bindings.LDKCOption_u32Z.Some obj) {
@@ -36,6 +39,9 @@ public class Option_u32Z extends CommonBase {
                        this.some = obj.some;
                }
        }
+       /**
+        * When we're in this state, this COption_u32Z contains nothing
+        */
        public final static class None extends Option_u32Z {
                private None(long ptr, bindings.LDKCOption_u32Z.None obj) {
                        super(null, ptr);
@@ -63,6 +69,11 @@ public class Option_u32Z extends CommonBase {
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.COption_u32Z_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new COption_u32Z which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index e4689c89333c7e9f0510d2da62b2cb0ed1c2b040..d4c900bada0ae33bccb23b36827d648e0afde275 100644 (file)
@@ -29,6 +29,9 @@ public class Option_u64Z extends CommonBase {
                assert false; return null; // Unreachable without extending the (internal) bindings interface
        }
 
+       /**
+        * When we're in this state, this COption_u64Z contains a u64
+        */
        public final static class Some extends Option_u64Z {
                public final long some;
                private Some(long ptr, bindings.LDKCOption_u64Z.Some obj) {
@@ -36,6 +39,9 @@ public class Option_u64Z extends CommonBase {
                        this.some = obj.some;
                }
        }
+       /**
+        * When we're in this state, this COption_u64Z contains nothing
+        */
        public final static class None extends Option_u64Z {
                private None(long ptr, bindings.LDKCOption_u64Z.None obj) {
                        super(null, ptr);
@@ -63,6 +69,11 @@ public class Option_u64Z extends CommonBase {
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.COption_u64Z_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new COption_u64Z which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index edb136126a7d606f93cd3f0b8e3e3e83c589d591..a181f35f2bed37b54ca9d0b051fa36646930472b 100644 (file)
@@ -34,7 +34,7 @@ public class OutPoint extends CommonBase {
         * The referenced transaction's txid.
         */
        public void set_txid(byte[] val) {
-               bindings.OutPoint_set_txid(this.ptr, val);
+               bindings.OutPoint_set_txid(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        /**
@@ -56,13 +56,18 @@ public class OutPoint extends CommonBase {
         * Constructs a new OutPoint given each field
         */
        public static OutPoint of(byte[] txid_arg, short index_arg) {
-               long ret = bindings.OutPoint_new(txid_arg, index_arg);
+               long ret = bindings.OutPoint_new(InternalUtils.check_arr_len(txid_arg, 32), index_arg);
                if (ret >= 0 && ret <= 4096) { return null; }
                OutPoint ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new OutPoint(null, ret); }
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.OutPoint_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the OutPoint
         */
index 922f4883e802fe281b058eb50f1f622b7c0022a1..317801b675804ec5d29f05aba5605fcabbd1517b 100644 (file)
@@ -31,7 +31,7 @@ public class Payee extends CommonBase {
         * The node id of the payee.
         */
        public void set_pubkey(byte[] val) {
-               bindings.Payee_set_pubkey(this.ptr, val);
+               bindings.Payee_set_pubkey(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        /**
@@ -111,13 +111,18 @@ public class Payee extends CommonBase {
         * Constructs a new Payee given each field
         */
        public static Payee of(byte[] pubkey_arg, InvoiceFeatures features_arg, RouteHint[] route_hints_arg, Option_u64Z expiry_time_arg) {
-               long ret = bindings.Payee_new(pubkey_arg, features_arg == null ? 0 : features_arg.ptr & ~1, route_hints_arg != null ? Arrays.stream(route_hints_arg).mapToLong(route_hints_arg_conv_11 -> route_hints_arg_conv_11 == null ? 0 : route_hints_arg_conv_11.ptr & ~1).toArray() : null, expiry_time_arg.ptr);
+               long ret = bindings.Payee_new(InternalUtils.check_arr_len(pubkey_arg, 33), features_arg == null ? 0 : features_arg.ptr & ~1, route_hints_arg != null ? Arrays.stream(route_hints_arg).mapToLong(route_hints_arg_conv_11 -> route_hints_arg_conv_11 == null ? 0 : route_hints_arg_conv_11.ptr & ~1).toArray() : null, expiry_time_arg.ptr);
                if (ret >= 0 && ret <= 4096) { return null; }
                Payee ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new Payee(null, ret); }
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.Payee_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the Payee
         */
@@ -170,7 +175,7 @@ public class Payee extends CommonBase {
         * Creates a payee with the node id of the given `pubkey`.
         */
        public static Payee from_node_id(byte[] pubkey) {
-               long ret = bindings.Payee_from_node_id(pubkey);
+               long ret = bindings.Payee_from_node_id(InternalUtils.check_arr_len(pubkey, 33));
                if (ret >= 0 && ret <= 4096) { return null; }
                Payee ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new Payee(null, ret); }
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
@@ -181,7 +186,7 @@ public class Payee extends CommonBase {
         * Creates a payee with the node id of the given `pubkey` to use for keysend payments.
         */
        public static Payee for_keysend(byte[] pubkey) {
-               long ret = bindings.Payee_for_keysend(pubkey);
+               long ret = bindings.Payee_for_keysend(InternalUtils.check_arr_len(pubkey, 33));
                if (ret >= 0 && ret <= 4096) { return null; }
                Payee ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new Payee(null, ret); }
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
index 5bf36b0a510cd16cdc08b6422390ede4de8de462..3f1ef3223a9e99cc6703536af232a8fc9792509a 100644 (file)
@@ -25,20 +25,25 @@ public class PayeePubKey extends CommonBase {
        }
 
        public void set_a(byte[] val) {
-               bindings.PayeePubKey_set_a(this.ptr, val);
+               bindings.PayeePubKey_set_a(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        /**
         * Constructs a new PayeePubKey given each field
         */
        public static PayeePubKey of(byte[] a_arg) {
-               long ret = bindings.PayeePubKey_new(a_arg);
+               long ret = bindings.PayeePubKey_new(InternalUtils.check_arr_len(a_arg, 33));
                if (ret >= 0 && ret <= 4096) { return null; }
                PayeePubKey ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new PayeePubKey(null, ret); }
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.PayeePubKey_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the PayeePubKey
         */
index bb7c58c035dbbbcafd59761c08185e31c1e50a9d..4d488e923a1df014b7958a427c70b47012e448a4 100644 (file)
@@ -49,23 +49,24 @@ public class Payer extends CommonBase {
                impl_holder.held = new Payer(new bindings.LDKPayer() {
                        @Override public byte[] node_id() {
                                byte[] ret = arg.node_id();
-                               return ret;
+                               byte[] result = InternalUtils.check_arr_len(ret, 33);
+                               return result;
                        }
                        @Override public long[] first_hops() {
                                ChannelDetails[] ret = arg.first_hops();
-                               long[] result = ret != null ? Arrays.stream(ret).mapToLong(ret_conv_16 -> ret_conv_16 == null ? 0 : ret_conv_16.ptr & ~1).toArray() : null;
+                               long[] result = ret != null ? Arrays.stream(ret).mapToLong(ret_conv_16 -> ret_conv_16 == null ? 0 : ret_conv_16.clone_ptr()).toArray() : null;
                                return result;
                        }
                        @Override public long send_payment(long route, byte[] payment_hash, byte[] payment_secret) {
                                Route route_hu_conv = null; if (route < 0 || route > 4096) { route_hu_conv = new Route(null, route); }
                                Result_PaymentIdPaymentSendFailureZ ret = arg.send_payment(route_hu_conv, payment_hash, payment_secret);
-                               long result = ret != null ? ret.ptr : 0;
+                               long result = ret == null ? 0 : ret.clone_ptr();
                                return result;
                        }
                        @Override public long retry_payment(long route, byte[] payment_id) {
                                Route route_hu_conv = null; if (route < 0 || route > 4096) { route_hu_conv = new Route(null, route); }
                                Result_NonePaymentSendFailureZ ret = arg.retry_payment(route_hu_conv, payment_id);
-                               long result = ret != null ? ret.ptr : 0;
+                               long result = ret == null ? 0 : ret.clone_ptr();
                                return result;
                        }
                });
@@ -100,7 +101,7 @@ public class Payer extends CommonBase {
         * Note that payment_secret (or a relevant inner pointer) may be NULL or all-0s to represent None
         */
        public Result_PaymentIdPaymentSendFailureZ send_payment(Route route, byte[] payment_hash, @Nullable byte[] payment_secret) {
-               long ret = bindings.Payer_send_payment(this.ptr, route == null ? 0 : route.ptr & ~1, payment_hash, payment_secret);
+               long ret = bindings.Payer_send_payment(this.ptr, route == null ? 0 : route.ptr & ~1, InternalUtils.check_arr_len(payment_hash, 32), InternalUtils.check_arr_len(payment_secret, 32));
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_PaymentIdPaymentSendFailureZ ret_hu_conv = Result_PaymentIdPaymentSendFailureZ.constr_from_ptr(ret);
                this.ptrs_to.add(route);
@@ -111,7 +112,7 @@ public class Payer extends CommonBase {
         * Retries a failed payment path for the [`PaymentId`] using the given [`Route`].
         */
        public Result_NonePaymentSendFailureZ retry_payment(Route route, byte[] payment_id) {
-               long ret = bindings.Payer_retry_payment(this.ptr, route == null ? 0 : route.ptr & ~1, payment_id);
+               long ret = bindings.Payer_retry_payment(this.ptr, route == null ? 0 : route.ptr & ~1, InternalUtils.check_arr_len(payment_id, 32));
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_NonePaymentSendFailureZ ret_hu_conv = Result_NonePaymentSendFailureZ.constr_from_ptr(ret);
                this.ptrs_to.add(route);
index ca806da1bbbcd9fd94f0a8fcb37521733654a6aa..7f1d4935f8b6d41898060ac2b286725735a0ee86 100644 (file)
@@ -32,6 +32,9 @@ public class PaymentError extends CommonBase {
                assert false; return null; // Unreachable without extending the (internal) bindings interface
        }
 
+       /**
+        * An error resulting from the provided [`Invoice`] or payment hash.
+        */
        public final static class Invoice extends PaymentError {
                public final String invoice;
                private Invoice(long ptr, bindings.LDKPaymentError.Invoice obj) {
@@ -39,6 +42,9 @@ public class PaymentError extends CommonBase {
                        this.invoice = obj.invoice;
                }
        }
+       /**
+        * An error occurring when finding a route.
+        */
        public final static class Routing extends PaymentError {
                public final LightningError routing;
                private Routing(long ptr, bindings.LDKPaymentError.Routing obj) {
@@ -49,6 +55,9 @@ public class PaymentError extends CommonBase {
                        this.routing = routing_hu_conv;
                }
        }
+       /**
+        * An error occurring when sending a payment.
+        */
        public final static class Sending extends PaymentError {
                public final PaymentSendFailure sending;
                private Sending(long ptr, bindings.LDKPaymentError.Sending obj) {
@@ -59,6 +68,11 @@ public class PaymentError extends CommonBase {
                        this.sending = sending_hu_conv;
                }
        }
+       long clone_ptr() {
+               long ret = bindings.PaymentError_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the PaymentError
         */
index 9290a3c529b8c9e7cb9af9cb39ea628c5d25f2cd..3c404af41509d6c46bbeeff8185714826b075b43 100644 (file)
@@ -30,6 +30,9 @@ public class PaymentPurpose extends CommonBase {
                assert false; return null; // Unreachable without extending the (internal) bindings interface
        }
 
+       /**
+        * Information for receiving a payment that we generated an invoice for.
+        */
        public final static class InvoicePayment extends PaymentPurpose {
                /**
                 * The preimage to the payment_hash, if the payment hash (and secret) were fetched via
@@ -73,6 +76,10 @@ public class PaymentPurpose extends CommonBase {
                        this.user_payment_id = obj.user_payment_id;
                }
        }
+       /**
+        * Because this is a spontaneous payment, the payer generated their own preimage rather than us
+        * (the payee) providing a preimage.
+        */
        public final static class SpontaneousPayment extends PaymentPurpose {
                public final byte[] spontaneous_payment;
                private SpontaneousPayment(long ptr, bindings.LDKPaymentPurpose.SpontaneousPayment obj) {
@@ -80,6 +87,11 @@ public class PaymentPurpose extends CommonBase {
                        this.spontaneous_payment = obj.spontaneous_payment;
                }
        }
+       long clone_ptr() {
+               long ret = bindings.PaymentPurpose_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the PaymentPurpose
         */
@@ -95,7 +107,7 @@ public class PaymentPurpose extends CommonBase {
         * Utility method to constructs a new InvoicePayment-variant PaymentPurpose
         */
        public static PaymentPurpose invoice_payment(byte[] payment_preimage, byte[] payment_secret, long user_payment_id) {
-               long ret = bindings.PaymentPurpose_invoice_payment(payment_preimage, payment_secret, user_payment_id);
+               long ret = bindings.PaymentPurpose_invoice_payment(InternalUtils.check_arr_len(payment_preimage, 32), InternalUtils.check_arr_len(payment_secret, 32), user_payment_id);
                if (ret >= 0 && ret <= 4096) { return null; }
                PaymentPurpose ret_hu_conv = PaymentPurpose.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
@@ -106,7 +118,7 @@ public class PaymentPurpose extends CommonBase {
         * Utility method to constructs a new SpontaneousPayment-variant PaymentPurpose
         */
        public static PaymentPurpose spontaneous_payment(byte[] a) {
-               long ret = bindings.PaymentPurpose_spontaneous_payment(a);
+               long ret = bindings.PaymentPurpose_spontaneous_payment(InternalUtils.check_arr_len(a, 32));
                if (ret >= 0 && ret <= 4096) { return null; }
                PaymentPurpose ret_hu_conv = PaymentPurpose.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
index 384d737a8d9801953cfa35e2fb66e23ddf77993a..1328b96e0ce1c49c090f37ff876ae0436bcc32a5 100644 (file)
@@ -37,6 +37,11 @@ public class PaymentSendFailure extends CommonBase {
                assert false; return null; // Unreachable without extending the (internal) bindings interface
        }
 
+       /**
+        * A parameter which was passed to send_payment was invalid, preventing us from attempting to
+        * send the payment at all. No channel state has been changed or messages sent to peers, and
+        * once you've changed the parameter at error, you can freely retry the payment in full.
+        */
        public final static class ParameterError extends PaymentSendFailure {
                public final APIError parameter_error;
                private ParameterError(long ptr, bindings.LDKPaymentSendFailure.ParameterError obj) {
@@ -47,6 +52,15 @@ public class PaymentSendFailure extends CommonBase {
                        this.parameter_error = parameter_error_hu_conv;
                }
        }
+       /**
+        * A parameter in a single path which was passed to send_payment was invalid, preventing us
+        * from attempting to send the payment at all. No channel state has been changed or messages
+        * sent to peers, and once you've changed the parameter at error, you can freely retry the
+        * payment in full.
+        * 
+        * The results here are ordered the same as the paths in the route object which was passed to
+        * send_payment.
+        */
        public final static class PathParameterError extends PaymentSendFailure {
                public final Result_NoneAPIErrorZ[] path_parameter_error;
                private PathParameterError(long ptr, bindings.LDKPaymentSendFailure.PathParameterError obj) {
@@ -61,6 +75,11 @@ public class PaymentSendFailure extends CommonBase {
                        this.path_parameter_error = path_parameter_error_conv_22_arr;
                }
        }
+       /**
+        * All paths which were attempted failed to send, with no channel state change taking place.
+        * You can freely retry the payment in full (though you probably want to do so over different
+        * paths than the ones selected).
+        */
        public final static class AllFailedRetrySafe extends PaymentSendFailure {
                public final APIError[] all_failed_retry_safe;
                private AllFailedRetrySafe(long ptr, bindings.LDKPaymentSendFailure.AllFailedRetrySafe obj) {
@@ -76,6 +95,20 @@ public class PaymentSendFailure extends CommonBase {
                        this.all_failed_retry_safe = all_failed_retry_safe_conv_10_arr;
                }
        }
+       /**
+        * Some paths which were attempted failed to send, though possibly not all. At least some
+        * paths have irrevocably committed to the HTLC and retrying the payment in full would result
+        * in over-/re-payment.
+        * 
+        * The results here are ordered the same as the paths in the route object which was passed to
+        * send_payment, and any Errs which are not APIError::MonitorUpdateFailed can be safely
+        * retried (though there is currently no API with which to do so).
+        * 
+        * Any entries which contain Err(APIError::MonitorUpdateFailed) or Ok(()) MUST NOT be retried
+        * as they will result in over-/re-payment. These HTLCs all either successfully sent (in the
+        * case of Ok(())) or will send once channel_monitor_updated is called on the next-hop channel
+        * with the latest update_id.
+        */
        public final static class PartialFailure extends PaymentSendFailure {
                /**
                 * The errors themselves, in the same order as the route hops.
@@ -110,6 +143,11 @@ public class PaymentSendFailure extends CommonBase {
                        this.payment_id = obj.payment_id;
                }
        }
+       long clone_ptr() {
+               long ret = bindings.PaymentSendFailure_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the PaymentSendFailure
         */
@@ -158,7 +196,7 @@ public class PaymentSendFailure extends CommonBase {
         * Utility method to constructs a new PartialFailure-variant PaymentSendFailure
         */
        public static PaymentSendFailure partial_failure(Result_NoneAPIErrorZ[] results, RouteParameters failed_paths_retry, byte[] payment_id) {
-               long ret = bindings.PaymentSendFailure_partial_failure(results != null ? Arrays.stream(results).mapToLong(results_conv_22 -> results_conv_22 != null ? results_conv_22.ptr : 0).toArray() : null, failed_paths_retry == null ? 0 : failed_paths_retry.ptr & ~1, payment_id);
+               long ret = bindings.PaymentSendFailure_partial_failure(results != null ? Arrays.stream(results).mapToLong(results_conv_22 -> results_conv_22 != null ? results_conv_22.ptr : 0).toArray() : null, failed_paths_retry == null ? 0 : failed_paths_retry.ptr & ~1, InternalUtils.check_arr_len(payment_id, 32));
                if (ret >= 0 && ret <= 4096) { return null; }
                PaymentSendFailure ret_hu_conv = PaymentSendFailure.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
index ab0f5686b1e9781751777eaf34a134576692f550..42073113ea64bed20a5442971313001237bcad01 100644 (file)
@@ -49,6 +49,11 @@ public class PeerHandleError extends CommonBase {
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.PeerHandleError_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the PeerHandleError
         */
index e24a5356726d526e4806d75c1165db130a68c747..7038d5b84c998cd9d33a10d118822baa00d2be53 100644 (file)
@@ -43,7 +43,7 @@ public class PeerManager extends CommonBase {
         * cryptographically secure random bytes.
         */
        public static PeerManager of(ChannelMessageHandler message_handler_chan_handler_arg, RoutingMessageHandler message_handler_route_handler_arg, byte[] our_node_secret, byte[] ephemeral_random_data, Logger logger, CustomMessageHandler custom_message_handler) {
-               long ret = bindings.PeerManager_new(bindings.MessageHandler_new(message_handler_chan_handler_arg == null ? 0 : message_handler_chan_handler_arg.ptr, message_handler_route_handler_arg == null ? 0 : message_handler_route_handler_arg.ptr), our_node_secret, ephemeral_random_data, logger == null ? 0 : logger.ptr, custom_message_handler == null ? 0 : custom_message_handler.ptr);
+               long ret = bindings.PeerManager_new(bindings.MessageHandler_new(message_handler_chan_handler_arg == null ? 0 : message_handler_chan_handler_arg.ptr, message_handler_route_handler_arg == null ? 0 : message_handler_route_handler_arg.ptr), InternalUtils.check_arr_len(our_node_secret, 32), InternalUtils.check_arr_len(ephemeral_random_data, 32), logger == null ? 0 : logger.ptr, custom_message_handler == null ? 0 : custom_message_handler.ptr);
                if (ret >= 0 && ret <= 4096) { return null; }
                PeerManager ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new PeerManager(null, ret); }
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
@@ -79,7 +79,7 @@ public class PeerManager extends CommonBase {
         * [`socket_disconnected()`]: PeerManager::socket_disconnected
         */
        public Result_CVec_u8ZPeerHandleErrorZ new_outbound_connection(byte[] their_node_id, SocketDescriptor descriptor) {
-               long ret = bindings.PeerManager_new_outbound_connection(this.ptr, their_node_id, descriptor == null ? 0 : descriptor.ptr);
+               long ret = bindings.PeerManager_new_outbound_connection(this.ptr, InternalUtils.check_arr_len(their_node_id, 33), descriptor == null ? 0 : descriptor.ptr);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_CVec_u8ZPeerHandleErrorZ ret_hu_conv = Result_CVec_u8ZPeerHandleErrorZ.constr_from_ptr(ret);
                this.ptrs_to.add(descriptor);
@@ -189,7 +189,7 @@ public class PeerManager extends CommonBase {
         * [`disconnect_socket`]: SocketDescriptor::disconnect_socket
         */
        public void disconnect_by_node_id(byte[] node_id, boolean no_connection_possible) {
-               bindings.PeerManager_disconnect_by_node_id(this.ptr, node_id, no_connection_possible);
+               bindings.PeerManager_disconnect_by_node_id(this.ptr, InternalUtils.check_arr_len(node_id, 33), no_connection_possible);
        }
 
        /**
index 335576fca31b1d18820009aaef758c8c06f2678c..416db9bd36eeaa91b61983f85c8018ee922c4c01 100644 (file)
@@ -110,7 +110,7 @@ public class Persist extends CommonBase {
                                MonitorUpdateId update_id_hu_conv = null; if (update_id < 0 || update_id > 4096) { update_id_hu_conv = new MonitorUpdateId(null, update_id); }
                                update_id_hu_conv.ptrs_to.add(this);
                                Result_NoneChannelMonitorUpdateErrZ ret = arg.persist_new_channel(channel_id_hu_conv, data_hu_conv, update_id_hu_conv);
-                               long result = ret != null ? ret.ptr : 0;
+                               long result = ret == null ? 0 : ret.clone_ptr();
                                return result;
                        }
                        @Override public long update_persisted_channel(long channel_id, long update, long data, long update_id) {
@@ -121,7 +121,7 @@ public class Persist extends CommonBase {
                                MonitorUpdateId update_id_hu_conv = null; if (update_id < 0 || update_id > 4096) { update_id_hu_conv = new MonitorUpdateId(null, update_id); }
                                update_id_hu_conv.ptrs_to.add(this);
                                Result_NoneChannelMonitorUpdateErrZ ret = arg.update_persisted_channel(channel_id_hu_conv, update_hu_conv, data_hu_conv, update_id_hu_conv);
-                               long result = ret != null ? ret.ptr : 0;
+                               long result = ret == null ? 0 : ret.clone_ptr();
                                return result;
                        }
                });
index 4ef0ce5f7166be7a42b8a237f478e99c69dbcf23..8212fec0170bb9c9aeb82beae84829877db1ce99 100644 (file)
@@ -62,6 +62,11 @@ public class Ping extends CommonBase {
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.Ping_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the Ping
         */
index 50fafe464ea05031e6a60aedd10d7cb84f5dfaf4..ac695f227eca5a8c88f41f7b6725f92f752c3113 100644 (file)
@@ -47,6 +47,11 @@ public class Pong extends CommonBase {
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.Pong_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the Pong
         */
index 5c5e22723c907492084b96385480a1116dfe3f22..3113fe775e72a2604b3fd0d5f25e8d666f353a9a 100644 (file)
@@ -35,6 +35,11 @@ public class PositiveTimestamp extends CommonBase {
                return ret;
        }
 
+       long clone_ptr() {
+               long ret = bindings.PositiveTimestamp_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the PositiveTimestamp
         */
index a74bcc892381ca926249cd915617d546fae0dd36..c4f11b6c8983fd035f0a4b9fa497d9de3630db4b 100644 (file)
@@ -22,6 +22,11 @@ public class PrivateRoute extends CommonBase {
                if (ptr != 0) { bindings.PrivateRoute_free(ptr); }
        }
 
+       long clone_ptr() {
+               long ret = bindings.PrivateRoute_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the PrivateRoute
         */
index d249d84b1760dc11fa219a783b1eb8f67b210e6f..b378c84ad15e83cecf68cb406fe198cf289806e4 100644 (file)
@@ -34,7 +34,7 @@ public class QueryChannelRange extends CommonBase {
         * The genesis hash of the blockchain being queried
         */
        public void set_chain_hash(byte[] val) {
-               bindings.QueryChannelRange_set_chain_hash(this.ptr, val);
+               bindings.QueryChannelRange_set_chain_hash(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        /**
@@ -71,13 +71,18 @@ public class QueryChannelRange extends CommonBase {
         * Constructs a new QueryChannelRange given each field
         */
        public static QueryChannelRange of(byte[] chain_hash_arg, int first_blocknum_arg, int number_of_blocks_arg) {
-               long ret = bindings.QueryChannelRange_new(chain_hash_arg, first_blocknum_arg, number_of_blocks_arg);
+               long ret = bindings.QueryChannelRange_new(InternalUtils.check_arr_len(chain_hash_arg, 32), first_blocknum_arg, number_of_blocks_arg);
                if (ret >= 0 && ret <= 4096) { return null; }
                QueryChannelRange ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new QueryChannelRange(null, ret); }
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.QueryChannelRange_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the QueryChannelRange
         */
index 2f79a0d8a2f9e1ac4e821b1c7b0f86cb2ec40875..194cbc5f1d355038ae47fa1126c4891b429d11cf 100644 (file)
@@ -38,7 +38,7 @@ public class QueryShortChannelIds extends CommonBase {
         * The genesis hash of the blockchain being queried
         */
        public void set_chain_hash(byte[] val) {
-               bindings.QueryShortChannelIds_set_chain_hash(this.ptr, val);
+               bindings.QueryShortChannelIds_set_chain_hash(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        /**
@@ -52,13 +52,18 @@ public class QueryShortChannelIds extends CommonBase {
         * Constructs a new QueryShortChannelIds given each field
         */
        public static QueryShortChannelIds of(byte[] chain_hash_arg, long[] short_channel_ids_arg) {
-               long ret = bindings.QueryShortChannelIds_new(chain_hash_arg, short_channel_ids_arg);
+               long ret = bindings.QueryShortChannelIds_new(InternalUtils.check_arr_len(chain_hash_arg, 32), short_channel_ids_arg);
                if (ret >= 0 && ret <= 4096) { return null; }
                QueryShortChannelIds ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new QueryShortChannelIds(null, ret); }
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.QueryShortChannelIds_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the QueryShortChannelIds
         */
index 4cb9a656d311642b5396d2f572ada59308704b45..340fc191b8b5640b1af7df0fb87bae026e704d87 100644 (file)
@@ -48,6 +48,11 @@ public class RawDataPart extends CommonBase {
                return ret;
        }
 
+       long clone_ptr() {
+               long ret = bindings.RawDataPart_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the RawDataPart
         */
index 5c4a0327be23277ba8f1e715d6e0f2dbdfdc926c..00082036314a0709d383c0d508eefc16a4617f11 100644 (file)
@@ -52,6 +52,11 @@ public class RawInvoice extends CommonBase {
                return ret;
        }
 
+       long clone_ptr() {
+               long ret = bindings.RawInvoice_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the RawInvoice
         */
index d95374dae145d04d1284bab846618467ad70cd3c..9c3bf743c7353bfb8da466b503d40322a7c5cafd 100644 (file)
@@ -25,7 +25,7 @@ public class ReadOnlyNetworkGraph extends CommonBase {
         * or if node announcement for the node was never received.
         */
        public Option_CVec_NetAddressZZ get_addresses(byte[] pubkey) {
-               long ret = bindings.ReadOnlyNetworkGraph_get_addresses(this.ptr, pubkey);
+               long ret = bindings.ReadOnlyNetworkGraph_get_addresses(this.ptr, InternalUtils.check_arr_len(pubkey, 33));
                if (ret >= 0 && ret <= 4096) { return null; }
                Option_CVec_NetAddressZZ ret_hu_conv = Option_CVec_NetAddressZZ.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(this);
diff --git a/src/main/java/org/ldk/structs/Record.java b/src/main/java/org/ldk/structs/Record.java
new file mode 100644 (file)
index 0000000..deefa46
--- /dev/null
@@ -0,0 +1,114 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import javax.annotation.Nullable;
+
+
+/**
+ * A Record, unit of logging output with Metadata to enable filtering
+ * Module_path, file, line to inform on log's source
+ */
+@SuppressWarnings("unchecked") // We correctly assign various generic arrays
+public class Record extends CommonBase {
+       Record(Object _dummy, long ptr) { super(ptr); }
+       @Override @SuppressWarnings("deprecation")
+       protected void finalize() throws Throwable {
+               super.finalize();
+               if (ptr != 0) { bindings.Record_free(ptr); }
+       }
+
+       /**
+        * The verbosity level of the message.
+        */
+       public Level get_level() {
+               Level ret = bindings.Record_get_level(this.ptr);
+               return ret;
+       }
+
+       /**
+        * The verbosity level of the message.
+        */
+       public void set_level(org.ldk.enums.Level val) {
+               bindings.Record_set_level(this.ptr, val);
+       }
+
+       /**
+        * The message body.
+        */
+       public String get_args() {
+               String ret = bindings.Record_get_args(this.ptr);
+               return ret;
+       }
+
+       /**
+        * The message body.
+        */
+       public void set_args(java.lang.String val) {
+               bindings.Record_set_args(this.ptr, val);
+       }
+
+       /**
+        * The module path of the message.
+        */
+       public String get_module_path() {
+               String ret = bindings.Record_get_module_path(this.ptr);
+               return ret;
+       }
+
+       /**
+        * The module path of the message.
+        */
+       public void set_module_path(java.lang.String val) {
+               bindings.Record_set_module_path(this.ptr, val);
+       }
+
+       /**
+        * The source file containing the message.
+        */
+       public String get_file() {
+               String ret = bindings.Record_get_file(this.ptr);
+               return ret;
+       }
+
+       /**
+        * The source file containing the message.
+        */
+       public void set_file(java.lang.String val) {
+               bindings.Record_set_file(this.ptr, val);
+       }
+
+       /**
+        * The line containing the message.
+        */
+       public int get_line() {
+               int ret = bindings.Record_get_line(this.ptr);
+               return ret;
+       }
+
+       /**
+        * The line containing the message.
+        */
+       public void set_line(int val) {
+               bindings.Record_set_line(this.ptr, val);
+       }
+
+       long clone_ptr() {
+               long ret = bindings.Record_clone_ptr(this.ptr);
+               return ret;
+       }
+
+       /**
+        * Creates a copy of the Record
+        */
+       public Record clone() {
+               long ret = bindings.Record_clone(this.ptr);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Record ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new Record(null, ret); }
+               ret_hu_conv.ptrs_to.add(this);
+               return ret_hu_conv;
+       }
+
+}
index 4f6db16001a3436e2e9b30c1d41c76b7ba679938..a539c8908905289aefb9bfd87661332f30f4f5a8 100644 (file)
@@ -37,7 +37,7 @@ public class ReplyChannelRange extends CommonBase {
         * The genesis hash of the blockchain being queried
         */
        public void set_chain_hash(byte[] val) {
-               bindings.ReplyChannelRange_set_chain_hash(this.ptr, val);
+               bindings.ReplyChannelRange_set_chain_hash(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        /**
@@ -96,13 +96,18 @@ public class ReplyChannelRange extends CommonBase {
         * Constructs a new ReplyChannelRange given each field
         */
        public static ReplyChannelRange of(byte[] chain_hash_arg, int first_blocknum_arg, int number_of_blocks_arg, boolean sync_complete_arg, long[] short_channel_ids_arg) {
-               long ret = bindings.ReplyChannelRange_new(chain_hash_arg, first_blocknum_arg, number_of_blocks_arg, sync_complete_arg, short_channel_ids_arg);
+               long ret = bindings.ReplyChannelRange_new(InternalUtils.check_arr_len(chain_hash_arg, 32), first_blocknum_arg, number_of_blocks_arg, sync_complete_arg, short_channel_ids_arg);
                if (ret >= 0 && ret <= 4096) { return null; }
                ReplyChannelRange ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new ReplyChannelRange(null, ret); }
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.ReplyChannelRange_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the ReplyChannelRange
         */
index 488e7dfe7e566137f12d809379c6b378bbfee468..8d0e5bc78d71a26fe83a5e668f90cab92d828d97 100644 (file)
@@ -34,7 +34,7 @@ public class ReplyShortChannelIdsEnd extends CommonBase {
         * The genesis hash of the blockchain that was queried
         */
        public void set_chain_hash(byte[] val) {
-               bindings.ReplyShortChannelIdsEnd_set_chain_hash(this.ptr, val);
+               bindings.ReplyShortChannelIdsEnd_set_chain_hash(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        /**
@@ -58,13 +58,18 @@ public class ReplyShortChannelIdsEnd extends CommonBase {
         * Constructs a new ReplyShortChannelIdsEnd given each field
         */
        public static ReplyShortChannelIdsEnd of(byte[] chain_hash_arg, boolean full_information_arg) {
-               long ret = bindings.ReplyShortChannelIdsEnd_new(chain_hash_arg, full_information_arg);
+               long ret = bindings.ReplyShortChannelIdsEnd_new(InternalUtils.check_arr_len(chain_hash_arg, 32), full_information_arg);
                if (ret >= 0 && ret <= 4096) { return null; }
                ReplyShortChannelIdsEnd ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new ReplyShortChannelIdsEnd(null, ret); }
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.ReplyShortChannelIdsEnd_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the ReplyShortChannelIdsEnd
         */
index 662a6bd79caa68ce1be72588f7460cc72a808bf4..747f4783ad65040d8cecc07fa1299850d0f54c91 100644 (file)
@@ -13,7 +13,7 @@ public class Result_AcceptChannelDecodeErrorZ extends CommonBase {
        }
 
        static Result_AcceptChannelDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_AcceptChannelDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_AcceptChannelDecodeErrorZ_is_ok(ptr)) {
                        return new Result_AcceptChannelDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_AcceptChannelDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_AcceptChannelDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_AcceptChannelDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_AcceptChannelDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_AcceptChannelDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index d711f7fa0bfe31365bbd706d1bc1f72c307fe05f..c49e049ce969e065a6f2727fd6f3622adb10ca96 100644 (file)
@@ -13,7 +13,7 @@ public class Result_AnnouncementSignaturesDecodeErrorZ extends CommonBase {
        }
 
        static Result_AnnouncementSignaturesDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_AnnouncementSignaturesDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_AnnouncementSignaturesDecodeErrorZ_is_ok(ptr)) {
                        return new Result_AnnouncementSignaturesDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_AnnouncementSignaturesDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_AnnouncementSignaturesDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_AnnouncementSignaturesDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_AnnouncementSignaturesDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_AnnouncementSignaturesDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 6ae3ac955e0661102ab7832c58ebf56b0c3ca170..a7f8191528eab4d7b01568e0421458599391f4e6 100644 (file)
@@ -13,7 +13,7 @@ public class Result_BuiltCommitmentTransactionDecodeErrorZ extends CommonBase {
        }
 
        static Result_BuiltCommitmentTransactionDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_BuiltCommitmentTransactionDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_BuiltCommitmentTransactionDecodeErrorZ_is_ok(ptr)) {
                        return new Result_BuiltCommitmentTransactionDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_BuiltCommitmentTransactionDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_BuiltCommitmentTransactionDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_BuiltCommitmentTransactionDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_BuiltCommitmentTransactionDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_BuiltCommitmentTransactionDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 2a46ea22125d38db43cd4c3a3875d49383a60135..c3437d057aaa28e61e8819a18cb5416d73a5cab7 100644 (file)
@@ -13,7 +13,7 @@ public class Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ extends CommonB
        }
 
        static Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_is_ok(ptr)) {
                        return new Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_Err(null, ptr);
@@ -61,4 +61,12 @@ public class Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ extends CommonB
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
 }
index 19b37c50a1a6dd2a1a66bcacc67e3c5ccfaa0c76..f8542b69026fd2f23537d1b0f2044fceb93b82a6 100644 (file)
@@ -13,7 +13,7 @@ public class Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ extends CommonB
        }
 
        static Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_is_ok(ptr)) {
                        return new Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ extends CommonB
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index eedd7532e76da6f3e3e600cd160545dd4d2588cf..cb7baf313919e9669d88d721b0820dff61b1110a 100644 (file)
@@ -13,7 +13,7 @@ public class Result_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ extends Com
        }
 
        static Result_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_result_ok(ptr)) {
+               if (bindings.CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_is_ok(ptr)) {
                        return new Result_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_OK(null, ptr);
                } else {
                        return new Result_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ extends Com
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 1cd75cd94dc47e0d963973a4d6ef18bd011388c4..771b80f53b84056f6aa544becb009b3dc5d26580 100644 (file)
@@ -13,7 +13,7 @@ public class Result_C2Tuple_SignatureCVec_SignatureZZNoneZ extends CommonBase {
        }
 
        static Result_C2Tuple_SignatureCVec_SignatureZZNoneZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_result_ok(ptr)) {
+               if (bindings.CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_is_ok(ptr)) {
                        return new Result_C2Tuple_SignatureCVec_SignatureZZNoneZ_OK(null, ptr);
                } else {
                        return new Result_C2Tuple_SignatureCVec_SignatureZZNoneZ_Err(null, ptr);
@@ -56,6 +56,19 @@ public class Result_C2Tuple_SignatureCVec_SignatureZZNoneZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
diff --git a/src/main/java/org/ldk/structs/Result_COption_ClosureReasonZDecodeErrorZ.java b/src/main/java/org/ldk/structs/Result_COption_ClosureReasonZDecodeErrorZ.java
new file mode 100644 (file)
index 0000000..c146dbc
--- /dev/null
@@ -0,0 +1,88 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import javax.annotation.Nullable;
+
+public class Result_COption_ClosureReasonZDecodeErrorZ extends CommonBase {
+       private Result_COption_ClosureReasonZDecodeErrorZ(Object _dummy, long ptr) { super(ptr); }
+       protected void finalize() throws Throwable {
+               if (ptr != 0) { bindings.CResult_COption_ClosureReasonZDecodeErrorZ_free(ptr); } super.finalize();
+       }
+
+       static Result_COption_ClosureReasonZDecodeErrorZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_COption_ClosureReasonZDecodeErrorZ_is_ok(ptr)) {
+                       return new Result_COption_ClosureReasonZDecodeErrorZ_OK(null, ptr);
+               } else {
+                       return new Result_COption_ClosureReasonZDecodeErrorZ_Err(null, ptr);
+               }
+       }
+       public static final class Result_COption_ClosureReasonZDecodeErrorZ_OK extends Result_COption_ClosureReasonZDecodeErrorZ {
+               public final Option_ClosureReasonZ res;
+               private Result_COption_ClosureReasonZDecodeErrorZ_OK(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       long res = bindings.LDKCResult_COption_ClosureReasonZDecodeErrorZ_get_ok(ptr);
+                       Option_ClosureReasonZ res_hu_conv = Option_ClosureReasonZ.constr_from_ptr(res);
+                       res_hu_conv.ptrs_to.add(this);
+                       this.res = res_hu_conv;
+               }
+       }
+
+       public static final class Result_COption_ClosureReasonZDecodeErrorZ_Err extends Result_COption_ClosureReasonZDecodeErrorZ {
+               public final DecodeError err;
+               private Result_COption_ClosureReasonZDecodeErrorZ_Err(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       long err = bindings.LDKCResult_COption_ClosureReasonZDecodeErrorZ_get_err(ptr);
+                       DecodeError err_hu_conv = null; if (err < 0 || err > 4096) { err_hu_conv = new DecodeError(null, err); }
+                       err_hu_conv.ptrs_to.add(this);
+                       this.err = err_hu_conv;
+               }
+       }
+
+       /**
+        * Creates a new CResult_COption_ClosureReasonZDecodeErrorZ in the success state.
+        */
+       public static Result_COption_ClosureReasonZDecodeErrorZ ok(Option_ClosureReasonZ o) {
+               long ret = bindings.CResult_COption_ClosureReasonZDecodeErrorZ_ok(o.ptr);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_COption_ClosureReasonZDecodeErrorZ ret_hu_conv = Result_COption_ClosureReasonZDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_COption_ClosureReasonZDecodeErrorZ in the error state.
+        */
+       public static Result_COption_ClosureReasonZDecodeErrorZ err(DecodeError e) {
+               long ret = bindings.CResult_COption_ClosureReasonZDecodeErrorZ_err(e == null ? 0 : e.ptr & ~1);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_COption_ClosureReasonZDecodeErrorZ ret_hu_conv = Result_COption_ClosureReasonZDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_COption_ClosureReasonZDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_COption_ClosureReasonZDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_COption_ClosureReasonZDecodeErrorZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_COption_ClosureReasonZDecodeErrorZ clone() {
+               long ret = bindings.CResult_COption_ClosureReasonZDecodeErrorZ_clone(this.ptr);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_COption_ClosureReasonZDecodeErrorZ ret_hu_conv = Result_COption_ClosureReasonZDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/Result_COption_EventZDecodeErrorZ.java b/src/main/java/org/ldk/structs/Result_COption_EventZDecodeErrorZ.java
new file mode 100644 (file)
index 0000000..daf8f8e
--- /dev/null
@@ -0,0 +1,88 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import javax.annotation.Nullable;
+
+public class Result_COption_EventZDecodeErrorZ extends CommonBase {
+       private Result_COption_EventZDecodeErrorZ(Object _dummy, long ptr) { super(ptr); }
+       protected void finalize() throws Throwable {
+               if (ptr != 0) { bindings.CResult_COption_EventZDecodeErrorZ_free(ptr); } super.finalize();
+       }
+
+       static Result_COption_EventZDecodeErrorZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_COption_EventZDecodeErrorZ_is_ok(ptr)) {
+                       return new Result_COption_EventZDecodeErrorZ_OK(null, ptr);
+               } else {
+                       return new Result_COption_EventZDecodeErrorZ_Err(null, ptr);
+               }
+       }
+       public static final class Result_COption_EventZDecodeErrorZ_OK extends Result_COption_EventZDecodeErrorZ {
+               public final Option_EventZ res;
+               private Result_COption_EventZDecodeErrorZ_OK(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       long res = bindings.LDKCResult_COption_EventZDecodeErrorZ_get_ok(ptr);
+                       Option_EventZ res_hu_conv = Option_EventZ.constr_from_ptr(res);
+                       res_hu_conv.ptrs_to.add(this);
+                       this.res = res_hu_conv;
+               }
+       }
+
+       public static final class Result_COption_EventZDecodeErrorZ_Err extends Result_COption_EventZDecodeErrorZ {
+               public final DecodeError err;
+               private Result_COption_EventZDecodeErrorZ_Err(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       long err = bindings.LDKCResult_COption_EventZDecodeErrorZ_get_err(ptr);
+                       DecodeError err_hu_conv = null; if (err < 0 || err > 4096) { err_hu_conv = new DecodeError(null, err); }
+                       err_hu_conv.ptrs_to.add(this);
+                       this.err = err_hu_conv;
+               }
+       }
+
+       /**
+        * Creates a new CResult_COption_EventZDecodeErrorZ in the success state.
+        */
+       public static Result_COption_EventZDecodeErrorZ ok(Option_EventZ o) {
+               long ret = bindings.CResult_COption_EventZDecodeErrorZ_ok(o.ptr);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_COption_EventZDecodeErrorZ ret_hu_conv = Result_COption_EventZDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_COption_EventZDecodeErrorZ in the error state.
+        */
+       public static Result_COption_EventZDecodeErrorZ err(DecodeError e) {
+               long ret = bindings.CResult_COption_EventZDecodeErrorZ_err(e == null ? 0 : e.ptr & ~1);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_COption_EventZDecodeErrorZ ret_hu_conv = Result_COption_EventZDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_COption_EventZDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_COption_EventZDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_COption_EventZDecodeErrorZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_COption_EventZDecodeErrorZ clone() {
+               long ret = bindings.CResult_COption_EventZDecodeErrorZ_clone(this.ptr);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_COption_EventZDecodeErrorZ ret_hu_conv = Result_COption_EventZDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/Result_COption_MonitorEventZDecodeErrorZ.java b/src/main/java/org/ldk/structs/Result_COption_MonitorEventZDecodeErrorZ.java
new file mode 100644 (file)
index 0000000..bc311a1
--- /dev/null
@@ -0,0 +1,88 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import javax.annotation.Nullable;
+
+public class Result_COption_MonitorEventZDecodeErrorZ extends CommonBase {
+       private Result_COption_MonitorEventZDecodeErrorZ(Object _dummy, long ptr) { super(ptr); }
+       protected void finalize() throws Throwable {
+               if (ptr != 0) { bindings.CResult_COption_MonitorEventZDecodeErrorZ_free(ptr); } super.finalize();
+       }
+
+       static Result_COption_MonitorEventZDecodeErrorZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_COption_MonitorEventZDecodeErrorZ_is_ok(ptr)) {
+                       return new Result_COption_MonitorEventZDecodeErrorZ_OK(null, ptr);
+               } else {
+                       return new Result_COption_MonitorEventZDecodeErrorZ_Err(null, ptr);
+               }
+       }
+       public static final class Result_COption_MonitorEventZDecodeErrorZ_OK extends Result_COption_MonitorEventZDecodeErrorZ {
+               public final Option_MonitorEventZ res;
+               private Result_COption_MonitorEventZDecodeErrorZ_OK(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       long res = bindings.LDKCResult_COption_MonitorEventZDecodeErrorZ_get_ok(ptr);
+                       Option_MonitorEventZ res_hu_conv = Option_MonitorEventZ.constr_from_ptr(res);
+                       res_hu_conv.ptrs_to.add(this);
+                       this.res = res_hu_conv;
+               }
+       }
+
+       public static final class Result_COption_MonitorEventZDecodeErrorZ_Err extends Result_COption_MonitorEventZDecodeErrorZ {
+               public final DecodeError err;
+               private Result_COption_MonitorEventZDecodeErrorZ_Err(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       long err = bindings.LDKCResult_COption_MonitorEventZDecodeErrorZ_get_err(ptr);
+                       DecodeError err_hu_conv = null; if (err < 0 || err > 4096) { err_hu_conv = new DecodeError(null, err); }
+                       err_hu_conv.ptrs_to.add(this);
+                       this.err = err_hu_conv;
+               }
+       }
+
+       /**
+        * Creates a new CResult_COption_MonitorEventZDecodeErrorZ in the success state.
+        */
+       public static Result_COption_MonitorEventZDecodeErrorZ ok(Option_MonitorEventZ o) {
+               long ret = bindings.CResult_COption_MonitorEventZDecodeErrorZ_ok(o.ptr);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_COption_MonitorEventZDecodeErrorZ ret_hu_conv = Result_COption_MonitorEventZDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_COption_MonitorEventZDecodeErrorZ in the error state.
+        */
+       public static Result_COption_MonitorEventZDecodeErrorZ err(DecodeError e) {
+               long ret = bindings.CResult_COption_MonitorEventZDecodeErrorZ_err(e == null ? 0 : e.ptr & ~1);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_COption_MonitorEventZDecodeErrorZ ret_hu_conv = Result_COption_MonitorEventZDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_COption_MonitorEventZDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_COption_MonitorEventZDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_COption_MonitorEventZDecodeErrorZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_COption_MonitorEventZDecodeErrorZ clone() {
+               long ret = bindings.CResult_COption_MonitorEventZDecodeErrorZ_clone(this.ptr);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_COption_MonitorEventZDecodeErrorZ ret_hu_conv = Result_COption_MonitorEventZDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/Result_COption_NetworkUpdateZDecodeErrorZ.java b/src/main/java/org/ldk/structs/Result_COption_NetworkUpdateZDecodeErrorZ.java
new file mode 100644 (file)
index 0000000..e639a61
--- /dev/null
@@ -0,0 +1,88 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import javax.annotation.Nullable;
+
+public class Result_COption_NetworkUpdateZDecodeErrorZ extends CommonBase {
+       private Result_COption_NetworkUpdateZDecodeErrorZ(Object _dummy, long ptr) { super(ptr); }
+       protected void finalize() throws Throwable {
+               if (ptr != 0) { bindings.CResult_COption_NetworkUpdateZDecodeErrorZ_free(ptr); } super.finalize();
+       }
+
+       static Result_COption_NetworkUpdateZDecodeErrorZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_COption_NetworkUpdateZDecodeErrorZ_is_ok(ptr)) {
+                       return new Result_COption_NetworkUpdateZDecodeErrorZ_OK(null, ptr);
+               } else {
+                       return new Result_COption_NetworkUpdateZDecodeErrorZ_Err(null, ptr);
+               }
+       }
+       public static final class Result_COption_NetworkUpdateZDecodeErrorZ_OK extends Result_COption_NetworkUpdateZDecodeErrorZ {
+               public final Option_NetworkUpdateZ res;
+               private Result_COption_NetworkUpdateZDecodeErrorZ_OK(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       long res = bindings.LDKCResult_COption_NetworkUpdateZDecodeErrorZ_get_ok(ptr);
+                       Option_NetworkUpdateZ res_hu_conv = Option_NetworkUpdateZ.constr_from_ptr(res);
+                       res_hu_conv.ptrs_to.add(this);
+                       this.res = res_hu_conv;
+               }
+       }
+
+       public static final class Result_COption_NetworkUpdateZDecodeErrorZ_Err extends Result_COption_NetworkUpdateZDecodeErrorZ {
+               public final DecodeError err;
+               private Result_COption_NetworkUpdateZDecodeErrorZ_Err(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       long err = bindings.LDKCResult_COption_NetworkUpdateZDecodeErrorZ_get_err(ptr);
+                       DecodeError err_hu_conv = null; if (err < 0 || err > 4096) { err_hu_conv = new DecodeError(null, err); }
+                       err_hu_conv.ptrs_to.add(this);
+                       this.err = err_hu_conv;
+               }
+       }
+
+       /**
+        * Creates a new CResult_COption_NetworkUpdateZDecodeErrorZ in the success state.
+        */
+       public static Result_COption_NetworkUpdateZDecodeErrorZ ok(Option_NetworkUpdateZ o) {
+               long ret = bindings.CResult_COption_NetworkUpdateZDecodeErrorZ_ok(o.ptr);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_COption_NetworkUpdateZDecodeErrorZ ret_hu_conv = Result_COption_NetworkUpdateZDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_COption_NetworkUpdateZDecodeErrorZ in the error state.
+        */
+       public static Result_COption_NetworkUpdateZDecodeErrorZ err(DecodeError e) {
+               long ret = bindings.CResult_COption_NetworkUpdateZDecodeErrorZ_err(e == null ? 0 : e.ptr & ~1);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_COption_NetworkUpdateZDecodeErrorZ ret_hu_conv = Result_COption_NetworkUpdateZDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_COption_NetworkUpdateZDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_COption_NetworkUpdateZDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
+       /**
+        * Creates a new CResult_COption_NetworkUpdateZDecodeErrorZ which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public Result_COption_NetworkUpdateZDecodeErrorZ clone() {
+               long ret = bindings.CResult_COption_NetworkUpdateZDecodeErrorZ_clone(this.ptr);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_COption_NetworkUpdateZDecodeErrorZ ret_hu_conv = Result_COption_NetworkUpdateZDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
index fed124a664b74d674715a558193f6a405c239f46..80f39b535d31044c28ce063374caf91d45808810 100644 (file)
@@ -13,7 +13,7 @@ public class Result_COption_TypeZDecodeErrorZ extends CommonBase {
        }
 
        static Result_COption_TypeZDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_COption_TypeZDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_COption_TypeZDecodeErrorZ_is_ok(ptr)) {
                        return new Result_COption_TypeZDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_COption_TypeZDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_COption_TypeZDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_COption_TypeZDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_COption_TypeZDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_COption_TypeZDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index a4c38586ea3a50f2da087ccba60c1166082df91a..24f20b435e7648f5e16051a068eacb4db7adf2d6 100644 (file)
@@ -13,7 +13,7 @@ public class Result_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ extends CommonB
        }
 
        static Result_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_is_ok(ptr)) {
                        return new Result_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_OK(null, ptr);
                } else {
                        return new Result_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_Err(null, ptr);
@@ -63,6 +63,19 @@ public class Result_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ extends CommonB
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index be1685e3fe62832d1841d1dd504894424e15d6df..cc58545195a0765a7df6bc5383898be5d75ebc20 100644 (file)
@@ -13,7 +13,7 @@ public class Result_CVec_CVec_u8ZZNoneZ extends CommonBase {
        }
 
        static Result_CVec_CVec_u8ZZNoneZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_CVec_CVec_u8ZZNoneZ_result_ok(ptr)) {
+               if (bindings.CResult_CVec_CVec_u8ZZNoneZ_is_ok(ptr)) {
                        return new Result_CVec_CVec_u8ZZNoneZ_OK(null, ptr);
                } else {
                        return new Result_CVec_CVec_u8ZZNoneZ_Err(null, ptr);
@@ -53,6 +53,19 @@ public class Result_CVec_CVec_u8ZZNoneZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_CVec_CVec_u8ZZNoneZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_CVec_CVec_u8ZZNoneZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_CVec_CVec_u8ZZNoneZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 335a2d7376aacb39f8041d7f830b41f7273fb62d..c5d7e8563332b2fab4c0d6531d70c16317621741 100644 (file)
@@ -13,7 +13,7 @@ public class Result_CVec_SignatureZNoneZ extends CommonBase {
        }
 
        static Result_CVec_SignatureZNoneZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_CVec_SignatureZNoneZ_result_ok(ptr)) {
+               if (bindings.CResult_CVec_SignatureZNoneZ_is_ok(ptr)) {
                        return new Result_CVec_SignatureZNoneZ_OK(null, ptr);
                } else {
                        return new Result_CVec_SignatureZNoneZ_Err(null, ptr);
@@ -37,7 +37,7 @@ public class Result_CVec_SignatureZNoneZ extends CommonBase {
         * Creates a new CResult_CVec_SignatureZNoneZ in the success state.
         */
        public static Result_CVec_SignatureZNoneZ ok(byte[][] o) {
-               long ret = bindings.CResult_CVec_SignatureZNoneZ_ok(o);
+               long ret = bindings.CResult_CVec_SignatureZNoneZ_ok(o != null ? Arrays.stream(o).map(o_conv_8 -> InternalUtils.check_arr_len(o_conv_8, 64)).toArray(byte[][]::new) : null);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_CVec_SignatureZNoneZ ret_hu_conv = Result_CVec_SignatureZNoneZ.constr_from_ptr(ret);
                return ret_hu_conv;
@@ -53,6 +53,19 @@ public class Result_CVec_SignatureZNoneZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_CVec_SignatureZNoneZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_CVec_SignatureZNoneZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_CVec_SignatureZNoneZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index b85496661c4cc20149058952067ad089a1b68bb9..b6368d7445d8388d89e350a9c191bbb7bb394180 100644 (file)
@@ -13,7 +13,7 @@ public class Result_CVec_u8ZPeerHandleErrorZ extends CommonBase {
        }
 
        static Result_CVec_u8ZPeerHandleErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_CVec_u8ZPeerHandleErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_CVec_u8ZPeerHandleErrorZ_is_ok(ptr)) {
                        return new Result_CVec_u8ZPeerHandleErrorZ_OK(null, ptr);
                } else {
                        return new Result_CVec_u8ZPeerHandleErrorZ_Err(null, ptr);
@@ -58,6 +58,19 @@ public class Result_CVec_u8ZPeerHandleErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_CVec_u8ZPeerHandleErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_CVec_u8ZPeerHandleErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_CVec_u8ZPeerHandleErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 9cc0cb296b3c7c4989f3de56c208d6837f35ef55..00d8524ceb2a71202568ed7937f97559a42e4d03 100644 (file)
@@ -13,7 +13,7 @@ public class Result_ChannelAnnouncementDecodeErrorZ extends CommonBase {
        }
 
        static Result_ChannelAnnouncementDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_ChannelAnnouncementDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_ChannelAnnouncementDecodeErrorZ_is_ok(ptr)) {
                        return new Result_ChannelAnnouncementDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_ChannelAnnouncementDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_ChannelAnnouncementDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_ChannelAnnouncementDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_ChannelAnnouncementDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_ChannelAnnouncementDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 005d53de433253ebb8c29e79808c031e15b14df6..d7dd48967286dc057c74cf351da2e144adf9ddf3 100644 (file)
@@ -13,7 +13,7 @@ public class Result_ChannelConfigDecodeErrorZ extends CommonBase {
        }
 
        static Result_ChannelConfigDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_ChannelConfigDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_ChannelConfigDecodeErrorZ_is_ok(ptr)) {
                        return new Result_ChannelConfigDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_ChannelConfigDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_ChannelConfigDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_ChannelConfigDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_ChannelConfigDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_ChannelConfigDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 1253a8d5a0a0070b189be786e203150f2b67d2ad..01f1801e96f3c007e4a467f2f46272daac268742 100644 (file)
@@ -13,7 +13,7 @@ public class Result_ChannelFeaturesDecodeErrorZ extends CommonBase {
        }
 
        static Result_ChannelFeaturesDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_ChannelFeaturesDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_ChannelFeaturesDecodeErrorZ_is_ok(ptr)) {
                        return new Result_ChannelFeaturesDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_ChannelFeaturesDecodeErrorZ_Err(null, ptr);
@@ -61,4 +61,12 @@ public class Result_ChannelFeaturesDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_ChannelFeaturesDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
 }
index f0d5078cb710e0c80e01dcb69b0c7708cb22f50d..6ed6b0996cfbfd1d3a0c852eb4091ffeec831a83 100644 (file)
@@ -13,7 +13,7 @@ public class Result_ChannelInfoDecodeErrorZ extends CommonBase {
        }
 
        static Result_ChannelInfoDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_ChannelInfoDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_ChannelInfoDecodeErrorZ_is_ok(ptr)) {
                        return new Result_ChannelInfoDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_ChannelInfoDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_ChannelInfoDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_ChannelInfoDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_ChannelInfoDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_ChannelInfoDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 2430db5715946a94d553825e2729aab037a87f34..58d180a026ebc179a959d8b81e7e55dc4b3bd475 100644 (file)
@@ -13,7 +13,7 @@ public class Result_ChannelMonitorUpdateDecodeErrorZ extends CommonBase {
        }
 
        static Result_ChannelMonitorUpdateDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_ChannelMonitorUpdateDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_ChannelMonitorUpdateDecodeErrorZ_is_ok(ptr)) {
                        return new Result_ChannelMonitorUpdateDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_ChannelMonitorUpdateDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_ChannelMonitorUpdateDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_ChannelMonitorUpdateDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_ChannelMonitorUpdateDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_ChannelMonitorUpdateDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 8a9d5b80f435d987880e59d3929b48cb88574c10..29cb5a8def869bb2cd7de95d831202206d11fd0b 100644 (file)
@@ -13,7 +13,7 @@ public class Result_ChannelPublicKeysDecodeErrorZ extends CommonBase {
        }
 
        static Result_ChannelPublicKeysDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_ChannelPublicKeysDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_ChannelPublicKeysDecodeErrorZ_is_ok(ptr)) {
                        return new Result_ChannelPublicKeysDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_ChannelPublicKeysDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_ChannelPublicKeysDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_ChannelPublicKeysDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_ChannelPublicKeysDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_ChannelPublicKeysDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index ea90e563cde9ab6e56d43b17c9aad70cc7f17daa..6363cdd0fd9512a17c832399bf1156f6f45828ad 100644 (file)
@@ -13,7 +13,7 @@ public class Result_ChannelReestablishDecodeErrorZ extends CommonBase {
        }
 
        static Result_ChannelReestablishDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_ChannelReestablishDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_ChannelReestablishDecodeErrorZ_is_ok(ptr)) {
                        return new Result_ChannelReestablishDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_ChannelReestablishDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_ChannelReestablishDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_ChannelReestablishDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_ChannelReestablishDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_ChannelReestablishDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 6911dfe8cbe00134da33603b229ed380a6736bce..d88d316cb7f48c63065df280492bdd8b9d8f93bd 100644 (file)
@@ -13,7 +13,7 @@ public class Result_ChannelTransactionParametersDecodeErrorZ extends CommonBase
        }
 
        static Result_ChannelTransactionParametersDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_ChannelTransactionParametersDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_ChannelTransactionParametersDecodeErrorZ_is_ok(ptr)) {
                        return new Result_ChannelTransactionParametersDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_ChannelTransactionParametersDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_ChannelTransactionParametersDecodeErrorZ extends CommonBase
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_ChannelTransactionParametersDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_ChannelTransactionParametersDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_ChannelTransactionParametersDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index bf791411dd2af826e8f5ec8eeb9ae5899abe6bc1..e493a0f90be2570b4295931ccddfae2b6ba455b4 100644 (file)
@@ -13,7 +13,7 @@ public class Result_ChannelUpdateDecodeErrorZ extends CommonBase {
        }
 
        static Result_ChannelUpdateDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_ChannelUpdateDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_ChannelUpdateDecodeErrorZ_is_ok(ptr)) {
                        return new Result_ChannelUpdateDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_ChannelUpdateDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_ChannelUpdateDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_ChannelUpdateDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_ChannelUpdateDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_ChannelUpdateDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index f681c9630d48a8af3a4d6ab327855e33b2f00782..d86b25bee514b844280a2e981a4cd039e3139559 100644 (file)
@@ -13,7 +13,7 @@ public class Result_ClosingSignedDecodeErrorZ extends CommonBase {
        }
 
        static Result_ClosingSignedDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_ClosingSignedDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_ClosingSignedDecodeErrorZ_is_ok(ptr)) {
                        return new Result_ClosingSignedDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_ClosingSignedDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_ClosingSignedDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_ClosingSignedDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_ClosingSignedDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_ClosingSignedDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index deb8156599c5b146625691159374892fc12579fb..74ce2a588de29c923b6b77e8edbdfde6fd5d3d44 100644 (file)
@@ -13,7 +13,7 @@ public class Result_ClosingSignedFeeRangeDecodeErrorZ extends CommonBase {
        }
 
        static Result_ClosingSignedFeeRangeDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_ClosingSignedFeeRangeDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_ClosingSignedFeeRangeDecodeErrorZ_is_ok(ptr)) {
                        return new Result_ClosingSignedFeeRangeDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_ClosingSignedFeeRangeDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_ClosingSignedFeeRangeDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_ClosingSignedFeeRangeDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_ClosingSignedFeeRangeDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_ClosingSignedFeeRangeDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 547e7530c0095066f5aff4db06f5e67009f923ec..b3a739d06a88ea0f34a4af0d70f13736c7df1f6f 100644 (file)
@@ -13,7 +13,7 @@ public class Result_CommitmentSignedDecodeErrorZ extends CommonBase {
        }
 
        static Result_CommitmentSignedDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_CommitmentSignedDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_CommitmentSignedDecodeErrorZ_is_ok(ptr)) {
                        return new Result_CommitmentSignedDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_CommitmentSignedDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_CommitmentSignedDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_CommitmentSignedDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_CommitmentSignedDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_CommitmentSignedDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 4048b00c44a9ba88b790e23db2807948dd607a02..4054c0f547975050d8127cacd85bad084da6d05e 100644 (file)
@@ -13,7 +13,7 @@ public class Result_CommitmentTransactionDecodeErrorZ extends CommonBase {
        }
 
        static Result_CommitmentTransactionDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_CommitmentTransactionDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_CommitmentTransactionDecodeErrorZ_is_ok(ptr)) {
                        return new Result_CommitmentTransactionDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_CommitmentTransactionDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_CommitmentTransactionDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_CommitmentTransactionDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_CommitmentTransactionDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_CommitmentTransactionDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 33b5b2e023b96b238105d4295950efabc645d85b..f73e29ad2ce926f67566cc1830224a668797a200 100644 (file)
@@ -13,7 +13,7 @@ public class Result_CounterpartyChannelTransactionParametersDecodeErrorZ extends
        }
 
        static Result_CounterpartyChannelTransactionParametersDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_is_ok(ptr)) {
                        return new Result_CounterpartyChannelTransactionParametersDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_CounterpartyChannelTransactionParametersDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_CounterpartyChannelTransactionParametersDecodeErrorZ extends
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_CounterpartyChannelTransactionParametersDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 04a3630cc32e3890212c781c89d8eb3361023970..3c88dd5f3dd69fb1cb291282f9d5222946c8c93a 100644 (file)
@@ -13,7 +13,7 @@ public class Result_DelayedPaymentOutputDescriptorDecodeErrorZ extends CommonBas
        }
 
        static Result_DelayedPaymentOutputDescriptorDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_is_ok(ptr)) {
                        return new Result_DelayedPaymentOutputDescriptorDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_DelayedPaymentOutputDescriptorDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_DelayedPaymentOutputDescriptorDecodeErrorZ extends CommonBas
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_DelayedPaymentOutputDescriptorDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index aa751e7ad3f081b264121f8a9a9219ee9065363a..96fee8f1a7bd4f2d3060dc8144d4f524e3254513 100644 (file)
@@ -13,7 +13,7 @@ public class Result_DescriptionCreationErrorZ extends CommonBase {
        }
 
        static Result_DescriptionCreationErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_DescriptionCreationErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_DescriptionCreationErrorZ_is_ok(ptr)) {
                        return new Result_DescriptionCreationErrorZ_OK(null, ptr);
                } else {
                        return new Result_DescriptionCreationErrorZ_Err(null, ptr);
@@ -58,6 +58,19 @@ public class Result_DescriptionCreationErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_DescriptionCreationErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_DescriptionCreationErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_DescriptionCreationErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index f9bd1718667313c97722966853ac0c2172866b43..7f0552332326a69c343a1cf4f67509eeaf5a0f9b 100644 (file)
@@ -13,7 +13,7 @@ public class Result_DirectionalChannelInfoDecodeErrorZ extends CommonBase {
        }
 
        static Result_DirectionalChannelInfoDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_DirectionalChannelInfoDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_DirectionalChannelInfoDecodeErrorZ_is_ok(ptr)) {
                        return new Result_DirectionalChannelInfoDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_DirectionalChannelInfoDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_DirectionalChannelInfoDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_DirectionalChannelInfoDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_DirectionalChannelInfoDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_DirectionalChannelInfoDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 41212aa787ce640365dad194247b6697cc7f3f5e..4c88b27bea6b7f92bac680e3075e451a1959795e 100644 (file)
@@ -13,7 +13,7 @@ public class Result_ErrorMessageDecodeErrorZ extends CommonBase {
        }
 
        static Result_ErrorMessageDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_ErrorMessageDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_ErrorMessageDecodeErrorZ_is_ok(ptr)) {
                        return new Result_ErrorMessageDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_ErrorMessageDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_ErrorMessageDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_ErrorMessageDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_ErrorMessageDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_ErrorMessageDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 23c690c32a15afa43d06d2a8508776f103e54a13..a3169a5e716305349631b0f048455f1046c9fc22 100644 (file)
@@ -13,7 +13,7 @@ public class Result_ExpiryTimeCreationErrorZ extends CommonBase {
        }
 
        static Result_ExpiryTimeCreationErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_ExpiryTimeCreationErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_ExpiryTimeCreationErrorZ_is_ok(ptr)) {
                        return new Result_ExpiryTimeCreationErrorZ_OK(null, ptr);
                } else {
                        return new Result_ExpiryTimeCreationErrorZ_Err(null, ptr);
@@ -58,6 +58,19 @@ public class Result_ExpiryTimeCreationErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_ExpiryTimeCreationErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_ExpiryTimeCreationErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_ExpiryTimeCreationErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 719a7cea8ab8094016a8a19a3b38ef20e3e4a142..83109a01382c975b6b6c3f21826b60dbe0c0e268 100644 (file)
@@ -13,7 +13,7 @@ public class Result_FundingCreatedDecodeErrorZ extends CommonBase {
        }
 
        static Result_FundingCreatedDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_FundingCreatedDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_FundingCreatedDecodeErrorZ_is_ok(ptr)) {
                        return new Result_FundingCreatedDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_FundingCreatedDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_FundingCreatedDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_FundingCreatedDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_FundingCreatedDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_FundingCreatedDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 44c159df0bb2037ddb8efa4ef597558ab850947f..d53ec19cb0ac37a94f135ae1cc92baf095e15743 100644 (file)
@@ -13,7 +13,7 @@ public class Result_FundingLockedDecodeErrorZ extends CommonBase {
        }
 
        static Result_FundingLockedDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_FundingLockedDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_FundingLockedDecodeErrorZ_is_ok(ptr)) {
                        return new Result_FundingLockedDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_FundingLockedDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_FundingLockedDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_FundingLockedDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_FundingLockedDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_FundingLockedDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 7ac9f23d27ea32c09d2fe096773fa7264ab8ed27..87ff66aa893bac0ff60e8064d71178afaf1d3220 100644 (file)
@@ -13,7 +13,7 @@ public class Result_FundingSignedDecodeErrorZ extends CommonBase {
        }
 
        static Result_FundingSignedDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_FundingSignedDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_FundingSignedDecodeErrorZ_is_ok(ptr)) {
                        return new Result_FundingSignedDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_FundingSignedDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_FundingSignedDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_FundingSignedDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_FundingSignedDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_FundingSignedDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index ec51d5554e1729bacad6ba1ab7bc8722b8b75779..bd2c4e863df6bee1554bb163b21e1982e7767707 100644 (file)
@@ -13,7 +13,7 @@ public class Result_GossipTimestampFilterDecodeErrorZ extends CommonBase {
        }
 
        static Result_GossipTimestampFilterDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_GossipTimestampFilterDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_GossipTimestampFilterDecodeErrorZ_is_ok(ptr)) {
                        return new Result_GossipTimestampFilterDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_GossipTimestampFilterDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_GossipTimestampFilterDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_GossipTimestampFilterDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_GossipTimestampFilterDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_GossipTimestampFilterDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index d568dcc926842572a84cccc41c82598b1a61209c..583d06fce093a52ca23d39544e957cd752a154f9 100644 (file)
@@ -13,7 +13,7 @@ public class Result_HTLCOutputInCommitmentDecodeErrorZ extends CommonBase {
        }
 
        static Result_HTLCOutputInCommitmentDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_HTLCOutputInCommitmentDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_HTLCOutputInCommitmentDecodeErrorZ_is_ok(ptr)) {
                        return new Result_HTLCOutputInCommitmentDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_HTLCOutputInCommitmentDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_HTLCOutputInCommitmentDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_HTLCOutputInCommitmentDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_HTLCOutputInCommitmentDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_HTLCOutputInCommitmentDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index c4517ded946eb3cd84d69effddfe831b0dc4e79a..500c0748aa26e278c88aacbe235894d4de801e2d 100644 (file)
@@ -13,7 +13,7 @@ public class Result_HTLCUpdateDecodeErrorZ extends CommonBase {
        }
 
        static Result_HTLCUpdateDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_HTLCUpdateDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_HTLCUpdateDecodeErrorZ_is_ok(ptr)) {
                        return new Result_HTLCUpdateDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_HTLCUpdateDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_HTLCUpdateDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_HTLCUpdateDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_HTLCUpdateDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_HTLCUpdateDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 83d0205f2ff2d94ef4f16af9d5cfd934a0c87ed0..248297704a831c1728136a0a54abe608d7be0409 100644 (file)
@@ -13,7 +13,7 @@ public class Result_HolderCommitmentTransactionDecodeErrorZ extends CommonBase {
        }
 
        static Result_HolderCommitmentTransactionDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_HolderCommitmentTransactionDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_HolderCommitmentTransactionDecodeErrorZ_is_ok(ptr)) {
                        return new Result_HolderCommitmentTransactionDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_HolderCommitmentTransactionDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_HolderCommitmentTransactionDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_HolderCommitmentTransactionDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_HolderCommitmentTransactionDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_HolderCommitmentTransactionDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 12af3e255471c1d493354b5edb8b50e3466405a7..7b54e4abd2fcad7bb44da0b108a148c369d6a2c0 100644 (file)
@@ -13,7 +13,7 @@ public class Result_InMemorySignerDecodeErrorZ extends CommonBase {
        }
 
        static Result_InMemorySignerDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_InMemorySignerDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_InMemorySignerDecodeErrorZ_is_ok(ptr)) {
                        return new Result_InMemorySignerDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_InMemorySignerDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_InMemorySignerDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_InMemorySignerDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_InMemorySignerDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_InMemorySignerDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index fc4ba847dd8218e0c0ad80fb86d9d32302e2da9d..b13f2a6ae833ba170df2192f43673a4cac7e7d08 100644 (file)
@@ -13,7 +13,7 @@ public class Result_InitDecodeErrorZ extends CommonBase {
        }
 
        static Result_InitDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_InitDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_InitDecodeErrorZ_is_ok(ptr)) {
                        return new Result_InitDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_InitDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_InitDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_InitDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_InitDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_InitDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 4ddf9e774a39aec0718646b62140b0ce3832e0dc..ba1f003a6c7eac3076f6a5a9f6aeb7754f30abfd 100644 (file)
@@ -13,7 +13,7 @@ public class Result_InitFeaturesDecodeErrorZ extends CommonBase {
        }
 
        static Result_InitFeaturesDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_InitFeaturesDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_InitFeaturesDecodeErrorZ_is_ok(ptr)) {
                        return new Result_InitFeaturesDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_InitFeaturesDecodeErrorZ_Err(null, ptr);
@@ -61,4 +61,12 @@ public class Result_InitFeaturesDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_InitFeaturesDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
 }
index c18431bbe51e98a8760516d714db90b05ae34b66..3a337bb66d2f752989814994b134d35c4ad28ffc 100644 (file)
@@ -13,7 +13,7 @@ public class Result_InvoiceFeaturesDecodeErrorZ extends CommonBase {
        }
 
        static Result_InvoiceFeaturesDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_InvoiceFeaturesDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_InvoiceFeaturesDecodeErrorZ_is_ok(ptr)) {
                        return new Result_InvoiceFeaturesDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_InvoiceFeaturesDecodeErrorZ_Err(null, ptr);
@@ -61,4 +61,12 @@ public class Result_InvoiceFeaturesDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_InvoiceFeaturesDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
 }
index 47f88366116451589fcd2f4b8045a507db722ecc..85afc1b507d15aa66a208b2a238fb6b5783555d9 100644 (file)
@@ -13,7 +13,7 @@ public class Result_InvoiceNoneZ extends CommonBase {
        }
 
        static Result_InvoiceNoneZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_InvoiceNoneZ_result_ok(ptr)) {
+               if (bindings.CResult_InvoiceNoneZ_is_ok(ptr)) {
                        return new Result_InvoiceNoneZ_OK(null, ptr);
                } else {
                        return new Result_InvoiceNoneZ_Err(null, ptr);
@@ -56,6 +56,19 @@ public class Result_InvoiceNoneZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_InvoiceNoneZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_InvoiceNoneZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_InvoiceNoneZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 6f12fb2ed41817c41f8fcd6cccd0a2e4389d0541..cca24af03a2330d8db22c40e21f98b1ac36e39f7 100644 (file)
@@ -13,7 +13,7 @@ public class Result_InvoiceSemanticErrorZ extends CommonBase {
        }
 
        static Result_InvoiceSemanticErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_InvoiceSemanticErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_InvoiceSemanticErrorZ_is_ok(ptr)) {
                        return new Result_InvoiceSemanticErrorZ_OK(null, ptr);
                } else {
                        return new Result_InvoiceSemanticErrorZ_Err(null, ptr);
@@ -58,6 +58,19 @@ public class Result_InvoiceSemanticErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_InvoiceSemanticErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_InvoiceSemanticErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_InvoiceSemanticErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index c41442aa66b4e99f6347ef76dcc08e549683c0c5..c61e1e4d71a348c4f3a64c56f3062b8b53ffee8e 100644 (file)
@@ -13,7 +13,7 @@ public class Result_InvoiceSignOrCreationErrorZ extends CommonBase {
        }
 
        static Result_InvoiceSignOrCreationErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_InvoiceSignOrCreationErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_InvoiceSignOrCreationErrorZ_is_ok(ptr)) {
                        return new Result_InvoiceSignOrCreationErrorZ_OK(null, ptr);
                } else {
                        return new Result_InvoiceSignOrCreationErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_InvoiceSignOrCreationErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_InvoiceSignOrCreationErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_InvoiceSignOrCreationErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_InvoiceSignOrCreationErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index eaa3e195e0714ba9e214c30ac556f95e6926855b..43e36b851636b9a15e6856bf833e2c3b424502db 100644 (file)
@@ -13,7 +13,7 @@ public class Result_LockedChannelMonitorNoneZ extends CommonBase {
        }
 
        static Result_LockedChannelMonitorNoneZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_LockedChannelMonitorNoneZ_result_ok(ptr)) {
+               if (bindings.CResult_LockedChannelMonitorNoneZ_is_ok(ptr)) {
                        return new Result_LockedChannelMonitorNoneZ_OK(null, ptr);
                } else {
                        return new Result_LockedChannelMonitorNoneZ_Err(null, ptr);
@@ -65,4 +65,12 @@ public class Result_LockedChannelMonitorNoneZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_LockedChannelMonitorNoneZ_is_ok(this.ptr);
+               return ret;
+       }
+
 }
index e76b856eba5b334c8d803baf0593f61b9ac2c0eb..17eafe8810118dc50c7a981fa64f13c0b93d7e5b 100644 (file)
@@ -13,7 +13,7 @@ public class Result_NetAddressDecodeErrorZ extends CommonBase {
        }
 
        static Result_NetAddressDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_NetAddressDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_NetAddressDecodeErrorZ_is_ok(ptr)) {
                        return new Result_NetAddressDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_NetAddressDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_NetAddressDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_NetAddressDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_NetAddressDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_NetAddressDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index edfb2b96ff46a4cfd7e996bc1cb53d6db9eb5847..57286ccc3816ed65fbeeefd0e730e62654547758 100644 (file)
@@ -13,7 +13,7 @@ public class Result_NetworkGraphDecodeErrorZ extends CommonBase {
        }
 
        static Result_NetworkGraphDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_NetworkGraphDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_NetworkGraphDecodeErrorZ_is_ok(ptr)) {
                        return new Result_NetworkGraphDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_NetworkGraphDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_NetworkGraphDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_NetworkGraphDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_NetworkGraphDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_NetworkGraphDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 8687041a3f12ad703bdeb8b23325b3f96c1dfa42..20cae360fe42afd26f2d0ed49a54484526f0ce6f 100644 (file)
@@ -13,7 +13,7 @@ public class Result_NodeAnnouncementDecodeErrorZ extends CommonBase {
        }
 
        static Result_NodeAnnouncementDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_NodeAnnouncementDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_NodeAnnouncementDecodeErrorZ_is_ok(ptr)) {
                        return new Result_NodeAnnouncementDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_NodeAnnouncementDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_NodeAnnouncementDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_NodeAnnouncementDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_NodeAnnouncementDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_NodeAnnouncementDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 399ce62444f177d1ab5e440ceaeb36487d3db3eb..877b7f1993412973a80541f0d8b84f59e1ddb335 100644 (file)
@@ -13,7 +13,7 @@ public class Result_NodeAnnouncementInfoDecodeErrorZ extends CommonBase {
        }
 
        static Result_NodeAnnouncementInfoDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_NodeAnnouncementInfoDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_NodeAnnouncementInfoDecodeErrorZ_is_ok(ptr)) {
                        return new Result_NodeAnnouncementInfoDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_NodeAnnouncementInfoDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_NodeAnnouncementInfoDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_NodeAnnouncementInfoDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_NodeAnnouncementInfoDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_NodeAnnouncementInfoDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 67a831a12562e2f2154339e746fd8699f4d69ccb..f121e1240a3612ef2d2623d117f1caee66ce9fa0 100644 (file)
@@ -13,7 +13,7 @@ public class Result_NodeFeaturesDecodeErrorZ extends CommonBase {
        }
 
        static Result_NodeFeaturesDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_NodeFeaturesDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_NodeFeaturesDecodeErrorZ_is_ok(ptr)) {
                        return new Result_NodeFeaturesDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_NodeFeaturesDecodeErrorZ_Err(null, ptr);
@@ -61,4 +61,12 @@ public class Result_NodeFeaturesDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_NodeFeaturesDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
 }
index cffb4e58ff7e4a53bfb92ca0226633609157e55c..ab1c2843fedd3378fa9fa934374253b5cc8fb799 100644 (file)
@@ -13,7 +13,7 @@ public class Result_NodeIdDecodeErrorZ extends CommonBase {
        }
 
        static Result_NodeIdDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_NodeIdDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_NodeIdDecodeErrorZ_is_ok(ptr)) {
                        return new Result_NodeIdDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_NodeIdDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_NodeIdDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_NodeIdDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_NodeIdDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_NodeIdDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 94e63ac7ef363b0284daf925c75d3d59f642eac6..b8330673df3f6504803c17c629b3ddd294ecd4e7 100644 (file)
@@ -13,7 +13,7 @@ public class Result_NodeInfoDecodeErrorZ extends CommonBase {
        }
 
        static Result_NodeInfoDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_NodeInfoDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_NodeInfoDecodeErrorZ_is_ok(ptr)) {
                        return new Result_NodeInfoDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_NodeInfoDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_NodeInfoDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_NodeInfoDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_NodeInfoDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_NodeInfoDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 60669eea736b7995d3b6182910fc3a0496b5712f..64977a26bbeb77b635e2f2cb9bceebf1098ac68f 100644 (file)
@@ -13,7 +13,7 @@ public class Result_NoneAPIErrorZ extends CommonBase {
        }
 
        static Result_NoneAPIErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_NoneAPIErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_NoneAPIErrorZ_is_ok(ptr)) {
                        return new Result_NoneAPIErrorZ_OK(null, ptr);
                } else {
                        return new Result_NoneAPIErrorZ_Err(null, ptr);
@@ -56,6 +56,19 @@ public class Result_NoneAPIErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_NoneAPIErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_NoneAPIErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_NoneAPIErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 7059e037b31938d61075a711c75b4e1c6cc3c373..d8bfde242d177c7c539011d20eeb775bb46c1129 100644 (file)
@@ -13,7 +13,7 @@ public class Result_NoneChannelMonitorUpdateErrZ extends CommonBase {
        }
 
        static Result_NoneChannelMonitorUpdateErrZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_NoneChannelMonitorUpdateErrZ_result_ok(ptr)) {
+               if (bindings.CResult_NoneChannelMonitorUpdateErrZ_is_ok(ptr)) {
                        return new Result_NoneChannelMonitorUpdateErrZ_OK(null, ptr);
                } else {
                        return new Result_NoneChannelMonitorUpdateErrZ_Err(null, ptr);
@@ -53,6 +53,19 @@ public class Result_NoneChannelMonitorUpdateErrZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_NoneChannelMonitorUpdateErrZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_NoneChannelMonitorUpdateErrZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_NoneChannelMonitorUpdateErrZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index d9b7cf490f607d56fe85049f2fc0b6903439628b..a2fc3b4ba5b88b63a53734e8416991517f8d2d61 100644 (file)
@@ -13,7 +13,7 @@ public class Result_NoneErrorZ extends CommonBase {
        }
 
        static Result_NoneErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_NoneErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_NoneErrorZ_is_ok(ptr)) {
                        return new Result_NoneErrorZ_OK(null, ptr);
                } else {
                        return new Result_NoneErrorZ_Err(null, ptr);
@@ -53,6 +53,19 @@ public class Result_NoneErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_NoneErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_NoneErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_NoneErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 7852ba30f9dc8e1d6f6e42878bb5c4d852574625..0e8624d85e597edca16dde6c2d33048739731edf 100644 (file)
@@ -13,7 +13,7 @@ public class Result_NoneLightningErrorZ extends CommonBase {
        }
 
        static Result_NoneLightningErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_NoneLightningErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_NoneLightningErrorZ_is_ok(ptr)) {
                        return new Result_NoneLightningErrorZ_OK(null, ptr);
                } else {
                        return new Result_NoneLightningErrorZ_Err(null, ptr);
@@ -56,6 +56,19 @@ public class Result_NoneLightningErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_NoneLightningErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_NoneLightningErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_NoneLightningErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 6a8556b61198d3832a1f07fa7b4541d108ba10b1..afc833aed019793c3029831b8e14342279836673 100644 (file)
@@ -13,7 +13,7 @@ public class Result_NoneMonitorUpdateErrorZ extends CommonBase {
        }
 
        static Result_NoneMonitorUpdateErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_NoneMonitorUpdateErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_NoneMonitorUpdateErrorZ_is_ok(ptr)) {
                        return new Result_NoneMonitorUpdateErrorZ_OK(null, ptr);
                } else {
                        return new Result_NoneMonitorUpdateErrorZ_Err(null, ptr);
@@ -56,6 +56,19 @@ public class Result_NoneMonitorUpdateErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_NoneMonitorUpdateErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_NoneMonitorUpdateErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_NoneMonitorUpdateErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 3ef1d959a97548c96d09f2014963380f0ba2c026..3251bb9520da563c506657d529ab3e72891d5407 100644 (file)
@@ -13,7 +13,7 @@ public class Result_NoneNoneZ extends CommonBase {
        }
 
        static Result_NoneNoneZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_NoneNoneZ_result_ok(ptr)) {
+               if (bindings.CResult_NoneNoneZ_is_ok(ptr)) {
                        return new Result_NoneNoneZ_OK(null, ptr);
                } else {
                        return new Result_NoneNoneZ_Err(null, ptr);
@@ -51,6 +51,19 @@ public class Result_NoneNoneZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_NoneNoneZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_NoneNoneZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_NoneNoneZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 9c98c59904a39723e85ff55c2c800f8a0aa0cc63..405876214fef9e0e5b2026e19f4252a48cd775ef 100644 (file)
@@ -13,7 +13,7 @@ public class Result_NonePaymentSendFailureZ extends CommonBase {
        }
 
        static Result_NonePaymentSendFailureZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_NonePaymentSendFailureZ_result_ok(ptr)) {
+               if (bindings.CResult_NonePaymentSendFailureZ_is_ok(ptr)) {
                        return new Result_NonePaymentSendFailureZ_OK(null, ptr);
                } else {
                        return new Result_NonePaymentSendFailureZ_Err(null, ptr);
@@ -56,6 +56,19 @@ public class Result_NonePaymentSendFailureZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_NonePaymentSendFailureZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_NonePaymentSendFailureZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_NonePaymentSendFailureZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index b6a2804ab179f5a79fdd5a308c5b7e33fad1a119..643cd7f591afe7f4ce4d8bccebf08f98f026e0e3 100644 (file)
@@ -13,7 +13,7 @@ public class Result_NonePeerHandleErrorZ extends CommonBase {
        }
 
        static Result_NonePeerHandleErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_NonePeerHandleErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_NonePeerHandleErrorZ_is_ok(ptr)) {
                        return new Result_NonePeerHandleErrorZ_OK(null, ptr);
                } else {
                        return new Result_NonePeerHandleErrorZ_Err(null, ptr);
@@ -56,6 +56,19 @@ public class Result_NonePeerHandleErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_NonePeerHandleErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_NonePeerHandleErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_NonePeerHandleErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index cf56e2178a7873adb368e55d55d21aba281defb1..3d95a8b5ea93db4a1b2dffc8ab06a5547219d96b 100644 (file)
@@ -13,7 +13,7 @@ public class Result_NoneSemanticErrorZ extends CommonBase {
        }
 
        static Result_NoneSemanticErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_NoneSemanticErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_NoneSemanticErrorZ_is_ok(ptr)) {
                        return new Result_NoneSemanticErrorZ_OK(null, ptr);
                } else {
                        return new Result_NoneSemanticErrorZ_Err(null, ptr);
@@ -53,6 +53,19 @@ public class Result_NoneSemanticErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_NoneSemanticErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_NoneSemanticErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_NoneSemanticErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index fd4d8c6d31a787a5cfa75b0ac8877a0857c991d1..5586590f20080de20695a85c162b8d2c1d9352fc 100644 (file)
@@ -13,7 +13,7 @@ public class Result_OpenChannelDecodeErrorZ extends CommonBase {
        }
 
        static Result_OpenChannelDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_OpenChannelDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_OpenChannelDecodeErrorZ_is_ok(ptr)) {
                        return new Result_OpenChannelDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_OpenChannelDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_OpenChannelDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_OpenChannelDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_OpenChannelDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_OpenChannelDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index d430d70d3fc969d8996ddeb1efed84bc82db91a7..9ec86cd31338fbce22d940c6715551c6e3e80d2c 100644 (file)
@@ -13,7 +13,7 @@ public class Result_OutPointDecodeErrorZ extends CommonBase {
        }
 
        static Result_OutPointDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_OutPointDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_OutPointDecodeErrorZ_is_ok(ptr)) {
                        return new Result_OutPointDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_OutPointDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_OutPointDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_OutPointDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_OutPointDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_OutPointDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 80292af0df1b7305295d4648700106df21667511..8104e4c65c15258ad03f83127c7e406291add4c0 100644 (file)
@@ -13,7 +13,7 @@ public class Result_PayeeDecodeErrorZ extends CommonBase {
        }
 
        static Result_PayeeDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_PayeeDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_PayeeDecodeErrorZ_is_ok(ptr)) {
                        return new Result_PayeeDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_PayeeDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_PayeeDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_PayeeDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_PayeeDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_PayeeDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index ecf856d7fff904bf6b2100d87f33b622174d16c3..91ee0fcbbaeefb778347ff43ca2864a1815bfa60 100644 (file)
@@ -13,7 +13,7 @@ public class Result_PayeePubKeyErrorZ extends CommonBase {
        }
 
        static Result_PayeePubKeyErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_PayeePubKeyErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_PayeePubKeyErrorZ_is_ok(ptr)) {
                        return new Result_PayeePubKeyErrorZ_OK(null, ptr);
                } else {
                        return new Result_PayeePubKeyErrorZ_Err(null, ptr);
@@ -58,6 +58,19 @@ public class Result_PayeePubKeyErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_PayeePubKeyErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_PayeePubKeyErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_PayeePubKeyErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 5791e39dc20bc330b7aadd9773185df7e1dd1b2a..129508d3e3de054d8d191c2e0ea47e9adb7a692d 100644 (file)
@@ -13,7 +13,7 @@ public class Result_PaymentIdPaymentErrorZ extends CommonBase {
        }
 
        static Result_PaymentIdPaymentErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_PaymentIdPaymentErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_PaymentIdPaymentErrorZ_is_ok(ptr)) {
                        return new Result_PaymentIdPaymentErrorZ_OK(null, ptr);
                } else {
                        return new Result_PaymentIdPaymentErrorZ_Err(null, ptr);
@@ -42,7 +42,7 @@ public class Result_PaymentIdPaymentErrorZ extends CommonBase {
         * Creates a new CResult_PaymentIdPaymentErrorZ in the success state.
         */
        public static Result_PaymentIdPaymentErrorZ ok(byte[] o) {
-               long ret = bindings.CResult_PaymentIdPaymentErrorZ_ok(o);
+               long ret = bindings.CResult_PaymentIdPaymentErrorZ_ok(InternalUtils.check_arr_len(o, 32));
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_PaymentIdPaymentErrorZ ret_hu_conv = Result_PaymentIdPaymentErrorZ.constr_from_ptr(ret);
                return ret_hu_conv;
@@ -58,6 +58,19 @@ public class Result_PaymentIdPaymentErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_PaymentIdPaymentErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_PaymentIdPaymentErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_PaymentIdPaymentErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 0b10cf21cd1c5dd29941fab36eccbd91775d2292..eb0e9267866b00ab02913a037c7a2c10fe55aaf2 100644 (file)
@@ -13,7 +13,7 @@ public class Result_PaymentIdPaymentSendFailureZ extends CommonBase {
        }
 
        static Result_PaymentIdPaymentSendFailureZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_PaymentIdPaymentSendFailureZ_result_ok(ptr)) {
+               if (bindings.CResult_PaymentIdPaymentSendFailureZ_is_ok(ptr)) {
                        return new Result_PaymentIdPaymentSendFailureZ_OK(null, ptr);
                } else {
                        return new Result_PaymentIdPaymentSendFailureZ_Err(null, ptr);
@@ -42,7 +42,7 @@ public class Result_PaymentIdPaymentSendFailureZ extends CommonBase {
         * Creates a new CResult_PaymentIdPaymentSendFailureZ in the success state.
         */
        public static Result_PaymentIdPaymentSendFailureZ ok(byte[] o) {
-               long ret = bindings.CResult_PaymentIdPaymentSendFailureZ_ok(o);
+               long ret = bindings.CResult_PaymentIdPaymentSendFailureZ_ok(InternalUtils.check_arr_len(o, 32));
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_PaymentIdPaymentSendFailureZ ret_hu_conv = Result_PaymentIdPaymentSendFailureZ.constr_from_ptr(ret);
                return ret_hu_conv;
@@ -58,6 +58,19 @@ public class Result_PaymentIdPaymentSendFailureZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_PaymentIdPaymentSendFailureZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_PaymentIdPaymentSendFailureZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_PaymentIdPaymentSendFailureZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 2c5e9893122374ab7c25dc3415878a78adbc931e..0cd424f68dc913e4115de82f7df4691f2cb0fd94 100644 (file)
@@ -13,7 +13,7 @@ public class Result_PaymentSecretAPIErrorZ extends CommonBase {
        }
 
        static Result_PaymentSecretAPIErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_PaymentSecretAPIErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_PaymentSecretAPIErrorZ_is_ok(ptr)) {
                        return new Result_PaymentSecretAPIErrorZ_OK(null, ptr);
                } else {
                        return new Result_PaymentSecretAPIErrorZ_Err(null, ptr);
@@ -42,7 +42,7 @@ public class Result_PaymentSecretAPIErrorZ extends CommonBase {
         * Creates a new CResult_PaymentSecretAPIErrorZ in the success state.
         */
        public static Result_PaymentSecretAPIErrorZ ok(byte[] o) {
-               long ret = bindings.CResult_PaymentSecretAPIErrorZ_ok(o);
+               long ret = bindings.CResult_PaymentSecretAPIErrorZ_ok(InternalUtils.check_arr_len(o, 32));
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_PaymentSecretAPIErrorZ ret_hu_conv = Result_PaymentSecretAPIErrorZ.constr_from_ptr(ret);
                return ret_hu_conv;
@@ -58,6 +58,19 @@ public class Result_PaymentSecretAPIErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_PaymentSecretAPIErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_PaymentSecretAPIErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_PaymentSecretAPIErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index ed654d038223f823a9dbb6885d2310b139a1a6b0..52aa0f46da69ac6846d4101f61733fb34f6b753b 100644 (file)
@@ -13,7 +13,7 @@ public class Result_PingDecodeErrorZ extends CommonBase {
        }
 
        static Result_PingDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_PingDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_PingDecodeErrorZ_is_ok(ptr)) {
                        return new Result_PingDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_PingDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_PingDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_PingDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_PingDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_PingDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 53273031c4ae27a9634211186ec9e6369ba02cb2..9953acb9f4a648313de4d964bb69391ec9141694 100644 (file)
@@ -13,7 +13,7 @@ public class Result_PongDecodeErrorZ extends CommonBase {
        }
 
        static Result_PongDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_PongDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_PongDecodeErrorZ_is_ok(ptr)) {
                        return new Result_PongDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_PongDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_PongDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_PongDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_PongDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_PongDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 344ca77e7d5ff3da5d2c4df4f42a03e897349c88..f464816835f0687755106c821620aa9c5a48fb51 100644 (file)
@@ -13,7 +13,7 @@ public class Result_PositiveTimestampCreationErrorZ extends CommonBase {
        }
 
        static Result_PositiveTimestampCreationErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_PositiveTimestampCreationErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_PositiveTimestampCreationErrorZ_is_ok(ptr)) {
                        return new Result_PositiveTimestampCreationErrorZ_OK(null, ptr);
                } else {
                        return new Result_PositiveTimestampCreationErrorZ_Err(null, ptr);
@@ -58,6 +58,19 @@ public class Result_PositiveTimestampCreationErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_PositiveTimestampCreationErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_PositiveTimestampCreationErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_PositiveTimestampCreationErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 8704ce8ba22675acb77826fb1101cc4f9aacac8a..a3e25fc0183181d402e24403effd042477ae393c 100644 (file)
@@ -13,7 +13,7 @@ public class Result_PrivateRouteCreationErrorZ extends CommonBase {
        }
 
        static Result_PrivateRouteCreationErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_PrivateRouteCreationErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_PrivateRouteCreationErrorZ_is_ok(ptr)) {
                        return new Result_PrivateRouteCreationErrorZ_OK(null, ptr);
                } else {
                        return new Result_PrivateRouteCreationErrorZ_Err(null, ptr);
@@ -58,6 +58,19 @@ public class Result_PrivateRouteCreationErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_PrivateRouteCreationErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_PrivateRouteCreationErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_PrivateRouteCreationErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 1377bcbc69a97adba9a633dba71071a8b4fd6934..050a9e4e1e5007edddee1353af412c9c75ca4911 100644 (file)
@@ -13,7 +13,7 @@ public class Result_PublicKeyErrorZ extends CommonBase {
        }
 
        static Result_PublicKeyErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_PublicKeyErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_PublicKeyErrorZ_is_ok(ptr)) {
                        return new Result_PublicKeyErrorZ_OK(null, ptr);
                } else {
                        return new Result_PublicKeyErrorZ_Err(null, ptr);
@@ -39,7 +39,7 @@ public class Result_PublicKeyErrorZ extends CommonBase {
         * Creates a new CResult_PublicKeyErrorZ in the success state.
         */
        public static Result_PublicKeyErrorZ ok(byte[] o) {
-               long ret = bindings.CResult_PublicKeyErrorZ_ok(o);
+               long ret = bindings.CResult_PublicKeyErrorZ_ok(InternalUtils.check_arr_len(o, 33));
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_PublicKeyErrorZ ret_hu_conv = Result_PublicKeyErrorZ.constr_from_ptr(ret);
                return ret_hu_conv;
@@ -55,6 +55,19 @@ public class Result_PublicKeyErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_PublicKeyErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_PublicKeyErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_PublicKeyErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index b141a0adf788e7c921414f23436e3f06dd818afc..3e33eec2018292ce3dd323e7c891ae289eb29a92 100644 (file)
@@ -13,7 +13,7 @@ public class Result_QueryChannelRangeDecodeErrorZ extends CommonBase {
        }
 
        static Result_QueryChannelRangeDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_QueryChannelRangeDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_QueryChannelRangeDecodeErrorZ_is_ok(ptr)) {
                        return new Result_QueryChannelRangeDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_QueryChannelRangeDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_QueryChannelRangeDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_QueryChannelRangeDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_QueryChannelRangeDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_QueryChannelRangeDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 1844c8a3532cfdb2ed490b582c39b5bc690b6ff6..73c3b0078883aed52b43da87853a02ad624880e3 100644 (file)
@@ -13,7 +13,7 @@ public class Result_QueryShortChannelIdsDecodeErrorZ extends CommonBase {
        }
 
        static Result_QueryShortChannelIdsDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_QueryShortChannelIdsDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_QueryShortChannelIdsDecodeErrorZ_is_ok(ptr)) {
                        return new Result_QueryShortChannelIdsDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_QueryShortChannelIdsDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_QueryShortChannelIdsDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_QueryShortChannelIdsDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_QueryShortChannelIdsDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_QueryShortChannelIdsDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 29b5001fc60f62687273e4b890c3087fabe61bf1..6f722b78d7fabe4b9f9ff1edf6c800d20bc9e01b 100644 (file)
@@ -13,7 +13,7 @@ public class Result_RecoverableSignatureNoneZ extends CommonBase {
        }
 
        static Result_RecoverableSignatureNoneZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_RecoverableSignatureNoneZ_result_ok(ptr)) {
+               if (bindings.CResult_RecoverableSignatureNoneZ_is_ok(ptr)) {
                        return new Result_RecoverableSignatureNoneZ_OK(null, ptr);
                } else {
                        return new Result_RecoverableSignatureNoneZ_Err(null, ptr);
@@ -37,7 +37,7 @@ public class Result_RecoverableSignatureNoneZ extends CommonBase {
         * Creates a new CResult_RecoverableSignatureNoneZ in the success state.
         */
        public static Result_RecoverableSignatureNoneZ ok(byte[] arg) {
-               long ret = bindings.CResult_RecoverableSignatureNoneZ_ok(arg);
+               long ret = bindings.CResult_RecoverableSignatureNoneZ_ok(InternalUtils.check_arr_len(arg, 68));
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_RecoverableSignatureNoneZ ret_hu_conv = Result_RecoverableSignatureNoneZ.constr_from_ptr(ret);
                return ret_hu_conv;
@@ -53,6 +53,19 @@ public class Result_RecoverableSignatureNoneZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_RecoverableSignatureNoneZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_RecoverableSignatureNoneZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_RecoverableSignatureNoneZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 3f7b4e2cbbe0f116f25f31cb37e7e742b2fc40de..e0a5bcbcb9528e129434969d72e87be864241048 100644 (file)
@@ -13,7 +13,7 @@ public class Result_ReplyChannelRangeDecodeErrorZ extends CommonBase {
        }
 
        static Result_ReplyChannelRangeDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_ReplyChannelRangeDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_ReplyChannelRangeDecodeErrorZ_is_ok(ptr)) {
                        return new Result_ReplyChannelRangeDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_ReplyChannelRangeDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_ReplyChannelRangeDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_ReplyChannelRangeDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_ReplyChannelRangeDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_ReplyChannelRangeDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index bba3338027888eea4111a07858457b31dcea971c..6aaa8a863dd6ca8147bddff52a427ce44457eca1 100644 (file)
@@ -13,7 +13,7 @@ public class Result_ReplyShortChannelIdsEndDecodeErrorZ extends CommonBase {
        }
 
        static Result_ReplyShortChannelIdsEndDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_ReplyShortChannelIdsEndDecodeErrorZ_is_ok(ptr)) {
                        return new Result_ReplyShortChannelIdsEndDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_ReplyShortChannelIdsEndDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_ReplyShortChannelIdsEndDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_ReplyShortChannelIdsEndDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_ReplyShortChannelIdsEndDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_ReplyShortChannelIdsEndDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 679192debb1e2a05da966026b5a7ca817a7c219d..c165de27550de0b706ebfbf7ce450a3fc054f80b 100644 (file)
@@ -13,7 +13,7 @@ public class Result_RevokeAndACKDecodeErrorZ extends CommonBase {
        }
 
        static Result_RevokeAndACKDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_RevokeAndACKDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_RevokeAndACKDecodeErrorZ_is_ok(ptr)) {
                        return new Result_RevokeAndACKDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_RevokeAndACKDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_RevokeAndACKDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_RevokeAndACKDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_RevokeAndACKDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_RevokeAndACKDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index f3248f06044b2d06873a65cbec2e4fe1558b5461..d78650fb85cb152c9b012bddb9f2b58e5be33150 100644 (file)
@@ -13,7 +13,7 @@ public class Result_RouteDecodeErrorZ extends CommonBase {
        }
 
        static Result_RouteDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_RouteDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_RouteDecodeErrorZ_is_ok(ptr)) {
                        return new Result_RouteDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_RouteDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_RouteDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_RouteDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_RouteDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_RouteDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 37d44ea34947424cee95974deb744f4b2c196e6d..6c037eca7a22d3e065e9fc43af16b1ca4a8b2aeb 100644 (file)
@@ -13,7 +13,7 @@ public class Result_RouteHintDecodeErrorZ extends CommonBase {
        }
 
        static Result_RouteHintDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_RouteHintDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_RouteHintDecodeErrorZ_is_ok(ptr)) {
                        return new Result_RouteHintDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_RouteHintDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_RouteHintDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_RouteHintDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_RouteHintDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_RouteHintDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index ed9fe14e8a4d4432b1ef1c3ab0d7b82212ee6d1e..bb1179fd504d3562ae20989608bfc9edbf318bde 100644 (file)
@@ -13,7 +13,7 @@ public class Result_RouteHintHopDecodeErrorZ extends CommonBase {
        }
 
        static Result_RouteHintHopDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_RouteHintHopDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_RouteHintHopDecodeErrorZ_is_ok(ptr)) {
                        return new Result_RouteHintHopDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_RouteHintHopDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_RouteHintHopDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_RouteHintHopDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_RouteHintHopDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_RouteHintHopDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 32c894e52aa77838ab10a62e41bd2dbc1b36104b..5abe5f5f6e0332d7dd2de2994471cb8542f0ccf4 100644 (file)
@@ -13,7 +13,7 @@ public class Result_RouteHopDecodeErrorZ extends CommonBase {
        }
 
        static Result_RouteHopDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_RouteHopDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_RouteHopDecodeErrorZ_is_ok(ptr)) {
                        return new Result_RouteHopDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_RouteHopDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_RouteHopDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_RouteHopDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_RouteHopDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_RouteHopDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index ce8e67bc62beb07d41bad77a94bd51bcd7620043..62130b7f8c0fc6c73b760bc98310bc9a566f64ba 100644 (file)
@@ -13,7 +13,7 @@ public class Result_RouteLightningErrorZ extends CommonBase {
        }
 
        static Result_RouteLightningErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_RouteLightningErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_RouteLightningErrorZ_is_ok(ptr)) {
                        return new Result_RouteLightningErrorZ_OK(null, ptr);
                } else {
                        return new Result_RouteLightningErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_RouteLightningErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_RouteLightningErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_RouteLightningErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_RouteLightningErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index aa19d4a8a0cada09a21cf04258dc38bd4dea35db..0fb8e1611e1207d61be1a378790aa70d33074742 100644 (file)
@@ -13,7 +13,7 @@ public class Result_RouteParametersDecodeErrorZ extends CommonBase {
        }
 
        static Result_RouteParametersDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_RouteParametersDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_RouteParametersDecodeErrorZ_is_ok(ptr)) {
                        return new Result_RouteParametersDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_RouteParametersDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_RouteParametersDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_RouteParametersDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_RouteParametersDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_RouteParametersDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 8f691df23d62b19db227c08cbbc45305dba682e1..0cc7fdc607c9c9de2c1a245c67dc66f07c95f70f 100644 (file)
@@ -13,7 +13,7 @@ public class Result_RoutingFeesDecodeErrorZ extends CommonBase {
        }
 
        static Result_RoutingFeesDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_RoutingFeesDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_RoutingFeesDecodeErrorZ_is_ok(ptr)) {
                        return new Result_RoutingFeesDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_RoutingFeesDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_RoutingFeesDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_RoutingFeesDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_RoutingFeesDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_RoutingFeesDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
diff --git a/src/main/java/org/ldk/structs/Result_ScorerDecodeErrorZ.java b/src/main/java/org/ldk/structs/Result_ScorerDecodeErrorZ.java
new file mode 100644 (file)
index 0000000..9ffe1d6
--- /dev/null
@@ -0,0 +1,81 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import javax.annotation.Nullable;
+
+public class Result_ScorerDecodeErrorZ extends CommonBase {
+       private Result_ScorerDecodeErrorZ(Object _dummy, long ptr) { super(ptr); }
+       protected void finalize() throws Throwable {
+               if (ptr != 0) { bindings.CResult_ScorerDecodeErrorZ_free(ptr); } super.finalize();
+       }
+
+       static Result_ScorerDecodeErrorZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_ScorerDecodeErrorZ_is_ok(ptr)) {
+                       return new Result_ScorerDecodeErrorZ_OK(null, ptr);
+               } else {
+                       return new Result_ScorerDecodeErrorZ_Err(null, ptr);
+               }
+       }
+       public static final class Result_ScorerDecodeErrorZ_OK extends Result_ScorerDecodeErrorZ {
+               public final Scorer res;
+               private Result_ScorerDecodeErrorZ_OK(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       long res = bindings.LDKCResult_ScorerDecodeErrorZ_get_ok(ptr);
+                       Scorer res_hu_conv = null; if (res < 0 || res > 4096) { res_hu_conv = new Scorer(null, res); }
+                       res_hu_conv.ptrs_to.add(this);
+                       this.res = res_hu_conv;
+               }
+       }
+
+       public static final class Result_ScorerDecodeErrorZ_Err extends Result_ScorerDecodeErrorZ {
+               public final DecodeError err;
+               private Result_ScorerDecodeErrorZ_Err(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       long err = bindings.LDKCResult_ScorerDecodeErrorZ_get_err(ptr);
+                       DecodeError err_hu_conv = null; if (err < 0 || err > 4096) { err_hu_conv = new DecodeError(null, err); }
+                       err_hu_conv.ptrs_to.add(this);
+                       this.err = err_hu_conv;
+               }
+       }
+
+       /**
+        * Creates a new CResult_ScorerDecodeErrorZ in the success state.
+        */
+       public static Result_ScorerDecodeErrorZ ok(ScoringParameters o_params) {
+               long ret = bindings.CResult_ScorerDecodeErrorZ_ok(bindings.Scorer_new(o_params == null ? 0 : o_params.ptr & ~1));
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_ScorerDecodeErrorZ ret_hu_conv = Result_ScorerDecodeErrorZ.constr_from_ptr(ret);
+               ret_hu_conv.ptrs_to.add(o_params);
+// Due to rust's strict-ownership memory model, in some cases we need to "move"
+// an object to pass exclusive ownership to the function being called.
+// In most cases, we avoid ret_hu_conv being visible in GC'd languages by cloning the object
+// at the FFI layer, creating a new object which Rust can claim ownership of
+// However, in some cases (eg here), there is no way to clone an object, and thus
+// we actually have to pass full ownership to Rust.
+// Thus, after ret_hu_conv call, o_params is reset to null and is now a dummy object.
+o_params.ptr = 0;
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_ScorerDecodeErrorZ in the error state.
+        */
+       public static Result_ScorerDecodeErrorZ err(DecodeError e) {
+               long ret = bindings.CResult_ScorerDecodeErrorZ_err(e == null ? 0 : e.ptr & ~1);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_ScorerDecodeErrorZ ret_hu_conv = Result_ScorerDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_ScorerDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+}
diff --git a/src/main/java/org/ldk/structs/Result_ScoringParametersDecodeErrorZ.java b/src/main/java/org/ldk/structs/Result_ScoringParametersDecodeErrorZ.java
new file mode 100644 (file)
index 0000000..fc7ca0c
--- /dev/null
@@ -0,0 +1,72 @@
+package org.ldk.structs;
+
+import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
+import java.util.Arrays;
+import javax.annotation.Nullable;
+
+public class Result_ScoringParametersDecodeErrorZ extends CommonBase {
+       private Result_ScoringParametersDecodeErrorZ(Object _dummy, long ptr) { super(ptr); }
+       protected void finalize() throws Throwable {
+               if (ptr != 0) { bindings.CResult_ScoringParametersDecodeErrorZ_free(ptr); } super.finalize();
+       }
+
+       static Result_ScoringParametersDecodeErrorZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_ScoringParametersDecodeErrorZ_is_ok(ptr)) {
+                       return new Result_ScoringParametersDecodeErrorZ_OK(null, ptr);
+               } else {
+                       return new Result_ScoringParametersDecodeErrorZ_Err(null, ptr);
+               }
+       }
+       public static final class Result_ScoringParametersDecodeErrorZ_OK extends Result_ScoringParametersDecodeErrorZ {
+               public final ScoringParameters res;
+               private Result_ScoringParametersDecodeErrorZ_OK(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       long res = bindings.LDKCResult_ScoringParametersDecodeErrorZ_get_ok(ptr);
+                       ScoringParameters res_hu_conv = null; if (res < 0 || res > 4096) { res_hu_conv = new ScoringParameters(null, res); }
+                       res_hu_conv.ptrs_to.add(this);
+                       this.res = res_hu_conv;
+               }
+       }
+
+       public static final class Result_ScoringParametersDecodeErrorZ_Err extends Result_ScoringParametersDecodeErrorZ {
+               public final DecodeError err;
+               private Result_ScoringParametersDecodeErrorZ_Err(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       long err = bindings.LDKCResult_ScoringParametersDecodeErrorZ_get_err(ptr);
+                       DecodeError err_hu_conv = null; if (err < 0 || err > 4096) { err_hu_conv = new DecodeError(null, err); }
+                       err_hu_conv.ptrs_to.add(this);
+                       this.err = err_hu_conv;
+               }
+       }
+
+       /**
+        * Creates a new CResult_ScoringParametersDecodeErrorZ in the success state.
+        */
+       public static Result_ScoringParametersDecodeErrorZ ok(long o_base_penalty_msat_arg, long o_failure_penalty_msat_arg, long o_failure_penalty_half_life_arg) {
+               long ret = bindings.CResult_ScoringParametersDecodeErrorZ_ok(bindings.ScoringParameters_new(o_base_penalty_msat_arg, o_failure_penalty_msat_arg, o_failure_penalty_half_life_arg));
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_ScoringParametersDecodeErrorZ ret_hu_conv = Result_ScoringParametersDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new CResult_ScoringParametersDecodeErrorZ in the error state.
+        */
+       public static Result_ScoringParametersDecodeErrorZ err(DecodeError e) {
+               long ret = bindings.CResult_ScoringParametersDecodeErrorZ_err(e == null ? 0 : e.ptr & ~1);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_ScoringParametersDecodeErrorZ ret_hu_conv = Result_ScoringParametersDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_ScoringParametersDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+}
index e310f54786532ebb8adcb4252cd2373485b88d0f..f0aeae17f31afbd2ba14c71916021da2e3157cfe 100644 (file)
@@ -13,7 +13,7 @@ public class Result_SecretKeyErrorZ extends CommonBase {
        }
 
        static Result_SecretKeyErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_SecretKeyErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_SecretKeyErrorZ_is_ok(ptr)) {
                        return new Result_SecretKeyErrorZ_OK(null, ptr);
                } else {
                        return new Result_SecretKeyErrorZ_Err(null, ptr);
@@ -39,7 +39,7 @@ public class Result_SecretKeyErrorZ extends CommonBase {
         * Creates a new CResult_SecretKeyErrorZ in the success state.
         */
        public static Result_SecretKeyErrorZ ok(byte[] o) {
-               long ret = bindings.CResult_SecretKeyErrorZ_ok(o);
+               long ret = bindings.CResult_SecretKeyErrorZ_ok(InternalUtils.check_arr_len(o, 32));
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_SecretKeyErrorZ ret_hu_conv = Result_SecretKeyErrorZ.constr_from_ptr(ret);
                return ret_hu_conv;
@@ -55,4 +55,12 @@ public class Result_SecretKeyErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_SecretKeyErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
 }
index cee6aa8a7e5ed7990e66b7f9413113dc800b7eb5..9e0fc29b09d3f8007d796cabdf7cb8070a6bdde0 100644 (file)
@@ -13,7 +13,7 @@ public class Result_ShutdownDecodeErrorZ extends CommonBase {
        }
 
        static Result_ShutdownDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_ShutdownDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_ShutdownDecodeErrorZ_is_ok(ptr)) {
                        return new Result_ShutdownDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_ShutdownDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_ShutdownDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_ShutdownDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_ShutdownDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_ShutdownDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 96b1412e36cdf526641b68ff16552f26f8ba302e..5bf4fcb6b0f2716f28e348fe905a522d6f9b8245 100644 (file)
@@ -13,7 +13,7 @@ public class Result_ShutdownScriptDecodeErrorZ extends CommonBase {
        }
 
        static Result_ShutdownScriptDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_ShutdownScriptDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_ShutdownScriptDecodeErrorZ_is_ok(ptr)) {
                        return new Result_ShutdownScriptDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_ShutdownScriptDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_ShutdownScriptDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_ShutdownScriptDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_ShutdownScriptDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_ShutdownScriptDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 420b036df584007a6e07499135140766aa1e5353..4a51de002dd17c05fb7c9e96c8deeedc95bb665d 100644 (file)
@@ -13,7 +13,7 @@ public class Result_ShutdownScriptInvalidShutdownScriptZ extends CommonBase {
        }
 
        static Result_ShutdownScriptInvalidShutdownScriptZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_ShutdownScriptInvalidShutdownScriptZ_result_ok(ptr)) {
+               if (bindings.CResult_ShutdownScriptInvalidShutdownScriptZ_is_ok(ptr)) {
                        return new Result_ShutdownScriptInvalidShutdownScriptZ_OK(null, ptr);
                } else {
                        return new Result_ShutdownScriptInvalidShutdownScriptZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_ShutdownScriptInvalidShutdownScriptZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_ShutdownScriptInvalidShutdownScriptZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_ShutdownScriptInvalidShutdownScriptZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_ShutdownScriptInvalidShutdownScriptZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 0cd22a385b190f608ca14fb5d2aec15766cca98c..0454d7a82a7ff990467bc96cd2cbd2e904107681 100644 (file)
@@ -13,7 +13,7 @@ public class Result_SiPrefixNoneZ extends CommonBase {
        }
 
        static Result_SiPrefixNoneZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_SiPrefixNoneZ_result_ok(ptr)) {
+               if (bindings.CResult_SiPrefixNoneZ_is_ok(ptr)) {
                        return new Result_SiPrefixNoneZ_OK(null, ptr);
                } else {
                        return new Result_SiPrefixNoneZ_Err(null, ptr);
@@ -53,6 +53,19 @@ public class Result_SiPrefixNoneZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_SiPrefixNoneZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_SiPrefixNoneZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_SiPrefixNoneZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 75cf6d78f2ccfc381ac1be4d41be96a9ff090da3..9f8eda0b595776f1d03941b10984b02f02e4f3ce 100644 (file)
@@ -13,7 +13,7 @@ public class Result_SignDecodeErrorZ extends CommonBase {
        }
 
        static Result_SignDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_SignDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_SignDecodeErrorZ_is_ok(ptr)) {
                        return new Result_SignDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_SignDecodeErrorZ_Err(null, ptr);
@@ -62,6 +62,19 @@ public class Result_SignDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_SignDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_SignDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_SignDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 5145441b9a6aeafdcef39451ad929a5eff31e5b9..061b1e221930ed74c153718ef4f34d0bed4dfeb6 100644 (file)
@@ -13,7 +13,7 @@ public class Result_SignatureNoneZ extends CommonBase {
        }
 
        static Result_SignatureNoneZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_SignatureNoneZ_result_ok(ptr)) {
+               if (bindings.CResult_SignatureNoneZ_is_ok(ptr)) {
                        return new Result_SignatureNoneZ_OK(null, ptr);
                } else {
                        return new Result_SignatureNoneZ_Err(null, ptr);
@@ -37,7 +37,7 @@ public class Result_SignatureNoneZ extends CommonBase {
         * Creates a new CResult_SignatureNoneZ in the success state.
         */
        public static Result_SignatureNoneZ ok(byte[] o) {
-               long ret = bindings.CResult_SignatureNoneZ_ok(o);
+               long ret = bindings.CResult_SignatureNoneZ_ok(InternalUtils.check_arr_len(o, 64));
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_SignatureNoneZ ret_hu_conv = Result_SignatureNoneZ.constr_from_ptr(ret);
                return ret_hu_conv;
@@ -53,6 +53,19 @@ public class Result_SignatureNoneZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_SignatureNoneZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_SignatureNoneZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_SignatureNoneZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 765bca5d46e7be96b73213c99949a1e833e72750..0f41d9845c7220d52bc9ce9796b2c523208885ea 100644 (file)
@@ -13,7 +13,7 @@ public class Result_SignedRawInvoiceNoneZ extends CommonBase {
        }
 
        static Result_SignedRawInvoiceNoneZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_SignedRawInvoiceNoneZ_result_ok(ptr)) {
+               if (bindings.CResult_SignedRawInvoiceNoneZ_is_ok(ptr)) {
                        return new Result_SignedRawInvoiceNoneZ_OK(null, ptr);
                } else {
                        return new Result_SignedRawInvoiceNoneZ_Err(null, ptr);
@@ -56,6 +56,19 @@ public class Result_SignedRawInvoiceNoneZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_SignedRawInvoiceNoneZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_SignedRawInvoiceNoneZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_SignedRawInvoiceNoneZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 64f555367cc92d05f67e033849fa66880119336c..be9313162d87070a0c102d6161bdd95349647faa 100644 (file)
@@ -13,7 +13,7 @@ public class Result_SpendableOutputDescriptorDecodeErrorZ extends CommonBase {
        }
 
        static Result_SpendableOutputDescriptorDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_SpendableOutputDescriptorDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_SpendableOutputDescriptorDecodeErrorZ_is_ok(ptr)) {
                        return new Result_SpendableOutputDescriptorDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_SpendableOutputDescriptorDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_SpendableOutputDescriptorDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_SpendableOutputDescriptorDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_SpendableOutputDescriptorDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_SpendableOutputDescriptorDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 442ef14fb44d6805040cdeea8142f81ed729109e..c0a4efdb2eb0c02da1c1eb3e9ec77160fdc60fe5 100644 (file)
@@ -13,7 +13,7 @@ public class Result_StaticPaymentOutputDescriptorDecodeErrorZ extends CommonBase
        }
 
        static Result_StaticPaymentOutputDescriptorDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_StaticPaymentOutputDescriptorDecodeErrorZ_is_ok(ptr)) {
                        return new Result_StaticPaymentOutputDescriptorDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_StaticPaymentOutputDescriptorDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_StaticPaymentOutputDescriptorDecodeErrorZ extends CommonBase
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_StaticPaymentOutputDescriptorDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_StaticPaymentOutputDescriptorDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_StaticPaymentOutputDescriptorDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index a9ef377676c41557455257b84878591c214a6546..92a7c2a59d2bed34a14f7d9c9ff244fe9621f1f6 100644 (file)
@@ -13,7 +13,7 @@ public class Result_StringErrorZ extends CommonBase {
        }
 
        static Result_StringErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_StringErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_StringErrorZ_is_ok(ptr)) {
                        return new Result_StringErrorZ_OK(null, ptr);
                } else {
                        return new Result_StringErrorZ_Err(null, ptr);
@@ -55,4 +55,12 @@ public class Result_StringErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_StringErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
 }
index de1757aa95e6db84626dfd928e1a3688590e78f3..792e4eb21a4454130116b691eca9d80c89bbbf19 100644 (file)
@@ -13,7 +13,7 @@ public class Result_TransactionNoneZ extends CommonBase {
        }
 
        static Result_TransactionNoneZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_TransactionNoneZ_result_ok(ptr)) {
+               if (bindings.CResult_TransactionNoneZ_is_ok(ptr)) {
                        return new Result_TransactionNoneZ_OK(null, ptr);
                } else {
                        return new Result_TransactionNoneZ_Err(null, ptr);
@@ -53,6 +53,19 @@ public class Result_TransactionNoneZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_TransactionNoneZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_TransactionNoneZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_TransactionNoneZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 814f7e99f85593c076baf980c21286285cafd5d7..0f444d5c197ac501961f531ca6d7400f4b7553b2 100644 (file)
@@ -13,7 +13,7 @@ public class Result_TrustedClosingTransactionNoneZ extends CommonBase {
        }
 
        static Result_TrustedClosingTransactionNoneZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_TrustedClosingTransactionNoneZ_result_ok(ptr)) {
+               if (bindings.CResult_TrustedClosingTransactionNoneZ_is_ok(ptr)) {
                        return new Result_TrustedClosingTransactionNoneZ_OK(null, ptr);
                } else {
                        return new Result_TrustedClosingTransactionNoneZ_Err(null, ptr);
@@ -65,4 +65,12 @@ public class Result_TrustedClosingTransactionNoneZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_TrustedClosingTransactionNoneZ_is_ok(this.ptr);
+               return ret;
+       }
+
 }
index 3beed26aabef06cca5a9c1b150e274b7f647d592..fdf1d8b114bcb5d174543dbd5f5793c2aa68cdb8 100644 (file)
@@ -13,7 +13,7 @@ public class Result_TrustedCommitmentTransactionNoneZ extends CommonBase {
        }
 
        static Result_TrustedCommitmentTransactionNoneZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_TrustedCommitmentTransactionNoneZ_result_ok(ptr)) {
+               if (bindings.CResult_TrustedCommitmentTransactionNoneZ_is_ok(ptr)) {
                        return new Result_TrustedCommitmentTransactionNoneZ_OK(null, ptr);
                } else {
                        return new Result_TrustedCommitmentTransactionNoneZ_Err(null, ptr);
@@ -65,4 +65,12 @@ public class Result_TrustedCommitmentTransactionNoneZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_TrustedCommitmentTransactionNoneZ_is_ok(this.ptr);
+               return ret;
+       }
+
 }
index 1ec672799d3887e4a89fa32af590cfbfde987ba1..deba6a761689d2557d4af4db353ef12f3599d0a2 100644 (file)
@@ -13,7 +13,7 @@ public class Result_TxCreationKeysDecodeErrorZ extends CommonBase {
        }
 
        static Result_TxCreationKeysDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_TxCreationKeysDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_TxCreationKeysDecodeErrorZ_is_ok(ptr)) {
                        return new Result_TxCreationKeysDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_TxCreationKeysDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_TxCreationKeysDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_TxCreationKeysDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_TxCreationKeysDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_TxCreationKeysDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 564219efdf15807a7d04394f135f48fb1212090b..1ed03f7488962c001c80bc9549562a553420f391 100644 (file)
@@ -13,7 +13,7 @@ public class Result_TxCreationKeysErrorZ extends CommonBase {
        }
 
        static Result_TxCreationKeysErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_TxCreationKeysErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_TxCreationKeysErrorZ_is_ok(ptr)) {
                        return new Result_TxCreationKeysErrorZ_OK(null, ptr);
                } else {
                        return new Result_TxCreationKeysErrorZ_Err(null, ptr);
@@ -58,6 +58,19 @@ public class Result_TxCreationKeysErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_TxCreationKeysErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_TxCreationKeysErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_TxCreationKeysErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 98ff1b539acb23416689ba337ab642cccb761bde..3c9f47effa65db023d6170bc359a887f27cfbfd4 100644 (file)
@@ -13,7 +13,7 @@ public class Result_TxOutAccessErrorZ extends CommonBase {
        }
 
        static Result_TxOutAccessErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_TxOutAccessErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_TxOutAccessErrorZ_is_ok(ptr)) {
                        return new Result_TxOutAccessErrorZ_OK(null, ptr);
                } else {
                        return new Result_TxOutAccessErrorZ_Err(null, ptr);
@@ -57,6 +57,19 @@ public class Result_TxOutAccessErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_TxOutAccessErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_TxOutAccessErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_TxOutAccessErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index fe6e0b18c1673b3581770eb664d09beaecc6ae5f..715ab33aa66dbdceccb39e6808949eb3048e8d9c 100644 (file)
@@ -13,7 +13,7 @@ public class Result_UnsignedChannelAnnouncementDecodeErrorZ extends CommonBase {
        }
 
        static Result_UnsignedChannelAnnouncementDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_UnsignedChannelAnnouncementDecodeErrorZ_is_ok(ptr)) {
                        return new Result_UnsignedChannelAnnouncementDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_UnsignedChannelAnnouncementDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_UnsignedChannelAnnouncementDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_UnsignedChannelAnnouncementDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_UnsignedChannelAnnouncementDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_UnsignedChannelAnnouncementDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index f3d60337c83194e0f1835f05d69a8cf9464fd59f..9f43f1c0da6d40a761a917cb515e9aa05cdd35bc 100644 (file)
@@ -13,7 +13,7 @@ public class Result_UnsignedChannelUpdateDecodeErrorZ extends CommonBase {
        }
 
        static Result_UnsignedChannelUpdateDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_UnsignedChannelUpdateDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_UnsignedChannelUpdateDecodeErrorZ_is_ok(ptr)) {
                        return new Result_UnsignedChannelUpdateDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_UnsignedChannelUpdateDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_UnsignedChannelUpdateDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_UnsignedChannelUpdateDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_UnsignedChannelUpdateDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_UnsignedChannelUpdateDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 872d4cf3f95f9b353413800932df51eb6f999332..2abc39eeab2e6ce2d3432319108c0c98c2ce7fa0 100644 (file)
@@ -13,7 +13,7 @@ public class Result_UnsignedNodeAnnouncementDecodeErrorZ extends CommonBase {
        }
 
        static Result_UnsignedNodeAnnouncementDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_UnsignedNodeAnnouncementDecodeErrorZ_is_ok(ptr)) {
                        return new Result_UnsignedNodeAnnouncementDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_UnsignedNodeAnnouncementDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_UnsignedNodeAnnouncementDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_UnsignedNodeAnnouncementDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_UnsignedNodeAnnouncementDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_UnsignedNodeAnnouncementDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index d76ab972a199e621fa22892769010db3fe08adcf..d6a723d49f92af0980ee8b29bfa8e5ca926bf34b 100644 (file)
@@ -13,7 +13,7 @@ public class Result_UpdateAddHTLCDecodeErrorZ extends CommonBase {
        }
 
        static Result_UpdateAddHTLCDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_UpdateAddHTLCDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_UpdateAddHTLCDecodeErrorZ_is_ok(ptr)) {
                        return new Result_UpdateAddHTLCDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_UpdateAddHTLCDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_UpdateAddHTLCDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_UpdateAddHTLCDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_UpdateAddHTLCDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_UpdateAddHTLCDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index aaa91edbb175cf36edfe0ca9e9dcb0b739c0d131..bb368b9b5b2de8ca20f870e95db5545a9f498ffc 100644 (file)
@@ -13,7 +13,7 @@ public class Result_UpdateFailHTLCDecodeErrorZ extends CommonBase {
        }
 
        static Result_UpdateFailHTLCDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_UpdateFailHTLCDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_UpdateFailHTLCDecodeErrorZ_is_ok(ptr)) {
                        return new Result_UpdateFailHTLCDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_UpdateFailHTLCDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_UpdateFailHTLCDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_UpdateFailHTLCDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_UpdateFailHTLCDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_UpdateFailHTLCDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index bbbd680259ae69e046fc0675da6a54b2a85a87da..38f3f13afad1f510ab8f343ba68c2f8ba929bf6c 100644 (file)
@@ -13,7 +13,7 @@ public class Result_UpdateFailMalformedHTLCDecodeErrorZ extends CommonBase {
        }
 
        static Result_UpdateFailMalformedHTLCDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_UpdateFailMalformedHTLCDecodeErrorZ_is_ok(ptr)) {
                        return new Result_UpdateFailMalformedHTLCDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_UpdateFailMalformedHTLCDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_UpdateFailMalformedHTLCDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_UpdateFailMalformedHTLCDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_UpdateFailMalformedHTLCDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_UpdateFailMalformedHTLCDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 57ad26039920780047320902a0e035f82758835d..92e95a438d2d064777a3e462c1d713d3eaffae6f 100644 (file)
@@ -13,7 +13,7 @@ public class Result_UpdateFeeDecodeErrorZ extends CommonBase {
        }
 
        static Result_UpdateFeeDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_UpdateFeeDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_UpdateFeeDecodeErrorZ_is_ok(ptr)) {
                        return new Result_UpdateFeeDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_UpdateFeeDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_UpdateFeeDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_UpdateFeeDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_UpdateFeeDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_UpdateFeeDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 2f6e05b0d23e55ce7b2486855dda79e1560bc7df..a282998a2d3a1f544d77e0562bf5f7c58be318a0 100644 (file)
@@ -13,7 +13,7 @@ public class Result_UpdateFulfillHTLCDecodeErrorZ extends CommonBase {
        }
 
        static Result_UpdateFulfillHTLCDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_UpdateFulfillHTLCDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_UpdateFulfillHTLCDecodeErrorZ_is_ok(ptr)) {
                        return new Result_UpdateFulfillHTLCDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_UpdateFulfillHTLCDecodeErrorZ_Err(null, ptr);
@@ -61,6 +61,19 @@ public class Result_UpdateFulfillHTLCDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_UpdateFulfillHTLCDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_UpdateFulfillHTLCDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_UpdateFulfillHTLCDecodeErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 46a091aa5a4dd68c23d6c65b3b18cf17b77894aa..c3473d2aa39c93c0ef94f1b00c6afff9db411c19 100644 (file)
@@ -13,7 +13,7 @@ public class Result__u832APIErrorZ extends CommonBase {
        }
 
        static Result__u832APIErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult__u832APIErrorZ_result_ok(ptr)) {
+               if (bindings.CResult__u832APIErrorZ_is_ok(ptr)) {
                        return new Result__u832APIErrorZ_OK(null, ptr);
                } else {
                        return new Result__u832APIErrorZ_Err(null, ptr);
@@ -42,7 +42,7 @@ public class Result__u832APIErrorZ extends CommonBase {
         * Creates a new CResult__u832APIErrorZ in the success state.
         */
        public static Result__u832APIErrorZ ok(byte[] o) {
-               long ret = bindings.CResult__u832APIErrorZ_ok(o);
+               long ret = bindings.CResult__u832APIErrorZ_ok(InternalUtils.check_arr_len(o, 32));
                if (ret >= 0 && ret <= 4096) { return null; }
                Result__u832APIErrorZ ret_hu_conv = Result__u832APIErrorZ.constr_from_ptr(ret);
                return ret_hu_conv;
@@ -58,6 +58,19 @@ public class Result__u832APIErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult__u832APIErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult__u832APIErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult__u832APIErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index b2d4b1902f7d0299d646dbf15b07c09cc848b6d3..6def50e3f4beffbb6f4a9c88172493f84804a867 100644 (file)
@@ -13,7 +13,7 @@ public class Result_boolLightningErrorZ extends CommonBase {
        }
 
        static Result_boolLightningErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_boolLightningErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_boolLightningErrorZ_is_ok(ptr)) {
                        return new Result_boolLightningErrorZ_OK(null, ptr);
                } else {
                        return new Result_boolLightningErrorZ_Err(null, ptr);
@@ -58,6 +58,19 @@ public class Result_boolLightningErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_boolLightningErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_boolLightningErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_boolLightningErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index d6c64887e77e7a4b06ca100d630e3bdf09fab69f..b409c2f72409abb35317f2f7861e61f76a7548c1 100644 (file)
@@ -13,7 +13,7 @@ public class Result_boolPeerHandleErrorZ extends CommonBase {
        }
 
        static Result_boolPeerHandleErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_boolPeerHandleErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_boolPeerHandleErrorZ_is_ok(ptr)) {
                        return new Result_boolPeerHandleErrorZ_OK(null, ptr);
                } else {
                        return new Result_boolPeerHandleErrorZ_Err(null, ptr);
@@ -58,6 +58,19 @@ public class Result_boolPeerHandleErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       /**
+        * Checks if the given object is currently in the success state
+        */
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_boolPeerHandleErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.CResult_boolPeerHandleErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new CResult_boolPeerHandleErrorZ which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index fd1eb215238b96d4ee9b68b9e2d88903d89aa050..af5877896024045797c4832dbc135002b1b0850f 100644 (file)
@@ -43,6 +43,11 @@ public class RetryAttempts extends CommonBase {
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.RetryAttempts_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the RetryAttempts
         */
index 8ab6e5b7639026d1fd98b64e9ad5b2b1da07ca1e..dc58cb4e36aa5d9e6bec005c64bac3118914a872 100644 (file)
@@ -31,7 +31,7 @@ public class RevokeAndACK extends CommonBase {
         * The channel ID
         */
        public void set_channel_id(byte[] val) {
-               bindings.RevokeAndACK_set_channel_id(this.ptr, val);
+               bindings.RevokeAndACK_set_channel_id(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        /**
@@ -46,7 +46,7 @@ public class RevokeAndACK extends CommonBase {
         * The secret corresponding to the per-commitment point
         */
        public void set_per_commitment_secret(byte[] val) {
-               bindings.RevokeAndACK_set_per_commitment_secret(this.ptr, val);
+               bindings.RevokeAndACK_set_per_commitment_secret(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        /**
@@ -61,20 +61,25 @@ public class RevokeAndACK extends CommonBase {
         * The next sender-broadcast commitment transaction's per-commitment point
         */
        public void set_next_per_commitment_point(byte[] val) {
-               bindings.RevokeAndACK_set_next_per_commitment_point(this.ptr, val);
+               bindings.RevokeAndACK_set_next_per_commitment_point(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        /**
         * Constructs a new RevokeAndACK given each field
         */
        public static RevokeAndACK of(byte[] channel_id_arg, byte[] per_commitment_secret_arg, byte[] next_per_commitment_point_arg) {
-               long ret = bindings.RevokeAndACK_new(channel_id_arg, per_commitment_secret_arg, next_per_commitment_point_arg);
+               long ret = bindings.RevokeAndACK_new(InternalUtils.check_arr_len(channel_id_arg, 32), InternalUtils.check_arr_len(per_commitment_secret_arg, 32), InternalUtils.check_arr_len(next_per_commitment_point_arg, 33));
                if (ret >= 0 && ret <= 4096) { return null; }
                RevokeAndACK ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new RevokeAndACK(null, ret); }
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.RevokeAndACK_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the RevokeAndACK
         */
index 9a7f6272b76af97a8a9c973b215c266cdf4629f6..453292e892df1804350408675da0aa0902985dbd 100644 (file)
@@ -99,6 +99,11 @@ public class Route extends CommonBase {
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.Route_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the Route
         */
index 1b0ddef811b8e156055cf1a91c75bec8bdec11ce..6ead7770d81545a718d7e7ee9f18693f81353af0 100644 (file)
@@ -46,6 +46,11 @@ public class RouteHint extends CommonBase {
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.RouteHint_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the RouteHint
         */
index 86018744e02e99387810cb187d8bb09fb930c008..47f38b337fa7fee93927e81940aee19b06a7d1ca 100644 (file)
@@ -31,7 +31,7 @@ public class RouteHintHop extends CommonBase {
         * The node_id of the non-target end of the route
         */
        public void set_src_node_id(byte[] val) {
-               bindings.RouteHintHop_set_src_node_id(this.ptr, val);
+               bindings.RouteHintHop_set_src_node_id(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        /**
@@ -122,13 +122,18 @@ public class RouteHintHop extends CommonBase {
         * Constructs a new RouteHintHop given each field
         */
        public static RouteHintHop of(byte[] src_node_id_arg, long short_channel_id_arg, RoutingFees fees_arg, short cltv_expiry_delta_arg, Option_u64Z htlc_minimum_msat_arg, Option_u64Z htlc_maximum_msat_arg) {
-               long ret = bindings.RouteHintHop_new(src_node_id_arg, short_channel_id_arg, fees_arg == null ? 0 : fees_arg.ptr & ~1, cltv_expiry_delta_arg, htlc_minimum_msat_arg.ptr, htlc_maximum_msat_arg.ptr);
+               long ret = bindings.RouteHintHop_new(InternalUtils.check_arr_len(src_node_id_arg, 33), short_channel_id_arg, fees_arg == null ? 0 : fees_arg.ptr & ~1, cltv_expiry_delta_arg, htlc_minimum_msat_arg.ptr, htlc_maximum_msat_arg.ptr);
                if (ret >= 0 && ret <= 4096) { return null; }
                RouteHintHop ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new RouteHintHop(null, ret); }
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.RouteHintHop_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the RouteHintHop
         */
index 59d4864652c2c65b41d921abe4b1b50b3661c7fd..f2168f4b711a0c59b8802e4addc4f68414177111 100644 (file)
@@ -31,7 +31,7 @@ public class RouteHop extends CommonBase {
         * The node_id of the node at this hop.
         */
        public void set_pubkey(byte[] val) {
-               bindings.RouteHop_set_pubkey(this.ptr, val);
+               bindings.RouteHop_set_pubkey(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        /**
@@ -129,13 +129,18 @@ public class RouteHop extends CommonBase {
         * Constructs a new RouteHop given each field
         */
        public static RouteHop of(byte[] pubkey_arg, NodeFeatures node_features_arg, long short_channel_id_arg, ChannelFeatures channel_features_arg, long fee_msat_arg, int cltv_expiry_delta_arg) {
-               long ret = bindings.RouteHop_new(pubkey_arg, node_features_arg == null ? 0 : node_features_arg.ptr & ~1, short_channel_id_arg, channel_features_arg == null ? 0 : channel_features_arg.ptr & ~1, fee_msat_arg, cltv_expiry_delta_arg);
+               long ret = bindings.RouteHop_new(InternalUtils.check_arr_len(pubkey_arg, 33), node_features_arg == null ? 0 : node_features_arg.ptr & ~1, short_channel_id_arg, channel_features_arg == null ? 0 : channel_features_arg.ptr & ~1, fee_msat_arg, cltv_expiry_delta_arg);
                if (ret >= 0 && ret <= 4096) { return null; }
                RouteHop ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new RouteHop(null, ret); }
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.RouteHop_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the RouteHop
         */
index 731c3a3757c563ec764f4b58a08347e9d069e43a..66561f732c9ff098a1d3648420be3f32588f6775 100644 (file)
@@ -83,6 +83,11 @@ public class RouteParameters extends CommonBase {
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.RouteParameters_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the RouteParameters
         */
index 4174246eea4bfc25126ac80b5675dd7d03fffdfa..b83762e1d8375fadb4671e2ca9c0cc801c15e071 100644 (file)
@@ -47,7 +47,7 @@ public class Router extends CommonBase {
                                Score ret_hu_conv = new Score(null, scorer);
                                ret_hu_conv.ptrs_to.add(this);
                                Result_RouteLightningErrorZ ret = arg.find_route(payer, params_hu_conv, first_hops_conv_16_arr, ret_hu_conv);
-                               long result = ret != null ? ret.ptr : 0;
+                               long result = ret == null ? 0 : ret.clone_ptr();
                                return result;
                        }
                });
@@ -59,7 +59,7 @@ public class Router extends CommonBase {
         * Note that first_hops (or a relevant inner pointer) may be NULL or all-0s to represent None
         */
        public Result_RouteLightningErrorZ find_route(byte[] payer, RouteParameters params, @Nullable ChannelDetails[] first_hops, Score scorer) {
-               long ret = bindings.Router_find_route(this.ptr, payer, params == null ? 0 : params.ptr & ~1, first_hops != null ? Arrays.stream(first_hops).mapToLong(first_hops_conv_16 -> first_hops_conv_16 == null ? 0 : first_hops_conv_16.ptr & ~1).toArray() : null, scorer == null ? 0 : scorer.ptr);
+               long ret = bindings.Router_find_route(this.ptr, InternalUtils.check_arr_len(payer, 33), params == null ? 0 : params.ptr & ~1, first_hops != null ? Arrays.stream(first_hops).mapToLong(first_hops_conv_16 -> first_hops_conv_16 == null ? 0 : first_hops_conv_16.ptr & ~1).toArray() : null, scorer == null ? 0 : scorer.ptr);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_RouteLightningErrorZ ret_hu_conv = Result_RouteLightningErrorZ.constr_from_ptr(ret);
                this.ptrs_to.add(params);
index 2ad54fe14d110778899c4b6cd36c54f809f4fa36..dfca382a83f2cc4330a0932bee6200ee195172ca 100644 (file)
@@ -73,6 +73,11 @@ public class RoutingFees extends CommonBase {
                return ret;
        }
 
+       long clone_ptr() {
+               long ret = bindings.RoutingFees_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the RoutingFees
         */
index eb6198717c4e1ac1a1070ab8a77ed2d00f4df30c..c821ddce4b1ec7fdf370b0603692e6fe2a600a91 100644 (file)
@@ -98,29 +98,29 @@ public class RoutingMessageHandler extends CommonBase {
                        @Override public long handle_node_announcement(long msg) {
                                NodeAnnouncement msg_hu_conv = null; if (msg < 0 || msg > 4096) { msg_hu_conv = new NodeAnnouncement(null, msg); }
                                Result_boolLightningErrorZ ret = arg.handle_node_announcement(msg_hu_conv);
-                               long result = ret != null ? ret.ptr : 0;
+                               long result = ret == null ? 0 : ret.clone_ptr();
                                return result;
                        }
                        @Override public long handle_channel_announcement(long msg) {
                                ChannelAnnouncement msg_hu_conv = null; if (msg < 0 || msg > 4096) { msg_hu_conv = new ChannelAnnouncement(null, msg); }
                                Result_boolLightningErrorZ ret = arg.handle_channel_announcement(msg_hu_conv);
-                               long result = ret != null ? ret.ptr : 0;
+                               long result = ret == null ? 0 : ret.clone_ptr();
                                return result;
                        }
                        @Override public long handle_channel_update(long msg) {
                                ChannelUpdate msg_hu_conv = null; if (msg < 0 || msg > 4096) { msg_hu_conv = new ChannelUpdate(null, msg); }
                                Result_boolLightningErrorZ ret = arg.handle_channel_update(msg_hu_conv);
-                               long result = ret != null ? ret.ptr : 0;
+                               long result = ret == null ? 0 : ret.clone_ptr();
                                return result;
                        }
                        @Override public long[] get_next_channel_announcements(long starting_point, byte batch_amount) {
                                ThreeTuple_ChannelAnnouncementChannelUpdateChannelUpdateZ[] ret = arg.get_next_channel_announcements(starting_point, batch_amount);
-                               long[] result = ret != null ? Arrays.stream(ret).mapToLong(ret_conv_59 -> ret_conv_59 != null ? ret_conv_59.ptr : 0).toArray() : null;
+                               long[] result = ret != null ? Arrays.stream(ret).mapToLong(ret_conv_59 -> ret_conv_59 == null ? 0 : ret_conv_59.clone_ptr()).toArray() : null;
                                return result;
                        }
                        @Override public long[] get_next_node_announcements(byte[] starting_point, byte batch_amount) {
                                NodeAnnouncement[] ret = arg.get_next_node_announcements(starting_point, batch_amount);
-                               long[] result = ret != null ? Arrays.stream(ret).mapToLong(ret_conv_18 -> ret_conv_18 == null ? 0 : ret_conv_18.ptr & ~1).toArray() : null;
+                               long[] result = ret != null ? Arrays.stream(ret).mapToLong(ret_conv_18 -> ret_conv_18 == null ? 0 : ret_conv_18.clone_ptr()).toArray() : null;
                                return result;
                        }
                        @Override public void sync_routing_table(byte[] their_node_id, long init) {
@@ -131,28 +131,28 @@ public class RoutingMessageHandler extends CommonBase {
                                ReplyChannelRange msg_hu_conv = null; if (msg < 0 || msg > 4096) { msg_hu_conv = new ReplyChannelRange(null, msg); }
                                msg_hu_conv.ptrs_to.add(this);
                                Result_NoneLightningErrorZ ret = arg.handle_reply_channel_range(their_node_id, msg_hu_conv);
-                               long result = ret != null ? ret.ptr : 0;
+                               long result = ret == null ? 0 : ret.clone_ptr();
                                return result;
                        }
                        @Override public long handle_reply_short_channel_ids_end(byte[] their_node_id, long msg) {
                                ReplyShortChannelIdsEnd msg_hu_conv = null; if (msg < 0 || msg > 4096) { msg_hu_conv = new ReplyShortChannelIdsEnd(null, msg); }
                                msg_hu_conv.ptrs_to.add(this);
                                Result_NoneLightningErrorZ ret = arg.handle_reply_short_channel_ids_end(their_node_id, msg_hu_conv);
-                               long result = ret != null ? ret.ptr : 0;
+                               long result = ret == null ? 0 : ret.clone_ptr();
                                return result;
                        }
                        @Override public long handle_query_channel_range(byte[] their_node_id, long msg) {
                                QueryChannelRange msg_hu_conv = null; if (msg < 0 || msg > 4096) { msg_hu_conv = new QueryChannelRange(null, msg); }
                                msg_hu_conv.ptrs_to.add(this);
                                Result_NoneLightningErrorZ ret = arg.handle_query_channel_range(their_node_id, msg_hu_conv);
-                               long result = ret != null ? ret.ptr : 0;
+                               long result = ret == null ? 0 : ret.clone_ptr();
                                return result;
                        }
                        @Override public long handle_query_short_channel_ids(byte[] their_node_id, long msg) {
                                QueryShortChannelIds msg_hu_conv = null; if (msg < 0 || msg > 4096) { msg_hu_conv = new QueryShortChannelIds(null, msg); }
                                msg_hu_conv.ptrs_to.add(this);
                                Result_NoneLightningErrorZ ret = arg.handle_query_short_channel_ids(their_node_id, msg_hu_conv);
-                               long result = ret != null ? ret.ptr : 0;
+                               long result = ret == null ? 0 : ret.clone_ptr();
                                return result;
                        }
                }, MessageSendEventsProvider.new_impl(MessageSendEventsProvider_impl).bindings_instance);
@@ -230,7 +230,7 @@ public class RoutingMessageHandler extends CommonBase {
         * Note that starting_point (or a relevant inner pointer) may be NULL or all-0s to represent None
         */
        public NodeAnnouncement[] get_next_node_announcements(@Nullable byte[] starting_point, byte batch_amount) {
-               long[] ret = bindings.RoutingMessageHandler_get_next_node_announcements(this.ptr, starting_point, batch_amount);
+               long[] ret = bindings.RoutingMessageHandler_get_next_node_announcements(this.ptr, InternalUtils.check_arr_len(starting_point, 33), batch_amount);
                NodeAnnouncement[] ret_conv_18_arr = new NodeAnnouncement[ret.length];
                for (int s = 0; s < ret.length; s++) {
                        long ret_conv_18 = ret[s];
@@ -247,7 +247,7 @@ public class RoutingMessageHandler extends CommonBase {
         * implementor.
         */
        public void sync_routing_table(byte[] their_node_id, Init init) {
-               bindings.RoutingMessageHandler_sync_routing_table(this.ptr, their_node_id, init == null ? 0 : init.ptr & ~1);
+               bindings.RoutingMessageHandler_sync_routing_table(this.ptr, InternalUtils.check_arr_len(their_node_id, 33), init == null ? 0 : init.ptr & ~1);
                this.ptrs_to.add(init);
        }
 
@@ -257,7 +257,7 @@ public class RoutingMessageHandler extends CommonBase {
         * replies to a single query.
         */
        public Result_NoneLightningErrorZ handle_reply_channel_range(byte[] their_node_id, ReplyChannelRange msg) {
-               long ret = bindings.RoutingMessageHandler_handle_reply_channel_range(this.ptr, their_node_id, msg == null ? 0 : msg.ptr & ~1);
+               long ret = bindings.RoutingMessageHandler_handle_reply_channel_range(this.ptr, InternalUtils.check_arr_len(their_node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_NoneLightningErrorZ ret_hu_conv = Result_NoneLightningErrorZ.constr_from_ptr(ret);
                return ret_hu_conv;
@@ -270,7 +270,7 @@ public class RoutingMessageHandler extends CommonBase {
         * gossip messages.
         */
        public Result_NoneLightningErrorZ handle_reply_short_channel_ids_end(byte[] their_node_id, ReplyShortChannelIdsEnd msg) {
-               long ret = bindings.RoutingMessageHandler_handle_reply_short_channel_ids_end(this.ptr, their_node_id, msg == null ? 0 : msg.ptr & ~1);
+               long ret = bindings.RoutingMessageHandler_handle_reply_short_channel_ids_end(this.ptr, InternalUtils.check_arr_len(their_node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_NoneLightningErrorZ ret_hu_conv = Result_NoneLightningErrorZ.constr_from_ptr(ret);
                return ret_hu_conv;
@@ -281,7 +281,7 @@ public class RoutingMessageHandler extends CommonBase {
         * for the requested range of blocks.
         */
        public Result_NoneLightningErrorZ handle_query_channel_range(byte[] their_node_id, QueryChannelRange msg) {
-               long ret = bindings.RoutingMessageHandler_handle_query_channel_range(this.ptr, their_node_id, msg == null ? 0 : msg.ptr & ~1);
+               long ret = bindings.RoutingMessageHandler_handle_query_channel_range(this.ptr, InternalUtils.check_arr_len(their_node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_NoneLightningErrorZ ret_hu_conv = Result_NoneLightningErrorZ.constr_from_ptr(ret);
                return ret_hu_conv;
@@ -292,7 +292,7 @@ public class RoutingMessageHandler extends CommonBase {
         * list of short_channel_ids.
         */
        public Result_NoneLightningErrorZ handle_query_short_channel_ids(byte[] their_node_id, QueryShortChannelIds msg) {
-               long ret = bindings.RoutingMessageHandler_handle_query_short_channel_ids(this.ptr, their_node_id, msg == null ? 0 : msg.ptr & ~1);
+               long ret = bindings.RoutingMessageHandler_handle_query_short_channel_ids(this.ptr, InternalUtils.check_arr_len(their_node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_NoneLightningErrorZ ret_hu_conv = Result_NoneLightningErrorZ.constr_from_ptr(ret);
                return ret_hu_conv;
index 47a2cae6b40790d89beca623a6a1983fa93dc726..011cd86130d5d3dd1c804eda24a1415c60c5d489 100644 (file)
@@ -19,6 +19,11 @@ public class Sha256 extends CommonBase {
                if (ptr != 0) { bindings.Sha256_free(ptr); }
        }
 
+       long clone_ptr() {
+               long ret = bindings.Sha256_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the Sha256
         */
index 4c0e6f4886395cf4c4697c8ff72c970da1690ebe..7238ff9793bb8ec495bcf56c4cc9b273d7befd7f 100644 (file)
@@ -31,7 +31,7 @@ public class Shutdown extends CommonBase {
         * The channel ID
         */
        public void set_channel_id(byte[] val) {
-               bindings.Shutdown_set_channel_id(this.ptr, val);
+               bindings.Shutdown_set_channel_id(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        /**
@@ -55,13 +55,18 @@ public class Shutdown extends CommonBase {
         * Constructs a new Shutdown given each field
         */
        public static Shutdown of(byte[] channel_id_arg, byte[] scriptpubkey_arg) {
-               long ret = bindings.Shutdown_new(channel_id_arg, scriptpubkey_arg);
+               long ret = bindings.Shutdown_new(InternalUtils.check_arr_len(channel_id_arg, 32), scriptpubkey_arg);
                if (ret >= 0 && ret <= 4096) { return null; }
                Shutdown ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new Shutdown(null, ret); }
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.Shutdown_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the Shutdown
         */
index 19a81ae000754325750b38a23501674b1315342a..f60f0c25ee5dbbc2d9740f52f7a45856fef237a2 100644 (file)
@@ -21,6 +21,11 @@ public class ShutdownScript extends CommonBase {
                if (ptr != 0) { bindings.ShutdownScript_free(ptr); }
        }
 
+       long clone_ptr() {
+               long ret = bindings.ShutdownScript_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the ShutdownScript
         */
@@ -54,7 +59,7 @@ public class ShutdownScript extends CommonBase {
         * Generates a P2WPKH script pubkey from the given [`WPubkeyHash`].
         */
        public static ShutdownScript new_p2wpkh(byte[] pubkey_hash) {
-               long ret = bindings.ShutdownScript_new_p2wpkh(pubkey_hash);
+               long ret = bindings.ShutdownScript_new_p2wpkh(InternalUtils.check_arr_len(pubkey_hash, 20));
                if (ret >= 0 && ret <= 4096) { return null; }
                ShutdownScript ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new ShutdownScript(null, ret); }
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
@@ -65,7 +70,7 @@ public class ShutdownScript extends CommonBase {
         * Generates a P2WSH script pubkey from the given [`WScriptHash`].
         */
        public static ShutdownScript new_p2wsh(byte[] script_hash) {
-               long ret = bindings.ShutdownScript_new_p2wsh(script_hash);
+               long ret = bindings.ShutdownScript_new_p2wsh(InternalUtils.check_arr_len(script_hash, 32));
                if (ret >= 0 && ret <= 4096) { return null; }
                ShutdownScript ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new ShutdownScript(null, ret); }
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
index 5a0221581937b7c8d92053669fecff5c017de6ed..572773572cfe1a8ee4ed0673683a9a33bae2386a 100644 (file)
@@ -18,7 +18,7 @@ public class Sign extends CommonBase {
        final bindings.LDKSign bindings_instance;
        Sign(Object _dummy, long ptr) { super(ptr); bindings_instance = null; }
        private Sign(bindings.LDKSign arg, bindings.LDKBaseSign BaseSign, ChannelPublicKeys pubkeys) {
-               super(bindings.LDKSign_new(arg, BaseSign, pubkeys == null ? 0 : pubkeys.ptr & ~1));
+               super(bindings.LDKSign_new(arg, BaseSign, pubkeys == null ? 0 : pubkeys.clone_ptr()));
                this.ptrs_to.add(arg);
                this.ptrs_to.add(BaseSign);
                this.bindings_instance = arg;
@@ -63,6 +63,11 @@ public class Sign extends CommonBase {
                return ret;
        }
 
+       long clone_ptr() {
+               long ret = bindings.Sign_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of a Sign
         */
index 8273e9b157ff26766dba334d8ef3e4772aea4ab7..8bc1550f1b86b9ebdb8d344cabac5cbb7f84834c 100644 (file)
@@ -30,11 +30,17 @@ public class SignOrCreationError extends CommonBase {
                assert false; return null; // Unreachable without extending the (internal) bindings interface
        }
 
+       /**
+        * An error occurred during signing
+        */
        public final static class SignError extends SignOrCreationError {
                private SignError(long ptr, bindings.LDKSignOrCreationError.SignError obj) {
                        super(null, ptr);
                }
        }
+       /**
+        * An error occurred while building the transaction
+        */
        public final static class CreationError extends SignOrCreationError {
                public final org.ldk.enums.CreationError creation_error;
                private CreationError(long ptr, bindings.LDKSignOrCreationError.CreationError obj) {
@@ -42,6 +48,11 @@ public class SignOrCreationError extends CommonBase {
                        this.creation_error = obj.creation_error;
                }
        }
+       long clone_ptr() {
+               long ret = bindings.SignOrCreationError_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the SignOrCreationError
         */
index 0b976307005baeb9fda4cee407b5ace4bc506a13..f9fd6c3d99994142e38876e689a79ac891d8c3ed 100644 (file)
@@ -34,6 +34,11 @@ public class SignedRawInvoice extends CommonBase {
                return ret;
        }
 
+       long clone_ptr() {
+               long ret = bindings.SignedRawInvoice_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the SignedRawInvoice
         */
index ae23786d56b45bcd74294782f2ece41db83d22d5..3edbde56f6b9f0801b05c48e7c4ab7bc0c7bf327 100644 (file)
@@ -139,6 +139,11 @@ public class SocketDescriptor extends CommonBase {
                return ret;
        }
 
+       long clone_ptr() {
+               long ret = bindings.SocketDescriptor_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of a SocketDescriptor
         */
index 236a33fe07d50fd25322a433db75599bff417dcc..34ff18ac1ec03dc60d5a8e10d9d5b42a0823af8e 100644 (file)
@@ -36,6 +36,13 @@ public class SpendableOutputDescriptor extends CommonBase {
                assert false; return null; // Unreachable without extending the (internal) bindings interface
        }
 
+       /**
+        * An output to a script which was provided via KeysInterface directly, either from
+        * `get_destination_script()` or `get_shutdown_scriptpubkey()`, thus you should already know
+        * how to spend it. No secret keys are provided as rust-lightning was never given any key.
+        * These may include outputs from a transaction punishing our counterparty or claiming an HTLC
+        * on-chain using the payment preimage or after it has timed out.
+        */
        public final static class StaticOutput extends SpendableOutputDescriptor {
                /**
                 * The outpoint which is spendable
@@ -56,6 +63,36 @@ public class SpendableOutputDescriptor extends CommonBase {
                        this.output = output_conv;
                }
        }
+       /**
+        * An output to a P2WSH script which can be spent with a single signature after a CSV delay.
+        * 
+        * The witness in the spending input should be:
+        * <BIP 143 signature> <empty vector> (MINIMALIF standard rule) <provided witnessScript>
+        * 
+        * Note that the nSequence field in the spending input must be set to to_self_delay
+        * (which means the transaction is not broadcastable until at least to_self_delay
+        * blocks after the outpoint confirms).
+        * 
+        * These are generally the result of a \"revocable\" output to us, spendable only by us unless
+        * it is an output from an old state which we broadcast (which should never happen).
+        * 
+        * To derive the delayed_payment key which is used to sign for this input, you must pass the
+        * holder delayed_payment_base_key (ie the private key which corresponds to the pubkey in
+        * Sign::pubkeys().delayed_payment_basepoint) and the provided per_commitment_point to
+        * chan_utils::derive_private_key. The public key can be generated without the secret key
+        * using chan_utils::derive_public_key and only the delayed_payment_basepoint which appears in
+        * Sign::pubkeys().
+        * 
+        * To derive the revocation_pubkey provided here (which is used in the witness
+        * script generation), you must pass the counterparty revocation_basepoint (which appears in the
+        * call to Sign::ready_channel) and the provided per_commitment point
+        * to chan_utils::derive_public_revocation_key.
+        * 
+        * The witness script which is hashed and included in the output script_pubkey may be
+        * regenerated by passing the revocation_pubkey (derived as above), our delayed_payment pubkey
+        * (derived as above), and the to_self_delay contained here to
+        * chan_utils::get_revokeable_redeemscript.
+        */
        public final static class DelayedPaymentOutput extends SpendableOutputDescriptor {
                public final DelayedPaymentOutputDescriptor delayed_payment_output;
                private DelayedPaymentOutput(long ptr, bindings.LDKSpendableOutputDescriptor.DelayedPaymentOutput obj) {
@@ -66,6 +103,15 @@ public class SpendableOutputDescriptor extends CommonBase {
                        this.delayed_payment_output = delayed_payment_output_hu_conv;
                }
        }
+       /**
+        * An output to a P2WPKH, spendable exclusively by our payment key (ie the private key which
+        * corresponds to the public key in Sign::pubkeys().payment_point).
+        * The witness in the spending input, is, thus, simply:
+        * <BIP 143 signature> <payment key>
+        * 
+        * These are generally the result of our counterparty having broadcast the current state,
+        * allowing us to claim the non-HTLC-encumbered outputs immediately.
+        */
        public final static class StaticPaymentOutput extends SpendableOutputDescriptor {
                public final StaticPaymentOutputDescriptor static_payment_output;
                private StaticPaymentOutput(long ptr, bindings.LDKSpendableOutputDescriptor.StaticPaymentOutput obj) {
@@ -76,6 +122,11 @@ public class SpendableOutputDescriptor extends CommonBase {
                        this.static_payment_output = static_payment_output_hu_conv;
                }
        }
+       long clone_ptr() {
+               long ret = bindings.SpendableOutputDescriptor_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the SpendableOutputDescriptor
         */
index f3b4d7d43433dc78ec4b362569070fe7be52a487..7fcb906ed31d126edbcded28b46c4cf2ac05a87e 100644 (file)
@@ -61,7 +61,7 @@ public class StaticPaymentOutputDescriptor extends CommonBase {
         * the channel to spend the output.
         */
        public void set_channel_keys_id(byte[] val) {
-               bindings.StaticPaymentOutputDescriptor_set_channel_keys_id(this.ptr, val);
+               bindings.StaticPaymentOutputDescriptor_set_channel_keys_id(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        /**
@@ -83,13 +83,18 @@ public class StaticPaymentOutputDescriptor extends CommonBase {
         * Constructs a new StaticPaymentOutputDescriptor given each field
         */
        public static StaticPaymentOutputDescriptor of(OutPoint outpoint_arg, TxOut output_arg, byte[] channel_keys_id_arg, long channel_value_satoshis_arg) {
-               long ret = bindings.StaticPaymentOutputDescriptor_new(outpoint_arg == null ? 0 : outpoint_arg.ptr & ~1, output_arg.ptr, channel_keys_id_arg, channel_value_satoshis_arg);
+               long ret = bindings.StaticPaymentOutputDescriptor_new(outpoint_arg == null ? 0 : outpoint_arg.ptr & ~1, output_arg.ptr, InternalUtils.check_arr_len(channel_keys_id_arg, 32), channel_value_satoshis_arg);
                if (ret >= 0 && ret <= 4096) { return null; }
                StaticPaymentOutputDescriptor ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new StaticPaymentOutputDescriptor(null, ret); }
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.StaticPaymentOutputDescriptor_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the StaticPaymentOutputDescriptor
         */
index 0153885675df4050171dd92131925a179235955c..ffc0612926f7e68de90dc0daf9ce7c4a581a646e 100644 (file)
@@ -19,4 +19,65 @@ public class ThreeTuple_ChannelAnnouncementChannelUpdateChannelUpdateZ extends C
                if (ptr != 0) { bindings.C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_free(ptr); }
        }
 
+       /**
+        * 
+        */
+       public ChannelAnnouncement get_a() {
+               long ret = bindings.C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_get_a(this.ptr);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               ChannelAnnouncement ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new ChannelAnnouncement(null, ret); }
+               ret_hu_conv.ptrs_to.add(this);
+               return ret_hu_conv;
+       }
+
+       /**
+        * 
+        */
+       public ChannelUpdate get_b() {
+               long ret = bindings.C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_get_b(this.ptr);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               ChannelUpdate ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new ChannelUpdate(null, ret); }
+               ret_hu_conv.ptrs_to.add(this);
+               return ret_hu_conv;
+       }
+
+       /**
+        * 
+        */
+       public ChannelUpdate get_c() {
+               long ret = bindings.C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_get_c(this.ptr);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               ChannelUpdate ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new ChannelUpdate(null, ret); }
+               ret_hu_conv.ptrs_to.add(this);
+               return ret_hu_conv;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
+       /**
+        * Creates a new tuple which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public ThreeTuple_ChannelAnnouncementChannelUpdateChannelUpdateZ clone() {
+               long ret = bindings.C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_clone(this.ptr);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               ThreeTuple_ChannelAnnouncementChannelUpdateChannelUpdateZ ret_hu_conv = new ThreeTuple_ChannelAnnouncementChannelUpdateChannelUpdateZ(null, ret);
+               ret_hu_conv.ptrs_to.add(this);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ from the contained elements.
+        */
+       public static ThreeTuple_ChannelAnnouncementChannelUpdateChannelUpdateZ of(ChannelAnnouncement a, ChannelUpdate b, ChannelUpdate c) {
+               long ret = bindings.C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_new(a == null ? 0 : a.ptr & ~1, b == null ? 0 : b.ptr & ~1, c == null ? 0 : c.ptr & ~1);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               ThreeTuple_ChannelAnnouncementChannelUpdateChannelUpdateZ ret_hu_conv = new ThreeTuple_ChannelAnnouncementChannelUpdateChannelUpdateZ(null, ret);
+               ret_hu_conv.ptrs_to.add(ret_hu_conv);
+               return ret_hu_conv;
+       }
+
 }
index b0b3a914221c7ff945ec90697f157ad54fa3365d..41931460991c361c8a38396f5df4361f5bca2923 100644 (file)
@@ -19,4 +19,62 @@ public class ThreeTuple_RawInvoice_u832InvoiceSignatureZ extends CommonBase {
                if (ptr != 0) { bindings.C3Tuple_RawInvoice_u832InvoiceSignatureZ_free(ptr); }
        }
 
+       /**
+        * 
+        */
+       public RawInvoice get_a() {
+               long ret = bindings.C3Tuple_RawInvoice_u832InvoiceSignatureZ_get_a(this.ptr);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               RawInvoice ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new RawInvoice(null, ret); }
+               ret_hu_conv.ptrs_to.add(this);
+               return ret_hu_conv;
+       }
+
+       /**
+        * 
+        */
+       public byte[] get_b() {
+               byte[] ret = bindings.C3Tuple_RawInvoice_u832InvoiceSignatureZ_get_b(this.ptr);
+               return ret;
+       }
+
+       /**
+        * 
+        */
+       public InvoiceSignature get_c() {
+               long ret = bindings.C3Tuple_RawInvoice_u832InvoiceSignatureZ_get_c(this.ptr);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               InvoiceSignature ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new InvoiceSignature(null, ret); }
+               ret_hu_conv.ptrs_to.add(this);
+               return ret_hu_conv;
+       }
+
+       long clone_ptr() {
+               long ret = bindings.C3Tuple_RawInvoice_u832InvoiceSignatureZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
+       /**
+        * Creates a new tuple which has the same data as `orig`
+        * but with all dynamically-allocated buffers duplicated in new buffers.
+        */
+       public ThreeTuple_RawInvoice_u832InvoiceSignatureZ clone() {
+               long ret = bindings.C3Tuple_RawInvoice_u832InvoiceSignatureZ_clone(this.ptr);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               ThreeTuple_RawInvoice_u832InvoiceSignatureZ ret_hu_conv = new ThreeTuple_RawInvoice_u832InvoiceSignatureZ(null, ret);
+               ret_hu_conv.ptrs_to.add(this);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Creates a new C3Tuple_RawInvoice_u832InvoiceSignatureZ from the contained elements.
+        */
+       public static ThreeTuple_RawInvoice_u832InvoiceSignatureZ of(RawInvoice a, byte[] b, InvoiceSignature c) {
+               long ret = bindings.C3Tuple_RawInvoice_u832InvoiceSignatureZ_new(a == null ? 0 : a.ptr & ~1, InternalUtils.check_arr_len(b, 32), c == null ? 0 : c.ptr & ~1);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               ThreeTuple_RawInvoice_u832InvoiceSignatureZ ret_hu_conv = new ThreeTuple_RawInvoice_u832InvoiceSignatureZ(null, ret);
+               ret_hu_conv.ptrs_to.add(ret_hu_conv);
+               return ret_hu_conv;
+       }
+
 }
index 027f9cd6751e793611ce8a1b7144c8ade77b0c5e..65fca265338a0061128a80d300a240ecb13da203 100644 (file)
@@ -47,7 +47,7 @@ public class TrustedClosingTransaction extends CommonBase {
         * because we are about to broadcast a holder transaction.
         */
        public byte[] sign(byte[] funding_key, byte[] funding_redeemscript, long channel_value_satoshis) {
-               byte[] ret = bindings.TrustedClosingTransaction_sign(this.ptr, funding_key, funding_redeemscript, channel_value_satoshis);
+               byte[] ret = bindings.TrustedClosingTransaction_sign(this.ptr, InternalUtils.check_arr_len(funding_key, 32), funding_redeemscript, channel_value_satoshis);
                return ret;
        }
 
index 0816d27cc90f0484a8c3ea9d4fff3a2ae36417ae..b282b7a93b97a8f375ac937e27f98463f08e2445 100644 (file)
@@ -61,7 +61,7 @@ public class TrustedCommitmentTransaction extends CommonBase {
         * The returned Vec has one entry for each HTLC, and in the same order.
         */
        public Result_CVec_SignatureZNoneZ get_htlc_sigs(byte[] htlc_base_key, DirectedChannelTransactionParameters channel_parameters) {
-               long ret = bindings.TrustedCommitmentTransaction_get_htlc_sigs(this.ptr, htlc_base_key, channel_parameters == null ? 0 : channel_parameters.ptr & ~1);
+               long ret = bindings.TrustedCommitmentTransaction_get_htlc_sigs(this.ptr, InternalUtils.check_arr_len(htlc_base_key, 32), channel_parameters == null ? 0 : channel_parameters.ptr & ~1);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_CVec_SignatureZNoneZ ret_hu_conv = Result_CVec_SignatureZNoneZ.constr_from_ptr(ret);
                this.ptrs_to.add(channel_parameters);
index 949ac9c2ae9618696814e3b2b3736d89ea55a1d5..8a560051a5f76e3f86bf20eb5351d0bacab3fa8a 100644 (file)
@@ -42,7 +42,7 @@ public class TwoTuple_BlockHashChannelManagerZ extends CommonBase {
         * Creates a new C2Tuple_BlockHashChannelManagerZ from the contained elements.
         */
        public static TwoTuple_BlockHashChannelManagerZ of(byte[] a, FeeEstimator b_fee_est, Watch b_chain_monitor, BroadcasterInterface b_tx_broadcaster, Logger b_logger, KeysInterface b_keys_manager, UserConfig b_config, ChainParameters b_params) {
-               long ret = bindings.C2Tuple_BlockHashChannelManagerZ_new(a, bindings.ChannelManager_new(b_fee_est == null ? 0 : b_fee_est.ptr, b_chain_monitor == null ? 0 : b_chain_monitor.ptr, b_tx_broadcaster == null ? 0 : b_tx_broadcaster.ptr, b_logger == null ? 0 : b_logger.ptr, b_keys_manager == null ? 0 : b_keys_manager.ptr, b_config == null ? 0 : b_config.ptr & ~1, b_params == null ? 0 : b_params.ptr & ~1));
+               long ret = bindings.C2Tuple_BlockHashChannelManagerZ_new(InternalUtils.check_arr_len(a, 32), bindings.ChannelManager_new(b_fee_est == null ? 0 : b_fee_est.ptr, b_chain_monitor == null ? 0 : b_chain_monitor.ptr, b_tx_broadcaster == null ? 0 : b_tx_broadcaster.ptr, b_logger == null ? 0 : b_logger.ptr, b_keys_manager == null ? 0 : b_keys_manager.ptr, b_config == null ? 0 : b_config.ptr & ~1, b_params == null ? 0 : b_params.ptr & ~1));
                if (ret >= 0 && ret <= 4096) { return null; }
                TwoTuple_BlockHashChannelManagerZ ret_hu_conv = new TwoTuple_BlockHashChannelManagerZ(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
index 5f15308731bb0bf4846a508d53bda2b0888336e8..4cedf1ff71521ae5333109470d82ea53cf8e94e0 100644 (file)
@@ -38,6 +38,11 @@ public class TwoTuple_BlockHashChannelMonitorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.C2Tuple_BlockHashChannelMonitorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new tuple which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
@@ -54,7 +59,7 @@ public class TwoTuple_BlockHashChannelMonitorZ extends CommonBase {
         * Creates a new C2Tuple_BlockHashChannelMonitorZ from the contained elements.
         */
        public static TwoTuple_BlockHashChannelMonitorZ of(byte[] a, ChannelMonitor b) {
-               long ret = bindings.C2Tuple_BlockHashChannelMonitorZ_new(a, b == null ? 0 : b.ptr & ~1);
+               long ret = bindings.C2Tuple_BlockHashChannelMonitorZ_new(InternalUtils.check_arr_len(a, 32), b == null ? 0 : b.ptr & ~1);
                if (ret >= 0 && ret <= 4096) { return null; }
                TwoTuple_BlockHashChannelMonitorZ ret_hu_conv = new TwoTuple_BlockHashChannelMonitorZ(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
index d0582880f73c61d0c24351e13e8c22fb7f2d150f..2cb31e27bfa37983156d66390bd776e66907362a 100644 (file)
@@ -38,6 +38,11 @@ public class TwoTuple_OutPointScriptZ extends CommonBase {
                return ret;
        }
 
+       long clone_ptr() {
+               long ret = bindings.C2Tuple_OutPointScriptZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new tuple which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 2f1cadedbf670a4aa12a147b69eb02b7d4ab2e02..2f8a8dd80c94a7c62cdcef1948447b1c56ca934f 100644 (file)
@@ -35,6 +35,11 @@ public class TwoTuple_PaymentHashPaymentIdZ extends CommonBase {
                return ret;
        }
 
+       long clone_ptr() {
+               long ret = bindings.C2Tuple_PaymentHashPaymentIdZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new tuple which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
@@ -51,7 +56,7 @@ public class TwoTuple_PaymentHashPaymentIdZ extends CommonBase {
         * Creates a new C2Tuple_PaymentHashPaymentIdZ from the contained elements.
         */
        public static TwoTuple_PaymentHashPaymentIdZ of(byte[] a, byte[] b) {
-               long ret = bindings.C2Tuple_PaymentHashPaymentIdZ_new(a, b);
+               long ret = bindings.C2Tuple_PaymentHashPaymentIdZ_new(InternalUtils.check_arr_len(a, 32), InternalUtils.check_arr_len(b, 32));
                if (ret >= 0 && ret <= 4096) { return null; }
                TwoTuple_PaymentHashPaymentIdZ ret_hu_conv = new TwoTuple_PaymentHashPaymentIdZ(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
index 0ba6ac805f5ee6efdb4935f4e2dd33278541ba0c..f443be0e79cea258cbe1ef77db26514e07eceee1 100644 (file)
@@ -35,6 +35,11 @@ public class TwoTuple_PaymentHashPaymentSecretZ extends CommonBase {
                return ret;
        }
 
+       long clone_ptr() {
+               long ret = bindings.C2Tuple_PaymentHashPaymentSecretZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new tuple which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
@@ -51,7 +56,7 @@ public class TwoTuple_PaymentHashPaymentSecretZ extends CommonBase {
         * Creates a new C2Tuple_PaymentHashPaymentSecretZ from the contained elements.
         */
        public static TwoTuple_PaymentHashPaymentSecretZ of(byte[] a, byte[] b) {
-               long ret = bindings.C2Tuple_PaymentHashPaymentSecretZ_new(a, b);
+               long ret = bindings.C2Tuple_PaymentHashPaymentSecretZ_new(InternalUtils.check_arr_len(a, 32), InternalUtils.check_arr_len(b, 32));
                if (ret >= 0 && ret <= 4096) { return null; }
                TwoTuple_PaymentHashPaymentSecretZ ret_hu_conv = new TwoTuple_PaymentHashPaymentSecretZ(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
index 90a42ae8fe69658c754df74e26c55d16a2c3ad2b..780d94ffe6421e201946379cd3e91fc693984960 100644 (file)
@@ -38,6 +38,11 @@ public class TwoTuple_PublicKeyTypeZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.C2Tuple_PublicKeyTypeZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new tuple which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
@@ -54,7 +59,7 @@ public class TwoTuple_PublicKeyTypeZ extends CommonBase {
         * Creates a new C2Tuple_PublicKeyTypeZ from the contained elements.
         */
        public static TwoTuple_PublicKeyTypeZ of(byte[] a, Type b) {
-               long ret = bindings.C2Tuple_PublicKeyTypeZ_new(a, b == null ? 0 : b.ptr);
+               long ret = bindings.C2Tuple_PublicKeyTypeZ_new(InternalUtils.check_arr_len(a, 33), b == null ? 0 : b.ptr);
                if (ret >= 0 && ret <= 4096) { return null; }
                TwoTuple_PublicKeyTypeZ ret_hu_conv = new TwoTuple_PublicKeyTypeZ(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
index 3118746c7978273ddf866fc5a988e9b489c1974b..1178bd6629abac1916f3c18db3d863163fac545d 100644 (file)
@@ -35,6 +35,11 @@ public class TwoTuple_SignatureCVec_SignatureZZ extends CommonBase {
                return ret;
        }
 
+       long clone_ptr() {
+               long ret = bindings.C2Tuple_SignatureCVec_SignatureZZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new tuple which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
@@ -51,7 +56,7 @@ public class TwoTuple_SignatureCVec_SignatureZZ extends CommonBase {
         * Creates a new C2Tuple_SignatureCVec_SignatureZZ from the contained elements.
         */
        public static TwoTuple_SignatureCVec_SignatureZZ of(byte[] a, byte[][] b) {
-               long ret = bindings.C2Tuple_SignatureCVec_SignatureZZ_new(a, b);
+               long ret = bindings.C2Tuple_SignatureCVec_SignatureZZ_new(InternalUtils.check_arr_len(a, 64), b != null ? Arrays.stream(b).map(b_conv_8 -> InternalUtils.check_arr_len(b_conv_8, 64)).toArray(byte[][]::new) : null);
                if (ret >= 0 && ret <= 4096) { return null; }
                TwoTuple_SignatureCVec_SignatureZZ ret_hu_conv = new TwoTuple_SignatureCVec_SignatureZZ(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
index 6ea8960e40f52868e8a04d9ab32a48dd19734904..49fd339be8c4f0946a71ee19bbef0deb37f20997 100644 (file)
@@ -42,6 +42,11 @@ public class TwoTuple_TxidCVec_C2Tuple_u32ScriptZZZ extends CommonBase {
                return ret_conv_21_arr;
        }
 
+       long clone_ptr() {
+               long ret = bindings.C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new tuple which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
@@ -58,7 +63,7 @@ public class TwoTuple_TxidCVec_C2Tuple_u32ScriptZZZ extends CommonBase {
         * Creates a new C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ from the contained elements.
         */
        public static TwoTuple_TxidCVec_C2Tuple_u32ScriptZZZ of(byte[] a, TwoTuple_u32ScriptZ[] b) {
-               long ret = bindings.C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_new(a, b != null ? Arrays.stream(b).mapToLong(b_conv_21 -> b_conv_21 != null ? b_conv_21.ptr : 0).toArray() : null);
+               long ret = bindings.C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_new(InternalUtils.check_arr_len(a, 32), b != null ? Arrays.stream(b).mapToLong(b_conv_21 -> b_conv_21 != null ? b_conv_21.ptr : 0).toArray() : null);
                if (ret >= 0 && ret <= 4096) { return null; }
                TwoTuple_TxidCVec_C2Tuple_u32ScriptZZZ ret_hu_conv = new TwoTuple_TxidCVec_C2Tuple_u32ScriptZZZ(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
index 926a55b16a0de729b4fcccfee3e350ea8ba6af4e..b3a0b200ae43de3b81e415434689eb1cc39c82f5 100644 (file)
@@ -42,6 +42,11 @@ public class TwoTuple_TxidCVec_C2Tuple_u32TxOutZZZ extends CommonBase {
                return ret_conv_20_arr;
        }
 
+       long clone_ptr() {
+               long ret = bindings.C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new tuple which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
@@ -58,7 +63,7 @@ public class TwoTuple_TxidCVec_C2Tuple_u32TxOutZZZ extends CommonBase {
         * Creates a new C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ from the contained elements.
         */
        public static TwoTuple_TxidCVec_C2Tuple_u32TxOutZZZ of(byte[] a, TwoTuple_u32TxOutZ[] b) {
-               long ret = bindings.C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_new(a, b != null ? Arrays.stream(b).mapToLong(b_conv_20 -> b_conv_20 != null ? b_conv_20.ptr : 0).toArray() : null);
+               long ret = bindings.C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_new(InternalUtils.check_arr_len(a, 32), b != null ? Arrays.stream(b).mapToLong(b_conv_20 -> b_conv_20 != null ? b_conv_20.ptr : 0).toArray() : null);
                if (ret >= 0 && ret <= 4096) { return null; }
                TwoTuple_TxidCVec_C2Tuple_u32TxOutZZZ ret_hu_conv = new TwoTuple_TxidCVec_C2Tuple_u32TxOutZZZ(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
index d7c869363fac5e1d5aae6777f1218387ef9dc55f..0579bcec22301d80048adbb74bb43079cacef5b9 100644 (file)
@@ -35,6 +35,11 @@ public class TwoTuple_u32ScriptZ extends CommonBase {
                return ret;
        }
 
+       long clone_ptr() {
+               long ret = bindings.C2Tuple_u32ScriptZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new tuple which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index fba6cad226edbc7f0869865e7e1a554e2a137316..5928f42886dbdce785a84c4192db1c18326f22ff 100644 (file)
@@ -37,6 +37,11 @@ public class TwoTuple_u32TxOutZ extends CommonBase {
                return ret_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.C2Tuple_u32TxOutZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new tuple which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 73d02f05fad29f4a8d7da0c2bbb5aa6139f2d6a2..459dfea1a515e722f2b1742a8bc7aa3fb1128a45 100644 (file)
@@ -35,6 +35,11 @@ public class TwoTuple_usizeTransactionZ extends CommonBase {
                return ret;
        }
 
+       long clone_ptr() {
+               long ret = bindings.C2Tuple_usizeTransactionZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a new tuple which has the same data as `orig`
         * but with all dynamically-allocated buffers duplicated in new buffers.
index 22e03cf428c886b9561bfaaa8b4e638daefcb641..f976a6af8ace160b90e5008584792d6af85fc1d8 100644 (file)
@@ -41,7 +41,7 @@ public class TxCreationKeys extends CommonBase {
         * The broadcaster's per-commitment public key which was used to derive the other keys.
         */
        public void set_per_commitment_point(byte[] val) {
-               bindings.TxCreationKeys_set_per_commitment_point(this.ptr, val);
+               bindings.TxCreationKeys_set_per_commitment_point(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        /**
@@ -60,7 +60,7 @@ public class TxCreationKeys extends CommonBase {
         * an old state.
         */
        public void set_revocation_key(byte[] val) {
-               bindings.TxCreationKeys_set_revocation_key(this.ptr, val);
+               bindings.TxCreationKeys_set_revocation_key(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        /**
@@ -75,7 +75,7 @@ public class TxCreationKeys extends CommonBase {
         * Broadcaster's HTLC Key
         */
        public void set_broadcaster_htlc_key(byte[] val) {
-               bindings.TxCreationKeys_set_broadcaster_htlc_key(this.ptr, val);
+               bindings.TxCreationKeys_set_broadcaster_htlc_key(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        /**
@@ -90,7 +90,7 @@ public class TxCreationKeys extends CommonBase {
         * Countersignatory's HTLC Key
         */
        public void set_countersignatory_htlc_key(byte[] val) {
-               bindings.TxCreationKeys_set_countersignatory_htlc_key(this.ptr, val);
+               bindings.TxCreationKeys_set_countersignatory_htlc_key(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        /**
@@ -105,20 +105,25 @@ public class TxCreationKeys extends CommonBase {
         * Broadcaster's Payment Key (which isn't allowed to be spent from for some delay)
         */
        public void set_broadcaster_delayed_payment_key(byte[] val) {
-               bindings.TxCreationKeys_set_broadcaster_delayed_payment_key(this.ptr, val);
+               bindings.TxCreationKeys_set_broadcaster_delayed_payment_key(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        /**
         * Constructs a new TxCreationKeys given each field
         */
        public static TxCreationKeys of(byte[] per_commitment_point_arg, byte[] revocation_key_arg, byte[] broadcaster_htlc_key_arg, byte[] countersignatory_htlc_key_arg, byte[] broadcaster_delayed_payment_key_arg) {
-               long ret = bindings.TxCreationKeys_new(per_commitment_point_arg, revocation_key_arg, broadcaster_htlc_key_arg, countersignatory_htlc_key_arg, broadcaster_delayed_payment_key_arg);
+               long ret = bindings.TxCreationKeys_new(InternalUtils.check_arr_len(per_commitment_point_arg, 33), InternalUtils.check_arr_len(revocation_key_arg, 33), InternalUtils.check_arr_len(broadcaster_htlc_key_arg, 33), InternalUtils.check_arr_len(countersignatory_htlc_key_arg, 33), InternalUtils.check_arr_len(broadcaster_delayed_payment_key_arg, 33));
                if (ret >= 0 && ret <= 4096) { return null; }
                TxCreationKeys ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new TxCreationKeys(null, ret); }
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.TxCreationKeys_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the TxCreationKeys
         */
@@ -153,7 +158,7 @@ public class TxCreationKeys extends CommonBase {
         * Key set is asymmetric and can't be used as part of counter-signatory set of transactions.
         */
        public static Result_TxCreationKeysErrorZ derive_new(byte[] per_commitment_point, byte[] broadcaster_delayed_payment_base, byte[] broadcaster_htlc_base, byte[] countersignatory_revocation_base, byte[] countersignatory_htlc_base) {
-               long ret = bindings.TxCreationKeys_derive_new(per_commitment_point, broadcaster_delayed_payment_base, broadcaster_htlc_base, countersignatory_revocation_base, countersignatory_htlc_base);
+               long ret = bindings.TxCreationKeys_derive_new(InternalUtils.check_arr_len(per_commitment_point, 33), InternalUtils.check_arr_len(broadcaster_delayed_payment_base, 33), InternalUtils.check_arr_len(broadcaster_htlc_base, 33), InternalUtils.check_arr_len(countersignatory_revocation_base, 33), InternalUtils.check_arr_len(countersignatory_htlc_base, 33));
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_TxCreationKeysErrorZ ret_hu_conv = Result_TxCreationKeysErrorZ.constr_from_ptr(ret);
                return ret_hu_conv;
@@ -164,7 +169,7 @@ public class TxCreationKeys extends CommonBase {
         * Key set is asymmetric and can't be used as part of counter-signatory set of transactions.
         */
        public static Result_TxCreationKeysErrorZ from_channel_static_keys(byte[] per_commitment_point, ChannelPublicKeys broadcaster_keys, ChannelPublicKeys countersignatory_keys) {
-               long ret = bindings.TxCreationKeys_from_channel_static_keys(per_commitment_point, broadcaster_keys == null ? 0 : broadcaster_keys.ptr & ~1, countersignatory_keys == null ? 0 : countersignatory_keys.ptr & ~1);
+               long ret = bindings.TxCreationKeys_from_channel_static_keys(InternalUtils.check_arr_len(per_commitment_point, 33), broadcaster_keys == null ? 0 : broadcaster_keys.ptr & ~1, countersignatory_keys == null ? 0 : countersignatory_keys.ptr & ~1);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_TxCreationKeysErrorZ ret_hu_conv = Result_TxCreationKeysErrorZ.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(broadcaster_keys);
index 1bfb88d122267ea76140833284ac8ed7898739b8..f466a1c1aed68a4caaa4d2686ec3af0a00d2b953 100644 (file)
@@ -82,6 +82,11 @@ public class Type extends CommonBase {
                return ret;
        }
 
+       long clone_ptr() {
+               long ret = bindings.Type_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of a Type
         */
index 4d0b7c75069510ea4a1d54d659720751849e65ae..0eab38d29ec74e2cd9c0eb82fca66bf9dc202ab8 100644 (file)
@@ -49,7 +49,7 @@ public class UnsignedChannelAnnouncement extends CommonBase {
         * The genesis hash of the blockchain where the channel is to be opened
         */
        public void set_chain_hash(byte[] val) {
-               bindings.UnsignedChannelAnnouncement_set_chain_hash(this.ptr, val);
+               bindings.UnsignedChannelAnnouncement_set_chain_hash(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        /**
@@ -79,7 +79,7 @@ public class UnsignedChannelAnnouncement extends CommonBase {
         * One of the two node_ids which are endpoints of this channel
         */
        public void set_node_id_1(byte[] val) {
-               bindings.UnsignedChannelAnnouncement_set_node_id_1(this.ptr, val);
+               bindings.UnsignedChannelAnnouncement_set_node_id_1(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        /**
@@ -94,7 +94,7 @@ public class UnsignedChannelAnnouncement extends CommonBase {
         * The other of the two node_ids which are endpoints of this channel
         */
        public void set_node_id_2(byte[] val) {
-               bindings.UnsignedChannelAnnouncement_set_node_id_2(this.ptr, val);
+               bindings.UnsignedChannelAnnouncement_set_node_id_2(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        /**
@@ -109,7 +109,7 @@ public class UnsignedChannelAnnouncement extends CommonBase {
         * The funding key for the first node
         */
        public void set_bitcoin_key_1(byte[] val) {
-               bindings.UnsignedChannelAnnouncement_set_bitcoin_key_1(this.ptr, val);
+               bindings.UnsignedChannelAnnouncement_set_bitcoin_key_1(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        /**
@@ -124,7 +124,12 @@ public class UnsignedChannelAnnouncement extends CommonBase {
         * The funding key for the second node
         */
        public void set_bitcoin_key_2(byte[] val) {
-               bindings.UnsignedChannelAnnouncement_set_bitcoin_key_2(this.ptr, val);
+               bindings.UnsignedChannelAnnouncement_set_bitcoin_key_2(this.ptr, InternalUtils.check_arr_len(val, 33));
+       }
+
+       long clone_ptr() {
+               long ret = bindings.UnsignedChannelAnnouncement_clone_ptr(this.ptr);
+               return ret;
        }
 
        /**
index 91a5557d2843e32f96435c55b1a7794ad7879fed..5779143763efe6802073b833e2843bcec4f7fdf5 100644 (file)
@@ -31,7 +31,7 @@ public class UnsignedChannelUpdate extends CommonBase {
         * The genesis hash of the blockchain where the channel is to be opened
         */
        public void set_chain_hash(byte[] val) {
-               bindings.UnsignedChannelUpdate_set_chain_hash(this.ptr, val);
+               bindings.UnsignedChannelUpdate_set_chain_hash(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        /**
@@ -153,6 +153,11 @@ public class UnsignedChannelUpdate extends CommonBase {
                bindings.UnsignedChannelUpdate_set_fee_proportional_millionths(this.ptr, val);
        }
 
+       long clone_ptr() {
+               long ret = bindings.UnsignedChannelUpdate_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the UnsignedChannelUpdate
         */
index 57021d8fda74b8454976c1f3db17d28badb76c3d..f558312ee1c73f83d900010ec7f83f72dd345e48 100644 (file)
@@ -66,7 +66,7 @@ public class UnsignedNodeAnnouncement extends CommonBase {
         * to this node).
         */
        public void set_node_id(byte[] val) {
-               bindings.UnsignedNodeAnnouncement_set_node_id(this.ptr, val);
+               bindings.UnsignedNodeAnnouncement_set_node_id(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        /**
@@ -81,7 +81,7 @@ public class UnsignedNodeAnnouncement extends CommonBase {
         * An RGB color for UI purposes
         */
        public void set_rgb(byte[] val) {
-               bindings.UnsignedNodeAnnouncement_set_rgb(this.ptr, val);
+               bindings.UnsignedNodeAnnouncement_set_rgb(this.ptr, InternalUtils.check_arr_len(val, 3));
        }
 
        /**
@@ -98,7 +98,7 @@ public class UnsignedNodeAnnouncement extends CommonBase {
         * of uniqueness.
         */
        public void set_alias(byte[] val) {
-               bindings.UnsignedNodeAnnouncement_set_alias(this.ptr, val);
+               bindings.UnsignedNodeAnnouncement_set_alias(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        /**
@@ -108,6 +108,11 @@ public class UnsignedNodeAnnouncement extends CommonBase {
                bindings.UnsignedNodeAnnouncement_set_addresses(this.ptr, val != null ? Arrays.stream(val).mapToLong(val_conv_12 -> val_conv_12.ptr).toArray() : null);
        }
 
+       long clone_ptr() {
+               long ret = bindings.UnsignedNodeAnnouncement_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the UnsignedNodeAnnouncement
         */
index 589d5548b0d827ac937b6e1936c928920e74364d..5e9e25a212872b47cfb5bdf4daf7737d691297e0 100644 (file)
@@ -31,7 +31,7 @@ public class UpdateAddHTLC extends CommonBase {
         * The channel ID
         */
        public void set_channel_id(byte[] val) {
-               bindings.UpdateAddHTLC_set_channel_id(this.ptr, val);
+               bindings.UpdateAddHTLC_set_channel_id(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        /**
@@ -76,7 +76,7 @@ public class UpdateAddHTLC extends CommonBase {
         * The payment hash, the pre-image of which controls HTLC redemption
         */
        public void set_payment_hash(byte[] val) {
-               bindings.UpdateAddHTLC_set_payment_hash(this.ptr, val);
+               bindings.UpdateAddHTLC_set_payment_hash(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        /**
@@ -94,6 +94,11 @@ public class UpdateAddHTLC extends CommonBase {
                bindings.UpdateAddHTLC_set_cltv_expiry(this.ptr, val);
        }
 
+       long clone_ptr() {
+               long ret = bindings.UpdateAddHTLC_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the UpdateAddHTLC
         */
index 3bcb2b0a584e1d45cd0d71e538dde253055b2647..4878f34054131f29d1b05fece4f271f3df09a8fc 100644 (file)
@@ -31,7 +31,7 @@ public class UpdateFailHTLC extends CommonBase {
         * The channel ID
         */
        public void set_channel_id(byte[] val) {
-               bindings.UpdateFailHTLC_set_channel_id(this.ptr, val);
+               bindings.UpdateFailHTLC_set_channel_id(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        /**
@@ -49,6 +49,11 @@ public class UpdateFailHTLC extends CommonBase {
                bindings.UpdateFailHTLC_set_htlc_id(this.ptr, val);
        }
 
+       long clone_ptr() {
+               long ret = bindings.UpdateFailHTLC_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the UpdateFailHTLC
         */
index 68e48eff9e82f43d8669dc7a733e6a293c1eb002..29c7eb568ce81a922c55f4b11a603a8d52a39915 100644 (file)
@@ -31,7 +31,7 @@ public class UpdateFailMalformedHTLC extends CommonBase {
         * The channel ID
         */
        public void set_channel_id(byte[] val) {
-               bindings.UpdateFailMalformedHTLC_set_channel_id(this.ptr, val);
+               bindings.UpdateFailMalformedHTLC_set_channel_id(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        /**
@@ -64,6 +64,11 @@ public class UpdateFailMalformedHTLC extends CommonBase {
                bindings.UpdateFailMalformedHTLC_set_failure_code(this.ptr, val);
        }
 
+       long clone_ptr() {
+               long ret = bindings.UpdateFailMalformedHTLC_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the UpdateFailMalformedHTLC
         */
index d5f5a6e64bf175a16f3e316b94fb23724dab6426..2df919fee837b192088012f40aefed2cda5df553 100644 (file)
@@ -31,7 +31,7 @@ public class UpdateFee extends CommonBase {
         * The channel ID
         */
        public void set_channel_id(byte[] val) {
-               bindings.UpdateFee_set_channel_id(this.ptr, val);
+               bindings.UpdateFee_set_channel_id(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        /**
@@ -53,13 +53,18 @@ public class UpdateFee extends CommonBase {
         * Constructs a new UpdateFee given each field
         */
        public static UpdateFee of(byte[] channel_id_arg, int feerate_per_kw_arg) {
-               long ret = bindings.UpdateFee_new(channel_id_arg, feerate_per_kw_arg);
+               long ret = bindings.UpdateFee_new(InternalUtils.check_arr_len(channel_id_arg, 32), feerate_per_kw_arg);
                if (ret >= 0 && ret <= 4096) { return null; }
                UpdateFee ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new UpdateFee(null, ret); }
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.UpdateFee_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the UpdateFee
         */
index 0b34f89869b7c4680a420611ca0670d35bc62653..16fd61a6a691ff906e4380d9c0cdad45581cf32c 100644 (file)
@@ -31,7 +31,7 @@ public class UpdateFulfillHTLC extends CommonBase {
         * The channel ID
         */
        public void set_channel_id(byte[] val) {
-               bindings.UpdateFulfillHTLC_set_channel_id(this.ptr, val);
+               bindings.UpdateFulfillHTLC_set_channel_id(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        /**
@@ -61,20 +61,25 @@ public class UpdateFulfillHTLC extends CommonBase {
         * The pre-image of the payment hash, allowing HTLC redemption
         */
        public void set_payment_preimage(byte[] val) {
-               bindings.UpdateFulfillHTLC_set_payment_preimage(this.ptr, val);
+               bindings.UpdateFulfillHTLC_set_payment_preimage(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        /**
         * Constructs a new UpdateFulfillHTLC given each field
         */
        public static UpdateFulfillHTLC of(byte[] channel_id_arg, long htlc_id_arg, byte[] payment_preimage_arg) {
-               long ret = bindings.UpdateFulfillHTLC_new(channel_id_arg, htlc_id_arg, payment_preimage_arg);
+               long ret = bindings.UpdateFulfillHTLC_new(InternalUtils.check_arr_len(channel_id_arg, 32), htlc_id_arg, InternalUtils.check_arr_len(payment_preimage_arg, 32));
                if (ret >= 0 && ret <= 4096) { return null; }
                UpdateFulfillHTLC ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new UpdateFulfillHTLC(null, ret); }
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.UpdateFulfillHTLC_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the UpdateFulfillHTLC
         */
index 2037a9f1e7a94980f88c5f99aeda5902e3d87230..055f38fe4903ab3c6a309329e55a32c6ed5da6b6 100644 (file)
@@ -132,6 +132,11 @@ public class UserConfig extends CommonBase {
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.UserConfig_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the UserConfig
         */
index dac1f32ce06ef0e9da6ea26cc7ecf08f8113daf9..f3bc9b1704ac32640ea9107ca13ff3900b0b011a 100644 (file)
@@ -1,17 +1,38 @@
 package org.ldk.structs;
 import org.ldk.impl.bindings;
+import org.ldk.enums.*;
+import org.ldk.util.*;
 import java.util.Arrays;
 import javax.annotation.Nullable;
-import org.ldk.enums.*;
 
 public class UtilMethods {
+       /**
+        * Read a ClosureReason from a byte array, created by ClosureReason_write
+        */
+       public static Result_COption_ClosureReasonZDecodeErrorZ ClosureReason_read(byte[] ser) {
+               long ret = bindings.ClosureReason_read(ser);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_COption_ClosureReasonZDecodeErrorZ ret_hu_conv = Result_COption_ClosureReasonZDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       /**
+        * Read a Event from a byte array, created by Event_write
+        */
+       public static Result_COption_EventZDecodeErrorZ Event_read(byte[] ser) {
+               long ret = bindings.Event_read(ser);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_COption_EventZDecodeErrorZ ret_hu_conv = Result_COption_EventZDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
        /**
         * Creates a digital signature of a message given a SecretKey, like the node's secret.
         * A receiver knowing the PublicKey (e.g. the node's id) and the message can be sure that the signature was generated by the caller.
         * Signatures are EC recoverable, meaning that given the message and the signature the PublicKey of the signer can be extracted.
         */
        public static Result_StringErrorZ sign(byte[] msg, byte[] sk) {
-               long ret = bindings.sign(msg, sk);
+               long ret = bindings.sign(msg, InternalUtils.check_arr_len(sk, 32));
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_StringErrorZ ret_hu_conv = Result_StringErrorZ.constr_from_ptr(ret);
                return ret_hu_conv;
@@ -32,10 +53,20 @@ public class UtilMethods {
         * and the PublicKey.
         */
        public static boolean verify(byte[] msg, java.lang.String sig, byte[] pk) {
-               boolean ret = bindings.verify(msg, sig, pk);
+               boolean ret = bindings.verify(msg, sig, InternalUtils.check_arr_len(pk, 33));
                return ret;
        }
 
+       /**
+        * Read a MonitorEvent from a byte array, created by MonitorEvent_write
+        */
+       public static Result_COption_MonitorEventZDecodeErrorZ MonitorEvent_read(byte[] ser) {
+               long ret = bindings.MonitorEvent_read(ser);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_COption_MonitorEventZDecodeErrorZ ret_hu_conv = Result_COption_MonitorEventZDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
        /**
         * Read a C2Tuple_BlockHashChannelMonitorZ from a byte array, created by C2Tuple_BlockHashChannelMonitorZ_write
         */
@@ -68,7 +99,7 @@ public class UtilMethods {
         * Build the commitment secret from the seed and the commitment number
         */
        public static byte[] build_commitment_secret(byte[] commitment_seed, long idx) {
-               byte[] ret = bindings.build_commitment_secret(commitment_seed, idx);
+               byte[] ret = bindings.build_commitment_secret(InternalUtils.check_arr_len(commitment_seed, 32), idx);
                return ret;
        }
 
@@ -88,7 +119,7 @@ public class UtilMethods {
         * generated (ie our own).
         */
        public static Result_SecretKeyErrorZ derive_private_key(byte[] per_commitment_point, byte[] base_secret) {
-               long ret = bindings.derive_private_key(per_commitment_point, base_secret);
+               long ret = bindings.derive_private_key(InternalUtils.check_arr_len(per_commitment_point, 33), InternalUtils.check_arr_len(base_secret, 32));
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_SecretKeyErrorZ ret_hu_conv = Result_SecretKeyErrorZ.constr_from_ptr(ret);
                return ret_hu_conv;
@@ -103,7 +134,7 @@ public class UtilMethods {
         * generated (ie our own).
         */
        public static Result_PublicKeyErrorZ derive_public_key(byte[] per_commitment_point, byte[] base_point) {
-               long ret = bindings.derive_public_key(per_commitment_point, base_point);
+               long ret = bindings.derive_public_key(InternalUtils.check_arr_len(per_commitment_point, 33), InternalUtils.check_arr_len(base_point, 33));
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_PublicKeyErrorZ ret_hu_conv = Result_PublicKeyErrorZ.constr_from_ptr(ret);
                return ret_hu_conv;
@@ -121,7 +152,7 @@ public class UtilMethods {
         * generated (ie our own).
         */
        public static Result_SecretKeyErrorZ derive_private_revocation_key(byte[] per_commitment_secret, byte[] countersignatory_revocation_base_secret) {
-               long ret = bindings.derive_private_revocation_key(per_commitment_secret, countersignatory_revocation_base_secret);
+               long ret = bindings.derive_private_revocation_key(InternalUtils.check_arr_len(per_commitment_secret, 32), InternalUtils.check_arr_len(countersignatory_revocation_base_secret, 32));
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_SecretKeyErrorZ ret_hu_conv = Result_SecretKeyErrorZ.constr_from_ptr(ret);
                return ret_hu_conv;
@@ -141,7 +172,7 @@ public class UtilMethods {
         * generated (ie our own).
         */
        public static Result_PublicKeyErrorZ derive_public_revocation_key(byte[] per_commitment_point, byte[] countersignatory_revocation_base_point) {
-               long ret = bindings.derive_public_revocation_key(per_commitment_point, countersignatory_revocation_base_point);
+               long ret = bindings.derive_public_revocation_key(InternalUtils.check_arr_len(per_commitment_point, 33), InternalUtils.check_arr_len(countersignatory_revocation_base_point, 33));
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_PublicKeyErrorZ ret_hu_conv = Result_PublicKeyErrorZ.constr_from_ptr(ret);
                return ret_hu_conv;
@@ -153,7 +184,7 @@ public class UtilMethods {
         * Encumbering a `to_holder` output on a commitment transaction or 2nd-stage HTLC transactions.
         */
        public static byte[] get_revokeable_redeemscript(byte[] revocation_key, short contest_delay, byte[] broadcaster_delayed_payment_key) {
-               byte[] ret = bindings.get_revokeable_redeemscript(revocation_key, contest_delay, broadcaster_delayed_payment_key);
+               byte[] ret = bindings.get_revokeable_redeemscript(InternalUtils.check_arr_len(revocation_key, 33), contest_delay, InternalUtils.check_arr_len(broadcaster_delayed_payment_key, 33));
                return ret;
        }
 
@@ -173,7 +204,7 @@ public class UtilMethods {
         * Note that the order of funding public keys does not matter.
         */
        public static byte[] make_funding_redeemscript(byte[] broadcaster, byte[] countersignatory) {
-               byte[] ret = bindings.make_funding_redeemscript(broadcaster, countersignatory);
+               byte[] ret = bindings.make_funding_redeemscript(InternalUtils.check_arr_len(broadcaster, 33), InternalUtils.check_arr_len(countersignatory, 33));
                return ret;
        }
 
@@ -187,7 +218,7 @@ public class UtilMethods {
         * commitment transaction).
         */
        public static byte[] build_htlc_transaction(byte[] commitment_txid, int feerate_per_kw, short contest_delay, HTLCOutputInCommitment htlc, byte[] broadcaster_delayed_payment_key, byte[] revocation_key) {
-               byte[] ret = bindings.build_htlc_transaction(commitment_txid, feerate_per_kw, contest_delay, htlc == null ? 0 : htlc.ptr & ~1, broadcaster_delayed_payment_key, revocation_key);
+               byte[] ret = bindings.build_htlc_transaction(InternalUtils.check_arr_len(commitment_txid, 32), feerate_per_kw, contest_delay, htlc == null ? 0 : htlc.ptr & ~1, InternalUtils.check_arr_len(broadcaster_delayed_payment_key, 33), InternalUtils.check_arr_len(revocation_key, 33));
                // this.ptrs_to.add(htlc);
                return ret;
        }
@@ -201,10 +232,20 @@ public class UtilMethods {
         * \"decrypt\" the commitment transaction number given a commitment transaction on-chain.
         */
        public static long get_commitment_transaction_number_obscure_factor(byte[] broadcaster_payment_basepoint, byte[] countersignatory_payment_basepoint, boolean outbound_from_broadcaster) {
-               long ret = bindings.get_commitment_transaction_number_obscure_factor(broadcaster_payment_basepoint, countersignatory_payment_basepoint, outbound_from_broadcaster);
+               long ret = bindings.get_commitment_transaction_number_obscure_factor(InternalUtils.check_arr_len(broadcaster_payment_basepoint, 33), InternalUtils.check_arr_len(countersignatory_payment_basepoint, 33), outbound_from_broadcaster);
                return ret;
        }
 
+       /**
+        * Read a NetworkUpdate from a byte array, created by NetworkUpdate_write
+        */
+       public static Result_COption_NetworkUpdateZDecodeErrorZ NetworkUpdate_read(byte[] ser) {
+               long ret = bindings.NetworkUpdate_read(ser);
+               if (ret >= 0 && ret <= 4096) { return null; }
+               Result_COption_NetworkUpdateZDecodeErrorZ ret_hu_conv = Result_COption_NetworkUpdateZDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
        /**
         * Finds a route from us (payer) to the given target node (payee).
         * 
@@ -238,7 +279,7 @@ public class UtilMethods {
         * Note that first_hops (or a relevant inner pointer) may be NULL or all-0s to represent None
         */
        public static Result_RouteLightningErrorZ find_route(byte[] our_node_pubkey, RouteParameters params, NetworkGraph network, @Nullable ChannelDetails[] first_hops, Logger logger, Score scorer) {
-               long ret = bindings.find_route(our_node_pubkey, params == null ? 0 : params.ptr & ~1, network == null ? 0 : network.ptr & ~1, first_hops != null ? Arrays.stream(first_hops).mapToLong(first_hops_conv_16 -> first_hops_conv_16 == null ? 0 : first_hops_conv_16.ptr & ~1).toArray() : null, logger == null ? 0 : logger.ptr, scorer == null ? 0 : scorer.ptr);
+               long ret = bindings.find_route(InternalUtils.check_arr_len(our_node_pubkey, 33), params == null ? 0 : params.ptr & ~1, network == null ? 0 : network.ptr & ~1, first_hops != null ? Arrays.stream(first_hops).mapToLong(first_hops_conv_16 -> first_hops_conv_16 == null ? 0 : first_hops_conv_16.ptr & ~1).toArray() : null, logger == null ? 0 : logger.ptr, scorer == null ? 0 : scorer.ptr);
                if (ret >= 0 && ret <= 4096) { return null; }
                Result_RouteLightningErrorZ ret_hu_conv = Result_RouteLightningErrorZ.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(params);
index be66801bf7bae8108d3c6bbd96a5982538f3b7ab..a8bc48e83d429586b9d7b980fbe22459aad6ec8d 100644 (file)
@@ -89,7 +89,7 @@ public class Watch extends CommonBase {
                                ChannelMonitor monitor_hu_conv = null; if (monitor < 0 || monitor > 4096) { monitor_hu_conv = new ChannelMonitor(null, monitor); }
                                monitor_hu_conv.ptrs_to.add(this);
                                Result_NoneChannelMonitorUpdateErrZ ret = arg.watch_channel(funding_txo_hu_conv, monitor_hu_conv);
-                               long result = ret != null ? ret.ptr : 0;
+                               long result = ret == null ? 0 : ret.clone_ptr();
                                return result;
                        }
                        @Override public long update_channel(long funding_txo, long update) {
@@ -98,12 +98,12 @@ public class Watch extends CommonBase {
                                ChannelMonitorUpdate update_hu_conv = null; if (update < 0 || update > 4096) { update_hu_conv = new ChannelMonitorUpdate(null, update); }
                                update_hu_conv.ptrs_to.add(this);
                                Result_NoneChannelMonitorUpdateErrZ ret = arg.update_channel(funding_txo_hu_conv, update_hu_conv);
-                               long result = ret != null ? ret.ptr : 0;
+                               long result = ret == null ? 0 : ret.clone_ptr();
                                return result;
                        }
                        @Override public long[] release_pending_monitor_events() {
                                MonitorEvent[] ret = arg.release_pending_monitor_events();
-                               long[] result = ret != null ? Arrays.stream(ret).mapToLong(ret_conv_14 -> ret_conv_14.ptr).toArray() : null;
+                               long[] result = ret != null ? Arrays.stream(ret).mapToLong(ret_conv_14 -> ret_conv_14 == null ? 0 : ret_conv_14.clone_ptr()).toArray() : null;
                                return result;
                        }
                });
index 2014286be97b0751c91150819184870f7be2d40b..c0e7403d42dd5ae98aa468c6bada321895826ad9 100644 (file)
@@ -46,7 +46,7 @@ public class WatchedOutput extends CommonBase {
         * Note that val (or a relevant inner pointer) may be NULL or all-0s to represent None
         */
        public void set_block_hash(@Nullable byte[] val) {
-               bindings.WatchedOutput_set_block_hash(this.ptr, val);
+               bindings.WatchedOutput_set_block_hash(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        /**
@@ -86,13 +86,18 @@ public class WatchedOutput extends CommonBase {
         * Constructs a new WatchedOutput given each field
         */
        public static WatchedOutput of(byte[] block_hash_arg, OutPoint outpoint_arg, byte[] script_pubkey_arg) {
-               long ret = bindings.WatchedOutput_new(block_hash_arg, outpoint_arg == null ? 0 : outpoint_arg.ptr & ~1, script_pubkey_arg);
+               long ret = bindings.WatchedOutput_new(InternalUtils.check_arr_len(block_hash_arg, 32), outpoint_arg == null ? 0 : outpoint_arg.ptr & ~1, script_pubkey_arg);
                if (ret >= 0 && ret <= 4096) { return null; }
                WatchedOutput ret_hu_conv = null; if (ret < 0 || ret > 4096) { ret_hu_conv = new WatchedOutput(null, ret); }
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       long clone_ptr() {
+               long ret = bindings.WatchedOutput_clone_ptr(this.ptr);
+               return ret;
+       }
+
        /**
         * Creates a copy of the WatchedOutput
         */
diff --git a/src/main/java/org/ldk/util/InternalUtils.java b/src/main/java/org/ldk/util/InternalUtils.java
new file mode 100644 (file)
index 0000000..692639d
--- /dev/null
@@ -0,0 +1,10 @@
+package org.ldk.util;
+
+public class InternalUtils {
+    public static byte[] check_arr_len(byte[] arr, int length) throws IllegalArgumentException {
+        if (arr.length != length) {
+            throw new IllegalArgumentException("Array must be of fixed size " + length + " but was of length " + arr.length);
+        }
+        return arr;
+    }
+}
index 32c632986f58672536c0ba3b5c0677969908a468..704f9f31f946a695769dcf6f4af19bf291ca8a2e 100644 (file)
@@ -13,6 +13,7 @@
 #define MALLOC(a, _) malloc(a)
 #define FREE(p) if ((uint64_t)(p) > 4096) { free(p); }
 #define CHECK_ACCESS(p)
+#define CHECK_INNER_FIELD_ACCESS_OR_NULL(v)
 #define DO_ASSERT(a) (void)(a)
 #define CHECK(a)
 
@@ -723,21 +724,6 @@ static inline jclass LDKSiPrefix_to_java(JNIEnv *env, LDKSiPrefix val) {
        }
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1u8Z_1new(JNIEnv *env, jclass clz, int8_tArray elems) {
-       LDKCVec_u8Z *ret = MALLOC(sizeof(LDKCVec_u8Z), "LDKCVec_u8Z");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(uint8_t) * ret->datalen, "LDKCVec_u8Z Data");
-               int8_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       ret->data[i] = java_elems[i];
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_u8Z CVec_u8Z_clone(const LDKCVec_u8Z *orig) {
        LDKCVec_u8Z ret = { .data = MALLOC(sizeof(int8_t) * orig->datalen, "LDKCVec_u8Z clone bytes"), .datalen = orig->datalen };
        memcpy(ret.data, orig->data, sizeof(int8_t) * ret.datalen);
@@ -758,9 +744,6 @@ uint64_t TxOut_get_value (struct LDKTxOut* thing) { return thing->value;}JNIEXPO
        return ret_val;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SecretKeyErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_SecretKeyErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SecretKeyErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_SecretKeyErrorZ *val = (LDKCResult_SecretKeyErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -774,9 +757,6 @@ JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SecretKeyErrorZ_
        jclass err_conv = LDKSecp256k1Error_to_java(env, (*val->contents.err));
        return err_conv;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PublicKeyErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_PublicKeyErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PublicKeyErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_PublicKeyErrorZ *val = (LDKCResult_PublicKeyErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -790,9 +770,6 @@ JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PublicKeyErrorZ_
        jclass err_conv = LDKSecp256k1Error_to_java(env, (*val->contents.err));
        return err_conv;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TxCreationKeysDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_TxCreationKeysDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TxCreationKeysDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_TxCreationKeysDecodeErrorZ *val = (LDKCResult_TxCreationKeysDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -800,6 +777,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TxCreationKeysD
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -810,12 +788,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TxCreationKeysD
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelPublicKeysDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_ChannelPublicKeysDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelPublicKeysDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_ChannelPublicKeysDecodeErrorZ *val = (LDKCResult_ChannelPublicKeysDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -823,6 +799,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelPublicKe
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -833,12 +810,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelPublicKe
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TxCreationKeysErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_TxCreationKeysErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TxCreationKeysErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_TxCreationKeysErrorZ *val = (LDKCResult_TxCreationKeysErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -846,6 +821,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TxCreationKeysE
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -883,9 +859,6 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1u32Z_1ref_1from
                default: abort();
        }
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1HTLCOutputInCommitmentDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_HTLCOutputInCommitmentDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1HTLCOutputInCommitmentDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_HTLCOutputInCommitmentDecodeErrorZ *val = (LDKCResult_HTLCOutputInCommitmentDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -893,6 +866,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1HTLCOutputInCom
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -903,12 +877,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1HTLCOutputInCom
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CounterpartyChannelTransactionParametersDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CounterpartyChannelTransactionParametersDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ *val = (LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -916,6 +888,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CounterpartyCha
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -926,12 +899,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CounterpartyCha
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelTransactionParametersDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_ChannelTransactionParametersDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelTransactionParametersDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_ChannelTransactionParametersDecodeErrorZ *val = (LDKCResult_ChannelTransactionParametersDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -939,6 +910,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelTransact
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -949,12 +921,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelTransact
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1HolderCommitmentTransactionDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_HolderCommitmentTransactionDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1HolderCommitmentTransactionDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_HolderCommitmentTransactionDecodeErrorZ *val = (LDKCResult_HolderCommitmentTransactionDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -962,6 +932,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1HolderCommitmen
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -972,12 +943,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1HolderCommitmen
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1BuiltCommitmentTransactionDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_BuiltCommitmentTransactionDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1BuiltCommitmentTransactionDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_BuiltCommitmentTransactionDecodeErrorZ *val = (LDKCResult_BuiltCommitmentTransactionDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -985,6 +954,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1BuiltCommitment
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -995,12 +965,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1BuiltCommitment
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TrustedClosingTransactionNoneZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_TrustedClosingTransactionNoneZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TrustedClosingTransactionNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_TrustedClosingTransactionNoneZ *val = (LDKCResult_TrustedClosingTransactionNoneZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1008,6 +976,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TrustedClosingT
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -1016,9 +985,6 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TrustedClosingTran
        CHECK(!val->result_ok);
        return *val->contents.err;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CommitmentTransactionDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_CommitmentTransactionDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CommitmentTransactionDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_CommitmentTransactionDecodeErrorZ *val = (LDKCResult_CommitmentTransactionDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1026,6 +992,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CommitmentTrans
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -1036,12 +1003,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CommitmentTrans
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TrustedCommitmentTransactionNoneZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_TrustedCommitmentTransactionNoneZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TrustedCommitmentTransactionNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_TrustedCommitmentTransactionNoneZ *val = (LDKCResult_TrustedCommitmentTransactionNoneZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1049,6 +1014,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TrustedCommitme
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -1057,9 +1023,6 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TrustedCommitmentT
        CHECK(!val->result_ok);
        return *val->contents.err;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CVec_1SignatureZNoneZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_CVec_SignatureZNoneZ*)arg)->result_ok;
-}
 JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CVec_1SignatureZNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_CVec_SignatureZNoneZ *val = (LDKCResult_CVec_SignatureZNoneZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1080,9 +1043,6 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CVec_1SignatureZNo
        CHECK(!val->result_ok);
        return *val->contents.err;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ShutdownScriptDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_ShutdownScriptDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ShutdownScriptDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_ShutdownScriptDecodeErrorZ *val = (LDKCResult_ShutdownScriptDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1090,6 +1050,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ShutdownScriptD
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -1100,12 +1061,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ShutdownScriptD
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ShutdownScriptInvalidShutdownScriptZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_ShutdownScriptInvalidShutdownScriptZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ShutdownScriptInvalidShutdownScriptZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_ShutdownScriptInvalidShutdownScriptZ *val = (LDKCResult_ShutdownScriptInvalidShutdownScriptZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1113,6 +1072,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ShutdownScriptI
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -1123,12 +1083,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ShutdownScriptI
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_NoneErrorZ*)arg)->result_ok;
-}
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_NoneErrorZ *val = (LDKCResult_NoneErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1140,9 +1098,6 @@ JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneErrorZ_1get_
        jclass err_conv = LDKIOError_to_java(env, (*val->contents.err));
        return err_conv;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteHopDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_RouteHopDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteHopDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_RouteHopDecodeErrorZ *val = (LDKCResult_RouteHopDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1150,6 +1105,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteHopDecodeE
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -1160,29 +1116,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteHopDecodeE
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1RouteHopZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_RouteHopZ *ret = MALLOC(sizeof(LDKCVec_RouteHopZ), "LDKCVec_RouteHopZ");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKRouteHop) * ret->datalen, "LDKCVec_RouteHopZ Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       int64_t arr_elem = java_elems[i];
-                       LDKRouteHop arr_elem_conv;
-                       arr_elem_conv.inner = (void*)(arr_elem & (~1));
-                       arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0);
-                       arr_elem_conv = RouteHop_clone(&arr_elem_conv);
-                       ret->data[i] = arr_elem_conv;
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_RouteHopZ CVec_RouteHopZ_clone(const LDKCVec_RouteHopZ *orig) {
        LDKCVec_RouteHopZ ret = { .data = MALLOC(sizeof(LDKRouteHop) * orig->datalen, "LDKCVec_RouteHopZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -1197,9 +1134,6 @@ static inline LDKCVec_CVec_RouteHopZZ CVec_CVec_RouteHopZZ_clone(const LDKCVec_C
        }
        return ret;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_RouteDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_RouteDecodeErrorZ *val = (LDKCResult_RouteDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1207,6 +1141,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteDecodeErro
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -1217,12 +1152,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteDecodeErro
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteParametersDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_RouteParametersDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteParametersDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_RouteParametersDecodeErrorZ *val = (LDKCResult_RouteParametersDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1230,6 +1163,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteParameters
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -1240,29 +1174,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteParameters
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1RouteHintZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_RouteHintZ *ret = MALLOC(sizeof(LDKCVec_RouteHintZ), "LDKCVec_RouteHintZ");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKRouteHint) * ret->datalen, "LDKCVec_RouteHintZ Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       int64_t arr_elem = java_elems[i];
-                       LDKRouteHint arr_elem_conv;
-                       arr_elem_conv.inner = (void*)(arr_elem & (~1));
-                       arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0);
-                       arr_elem_conv = RouteHint_clone(&arr_elem_conv);
-                       ret->data[i] = arr_elem_conv;
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_RouteHintZ CVec_RouteHintZ_clone(const LDKCVec_RouteHintZ *orig) {
        LDKCVec_RouteHintZ ret = { .data = MALLOC(sizeof(LDKRouteHint) * orig->datalen, "LDKCVec_RouteHintZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -1298,9 +1213,6 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1u64Z_1ref_1from
                default: abort();
        }
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PayeeDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_PayeeDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PayeeDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_PayeeDecodeErrorZ *val = (LDKCResult_PayeeDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1308,6 +1220,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PayeeDecodeErro
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -1318,29 +1231,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PayeeDecodeErro
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1RouteHintHopZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_RouteHintHopZ *ret = MALLOC(sizeof(LDKCVec_RouteHintHopZ), "LDKCVec_RouteHintHopZ");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKRouteHintHop) * ret->datalen, "LDKCVec_RouteHintHopZ Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       int64_t arr_elem = java_elems[i];
-                       LDKRouteHintHop arr_elem_conv;
-                       arr_elem_conv.inner = (void*)(arr_elem & (~1));
-                       arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0);
-                       arr_elem_conv = RouteHintHop_clone(&arr_elem_conv);
-                       ret->data[i] = arr_elem_conv;
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_RouteHintHopZ CVec_RouteHintHopZ_clone(const LDKCVec_RouteHintHopZ *orig) {
        LDKCVec_RouteHintHopZ ret = { .data = MALLOC(sizeof(LDKRouteHintHop) * orig->datalen, "LDKCVec_RouteHintHopZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -1348,9 +1242,6 @@ static inline LDKCVec_RouteHintHopZ CVec_RouteHintHopZ_clone(const LDKCVec_Route
        }
        return ret;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteHintDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_RouteHintDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteHintDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_RouteHintDecodeErrorZ *val = (LDKCResult_RouteHintDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1358,6 +1249,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteHintDecode
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -1368,12 +1260,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteHintDecode
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteHintHopDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_RouteHintHopDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteHintHopDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_RouteHintHopDecodeErrorZ *val = (LDKCResult_RouteHintHopDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1381,6 +1271,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteHintHopDec
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -1391,29 +1282,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteHintHopDec
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1ChannelDetailsZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_ChannelDetailsZ *ret = MALLOC(sizeof(LDKCVec_ChannelDetailsZ), "LDKCVec_ChannelDetailsZ");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKChannelDetails) * ret->datalen, "LDKCVec_ChannelDetailsZ Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       int64_t arr_elem = java_elems[i];
-                       LDKChannelDetails arr_elem_conv;
-                       arr_elem_conv.inner = (void*)(arr_elem & (~1));
-                       arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0);
-                       arr_elem_conv = ChannelDetails_clone(&arr_elem_conv);
-                       ret->data[i] = arr_elem_conv;
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_ChannelDetailsZ CVec_ChannelDetailsZ_clone(const LDKCVec_ChannelDetailsZ *orig) {
        LDKCVec_ChannelDetailsZ ret = { .data = MALLOC(sizeof(LDKChannelDetails) * orig->datalen, "LDKCVec_ChannelDetailsZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -1421,9 +1293,6 @@ static inline LDKCVec_ChannelDetailsZ CVec_ChannelDetailsZ_clone(const LDKCVec_C
        }
        return ret;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteLightningErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_RouteLightningErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteLightningErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_RouteLightningErrorZ *val = (LDKCResult_RouteLightningErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1431,6 +1300,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteLightningE
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -1441,12 +1311,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteLightningE
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TxOutAccessErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_TxOutAccessErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TxOutAccessErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_TxOutAccessErrorZ *val = (LDKCResult_TxOutAccessErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1480,26 +1348,6 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1usizeTransacti
        return ret_arr;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1C2Tuple_1usizeTransactionZZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_C2Tuple_usizeTransactionZZ *ret = MALLOC(sizeof(LDKCVec_C2Tuple_usizeTransactionZZ), "LDKCVec_C2Tuple_usizeTransactionZZ");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKC2Tuple_usizeTransactionZ) * ret->datalen, "LDKCVec_C2Tuple_usizeTransactionZZ Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       int64_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKC2Tuple_usizeTransactionZ arr_elem_conv = *(LDKC2Tuple_usizeTransactionZ*)(arr_elem_ptr);
-                       arr_elem_conv = C2Tuple_usizeTransactionZ_clone((LDKC2Tuple_usizeTransactionZ*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_C2Tuple_usizeTransactionZZ CVec_C2Tuple_usizeTransactionZZ_clone(const LDKCVec_C2Tuple_usizeTransactionZZ *orig) {
        LDKCVec_C2Tuple_usizeTransactionZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_usizeTransactionZ) * orig->datalen, "LDKCVec_C2Tuple_usizeTransactionZZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -1514,9 +1362,6 @@ static inline LDKCVec_TxidZ CVec_ThirtyTwoBytesZ_clone(const LDKCVec_TxidZ *orig
        }
        return ret;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneChannelMonitorUpdateErrZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_NoneChannelMonitorUpdateErrZ*)arg)->result_ok;
-}
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneChannelMonitorUpdateErrZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_NoneChannelMonitorUpdateErrZ *val = (LDKCResult_NoneChannelMonitorUpdateErrZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1566,6 +1411,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMonitorEvent_1ref_1from_
                        uint64_t htlc_event_ref = 0;
                        CHECK((((uint64_t)htlc_event_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&htlc_event_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(htlc_event_var);
                        htlc_event_ref = (uint64_t)htlc_event_var.inner & ~1;
                        return (*env)->NewObject(env, LDKMonitorEvent_HTLCEvent_class, LDKMonitorEvent_HTLCEvent_meth, htlc_event_ref);
                }
@@ -1574,6 +1420,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMonitorEvent_1ref_1from_
                        uint64_t commitment_tx_confirmed_ref = 0;
                        CHECK((((uint64_t)commitment_tx_confirmed_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&commitment_tx_confirmed_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(commitment_tx_confirmed_var);
                        commitment_tx_confirmed_ref = (uint64_t)commitment_tx_confirmed_var.inner & ~1;
                        return (*env)->NewObject(env, LDKMonitorEvent_CommitmentTxConfirmed_class, LDKMonitorEvent_CommitmentTxConfirmed_meth, commitment_tx_confirmed_ref);
                }
@@ -1582,6 +1429,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMonitorEvent_1ref_1from_
                        uint64_t funding_txo_ref = 0;
                        CHECK((((uint64_t)funding_txo_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&funding_txo_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_txo_var);
                        funding_txo_ref = (uint64_t)funding_txo_var.inner & ~1;
                        return (*env)->NewObject(env, LDKMonitorEvent_UpdateCompleted_class, LDKMonitorEvent_UpdateCompleted_meth, funding_txo_ref, obj->update_completed.monitor_update_id);
                }
@@ -1590,32 +1438,13 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMonitorEvent_1ref_1from_
                        uint64_t update_failed_ref = 0;
                        CHECK((((uint64_t)update_failed_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&update_failed_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_failed_var);
                        update_failed_ref = (uint64_t)update_failed_var.inner & ~1;
                        return (*env)->NewObject(env, LDKMonitorEvent_UpdateFailed_class, LDKMonitorEvent_UpdateFailed_meth, update_failed_ref);
                }
                default: abort();
        }
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1MonitorEventZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_MonitorEventZ *ret = MALLOC(sizeof(LDKCVec_MonitorEventZ), "LDKCVec_MonitorEventZ");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKMonitorEvent) * ret->datalen, "LDKCVec_MonitorEventZ Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       int64_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKMonitorEvent arr_elem_conv = *(LDKMonitorEvent*)(arr_elem_ptr);
-                       arr_elem_conv = MonitorEvent_clone((LDKMonitorEvent*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_MonitorEventZ CVec_MonitorEventZ_clone(const LDKCVec_MonitorEventZ *orig) {
        LDKCVec_MonitorEventZ ret = { .data = MALLOC(sizeof(LDKMonitorEvent) * orig->datalen, "LDKCVec_MonitorEventZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -1654,6 +1483,134 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1C2Tuple_1usizeT
                default: abort();
        }
 }
+static jclass LDKClosureReason_CounterpartyForceClosed_class = NULL;
+static jmethodID LDKClosureReason_CounterpartyForceClosed_meth = NULL;
+static jclass LDKClosureReason_HolderForceClosed_class = NULL;
+static jmethodID LDKClosureReason_HolderForceClosed_meth = NULL;
+static jclass LDKClosureReason_CooperativeClosure_class = NULL;
+static jmethodID LDKClosureReason_CooperativeClosure_meth = NULL;
+static jclass LDKClosureReason_CommitmentTxConfirmed_class = NULL;
+static jmethodID LDKClosureReason_CommitmentTxConfirmed_meth = NULL;
+static jclass LDKClosureReason_ProcessingError_class = NULL;
+static jmethodID LDKClosureReason_ProcessingError_meth = NULL;
+static jclass LDKClosureReason_DisconnectedPeer_class = NULL;
+static jmethodID LDKClosureReason_DisconnectedPeer_meth = NULL;
+static jclass LDKClosureReason_OutdatedChannelManager_class = NULL;
+static jmethodID LDKClosureReason_OutdatedChannelManager_meth = NULL;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKClosureReason_init (JNIEnv *env, jclass clz) {
+       LDKClosureReason_CounterpartyForceClosed_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKClosureReason$CounterpartyForceClosed;"));
+       CHECK(LDKClosureReason_CounterpartyForceClosed_class != NULL);
+       LDKClosureReason_CounterpartyForceClosed_meth = (*env)->GetMethodID(env, LDKClosureReason_CounterpartyForceClosed_class, "<init>", "(Ljava/lang/String;)V");
+       CHECK(LDKClosureReason_CounterpartyForceClosed_meth != NULL);
+       LDKClosureReason_HolderForceClosed_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKClosureReason$HolderForceClosed;"));
+       CHECK(LDKClosureReason_HolderForceClosed_class != NULL);
+       LDKClosureReason_HolderForceClosed_meth = (*env)->GetMethodID(env, LDKClosureReason_HolderForceClosed_class, "<init>", "()V");
+       CHECK(LDKClosureReason_HolderForceClosed_meth != NULL);
+       LDKClosureReason_CooperativeClosure_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKClosureReason$CooperativeClosure;"));
+       CHECK(LDKClosureReason_CooperativeClosure_class != NULL);
+       LDKClosureReason_CooperativeClosure_meth = (*env)->GetMethodID(env, LDKClosureReason_CooperativeClosure_class, "<init>", "()V");
+       CHECK(LDKClosureReason_CooperativeClosure_meth != NULL);
+       LDKClosureReason_CommitmentTxConfirmed_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKClosureReason$CommitmentTxConfirmed;"));
+       CHECK(LDKClosureReason_CommitmentTxConfirmed_class != NULL);
+       LDKClosureReason_CommitmentTxConfirmed_meth = (*env)->GetMethodID(env, LDKClosureReason_CommitmentTxConfirmed_class, "<init>", "()V");
+       CHECK(LDKClosureReason_CommitmentTxConfirmed_meth != NULL);
+       LDKClosureReason_ProcessingError_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKClosureReason$ProcessingError;"));
+       CHECK(LDKClosureReason_ProcessingError_class != NULL);
+       LDKClosureReason_ProcessingError_meth = (*env)->GetMethodID(env, LDKClosureReason_ProcessingError_class, "<init>", "(Ljava/lang/String;)V");
+       CHECK(LDKClosureReason_ProcessingError_meth != NULL);
+       LDKClosureReason_DisconnectedPeer_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKClosureReason$DisconnectedPeer;"));
+       CHECK(LDKClosureReason_DisconnectedPeer_class != NULL);
+       LDKClosureReason_DisconnectedPeer_meth = (*env)->GetMethodID(env, LDKClosureReason_DisconnectedPeer_class, "<init>", "()V");
+       CHECK(LDKClosureReason_DisconnectedPeer_meth != NULL);
+       LDKClosureReason_OutdatedChannelManager_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKClosureReason$OutdatedChannelManager;"));
+       CHECK(LDKClosureReason_OutdatedChannelManager_class != NULL);
+       LDKClosureReason_OutdatedChannelManager_meth = (*env)->GetMethodID(env, LDKClosureReason_OutdatedChannelManager_class, "<init>", "()V");
+       CHECK(LDKClosureReason_OutdatedChannelManager_meth != NULL);
+}
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKClosureReason_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
+       LDKClosureReason *obj = (LDKClosureReason*)(ptr & ~1);
+       switch(obj->tag) {
+               case LDKClosureReason_CounterpartyForceClosed: {
+                       LDKStr peer_msg_str = obj->counterparty_force_closed.peer_msg;
+                       jstring peer_msg_conv = str_ref_to_java(env, peer_msg_str.chars, peer_msg_str.len);
+                       return (*env)->NewObject(env, LDKClosureReason_CounterpartyForceClosed_class, LDKClosureReason_CounterpartyForceClosed_meth, peer_msg_conv);
+               }
+               case LDKClosureReason_HolderForceClosed: {
+                       return (*env)->NewObject(env, LDKClosureReason_HolderForceClosed_class, LDKClosureReason_HolderForceClosed_meth);
+               }
+               case LDKClosureReason_CooperativeClosure: {
+                       return (*env)->NewObject(env, LDKClosureReason_CooperativeClosure_class, LDKClosureReason_CooperativeClosure_meth);
+               }
+               case LDKClosureReason_CommitmentTxConfirmed: {
+                       return (*env)->NewObject(env, LDKClosureReason_CommitmentTxConfirmed_class, LDKClosureReason_CommitmentTxConfirmed_meth);
+               }
+               case LDKClosureReason_ProcessingError: {
+                       LDKStr err_str = obj->processing_error.err;
+                       jstring err_conv = str_ref_to_java(env, err_str.chars, err_str.len);
+                       return (*env)->NewObject(env, LDKClosureReason_ProcessingError_class, LDKClosureReason_ProcessingError_meth, err_conv);
+               }
+               case LDKClosureReason_DisconnectedPeer: {
+                       return (*env)->NewObject(env, LDKClosureReason_DisconnectedPeer_class, LDKClosureReason_DisconnectedPeer_meth);
+               }
+               case LDKClosureReason_OutdatedChannelManager: {
+                       return (*env)->NewObject(env, LDKClosureReason_OutdatedChannelManager_class, LDKClosureReason_OutdatedChannelManager_meth);
+               }
+               default: abort();
+       }
+}
+static jclass LDKCOption_ClosureReasonZ_Some_class = NULL;
+static jmethodID LDKCOption_ClosureReasonZ_Some_meth = NULL;
+static jclass LDKCOption_ClosureReasonZ_None_class = NULL;
+static jmethodID LDKCOption_ClosureReasonZ_None_meth = NULL;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1ClosureReasonZ_init (JNIEnv *env, jclass clz) {
+       LDKCOption_ClosureReasonZ_Some_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKCOption_ClosureReasonZ$Some;"));
+       CHECK(LDKCOption_ClosureReasonZ_Some_class != NULL);
+       LDKCOption_ClosureReasonZ_Some_meth = (*env)->GetMethodID(env, LDKCOption_ClosureReasonZ_Some_class, "<init>", "(J)V");
+       CHECK(LDKCOption_ClosureReasonZ_Some_meth != NULL);
+       LDKCOption_ClosureReasonZ_None_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKCOption_ClosureReasonZ$None;"));
+       CHECK(LDKCOption_ClosureReasonZ_None_class != NULL);
+       LDKCOption_ClosureReasonZ_None_meth = (*env)->GetMethodID(env, LDKCOption_ClosureReasonZ_None_class, "<init>", "()V");
+       CHECK(LDKCOption_ClosureReasonZ_None_meth != NULL);
+}
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1ClosureReasonZ_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
+       LDKCOption_ClosureReasonZ *obj = (LDKCOption_ClosureReasonZ*)(ptr & ~1);
+       switch(obj->tag) {
+               case LDKCOption_ClosureReasonZ_Some: {
+                       uint64_t some_ref = ((uint64_t)&obj->some) | 1;
+                       return (*env)->NewObject(env, LDKCOption_ClosureReasonZ_Some_class, LDKCOption_ClosureReasonZ_Some_meth, some_ref);
+               }
+               case LDKCOption_ClosureReasonZ_None: {
+                       return (*env)->NewObject(env, LDKCOption_ClosureReasonZ_None_class, LDKCOption_ClosureReasonZ_None_meth);
+               }
+               default: abort();
+       }
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1COption_1ClosureReasonZDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_COption_ClosureReasonZDecodeErrorZ *val = (LDKCResult_COption_ClosureReasonZDecodeErrorZ*)(arg & ~1);
+       CHECK(val->result_ok);
+       uint64_t res_ref = ((uint64_t)&(*val->contents.result)) | 1;
+       return res_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1COption_1ClosureReasonZDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_COption_ClosureReasonZDecodeErrorZ *val = (LDKCResult_COption_ClosureReasonZDecodeErrorZ*)(arg & ~1);
+       CHECK(!val->result_ok);
+       LDKDecodeError err_var = (*val->contents.err);
+       uint64_t err_ref = 0;
+       CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+       CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
+       err_ref = (uint64_t)err_var.inner & ~1;
+       return err_ref;
+}
 static jclass LDKNetworkUpdate_ChannelUpdateMessage_class = NULL;
 static jmethodID LDKNetworkUpdate_ChannelUpdateMessage_meth = NULL;
 static jclass LDKNetworkUpdate_ChannelClosed_class = NULL;
@@ -1685,6 +1642,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKNetworkUpdate_1ref_1from
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return (*env)->NewObject(env, LDKNetworkUpdate_ChannelUpdateMessage_class, LDKNetworkUpdate_ChannelUpdateMessage_meth, msg_ref);
                }
@@ -1759,6 +1717,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKSpendableOutputDescripto
                        uint64_t outpoint_ref = 0;
                        CHECK((((uint64_t)outpoint_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&outpoint_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_var);
                        outpoint_ref = (uint64_t)outpoint_var.inner & ~1;
                        uint64_t output_ref = ((uint64_t)&obj->static_output.output) | 1;
                        return (*env)->NewObject(env, LDKSpendableOutputDescriptor_StaticOutput_class, LDKSpendableOutputDescriptor_StaticOutput_meth, outpoint_ref, (uint64_t)output_ref);
@@ -1768,6 +1727,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKSpendableOutputDescripto
                        uint64_t delayed_payment_output_ref = 0;
                        CHECK((((uint64_t)delayed_payment_output_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&delayed_payment_output_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(delayed_payment_output_var);
                        delayed_payment_output_ref = (uint64_t)delayed_payment_output_var.inner & ~1;
                        return (*env)->NewObject(env, LDKSpendableOutputDescriptor_DelayedPaymentOutput_class, LDKSpendableOutputDescriptor_DelayedPaymentOutput_meth, delayed_payment_output_ref);
                }
@@ -1776,32 +1736,13 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKSpendableOutputDescripto
                        uint64_t static_payment_output_ref = 0;
                        CHECK((((uint64_t)static_payment_output_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&static_payment_output_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(static_payment_output_var);
                        static_payment_output_ref = (uint64_t)static_payment_output_var.inner & ~1;
                        return (*env)->NewObject(env, LDKSpendableOutputDescriptor_StaticPaymentOutput_class, LDKSpendableOutputDescriptor_StaticPaymentOutput_meth, static_payment_output_ref);
                }
                default: abort();
        }
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1SpendableOutputDescriptorZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_SpendableOutputDescriptorZ *ret = MALLOC(sizeof(LDKCVec_SpendableOutputDescriptorZ), "LDKCVec_SpendableOutputDescriptorZ");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKSpendableOutputDescriptor) * ret->datalen, "LDKCVec_SpendableOutputDescriptorZ Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       int64_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKSpendableOutputDescriptor arr_elem_conv = *(LDKSpendableOutputDescriptor*)(arr_elem_ptr);
-                       arr_elem_conv = SpendableOutputDescriptor_clone((LDKSpendableOutputDescriptor*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_SpendableOutputDescriptorZ CVec_SpendableOutputDescriptorZ_clone(const LDKCVec_SpendableOutputDescriptorZ *orig) {
        LDKCVec_SpendableOutputDescriptorZ ret = { .data = MALLOC(sizeof(LDKSpendableOutputDescriptor) * orig->datalen, "LDKCVec_SpendableOutputDescriptorZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -1809,6 +1750,245 @@ static inline LDKCVec_SpendableOutputDescriptorZ CVec_SpendableOutputDescriptorZ
        }
        return ret;
 }
+static jclass LDKPaymentPurpose_InvoicePayment_class = NULL;
+static jmethodID LDKPaymentPurpose_InvoicePayment_meth = NULL;
+static jclass LDKPaymentPurpose_SpontaneousPayment_class = NULL;
+static jmethodID LDKPaymentPurpose_SpontaneousPayment_meth = NULL;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKPaymentPurpose_init (JNIEnv *env, jclass clz) {
+       LDKPaymentPurpose_InvoicePayment_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKPaymentPurpose$InvoicePayment;"));
+       CHECK(LDKPaymentPurpose_InvoicePayment_class != NULL);
+       LDKPaymentPurpose_InvoicePayment_meth = (*env)->GetMethodID(env, LDKPaymentPurpose_InvoicePayment_class, "<init>", "([B[BJ)V");
+       CHECK(LDKPaymentPurpose_InvoicePayment_meth != NULL);
+       LDKPaymentPurpose_SpontaneousPayment_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKPaymentPurpose$SpontaneousPayment;"));
+       CHECK(LDKPaymentPurpose_SpontaneousPayment_class != NULL);
+       LDKPaymentPurpose_SpontaneousPayment_meth = (*env)->GetMethodID(env, LDKPaymentPurpose_SpontaneousPayment_class, "<init>", "([B)V");
+       CHECK(LDKPaymentPurpose_SpontaneousPayment_meth != NULL);
+}
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKPaymentPurpose_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
+       LDKPaymentPurpose *obj = (LDKPaymentPurpose*)(ptr & ~1);
+       switch(obj->tag) {
+               case LDKPaymentPurpose_InvoicePayment: {
+                       int8_tArray payment_preimage_arr = (*env)->NewByteArray(env, 32);
+                       (*env)->SetByteArrayRegion(env, payment_preimage_arr, 0, 32, obj->invoice_payment.payment_preimage.data);
+                       int8_tArray payment_secret_arr = (*env)->NewByteArray(env, 32);
+                       (*env)->SetByteArrayRegion(env, payment_secret_arr, 0, 32, obj->invoice_payment.payment_secret.data);
+                       return (*env)->NewObject(env, LDKPaymentPurpose_InvoicePayment_class, LDKPaymentPurpose_InvoicePayment_meth, payment_preimage_arr, payment_secret_arr, obj->invoice_payment.user_payment_id);
+               }
+               case LDKPaymentPurpose_SpontaneousPayment: {
+                       int8_tArray spontaneous_payment_arr = (*env)->NewByteArray(env, 32);
+                       (*env)->SetByteArrayRegion(env, spontaneous_payment_arr, 0, 32, obj->spontaneous_payment.data);
+                       return (*env)->NewObject(env, LDKPaymentPurpose_SpontaneousPayment_class, LDKPaymentPurpose_SpontaneousPayment_meth, spontaneous_payment_arr);
+               }
+               default: abort();
+       }
+}
+static jclass LDKEvent_FundingGenerationReady_class = NULL;
+static jmethodID LDKEvent_FundingGenerationReady_meth = NULL;
+static jclass LDKEvent_PaymentReceived_class = NULL;
+static jmethodID LDKEvent_PaymentReceived_meth = NULL;
+static jclass LDKEvent_PaymentSent_class = NULL;
+static jmethodID LDKEvent_PaymentSent_meth = NULL;
+static jclass LDKEvent_PaymentPathFailed_class = NULL;
+static jmethodID LDKEvent_PaymentPathFailed_meth = NULL;
+static jclass LDKEvent_PendingHTLCsForwardable_class = NULL;
+static jmethodID LDKEvent_PendingHTLCsForwardable_meth = NULL;
+static jclass LDKEvent_SpendableOutputs_class = NULL;
+static jmethodID LDKEvent_SpendableOutputs_meth = NULL;
+static jclass LDKEvent_PaymentForwarded_class = NULL;
+static jmethodID LDKEvent_PaymentForwarded_meth = NULL;
+static jclass LDKEvent_ChannelClosed_class = NULL;
+static jmethodID LDKEvent_ChannelClosed_meth = NULL;
+static jclass LDKEvent_DiscardFunding_class = NULL;
+static jmethodID LDKEvent_DiscardFunding_meth = NULL;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKEvent_init (JNIEnv *env, jclass clz) {
+       LDKEvent_FundingGenerationReady_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKEvent$FundingGenerationReady;"));
+       CHECK(LDKEvent_FundingGenerationReady_class != NULL);
+       LDKEvent_FundingGenerationReady_meth = (*env)->GetMethodID(env, LDKEvent_FundingGenerationReady_class, "<init>", "([BJ[BJ)V");
+       CHECK(LDKEvent_FundingGenerationReady_meth != NULL);
+       LDKEvent_PaymentReceived_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKEvent$PaymentReceived;"));
+       CHECK(LDKEvent_PaymentReceived_class != NULL);
+       LDKEvent_PaymentReceived_meth = (*env)->GetMethodID(env, LDKEvent_PaymentReceived_class, "<init>", "([BJJ)V");
+       CHECK(LDKEvent_PaymentReceived_meth != NULL);
+       LDKEvent_PaymentSent_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKEvent$PaymentSent;"));
+       CHECK(LDKEvent_PaymentSent_class != NULL);
+       LDKEvent_PaymentSent_meth = (*env)->GetMethodID(env, LDKEvent_PaymentSent_class, "<init>", "([B[B[BJ)V");
+       CHECK(LDKEvent_PaymentSent_meth != NULL);
+       LDKEvent_PaymentPathFailed_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKEvent$PaymentPathFailed;"));
+       CHECK(LDKEvent_PaymentPathFailed_class != NULL);
+       LDKEvent_PaymentPathFailed_meth = (*env)->GetMethodID(env, LDKEvent_PaymentPathFailed_class, "<init>", "([B[BZJZ[JJJ)V");
+       CHECK(LDKEvent_PaymentPathFailed_meth != NULL);
+       LDKEvent_PendingHTLCsForwardable_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKEvent$PendingHTLCsForwardable;"));
+       CHECK(LDKEvent_PendingHTLCsForwardable_class != NULL);
+       LDKEvent_PendingHTLCsForwardable_meth = (*env)->GetMethodID(env, LDKEvent_PendingHTLCsForwardable_class, "<init>", "(J)V");
+       CHECK(LDKEvent_PendingHTLCsForwardable_meth != NULL);
+       LDKEvent_SpendableOutputs_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKEvent$SpendableOutputs;"));
+       CHECK(LDKEvent_SpendableOutputs_class != NULL);
+       LDKEvent_SpendableOutputs_meth = (*env)->GetMethodID(env, LDKEvent_SpendableOutputs_class, "<init>", "([J)V");
+       CHECK(LDKEvent_SpendableOutputs_meth != NULL);
+       LDKEvent_PaymentForwarded_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKEvent$PaymentForwarded;"));
+       CHECK(LDKEvent_PaymentForwarded_class != NULL);
+       LDKEvent_PaymentForwarded_meth = (*env)->GetMethodID(env, LDKEvent_PaymentForwarded_class, "<init>", "(JZ)V");
+       CHECK(LDKEvent_PaymentForwarded_meth != NULL);
+       LDKEvent_ChannelClosed_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKEvent$ChannelClosed;"));
+       CHECK(LDKEvent_ChannelClosed_class != NULL);
+       LDKEvent_ChannelClosed_meth = (*env)->GetMethodID(env, LDKEvent_ChannelClosed_class, "<init>", "([BJJ)V");
+       CHECK(LDKEvent_ChannelClosed_meth != NULL);
+       LDKEvent_DiscardFunding_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKEvent$DiscardFunding;"));
+       CHECK(LDKEvent_DiscardFunding_class != NULL);
+       LDKEvent_DiscardFunding_meth = (*env)->GetMethodID(env, LDKEvent_DiscardFunding_class, "<init>", "([B[B)V");
+       CHECK(LDKEvent_DiscardFunding_meth != NULL);
+}
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKEvent_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
+       LDKEvent *obj = (LDKEvent*)(ptr & ~1);
+       switch(obj->tag) {
+               case LDKEvent_FundingGenerationReady: {
+                       int8_tArray temporary_channel_id_arr = (*env)->NewByteArray(env, 32);
+                       (*env)->SetByteArrayRegion(env, temporary_channel_id_arr, 0, 32, obj->funding_generation_ready.temporary_channel_id.data);
+                       LDKCVec_u8Z output_script_var = obj->funding_generation_ready.output_script;
+                       int8_tArray output_script_arr = (*env)->NewByteArray(env, output_script_var.datalen);
+                       (*env)->SetByteArrayRegion(env, output_script_arr, 0, output_script_var.datalen, output_script_var.data);
+                       return (*env)->NewObject(env, LDKEvent_FundingGenerationReady_class, LDKEvent_FundingGenerationReady_meth, temporary_channel_id_arr, obj->funding_generation_ready.channel_value_satoshis, output_script_arr, obj->funding_generation_ready.user_channel_id);
+               }
+               case LDKEvent_PaymentReceived: {
+                       int8_tArray payment_hash_arr = (*env)->NewByteArray(env, 32);
+                       (*env)->SetByteArrayRegion(env, payment_hash_arr, 0, 32, obj->payment_received.payment_hash.data);
+                       uint64_t purpose_ref = ((uint64_t)&obj->payment_received.purpose) | 1;
+                       return (*env)->NewObject(env, LDKEvent_PaymentReceived_class, LDKEvent_PaymentReceived_meth, payment_hash_arr, obj->payment_received.amt, purpose_ref);
+               }
+               case LDKEvent_PaymentSent: {
+                       int8_tArray payment_id_arr = (*env)->NewByteArray(env, 32);
+                       (*env)->SetByteArrayRegion(env, payment_id_arr, 0, 32, obj->payment_sent.payment_id.data);
+                       int8_tArray payment_preimage_arr = (*env)->NewByteArray(env, 32);
+                       (*env)->SetByteArrayRegion(env, payment_preimage_arr, 0, 32, obj->payment_sent.payment_preimage.data);
+                       int8_tArray payment_hash_arr = (*env)->NewByteArray(env, 32);
+                       (*env)->SetByteArrayRegion(env, payment_hash_arr, 0, 32, obj->payment_sent.payment_hash.data);
+                       uint64_t fee_paid_msat_ref = ((uint64_t)&obj->payment_sent.fee_paid_msat) | 1;
+                       return (*env)->NewObject(env, LDKEvent_PaymentSent_class, LDKEvent_PaymentSent_meth, payment_id_arr, payment_preimage_arr, payment_hash_arr, fee_paid_msat_ref);
+               }
+               case LDKEvent_PaymentPathFailed: {
+                       int8_tArray payment_id_arr = (*env)->NewByteArray(env, 32);
+                       (*env)->SetByteArrayRegion(env, payment_id_arr, 0, 32, obj->payment_path_failed.payment_id.data);
+                       int8_tArray payment_hash_arr = (*env)->NewByteArray(env, 32);
+                       (*env)->SetByteArrayRegion(env, payment_hash_arr, 0, 32, obj->payment_path_failed.payment_hash.data);
+                       uint64_t network_update_ref = ((uint64_t)&obj->payment_path_failed.network_update) | 1;
+                       LDKCVec_RouteHopZ path_var = obj->payment_path_failed.path;
+                       int64_tArray path_arr = NULL;
+                       path_arr = (*env)->NewLongArray(env, path_var.datalen);
+                       int64_t *path_arr_ptr = (*env)->GetPrimitiveArrayCritical(env, path_arr, NULL);
+                       for (size_t k = 0; k < path_var.datalen; k++) {
+                               LDKRouteHop path_conv_10_var = path_var.data[k];
+                               uint64_t path_conv_10_ref = 0;
+                               CHECK((((uint64_t)path_conv_10_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+                               CHECK((((uint64_t)&path_conv_10_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                               CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv_10_var);
+                               path_conv_10_ref = (uint64_t)path_conv_10_var.inner & ~1;
+                               path_arr_ptr[k] = path_conv_10_ref;
+                       }
+                       (*env)->ReleasePrimitiveArrayCritical(env, path_arr, path_arr_ptr, 0);
+                       uint64_t short_channel_id_ref = ((uint64_t)&obj->payment_path_failed.short_channel_id) | 1;
+                       LDKRouteParameters retry_var = obj->payment_path_failed.retry;
+                       uint64_t retry_ref = 0;
+                       if ((uint64_t)retry_var.inner > 4096) {
+                               CHECK((((uint64_t)retry_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+                               CHECK((((uint64_t)&retry_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(retry_var);
+                               retry_ref = (uint64_t)retry_var.inner & ~1;
+                       }
+                       return (*env)->NewObject(env, LDKEvent_PaymentPathFailed_class, LDKEvent_PaymentPathFailed_meth, payment_id_arr, payment_hash_arr, obj->payment_path_failed.rejected_by_dest, network_update_ref, obj->payment_path_failed.all_paths_failed, path_arr, short_channel_id_ref, retry_ref);
+               }
+               case LDKEvent_PendingHTLCsForwardable: {
+                       return (*env)->NewObject(env, LDKEvent_PendingHTLCsForwardable_class, LDKEvent_PendingHTLCsForwardable_meth, obj->pending_htl_cs_forwardable.time_forwardable);
+               }
+               case LDKEvent_SpendableOutputs: {
+                       LDKCVec_SpendableOutputDescriptorZ outputs_var = obj->spendable_outputs.outputs;
+                       int64_tArray outputs_arr = NULL;
+                       outputs_arr = (*env)->NewLongArray(env, outputs_var.datalen);
+                       int64_t *outputs_arr_ptr = (*env)->GetPrimitiveArrayCritical(env, outputs_arr, NULL);
+                       for (size_t b = 0; b < outputs_var.datalen; b++) {
+                               uint64_t outputs_conv_27_ref = ((uint64_t)&outputs_var.data[b]) | 1;
+                               outputs_arr_ptr[b] = outputs_conv_27_ref;
+                       }
+                       (*env)->ReleasePrimitiveArrayCritical(env, outputs_arr, outputs_arr_ptr, 0);
+                       return (*env)->NewObject(env, LDKEvent_SpendableOutputs_class, LDKEvent_SpendableOutputs_meth, outputs_arr);
+               }
+               case LDKEvent_PaymentForwarded: {
+                       uint64_t fee_earned_msat_ref = ((uint64_t)&obj->payment_forwarded.fee_earned_msat) | 1;
+                       return (*env)->NewObject(env, LDKEvent_PaymentForwarded_class, LDKEvent_PaymentForwarded_meth, fee_earned_msat_ref, obj->payment_forwarded.claim_from_onchain_tx);
+               }
+               case LDKEvent_ChannelClosed: {
+                       int8_tArray channel_id_arr = (*env)->NewByteArray(env, 32);
+                       (*env)->SetByteArrayRegion(env, channel_id_arr, 0, 32, obj->channel_closed.channel_id.data);
+                       uint64_t reason_ref = ((uint64_t)&obj->channel_closed.reason) | 1;
+                       return (*env)->NewObject(env, LDKEvent_ChannelClosed_class, LDKEvent_ChannelClosed_meth, channel_id_arr, obj->channel_closed.user_channel_id, reason_ref);
+               }
+               case LDKEvent_DiscardFunding: {
+                       int8_tArray channel_id_arr = (*env)->NewByteArray(env, 32);
+                       (*env)->SetByteArrayRegion(env, channel_id_arr, 0, 32, obj->discard_funding.channel_id.data);
+                       LDKTransaction transaction_var = obj->discard_funding.transaction;
+                       int8_tArray transaction_arr = (*env)->NewByteArray(env, transaction_var.datalen);
+                       (*env)->SetByteArrayRegion(env, transaction_arr, 0, transaction_var.datalen, transaction_var.data);
+                       return (*env)->NewObject(env, LDKEvent_DiscardFunding_class, LDKEvent_DiscardFunding_meth, channel_id_arr, transaction_arr);
+               }
+               default: abort();
+       }
+}
+static jclass LDKCOption_EventZ_Some_class = NULL;
+static jmethodID LDKCOption_EventZ_Some_meth = NULL;
+static jclass LDKCOption_EventZ_None_class = NULL;
+static jmethodID LDKCOption_EventZ_None_meth = NULL;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1EventZ_init (JNIEnv *env, jclass clz) {
+       LDKCOption_EventZ_Some_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKCOption_EventZ$Some;"));
+       CHECK(LDKCOption_EventZ_Some_class != NULL);
+       LDKCOption_EventZ_Some_meth = (*env)->GetMethodID(env, LDKCOption_EventZ_Some_class, "<init>", "(J)V");
+       CHECK(LDKCOption_EventZ_Some_meth != NULL);
+       LDKCOption_EventZ_None_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKCOption_EventZ$None;"));
+       CHECK(LDKCOption_EventZ_None_class != NULL);
+       LDKCOption_EventZ_None_meth = (*env)->GetMethodID(env, LDKCOption_EventZ_None_class, "<init>", "()V");
+       CHECK(LDKCOption_EventZ_None_meth != NULL);
+}
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1EventZ_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
+       LDKCOption_EventZ *obj = (LDKCOption_EventZ*)(ptr & ~1);
+       switch(obj->tag) {
+               case LDKCOption_EventZ_Some: {
+                       uint64_t some_ref = ((uint64_t)&obj->some) | 1;
+                       return (*env)->NewObject(env, LDKCOption_EventZ_Some_class, LDKCOption_EventZ_Some_meth, some_ref);
+               }
+               case LDKCOption_EventZ_None: {
+                       return (*env)->NewObject(env, LDKCOption_EventZ_None_class, LDKCOption_EventZ_None_meth);
+               }
+               default: abort();
+       }
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1COption_1EventZDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_COption_EventZDecodeErrorZ *val = (LDKCResult_COption_EventZDecodeErrorZ*)(arg & ~1);
+       CHECK(val->result_ok);
+       uint64_t res_ref = ((uint64_t)&(*val->contents.result)) | 1;
+       return res_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1COption_1EventZDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_COption_EventZDecodeErrorZ *val = (LDKCResult_COption_EventZDecodeErrorZ*)(arg & ~1);
+       CHECK(!val->result_ok);
+       LDKDecodeError err_var = (*val->contents.err);
+       uint64_t err_ref = 0;
+       CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+       CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
+       err_ref = (uint64_t)err_var.inner & ~1;
+       return err_ref;
+}
 static jclass LDKErrorAction_DisconnectPeer_class = NULL;
 static jmethodID LDKErrorAction_DisconnectPeer_meth = NULL;
 static jclass LDKErrorAction_IgnoreError_class = NULL;
@@ -1848,6 +2028,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKErrorAction_1ref_1from_1
                        if ((uint64_t)msg_var.inner > 4096) {
                                CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                                CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                                msg_ref = (uint64_t)msg_var.inner & ~1;
                        }
                        return (*env)->NewObject(env, LDKErrorAction_DisconnectPeer_class, LDKErrorAction_DisconnectPeer_meth, msg_ref);
@@ -1864,6 +2045,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKErrorAction_1ref_1from_1
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return (*env)->NewObject(env, LDKErrorAction_SendErrorMessage_class, LDKErrorAction_SendErrorMessage_meth, msg_ref);
                }
@@ -2015,6 +2197,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMessageSendEvent_1ref_1f
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return (*env)->NewObject(env, LDKMessageSendEvent_SendAcceptChannel_class, LDKMessageSendEvent_SendAcceptChannel_meth, node_id_arr, msg_ref);
                }
@@ -2025,6 +2208,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMessageSendEvent_1ref_1f
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return (*env)->NewObject(env, LDKMessageSendEvent_SendOpenChannel_class, LDKMessageSendEvent_SendOpenChannel_meth, node_id_arr, msg_ref);
                }
@@ -2035,6 +2219,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMessageSendEvent_1ref_1f
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return (*env)->NewObject(env, LDKMessageSendEvent_SendFundingCreated_class, LDKMessageSendEvent_SendFundingCreated_meth, node_id_arr, msg_ref);
                }
@@ -2045,6 +2230,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMessageSendEvent_1ref_1f
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return (*env)->NewObject(env, LDKMessageSendEvent_SendFundingSigned_class, LDKMessageSendEvent_SendFundingSigned_meth, node_id_arr, msg_ref);
                }
@@ -2055,6 +2241,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMessageSendEvent_1ref_1f
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return (*env)->NewObject(env, LDKMessageSendEvent_SendFundingLocked_class, LDKMessageSendEvent_SendFundingLocked_meth, node_id_arr, msg_ref);
                }
@@ -2065,6 +2252,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMessageSendEvent_1ref_1f
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return (*env)->NewObject(env, LDKMessageSendEvent_SendAnnouncementSignatures_class, LDKMessageSendEvent_SendAnnouncementSignatures_meth, node_id_arr, msg_ref);
                }
@@ -2075,6 +2263,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMessageSendEvent_1ref_1f
                        uint64_t updates_ref = 0;
                        CHECK((((uint64_t)updates_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&updates_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(updates_var);
                        updates_ref = (uint64_t)updates_var.inner & ~1;
                        return (*env)->NewObject(env, LDKMessageSendEvent_UpdateHTLCs_class, LDKMessageSendEvent_UpdateHTLCs_meth, node_id_arr, updates_ref);
                }
@@ -2085,6 +2274,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMessageSendEvent_1ref_1f
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return (*env)->NewObject(env, LDKMessageSendEvent_SendRevokeAndACK_class, LDKMessageSendEvent_SendRevokeAndACK_meth, node_id_arr, msg_ref);
                }
@@ -2095,6 +2285,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMessageSendEvent_1ref_1f
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return (*env)->NewObject(env, LDKMessageSendEvent_SendClosingSigned_class, LDKMessageSendEvent_SendClosingSigned_meth, node_id_arr, msg_ref);
                }
@@ -2105,6 +2296,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMessageSendEvent_1ref_1f
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return (*env)->NewObject(env, LDKMessageSendEvent_SendShutdown_class, LDKMessageSendEvent_SendShutdown_meth, node_id_arr, msg_ref);
                }
@@ -2115,6 +2307,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMessageSendEvent_1ref_1f
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return (*env)->NewObject(env, LDKMessageSendEvent_SendChannelReestablish_class, LDKMessageSendEvent_SendChannelReestablish_meth, node_id_arr, msg_ref);
                }
@@ -2123,11 +2316,13 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMessageSendEvent_1ref_1f
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        LDKChannelUpdate update_msg_var = obj->broadcast_channel_announcement.update_msg;
                        uint64_t update_msg_ref = 0;
                        CHECK((((uint64_t)update_msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&update_msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_msg_var);
                        update_msg_ref = (uint64_t)update_msg_var.inner & ~1;
                        return (*env)->NewObject(env, LDKMessageSendEvent_BroadcastChannelAnnouncement_class, LDKMessageSendEvent_BroadcastChannelAnnouncement_meth, msg_ref, update_msg_ref);
                }
@@ -2136,6 +2331,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMessageSendEvent_1ref_1f
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return (*env)->NewObject(env, LDKMessageSendEvent_BroadcastNodeAnnouncement_class, LDKMessageSendEvent_BroadcastNodeAnnouncement_meth, msg_ref);
                }
@@ -2144,6 +2340,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMessageSendEvent_1ref_1f
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return (*env)->NewObject(env, LDKMessageSendEvent_BroadcastChannelUpdate_class, LDKMessageSendEvent_BroadcastChannelUpdate_meth, msg_ref);
                }
@@ -2154,6 +2351,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMessageSendEvent_1ref_1f
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return (*env)->NewObject(env, LDKMessageSendEvent_SendChannelUpdate_class, LDKMessageSendEvent_SendChannelUpdate_meth, node_id_arr, msg_ref);
                }
@@ -2170,6 +2368,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMessageSendEvent_1ref_1f
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return (*env)->NewObject(env, LDKMessageSendEvent_SendChannelRangeQuery_class, LDKMessageSendEvent_SendChannelRangeQuery_meth, node_id_arr, msg_ref);
                }
@@ -2180,6 +2379,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMessageSendEvent_1ref_1f
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return (*env)->NewObject(env, LDKMessageSendEvent_SendShortIdsQuery_class, LDKMessageSendEvent_SendShortIdsQuery_meth, node_id_arr, msg_ref);
                }
@@ -2190,32 +2390,13 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMessageSendEvent_1ref_1f
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return (*env)->NewObject(env, LDKMessageSendEvent_SendReplyChannelRange_class, LDKMessageSendEvent_SendReplyChannelRange_meth, node_id_arr, msg_ref);
                }
                default: abort();
        }
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1MessageSendEventZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_MessageSendEventZ *ret = MALLOC(sizeof(LDKCVec_MessageSendEventZ), "LDKCVec_MessageSendEventZ");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKMessageSendEvent) * ret->datalen, "LDKCVec_MessageSendEventZ Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       int64_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKMessageSendEvent arr_elem_conv = *(LDKMessageSendEvent*)(arr_elem_ptr);
-                       arr_elem_conv = MessageSendEvent_clone((LDKMessageSendEvent*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_MessageSendEventZ CVec_MessageSendEventZ_clone(const LDKCVec_MessageSendEventZ *orig) {
        LDKCVec_MessageSendEventZ ret = { .data = MALLOC(sizeof(LDKMessageSendEvent) * orig->datalen, "LDKCVec_MessageSendEventZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -2223,9 +2404,6 @@ static inline LDKCVec_MessageSendEventZ CVec_MessageSendEventZ_clone(const LDKCV
        }
        return ret;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InitFeaturesDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_InitFeaturesDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InitFeaturesDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_InitFeaturesDecodeErrorZ *val = (LDKCResult_InitFeaturesDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -2233,6 +2411,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InitFeaturesDec
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -2243,12 +2422,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InitFeaturesDec
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeFeaturesDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_NodeFeaturesDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeFeaturesDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_NodeFeaturesDecodeErrorZ *val = (LDKCResult_NodeFeaturesDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -2256,6 +2433,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeFeaturesDec
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -2266,12 +2444,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeFeaturesDec
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelFeaturesDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_ChannelFeaturesDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelFeaturesDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_ChannelFeaturesDecodeErrorZ *val = (LDKCResult_ChannelFeaturesDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -2279,6 +2455,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelFeatures
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -2289,12 +2466,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelFeatures
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InvoiceFeaturesDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_InvoiceFeaturesDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InvoiceFeaturesDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_InvoiceFeaturesDecodeErrorZ *val = (LDKCResult_InvoiceFeaturesDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -2302,6 +2477,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InvoiceFeatures
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -2312,12 +2488,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InvoiceFeatures
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ScoringParametersDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_ScoringParametersDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ScoringParametersDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_ScoringParametersDecodeErrorZ *val = (LDKCResult_ScoringParametersDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -2325,6 +2499,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ScoringParamete
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -2335,12 +2510,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ScoringParamete
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ScorerDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_ScorerDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ScorerDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_ScorerDecodeErrorZ *val = (LDKCResult_ScorerDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -2348,6 +2521,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ScorerDecodeErr
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -2358,12 +2532,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ScorerDecodeErr
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1DelayedPaymentOutputDescriptorDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1DelayedPaymentOutputDescriptorDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ *val = (LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -2371,6 +2543,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1DelayedPaymentO
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -2381,12 +2554,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1DelayedPaymentO
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1StaticPaymentOutputDescriptorDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1StaticPaymentOutputDescriptorDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ *val = (LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -2394,6 +2565,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1StaticPaymentOu
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -2404,12 +2576,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1StaticPaymentOu
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SpendableOutputDescriptorDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_SpendableOutputDescriptorDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SpendableOutputDescriptorDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_SpendableOutputDescriptorDecodeErrorZ *val = (LDKCResult_SpendableOutputDescriptorDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -2423,12 +2593,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SpendableOutput
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneNoneZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_NoneNoneZ*)arg)->result_ok;
-}
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_NoneNoneZ *val = (LDKCResult_NoneNoneZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -2468,9 +2636,6 @@ JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1SignatureCVec
        return ret_arr;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1C2Tuple_1SignatureCVec_1SignatureZZNoneZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1C2Tuple_1SignatureCVec_1SignatureZZNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ *val = (LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -2484,9 +2649,6 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1C2Tuple_1Signature
        CHECK(!val->result_ok);
        return *val->contents.err;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SignatureNoneZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_SignatureNoneZ*)arg)->result_ok;
-}
 JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SignatureNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_SignatureNoneZ *val = (LDKCResult_SignatureNoneZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -2596,6 +2758,7 @@ LDKCResult_NoneNoneZ validate_holder_commitment_LDKBaseSign_jcall(const void* th
        holder_tx_var = HolderCommitmentTransaction_clone(holder_tx);
        CHECK((((uint64_t)holder_tx_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&holder_tx_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(holder_tx_var);
        holder_tx_ref = (uint64_t)holder_tx_var.inner;
        if (holder_tx_var.is_owned) {
                holder_tx_ref |= 1;
@@ -2610,7 +2773,7 @@ LDKCResult_NoneNoneZ validate_holder_commitment_LDKBaseSign_jcall(const void* th
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneNoneZ ret_conv = *(LDKCResult_NoneNoneZ*)(ret_ptr);
-       ret_conv = CResult_NoneNoneZ_clone((LDKCResult_NoneNoneZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -2654,6 +2817,7 @@ LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ sign_counterparty_commitment_L
        commitment_tx_var = CommitmentTransaction_clone(commitment_tx);
        CHECK((((uint64_t)commitment_tx_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&commitment_tx_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(commitment_tx_var);
        commitment_tx_ref = (uint64_t)commitment_tx_var.inner;
        if (commitment_tx_var.is_owned) {
                commitment_tx_ref |= 1;
@@ -2668,7 +2832,7 @@ LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ sign_counterparty_commitment_L
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ ret_conv = *(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)(ret_ptr);
-       ret_conv = CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone((LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -2695,7 +2859,7 @@ LDKCResult_NoneNoneZ validate_counterparty_revocation_LDKBaseSign_jcall(const vo
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneNoneZ ret_conv = *(LDKCResult_NoneNoneZ*)(ret_ptr);
-       ret_conv = CResult_NoneNoneZ_clone((LDKCResult_NoneNoneZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -2715,6 +2879,7 @@ LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ sign_holder_commitment_and_htl
        commitment_tx_var = HolderCommitmentTransaction_clone(commitment_tx);
        CHECK((((uint64_t)commitment_tx_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&commitment_tx_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(commitment_tx_var);
        commitment_tx_ref = (uint64_t)commitment_tx_var.inner;
        if (commitment_tx_var.is_owned) {
                commitment_tx_ref |= 1;
@@ -2729,7 +2894,7 @@ LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ sign_holder_commitment_and_htl
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ ret_conv = *(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)(ret_ptr);
-       ret_conv = CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone((LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -2760,7 +2925,7 @@ LDKCResult_SignatureNoneZ sign_justice_revoked_output_LDKBaseSign_jcall(const vo
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)(ret_ptr);
-       ret_conv = CResult_SignatureNoneZ_clone((LDKCResult_SignatureNoneZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -2786,6 +2951,7 @@ LDKCResult_SignatureNoneZ sign_justice_revoked_htlc_LDKBaseSign_jcall(const void
        htlc_var = HTLCOutputInCommitment_clone(htlc);
        CHECK((((uint64_t)htlc_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&htlc_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(htlc_var);
        htlc_ref = (uint64_t)htlc_var.inner;
        if (htlc_var.is_owned) {
                htlc_ref |= 1;
@@ -2800,7 +2966,7 @@ LDKCResult_SignatureNoneZ sign_justice_revoked_htlc_LDKBaseSign_jcall(const void
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)(ret_ptr);
-       ret_conv = CResult_SignatureNoneZ_clone((LDKCResult_SignatureNoneZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -2826,6 +2992,7 @@ LDKCResult_SignatureNoneZ sign_counterparty_htlc_transaction_LDKBaseSign_jcall(c
        htlc_var = HTLCOutputInCommitment_clone(htlc);
        CHECK((((uint64_t)htlc_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&htlc_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(htlc_var);
        htlc_ref = (uint64_t)htlc_var.inner;
        if (htlc_var.is_owned) {
                htlc_ref |= 1;
@@ -2840,7 +3007,7 @@ LDKCResult_SignatureNoneZ sign_counterparty_htlc_transaction_LDKBaseSign_jcall(c
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)(ret_ptr);
-       ret_conv = CResult_SignatureNoneZ_clone((LDKCResult_SignatureNoneZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -2860,6 +3027,7 @@ LDKCResult_SignatureNoneZ sign_closing_transaction_LDKBaseSign_jcall(const void*
        closing_tx_var = ClosingTransaction_clone(closing_tx);
        CHECK((((uint64_t)closing_tx_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&closing_tx_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(closing_tx_var);
        closing_tx_ref = (uint64_t)closing_tx_var.inner;
        if (closing_tx_var.is_owned) {
                closing_tx_ref |= 1;
@@ -2874,7 +3042,7 @@ LDKCResult_SignatureNoneZ sign_closing_transaction_LDKBaseSign_jcall(const void*
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)(ret_ptr);
-       ret_conv = CResult_SignatureNoneZ_clone((LDKCResult_SignatureNoneZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -2894,6 +3062,7 @@ LDKCResult_SignatureNoneZ sign_channel_announcement_LDKBaseSign_jcall(const void
        msg_var = UnsignedChannelAnnouncement_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -2908,7 +3077,7 @@ LDKCResult_SignatureNoneZ sign_channel_announcement_LDKBaseSign_jcall(const void
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)(ret_ptr);
-       ret_conv = CResult_SignatureNoneZ_clone((LDKCResult_SignatureNoneZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -2928,6 +3097,7 @@ void ready_channel_LDKBaseSign_jcall(void* this_arg, const LDKChannelTransaction
        channel_parameters_var = ChannelTransactionParameters_clone(channel_parameters);
        CHECK((((uint64_t)channel_parameters_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&channel_parameters_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_parameters_var);
        channel_parameters_ref = (uint64_t)channel_parameters_var.inner;
        if (channel_parameters_var.is_owned) {
                channel_parameters_ref |= 1;
@@ -2980,7 +3150,7 @@ static inline LDKBaseSign LDKBaseSign_init (JNIEnv *env, jclass clz, jobject o,
        LDKChannelPublicKeys pubkeys_conv;
        pubkeys_conv.inner = (void*)(pubkeys & (~1));
        pubkeys_conv.is_owned = (pubkeys & 1) || (pubkeys == 0);
-       pubkeys_conv = ChannelPublicKeys_clone(&pubkeys_conv);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(pubkeys_conv);
 
        LDKBaseSign ret = {
                .this_arg = (void*) calls,
@@ -3033,6 +3203,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BaseSign_1validate_1holder_
        LDKHolderCommitmentTransaction holder_tx_conv;
        holder_tx_conv.inner = (void*)(holder_tx & (~1));
        holder_tx_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(holder_tx_conv);
        LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
        *ret_conv = (this_arg_conv->validate_holder_commitment)(this_arg_conv->this_arg, &holder_tx_conv);
        return (uint64_t)ret_conv;
@@ -3054,6 +3225,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BaseSign_1sign_1counterpart
        LDKCommitmentTransaction commitment_tx_conv;
        commitment_tx_conv.inner = (void*)(commitment_tx & (~1));
        commitment_tx_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(commitment_tx_conv);
        LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ), "LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ");
        *ret_conv = (this_arg_conv->sign_counterparty_commitment)(this_arg_conv->this_arg, &commitment_tx_conv);
        return (uint64_t)ret_conv;
@@ -3079,6 +3251,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BaseSign_1sign_1holder_1com
        LDKHolderCommitmentTransaction commitment_tx_conv;
        commitment_tx_conv.inner = (void*)(commitment_tx & (~1));
        commitment_tx_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(commitment_tx_conv);
        LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ), "LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ");
        *ret_conv = (this_arg_conv->sign_holder_commitment_and_htlcs)(this_arg_conv->this_arg, &commitment_tx_conv);
        return (uint64_t)ret_conv;
@@ -3118,6 +3291,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BaseSign_1sign_1justice_1re
        LDKHTLCOutputInCommitment htlc_conv;
        htlc_conv.inner = (void*)(htlc & (~1));
        htlc_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(htlc_conv);
        LDKCResult_SignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignatureNoneZ), "LDKCResult_SignatureNoneZ");
        *ret_conv = (this_arg_conv->sign_justice_revoked_htlc)(this_arg_conv->this_arg, justice_tx_ref, input, amount, per_commitment_key_ref, &htlc_conv);
        return (uint64_t)ret_conv;
@@ -3138,6 +3312,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BaseSign_1sign_1counterpart
        LDKHTLCOutputInCommitment htlc_conv;
        htlc_conv.inner = (void*)(htlc & (~1));
        htlc_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(htlc_conv);
        LDKCResult_SignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignatureNoneZ), "LDKCResult_SignatureNoneZ");
        *ret_conv = (this_arg_conv->sign_counterparty_htlc_transaction)(this_arg_conv->this_arg, htlc_tx_ref, input, amount, per_commitment_point_ref, &htlc_conv);
        return (uint64_t)ret_conv;
@@ -3150,6 +3325,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BaseSign_1sign_1closing_1tr
        LDKClosingTransaction closing_tx_conv;
        closing_tx_conv.inner = (void*)(closing_tx & (~1));
        closing_tx_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(closing_tx_conv);
        LDKCResult_SignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignatureNoneZ), "LDKCResult_SignatureNoneZ");
        *ret_conv = (this_arg_conv->sign_closing_transaction)(this_arg_conv->this_arg, &closing_tx_conv);
        return (uint64_t)ret_conv;
@@ -3162,6 +3338,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BaseSign_1sign_1channel_1an
        LDKUnsignedChannelAnnouncement msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        LDKCResult_SignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignatureNoneZ), "LDKCResult_SignatureNoneZ");
        *ret_conv = (this_arg_conv->sign_channel_announcement)(this_arg_conv->this_arg, &msg_conv);
        return (uint64_t)ret_conv;
@@ -3174,6 +3351,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BaseSign_1ready_1channel(JNIEn
        LDKChannelTransactionParameters channel_parameters_conv;
        channel_parameters_conv.inner = (void*)(channel_parameters & (~1));
        channel_parameters_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_parameters_conv);
        (this_arg_conv->ready_channel)(this_arg_conv->this_arg, &channel_parameters_conv);
 }
 
@@ -3190,6 +3368,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BaseSign_1get_1pubkeys(JNIE
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -3264,7 +3443,7 @@ static inline LDKSign LDKSign_init (JNIEnv *env, jclass clz, jobject o, jobject
        LDKChannelPublicKeys pubkeys_conv;
        pubkeys_conv.inner = (void*)(pubkeys & (~1));
        pubkeys_conv.is_owned = (pubkeys & 1) || (pubkeys == 0);
-       pubkeys_conv = ChannelPublicKeys_clone(&pubkeys_conv);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(pubkeys_conv);
 
        LDKSign ret = {
                .this_arg = (void*) calls,
@@ -3298,9 +3477,6 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Sign_1write(JNIEnv *env
        return ret_arr;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SignDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_SignDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SignDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_SignDecodeErrorZ *val = (LDKCResult_SignDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3315,12 +3491,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SignDecodeError
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RecoverableSignatureNoneZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_RecoverableSignatureNoneZ*)arg)->result_ok;
-}
 JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RecoverableSignatureNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_RecoverableSignatureNoneZ *val = (LDKCResult_RecoverableSignatureNoneZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3340,9 +3514,6 @@ static inline LDKCVec_CVec_u8ZZ CVec_CVec_u8ZZ_clone(const LDKCVec_CVec_u8ZZ *or
        }
        return ret;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CVec_1CVec_1u8ZZNoneZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_CVec_CVec_u8ZZNoneZ*)arg)->result_ok;
-}
 JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CVec_1CVec_1u8ZZNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_CVec_CVec_u8ZZNoneZ *val = (LDKCResult_CVec_CVec_u8ZZNoneZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3364,9 +3535,6 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CVec_1CVec_1u8ZZNo
        CHECK(!val->result_ok);
        return *val->contents.err;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InMemorySignerDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_InMemorySignerDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InMemorySignerDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_InMemorySignerDecodeErrorZ *val = (LDKCResult_InMemorySignerDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3374,6 +3542,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InMemorySignerD
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -3384,29 +3553,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InMemorySignerD
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1TxOutZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_TxOutZ *ret = MALLOC(sizeof(LDKCVec_TxOutZ), "LDKCVec_TxOutZ");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKTxOut) * ret->datalen, "LDKCVec_TxOutZ Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       int64_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKTxOut arr_elem_conv = *(LDKTxOut*)(arr_elem_ptr);
-                       arr_elem_conv = TxOut_clone((LDKTxOut*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_TxOutZ CVec_TxOutZ_clone(const LDKCVec_TxOutZ *orig) {
        LDKCVec_TxOutZ ret = { .data = MALLOC(sizeof(LDKTxOut) * orig->datalen, "LDKCVec_TxOutZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -3414,9 +3564,6 @@ static inline LDKCVec_TxOutZ CVec_TxOutZ_clone(const LDKCVec_TxOutZ *orig) {
        }
        return ret;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TransactionNoneZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_TransactionNoneZ*)arg)->result_ok;
-}
 JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TransactionNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_TransactionNoneZ *val = (LDKCResult_TransactionNoneZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3449,6 +3596,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelMo
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -3456,26 +3604,6 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelMo
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1C2Tuple_1BlockHashChannelMonitorZZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_C2Tuple_BlockHashChannelMonitorZZ *ret = MALLOC(sizeof(LDKCVec_C2Tuple_BlockHashChannelMonitorZZ), "LDKCVec_C2Tuple_BlockHashChannelMonitorZZ");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKC2Tuple_BlockHashChannelMonitorZ) * ret->datalen, "LDKCVec_C2Tuple_BlockHashChannelMonitorZZ Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       int64_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKC2Tuple_BlockHashChannelMonitorZ arr_elem_conv = *(LDKC2Tuple_BlockHashChannelMonitorZ*)(arr_elem_ptr);
-                       arr_elem_conv = C2Tuple_BlockHashChannelMonitorZ_clone((LDKC2Tuple_BlockHashChannelMonitorZ*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_C2Tuple_BlockHashChannelMonitorZZ CVec_C2Tuple_BlockHashChannelMonitorZZ_clone(const LDKCVec_C2Tuple_BlockHashChannelMonitorZZ *orig) {
        LDKCVec_C2Tuple_BlockHashChannelMonitorZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_BlockHashChannelMonitorZ) * orig->datalen, "LDKCVec_C2Tuple_BlockHashChannelMonitorZZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -3483,9 +3611,6 @@ static inline LDKCVec_C2Tuple_BlockHashChannelMonitorZZ CVec_C2Tuple_BlockHashCh
        }
        return ret;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CVec_1C2Tuple_1BlockHashChannelMonitorZZErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CVec_1C2Tuple_1BlockHashChannelMonitorZZErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ *val = (LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3611,15 +3736,13 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKAPIError_1ref_1from_1ptr
                        uint64_t script_ref = 0;
                        CHECK((((uint64_t)script_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&script_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(script_var);
                        script_ref = (uint64_t)script_var.inner & ~1;
                        return (*env)->NewObject(env, LDKAPIError_IncompatibleShutdownScript_class, LDKAPIError_IncompatibleShutdownScript_meth, script_ref);
                }
                default: abort();
        }
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneAPIErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_NoneAPIErrorZ*)arg)->result_ok;
-}
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneAPIErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_NoneAPIErrorZ *val = (LDKCResult_NoneAPIErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3631,26 +3754,6 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneAPIErrorZ_1
        uint64_t err_ref = ((uint64_t)&(*val->contents.err)) | 1;
        return err_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1CResult_1NoneAPIErrorZZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_CResult_NoneAPIErrorZZ *ret = MALLOC(sizeof(LDKCVec_CResult_NoneAPIErrorZZ), "LDKCVec_CResult_NoneAPIErrorZZ");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKCResult_NoneAPIErrorZ) * ret->datalen, "LDKCVec_CResult_NoneAPIErrorZZ Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       int64_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKCResult_NoneAPIErrorZ arr_elem_conv = *(LDKCResult_NoneAPIErrorZ*)(arr_elem_ptr);
-                       arr_elem_conv = CResult_NoneAPIErrorZ_clone((LDKCResult_NoneAPIErrorZ*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_CResult_NoneAPIErrorZZ CVec_CResult_NoneAPIErrorZZ_clone(const LDKCVec_CResult_NoneAPIErrorZZ *orig) {
        LDKCVec_CResult_NoneAPIErrorZZ ret = { .data = MALLOC(sizeof(LDKCResult_NoneAPIErrorZ) * orig->datalen, "LDKCVec_CResult_NoneAPIErrorZZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -3658,26 +3761,6 @@ static inline LDKCVec_CResult_NoneAPIErrorZZ CVec_CResult_NoneAPIErrorZZ_clone(c
        }
        return ret;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1APIErrorZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_APIErrorZ *ret = MALLOC(sizeof(LDKCVec_APIErrorZ), "LDKCVec_APIErrorZ");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKAPIError) * ret->datalen, "LDKCVec_APIErrorZ Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       int64_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKAPIError arr_elem_conv = *(LDKAPIError*)(arr_elem_ptr);
-                       arr_elem_conv = APIError_clone((LDKAPIError*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_APIErrorZ CVec_APIErrorZ_clone(const LDKCVec_APIErrorZ *orig) {
        LDKCVec_APIErrorZ ret = { .data = MALLOC(sizeof(LDKAPIError) * orig->datalen, "LDKCVec_APIErrorZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -3685,9 +3768,6 @@ static inline LDKCVec_APIErrorZ CVec_APIErrorZ_clone(const LDKCVec_APIErrorZ *or
        }
        return ret;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1_1u832APIErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult__u832APIErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_LDKCResult_1_1u832APIErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult__u832APIErrorZ *val = (LDKCResult__u832APIErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3781,6 +3861,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKPaymentSendFailure_1ref_
                        if ((uint64_t)failed_paths_retry_var.inner > 4096) {
                                CHECK((((uint64_t)failed_paths_retry_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                                CHECK((((uint64_t)&failed_paths_retry_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(failed_paths_retry_var);
                                failed_paths_retry_ref = (uint64_t)failed_paths_retry_var.inner & ~1;
                        }
                        int8_tArray payment_id_arr = (*env)->NewByteArray(env, 32);
@@ -3790,9 +3871,6 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKPaymentSendFailure_1ref_
                default: abort();
        }
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PaymentIdPaymentSendFailureZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_PaymentIdPaymentSendFailureZ*)arg)->result_ok;
-}
 JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PaymentIdPaymentSendFailureZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_PaymentIdPaymentSendFailureZ *val = (LDKCResult_PaymentIdPaymentSendFailureZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3806,9 +3884,6 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PaymentIdPaymen
        uint64_t err_ref = ((uint64_t)&(*val->contents.err)) | 1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NonePaymentSendFailureZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_NonePaymentSendFailureZ*)arg)->result_ok;
-}
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NonePaymentSendFailureZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_NonePaymentSendFailureZ *val = (LDKCResult_NonePaymentSendFailureZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3840,9 +3915,6 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PaymentHashPay
        return ret_arr;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1C2Tuple_1PaymentHashPaymentIdZPaymentSendFailureZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1C2Tuple_1PaymentHashPaymentIdZPaymentSendFailureZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ *val = (LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3913,26 +3985,6 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKNetAddress_1ref_1from_1p
                default: abort();
        }
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1NetAddressZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_NetAddressZ *ret = MALLOC(sizeof(LDKCVec_NetAddressZ), "LDKCVec_NetAddressZ");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKNetAddress) * ret->datalen, "LDKCVec_NetAddressZ Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       int64_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKNetAddress arr_elem_conv = *(LDKNetAddress*)(arr_elem_ptr);
-                       arr_elem_conv = NetAddress_clone((LDKNetAddress*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_NetAddressZ CVec_NetAddressZ_clone(const LDKCVec_NetAddressZ *orig) {
        LDKCVec_NetAddressZ ret = { .data = MALLOC(sizeof(LDKNetAddress) * orig->datalen, "LDKCVec_NetAddressZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -3960,9 +4012,6 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PaymentHashPay
        return ret_arr;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PaymentSecretAPIErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_PaymentSecretAPIErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PaymentSecretAPIErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_PaymentSecretAPIErrorZ *val = (LDKCResult_PaymentSecretAPIErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3976,26 +4025,6 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PaymentSecretAP
        uint64_t err_ref = ((uint64_t)&(*val->contents.err)) | 1;
        return err_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1ChannelMonitorZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_ChannelMonitorZ *ret = MALLOC(sizeof(LDKCVec_ChannelMonitorZ), "LDKCVec_ChannelMonitorZ");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKChannelMonitor) * ret->datalen, "LDKCVec_ChannelMonitorZ Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       int64_t arr_elem = java_elems[i];
-                       LDKChannelMonitor arr_elem_conv;
-                       arr_elem_conv.inner = (void*)(arr_elem & (~1));
-                       arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0);
-                       arr_elem_conv = ChannelMonitor_clone(&arr_elem_conv);
-                       ret->data[i] = arr_elem_conv;
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_ChannelMonitorZ CVec_ChannelMonitorZ_clone(const LDKCVec_ChannelMonitorZ *orig) {
        LDKCVec_ChannelMonitorZ ret = { .data = MALLOC(sizeof(LDKChannelMonitor) * orig->datalen, "LDKCVec_ChannelMonitorZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -4041,6 +4070,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ watch_channel_LDKWatch_jcall(const void*
        uint64_t funding_txo_ref = 0;
        CHECK((((uint64_t)funding_txo_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&funding_txo_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_txo_var);
        funding_txo_ref = (uint64_t)funding_txo_var.inner;
        if (funding_txo_var.is_owned) {
                funding_txo_ref |= 1;
@@ -4049,6 +4079,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ watch_channel_LDKWatch_jcall(const void*
        uint64_t monitor_ref = 0;
        CHECK((((uint64_t)monitor_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&monitor_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(monitor_var);
        monitor_ref = (uint64_t)monitor_var.inner;
        if (monitor_var.is_owned) {
                monitor_ref |= 1;
@@ -4063,7 +4094,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ watch_channel_LDKWatch_jcall(const void*
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneChannelMonitorUpdateErrZ ret_conv = *(LDKCResult_NoneChannelMonitorUpdateErrZ*)(ret_ptr);
-       ret_conv = CResult_NoneChannelMonitorUpdateErrZ_clone((LDKCResult_NoneChannelMonitorUpdateErrZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -4082,6 +4113,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ update_channel_LDKWatch_jcall(const void
        uint64_t funding_txo_ref = 0;
        CHECK((((uint64_t)funding_txo_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&funding_txo_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_txo_var);
        funding_txo_ref = (uint64_t)funding_txo_var.inner;
        if (funding_txo_var.is_owned) {
                funding_txo_ref |= 1;
@@ -4090,6 +4122,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ update_channel_LDKWatch_jcall(const void
        uint64_t update_ref = 0;
        CHECK((((uint64_t)update_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&update_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_var);
        update_ref = (uint64_t)update_var.inner;
        if (update_var.is_owned) {
                update_ref |= 1;
@@ -4104,7 +4137,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ update_channel_LDKWatch_jcall(const void
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneChannelMonitorUpdateErrZ ret_conv = *(LDKCResult_NoneChannelMonitorUpdateErrZ*)(ret_ptr);
-       ret_conv = CResult_NoneChannelMonitorUpdateErrZ_clone((LDKCResult_NoneChannelMonitorUpdateErrZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -4138,7 +4171,7 @@ LDKCVec_MonitorEventZ release_pending_monitor_events_LDKWatch_jcall(const void*
                void* ret_conv_14_ptr = (void*)(((uint64_t)ret_conv_14) & ~1);
                CHECK_ACCESS(ret_conv_14_ptr);
                LDKMonitorEvent ret_conv_14_conv = *(LDKMonitorEvent*)(ret_conv_14_ptr);
-               ret_conv_14_conv = MonitorEvent_clone((LDKMonitorEvent*)(((uint64_t)ret_conv_14) & ~1));
+               FREE((void*)ret_conv_14);
                ret_constr.data[o] = ret_conv_14_conv;
        }
        (*env)->ReleaseLongArrayElements(env, ret, ret_vals, 0);
@@ -4186,10 +4219,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Watch_1watch_1channel(JNIEn
        LDKOutPoint funding_txo_conv;
        funding_txo_conv.inner = (void*)(funding_txo & (~1));
        funding_txo_conv.is_owned = (funding_txo & 1) || (funding_txo == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_txo_conv);
        funding_txo_conv = OutPoint_clone(&funding_txo_conv);
        LDKChannelMonitor monitor_conv;
        monitor_conv.inner = (void*)(monitor & (~1));
        monitor_conv.is_owned = (monitor & 1) || (monitor == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(monitor_conv);
        monitor_conv = ChannelMonitor_clone(&monitor_conv);
        LDKCResult_NoneChannelMonitorUpdateErrZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneChannelMonitorUpdateErrZ), "LDKCResult_NoneChannelMonitorUpdateErrZ");
        *ret_conv = (this_arg_conv->watch_channel)(this_arg_conv->this_arg, funding_txo_conv, monitor_conv);
@@ -4203,10 +4238,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Watch_1update_1channel(JNIE
        LDKOutPoint funding_txo_conv;
        funding_txo_conv.inner = (void*)(funding_txo & (~1));
        funding_txo_conv.is_owned = (funding_txo & 1) || (funding_txo == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_txo_conv);
        funding_txo_conv = OutPoint_clone(&funding_txo_conv);
        LDKChannelMonitorUpdate update_conv;
        update_conv.inner = (void*)(update & (~1));
        update_conv.is_owned = (update & 1) || (update == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_conv);
        update_conv = ChannelMonitorUpdate_clone(&update_conv);
        LDKCResult_NoneChannelMonitorUpdateErrZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneChannelMonitorUpdateErrZ), "LDKCResult_NoneChannelMonitorUpdateErrZ");
        *ret_conv = (this_arg_conv->update_channel)(this_arg_conv->this_arg, funding_txo_conv, update_conv);
@@ -4414,7 +4451,7 @@ LDKShutdownScript get_shutdown_scriptpubkey_LDKKeysInterface_jcall(const void* t
        LDKShutdownScript ret_conv;
        ret_conv.inner = (void*)(ret & (~1));
        ret_conv.is_owned = (ret & 1) || (ret == 0);
-       ret_conv = ShutdownScript_clone(&ret_conv);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -4439,7 +4476,7 @@ LDKSign get_channel_signer_LDKKeysInterface_jcall(const void* this_arg, bool inb
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKSign ret_conv = *(LDKSign*)(ret_ptr);
-       ret_conv = Sign_clone(&ret_conv);
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -4491,7 +4528,7 @@ LDKCResult_SignDecodeErrorZ read_chan_signer_LDKKeysInterface_jcall(const void*
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_SignDecodeErrorZ ret_conv = *(LDKCResult_SignDecodeErrorZ*)(ret_ptr);
-       ret_conv = CResult_SignDecodeErrorZ_clone((LDKCResult_SignDecodeErrorZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -4520,7 +4557,7 @@ LDKCResult_RecoverableSignatureNoneZ sign_invoice_LDKKeysInterface_jcall(const v
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_RecoverableSignatureNoneZ ret_conv = *(LDKCResult_RecoverableSignatureNoneZ*)(ret_ptr);
-       ret_conv = CResult_RecoverableSignatureNoneZ_clone((LDKCResult_RecoverableSignatureNoneZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -4598,6 +4635,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_KeysInterface_1get_1shutdow
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -4752,7 +4790,7 @@ static void LDKLogger_JCalls_free(void* this_arg) {
                FREE(j_calls);
        }
 }
-void log_LDKLogger_jcall(const void* this_arg, const char* record) {
+void log_LDKLogger_jcall(const void* this_arg, const LDKRecord * record) {
        LDKLogger_JCalls *j_calls = (LDKLogger_JCalls*) this_arg;
        JNIEnv *env;
        jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
@@ -4761,11 +4799,19 @@ void log_LDKLogger_jcall(const void* this_arg, const char* record) {
        } else {
                DO_ASSERT(get_jenv_res == JNI_OK);
        }
-       const char* record_str = record;
-       jstring record_conv = str_ref_to_java(env, record_str, strlen(record_str));
+       LDKRecord record_var = *record;
+       uint64_t record_ref = 0;
+       record_var = Record_clone(record);
+       CHECK((((uint64_t)record_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+       CHECK((((uint64_t)&record_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(record_var);
+       record_ref = (uint64_t)record_var.inner;
+       if (record_var.is_owned) {
+               record_ref |= 1;
+       }
        jobject obj = (*env)->NewLocalRef(env, j_calls->o);
        CHECK(obj != NULL);
-       (*env)->CallVoidMethod(env, obj, j_calls->log_meth, record_conv);
+       (*env)->CallVoidMethod(env, obj, j_calls->log_meth, record_ref);
        if ((*env)->ExceptionCheck(env)) {
                (*env)->ExceptionDescribe(env);
                (*env)->FatalError(env, "A call to log in LDKLogger from rust threw an exception.");
@@ -4785,7 +4831,7 @@ static inline LDKLogger LDKLogger_init (JNIEnv *env, jclass clz, jobject o) {
        atomic_init(&calls->refcnt, 1);
        DO_ASSERT((*env)->GetJavaVM(env, &calls->vm) == 0);
        calls->o = (*env)->NewWeakGlobalRef(env, o);
-       calls->log_meth = (*env)->GetMethodID(env, c, "log", "(Ljava/lang/String;)V");
+       calls->log_meth = (*env)->GetMethodID(env, c, "log", "(J)V");
        CHECK(calls->log_meth != NULL);
 
        LDKLogger ret = {
@@ -4819,13 +4865,11 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelMa
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner & ~1;
        return ret_ref;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1C2Tuple_1BlockHashChannelManagerZDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1C2Tuple_1BlockHashChannelManagerZDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ *val = (LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -4840,12 +4884,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1C2Tuple_1BlockH
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelConfigDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_ChannelConfigDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelConfigDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_ChannelConfigDecodeErrorZ *val = (LDKCResult_ChannelConfigDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -4853,6 +4895,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelConfigDe
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -4863,12 +4906,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelConfigDe
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1OutPointDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_OutPointDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1OutPointDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_OutPointDecodeErrorZ *val = (LDKCResult_OutPointDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -4876,6 +4917,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1OutPointDecodeE
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -4886,6 +4928,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1OutPointDecodeE
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
@@ -5074,9 +5117,6 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1TypeZ_1ref_1fro
                default: abort();
        }
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1COption_1TypeZDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_COption_TypeZDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1COption_1TypeZDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_COption_TypeZDecodeErrorZ *val = (LDKCResult_COption_TypeZDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5090,6 +5130,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1COption_1TypeZD
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
@@ -5129,6 +5170,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKPaymentError_1ref_1from_
                        uint64_t routing_ref = 0;
                        CHECK((((uint64_t)routing_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&routing_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(routing_var);
                        routing_ref = (uint64_t)routing_var.inner & ~1;
                        return (*env)->NewObject(env, LDKPaymentError_Routing_class, LDKPaymentError_Routing_meth, routing_ref);
                }
@@ -5139,9 +5181,6 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKPaymentError_1ref_1from_
                default: abort();
        }
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PaymentIdPaymentErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_PaymentIdPaymentErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PaymentIdPaymentErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_PaymentIdPaymentErrorZ *val = (LDKCResult_PaymentIdPaymentErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5155,9 +5194,6 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PaymentIdPaymen
        uint64_t err_ref = ((uint64_t)&(*val->contents.err)) | 1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SiPrefixNoneZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_SiPrefixNoneZ*)arg)->result_ok;
-}
 JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SiPrefixNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_SiPrefixNoneZ *val = (LDKCResult_SiPrefixNoneZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5169,9 +5205,6 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SiPrefixNoneZ_1get
        CHECK(!val->result_ok);
        return *val->contents.err;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InvoiceNoneZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_InvoiceNoneZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InvoiceNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_InvoiceNoneZ *val = (LDKCResult_InvoiceNoneZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5179,6 +5212,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InvoiceNoneZ_1g
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5187,9 +5221,6 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InvoiceNoneZ_1get_
        CHECK(!val->result_ok);
        return *val->contents.err;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SignedRawInvoiceNoneZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_SignedRawInvoiceNoneZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SignedRawInvoiceNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_SignedRawInvoiceNoneZ *val = (LDKCResult_SignedRawInvoiceNoneZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5197,6 +5228,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SignedRawInvoic
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5214,6 +5246,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C3Tuple_1RawInvoice_1u832In
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -5240,6 +5273,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C3Tuple_1RawInvoice_1u832In
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -5247,9 +5281,6 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C3Tuple_1RawInvoice_1u832In
        return ret_ref;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PayeePubKeyErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_PayeePubKeyErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PayeePubKeyErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_PayeePubKeyErrorZ *val = (LDKCResult_PayeePubKeyErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5257,6 +5288,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PayeePubKeyErro
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5266,26 +5298,6 @@ JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PayeePubKeyError
        jclass err_conv = LDKSecp256k1Error_to_java(env, (*val->contents.err));
        return err_conv;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1PrivateRouteZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_PrivateRouteZ *ret = MALLOC(sizeof(LDKCVec_PrivateRouteZ), "LDKCVec_PrivateRouteZ");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKPrivateRoute) * ret->datalen, "LDKCVec_PrivateRouteZ Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       int64_t arr_elem = java_elems[i];
-                       LDKPrivateRoute arr_elem_conv;
-                       arr_elem_conv.inner = (void*)(arr_elem & (~1));
-                       arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0);
-                       arr_elem_conv = PrivateRoute_clone(&arr_elem_conv);
-                       ret->data[i] = arr_elem_conv;
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_PrivateRouteZ CVec_PrivateRouteZ_clone(const LDKCVec_PrivateRouteZ *orig) {
        LDKCVec_PrivateRouteZ ret = { .data = MALLOC(sizeof(LDKPrivateRoute) * orig->datalen, "LDKCVec_PrivateRouteZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -5293,9 +5305,6 @@ static inline LDKCVec_PrivateRouteZ CVec_PrivateRouteZ_clone(const LDKCVec_Priva
        }
        return ret;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PositiveTimestampCreationErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_PositiveTimestampCreationErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PositiveTimestampCreationErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_PositiveTimestampCreationErrorZ *val = (LDKCResult_PositiveTimestampCreationErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5303,6 +5312,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PositiveTimesta
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5312,9 +5322,6 @@ JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PositiveTimestam
        jclass err_conv = LDKCreationError_to_java(env, (*val->contents.err));
        return err_conv;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneSemanticErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_NoneSemanticErrorZ*)arg)->result_ok;
-}
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneSemanticErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_NoneSemanticErrorZ *val = (LDKCResult_NoneSemanticErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5326,9 +5333,6 @@ JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneSemanticErro
        jclass err_conv = LDKSemanticError_to_java(env, (*val->contents.err));
        return err_conv;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InvoiceSemanticErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_InvoiceSemanticErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InvoiceSemanticErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_InvoiceSemanticErrorZ *val = (LDKCResult_InvoiceSemanticErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5336,6 +5340,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InvoiceSemantic
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5345,9 +5350,6 @@ JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InvoiceSemanticE
        jclass err_conv = LDKSemanticError_to_java(env, (*val->contents.err));
        return err_conv;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1DescriptionCreationErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_DescriptionCreationErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1DescriptionCreationErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_DescriptionCreationErrorZ *val = (LDKCResult_DescriptionCreationErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5355,6 +5357,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1DescriptionCrea
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5364,9 +5367,6 @@ JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_LDKCResult_1DescriptionCreat
        jclass err_conv = LDKCreationError_to_java(env, (*val->contents.err));
        return err_conv;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ExpiryTimeCreationErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_ExpiryTimeCreationErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ExpiryTimeCreationErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_ExpiryTimeCreationErrorZ *val = (LDKCResult_ExpiryTimeCreationErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5374,6 +5374,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ExpiryTimeCreat
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5383,9 +5384,6 @@ JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ExpiryTimeCreati
        jclass err_conv = LDKCreationError_to_java(env, (*val->contents.err));
        return err_conv;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PrivateRouteCreationErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_PrivateRouteCreationErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PrivateRouteCreationErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_PrivateRouteCreationErrorZ *val = (LDKCResult_PrivateRouteCreationErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5393,6 +5391,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PrivateRouteCre
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5402,9 +5401,6 @@ JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PrivateRouteCrea
        jclass err_conv = LDKCreationError_to_java(env, (*val->contents.err));
        return err_conv;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1StringErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_StringErrorZ*)arg)->result_ok;
-}
 JNIEXPORT jstring JNICALL Java_org_ldk_impl_bindings_LDKCResult_1StringErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_StringErrorZ *val = (LDKCResult_StringErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5418,9 +5414,6 @@ JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_LDKCResult_1StringErrorZ_1ge
        jclass err_conv = LDKSecp256k1Error_to_java(env, (*val->contents.err));
        return err_conv;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelMonitorUpdateDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_ChannelMonitorUpdateDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelMonitorUpdateDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_ChannelMonitorUpdateDecodeErrorZ *val = (LDKCResult_ChannelMonitorUpdateDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5428,6 +5421,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelMonitorU
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5438,11 +5432,55 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelMonitorU
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1HTLCUpdateDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_HTLCUpdateDecodeErrorZ*)arg)->result_ok;
+static jclass LDKCOption_MonitorEventZ_Some_class = NULL;
+static jmethodID LDKCOption_MonitorEventZ_Some_meth = NULL;
+static jclass LDKCOption_MonitorEventZ_None_class = NULL;
+static jmethodID LDKCOption_MonitorEventZ_None_meth = NULL;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1MonitorEventZ_init (JNIEnv *env, jclass clz) {
+       LDKCOption_MonitorEventZ_Some_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKCOption_MonitorEventZ$Some;"));
+       CHECK(LDKCOption_MonitorEventZ_Some_class != NULL);
+       LDKCOption_MonitorEventZ_Some_meth = (*env)->GetMethodID(env, LDKCOption_MonitorEventZ_Some_class, "<init>", "(J)V");
+       CHECK(LDKCOption_MonitorEventZ_Some_meth != NULL);
+       LDKCOption_MonitorEventZ_None_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKCOption_MonitorEventZ$None;"));
+       CHECK(LDKCOption_MonitorEventZ_None_class != NULL);
+       LDKCOption_MonitorEventZ_None_meth = (*env)->GetMethodID(env, LDKCOption_MonitorEventZ_None_class, "<init>", "()V");
+       CHECK(LDKCOption_MonitorEventZ_None_meth != NULL);
+}
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1MonitorEventZ_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
+       LDKCOption_MonitorEventZ *obj = (LDKCOption_MonitorEventZ*)(ptr & ~1);
+       switch(obj->tag) {
+               case LDKCOption_MonitorEventZ_Some: {
+                       uint64_t some_ref = ((uint64_t)&obj->some) | 1;
+                       return (*env)->NewObject(env, LDKCOption_MonitorEventZ_Some_class, LDKCOption_MonitorEventZ_Some_meth, some_ref);
+               }
+               case LDKCOption_MonitorEventZ_None: {
+                       return (*env)->NewObject(env, LDKCOption_MonitorEventZ_None_class, LDKCOption_MonitorEventZ_None_meth);
+               }
+               default: abort();
+       }
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1COption_1MonitorEventZDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_COption_MonitorEventZDecodeErrorZ *val = (LDKCResult_COption_MonitorEventZDecodeErrorZ*)(arg & ~1);
+       CHECK(val->result_ok);
+       uint64_t res_ref = ((uint64_t)&(*val->contents.result)) | 1;
+       return res_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1COption_1MonitorEventZDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_COption_MonitorEventZDecodeErrorZ *val = (LDKCResult_COption_MonitorEventZDecodeErrorZ*)(arg & ~1);
+       CHECK(!val->result_ok);
+       LDKDecodeError err_var = (*val->contents.err);
+       uint64_t err_ref = 0;
+       CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+       CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
+       err_ref = (uint64_t)err_var.inner & ~1;
+       return err_ref;
 }
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1HTLCUpdateDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_HTLCUpdateDecodeErrorZ *val = (LDKCResult_HTLCUpdateDecodeErrorZ*)(arg & ~1);
@@ -5451,6 +5489,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1HTLCUpdateDecod
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5461,12 +5500,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1HTLCUpdateDecod
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneMonitorUpdateErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_NoneMonitorUpdateErrorZ*)arg)->result_ok;
-}
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneMonitorUpdateErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_NoneMonitorUpdateErrorZ *val = (LDKCResult_NoneMonitorUpdateErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5479,6 +5516,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneMonitorUpda
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
@@ -5491,6 +5529,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1OutPointScriptZ_1g
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -5531,26 +5570,6 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32ScriptZ_1ge
        return ret_arr;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1C2Tuple_1u32ScriptZZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_C2Tuple_u32ScriptZZ *ret = MALLOC(sizeof(LDKCVec_C2Tuple_u32ScriptZZ), "LDKCVec_C2Tuple_u32ScriptZZ");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKC2Tuple_u32ScriptZ) * ret->datalen, "LDKCVec_C2Tuple_u32ScriptZZ Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       int64_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKC2Tuple_u32ScriptZ arr_elem_conv = *(LDKC2Tuple_u32ScriptZ*)(arr_elem_ptr);
-                       arr_elem_conv = C2Tuple_u32ScriptZ_clone((LDKC2Tuple_u32ScriptZ*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_C2Tuple_u32ScriptZZ CVec_C2Tuple_u32ScriptZZ_clone(const LDKCVec_C2Tuple_u32ScriptZZ *orig) {
        LDKCVec_C2Tuple_u32ScriptZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_u32ScriptZ) * orig->datalen, "LDKCVec_C2Tuple_u32ScriptZZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -5587,26 +5606,6 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2T
        return ret_arr;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1C2Tuple_1TxidCVec_1C2Tuple_1u32ScriptZZZZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ *ret = MALLOC(sizeof(LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ), "LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ) * ret->datalen, "LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       int64_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ arr_elem_conv = *(LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ*)(arr_elem_ptr);
-                       arr_elem_conv = C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_clone((LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ CVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ_clone(const LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ *orig) {
        LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ) * orig->datalen, "LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -5614,299 +5613,6 @@ static inline LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ CVec_C2Tuple_TxidCV
        }
        return ret;
 }
-static jclass LDKPaymentPurpose_InvoicePayment_class = NULL;
-static jmethodID LDKPaymentPurpose_InvoicePayment_meth = NULL;
-static jclass LDKPaymentPurpose_SpontaneousPayment_class = NULL;
-static jmethodID LDKPaymentPurpose_SpontaneousPayment_meth = NULL;
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKPaymentPurpose_init (JNIEnv *env, jclass clz) {
-       LDKPaymentPurpose_InvoicePayment_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKPaymentPurpose$InvoicePayment;"));
-       CHECK(LDKPaymentPurpose_InvoicePayment_class != NULL);
-       LDKPaymentPurpose_InvoicePayment_meth = (*env)->GetMethodID(env, LDKPaymentPurpose_InvoicePayment_class, "<init>", "([B[BJ)V");
-       CHECK(LDKPaymentPurpose_InvoicePayment_meth != NULL);
-       LDKPaymentPurpose_SpontaneousPayment_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKPaymentPurpose$SpontaneousPayment;"));
-       CHECK(LDKPaymentPurpose_SpontaneousPayment_class != NULL);
-       LDKPaymentPurpose_SpontaneousPayment_meth = (*env)->GetMethodID(env, LDKPaymentPurpose_SpontaneousPayment_class, "<init>", "([B)V");
-       CHECK(LDKPaymentPurpose_SpontaneousPayment_meth != NULL);
-}
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKPaymentPurpose_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
-       LDKPaymentPurpose *obj = (LDKPaymentPurpose*)(ptr & ~1);
-       switch(obj->tag) {
-               case LDKPaymentPurpose_InvoicePayment: {
-                       int8_tArray payment_preimage_arr = (*env)->NewByteArray(env, 32);
-                       (*env)->SetByteArrayRegion(env, payment_preimage_arr, 0, 32, obj->invoice_payment.payment_preimage.data);
-                       int8_tArray payment_secret_arr = (*env)->NewByteArray(env, 32);
-                       (*env)->SetByteArrayRegion(env, payment_secret_arr, 0, 32, obj->invoice_payment.payment_secret.data);
-                       return (*env)->NewObject(env, LDKPaymentPurpose_InvoicePayment_class, LDKPaymentPurpose_InvoicePayment_meth, payment_preimage_arr, payment_secret_arr, obj->invoice_payment.user_payment_id);
-               }
-               case LDKPaymentPurpose_SpontaneousPayment: {
-                       int8_tArray spontaneous_payment_arr = (*env)->NewByteArray(env, 32);
-                       (*env)->SetByteArrayRegion(env, spontaneous_payment_arr, 0, 32, obj->spontaneous_payment.data);
-                       return (*env)->NewObject(env, LDKPaymentPurpose_SpontaneousPayment_class, LDKPaymentPurpose_SpontaneousPayment_meth, spontaneous_payment_arr);
-               }
-               default: abort();
-       }
-}
-static jclass LDKClosureReason_CounterpartyForceClosed_class = NULL;
-static jmethodID LDKClosureReason_CounterpartyForceClosed_meth = NULL;
-static jclass LDKClosureReason_HolderForceClosed_class = NULL;
-static jmethodID LDKClosureReason_HolderForceClosed_meth = NULL;
-static jclass LDKClosureReason_CooperativeClosure_class = NULL;
-static jmethodID LDKClosureReason_CooperativeClosure_meth = NULL;
-static jclass LDKClosureReason_CommitmentTxConfirmed_class = NULL;
-static jmethodID LDKClosureReason_CommitmentTxConfirmed_meth = NULL;
-static jclass LDKClosureReason_ProcessingError_class = NULL;
-static jmethodID LDKClosureReason_ProcessingError_meth = NULL;
-static jclass LDKClosureReason_DisconnectedPeer_class = NULL;
-static jmethodID LDKClosureReason_DisconnectedPeer_meth = NULL;
-static jclass LDKClosureReason_OutdatedChannelManager_class = NULL;
-static jmethodID LDKClosureReason_OutdatedChannelManager_meth = NULL;
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKClosureReason_init (JNIEnv *env, jclass clz) {
-       LDKClosureReason_CounterpartyForceClosed_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKClosureReason$CounterpartyForceClosed;"));
-       CHECK(LDKClosureReason_CounterpartyForceClosed_class != NULL);
-       LDKClosureReason_CounterpartyForceClosed_meth = (*env)->GetMethodID(env, LDKClosureReason_CounterpartyForceClosed_class, "<init>", "(Ljava/lang/String;)V");
-       CHECK(LDKClosureReason_CounterpartyForceClosed_meth != NULL);
-       LDKClosureReason_HolderForceClosed_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKClosureReason$HolderForceClosed;"));
-       CHECK(LDKClosureReason_HolderForceClosed_class != NULL);
-       LDKClosureReason_HolderForceClosed_meth = (*env)->GetMethodID(env, LDKClosureReason_HolderForceClosed_class, "<init>", "()V");
-       CHECK(LDKClosureReason_HolderForceClosed_meth != NULL);
-       LDKClosureReason_CooperativeClosure_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKClosureReason$CooperativeClosure;"));
-       CHECK(LDKClosureReason_CooperativeClosure_class != NULL);
-       LDKClosureReason_CooperativeClosure_meth = (*env)->GetMethodID(env, LDKClosureReason_CooperativeClosure_class, "<init>", "()V");
-       CHECK(LDKClosureReason_CooperativeClosure_meth != NULL);
-       LDKClosureReason_CommitmentTxConfirmed_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKClosureReason$CommitmentTxConfirmed;"));
-       CHECK(LDKClosureReason_CommitmentTxConfirmed_class != NULL);
-       LDKClosureReason_CommitmentTxConfirmed_meth = (*env)->GetMethodID(env, LDKClosureReason_CommitmentTxConfirmed_class, "<init>", "()V");
-       CHECK(LDKClosureReason_CommitmentTxConfirmed_meth != NULL);
-       LDKClosureReason_ProcessingError_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKClosureReason$ProcessingError;"));
-       CHECK(LDKClosureReason_ProcessingError_class != NULL);
-       LDKClosureReason_ProcessingError_meth = (*env)->GetMethodID(env, LDKClosureReason_ProcessingError_class, "<init>", "(Ljava/lang/String;)V");
-       CHECK(LDKClosureReason_ProcessingError_meth != NULL);
-       LDKClosureReason_DisconnectedPeer_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKClosureReason$DisconnectedPeer;"));
-       CHECK(LDKClosureReason_DisconnectedPeer_class != NULL);
-       LDKClosureReason_DisconnectedPeer_meth = (*env)->GetMethodID(env, LDKClosureReason_DisconnectedPeer_class, "<init>", "()V");
-       CHECK(LDKClosureReason_DisconnectedPeer_meth != NULL);
-       LDKClosureReason_OutdatedChannelManager_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKClosureReason$OutdatedChannelManager;"));
-       CHECK(LDKClosureReason_OutdatedChannelManager_class != NULL);
-       LDKClosureReason_OutdatedChannelManager_meth = (*env)->GetMethodID(env, LDKClosureReason_OutdatedChannelManager_class, "<init>", "()V");
-       CHECK(LDKClosureReason_OutdatedChannelManager_meth != NULL);
-}
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKClosureReason_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
-       LDKClosureReason *obj = (LDKClosureReason*)(ptr & ~1);
-       switch(obj->tag) {
-               case LDKClosureReason_CounterpartyForceClosed: {
-                       LDKStr peer_msg_str = obj->counterparty_force_closed.peer_msg;
-                       jstring peer_msg_conv = str_ref_to_java(env, peer_msg_str.chars, peer_msg_str.len);
-                       return (*env)->NewObject(env, LDKClosureReason_CounterpartyForceClosed_class, LDKClosureReason_CounterpartyForceClosed_meth, peer_msg_conv);
-               }
-               case LDKClosureReason_HolderForceClosed: {
-                       return (*env)->NewObject(env, LDKClosureReason_HolderForceClosed_class, LDKClosureReason_HolderForceClosed_meth);
-               }
-               case LDKClosureReason_CooperativeClosure: {
-                       return (*env)->NewObject(env, LDKClosureReason_CooperativeClosure_class, LDKClosureReason_CooperativeClosure_meth);
-               }
-               case LDKClosureReason_CommitmentTxConfirmed: {
-                       return (*env)->NewObject(env, LDKClosureReason_CommitmentTxConfirmed_class, LDKClosureReason_CommitmentTxConfirmed_meth);
-               }
-               case LDKClosureReason_ProcessingError: {
-                       LDKStr err_str = obj->processing_error.err;
-                       jstring err_conv = str_ref_to_java(env, err_str.chars, err_str.len);
-                       return (*env)->NewObject(env, LDKClosureReason_ProcessingError_class, LDKClosureReason_ProcessingError_meth, err_conv);
-               }
-               case LDKClosureReason_DisconnectedPeer: {
-                       return (*env)->NewObject(env, LDKClosureReason_DisconnectedPeer_class, LDKClosureReason_DisconnectedPeer_meth);
-               }
-               case LDKClosureReason_OutdatedChannelManager: {
-                       return (*env)->NewObject(env, LDKClosureReason_OutdatedChannelManager_class, LDKClosureReason_OutdatedChannelManager_meth);
-               }
-               default: abort();
-       }
-}
-static jclass LDKEvent_FundingGenerationReady_class = NULL;
-static jmethodID LDKEvent_FundingGenerationReady_meth = NULL;
-static jclass LDKEvent_PaymentReceived_class = NULL;
-static jmethodID LDKEvent_PaymentReceived_meth = NULL;
-static jclass LDKEvent_PaymentSent_class = NULL;
-static jmethodID LDKEvent_PaymentSent_meth = NULL;
-static jclass LDKEvent_PaymentPathFailed_class = NULL;
-static jmethodID LDKEvent_PaymentPathFailed_meth = NULL;
-static jclass LDKEvent_PendingHTLCsForwardable_class = NULL;
-static jmethodID LDKEvent_PendingHTLCsForwardable_meth = NULL;
-static jclass LDKEvent_SpendableOutputs_class = NULL;
-static jmethodID LDKEvent_SpendableOutputs_meth = NULL;
-static jclass LDKEvent_PaymentForwarded_class = NULL;
-static jmethodID LDKEvent_PaymentForwarded_meth = NULL;
-static jclass LDKEvent_ChannelClosed_class = NULL;
-static jmethodID LDKEvent_ChannelClosed_meth = NULL;
-static jclass LDKEvent_DiscardFunding_class = NULL;
-static jmethodID LDKEvent_DiscardFunding_meth = NULL;
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKEvent_init (JNIEnv *env, jclass clz) {
-       LDKEvent_FundingGenerationReady_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKEvent$FundingGenerationReady;"));
-       CHECK(LDKEvent_FundingGenerationReady_class != NULL);
-       LDKEvent_FundingGenerationReady_meth = (*env)->GetMethodID(env, LDKEvent_FundingGenerationReady_class, "<init>", "([BJ[BJ)V");
-       CHECK(LDKEvent_FundingGenerationReady_meth != NULL);
-       LDKEvent_PaymentReceived_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKEvent$PaymentReceived;"));
-       CHECK(LDKEvent_PaymentReceived_class != NULL);
-       LDKEvent_PaymentReceived_meth = (*env)->GetMethodID(env, LDKEvent_PaymentReceived_class, "<init>", "([BJJ)V");
-       CHECK(LDKEvent_PaymentReceived_meth != NULL);
-       LDKEvent_PaymentSent_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKEvent$PaymentSent;"));
-       CHECK(LDKEvent_PaymentSent_class != NULL);
-       LDKEvent_PaymentSent_meth = (*env)->GetMethodID(env, LDKEvent_PaymentSent_class, "<init>", "([B[B[BJ)V");
-       CHECK(LDKEvent_PaymentSent_meth != NULL);
-       LDKEvent_PaymentPathFailed_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKEvent$PaymentPathFailed;"));
-       CHECK(LDKEvent_PaymentPathFailed_class != NULL);
-       LDKEvent_PaymentPathFailed_meth = (*env)->GetMethodID(env, LDKEvent_PaymentPathFailed_class, "<init>", "([B[BZJZ[JJJ)V");
-       CHECK(LDKEvent_PaymentPathFailed_meth != NULL);
-       LDKEvent_PendingHTLCsForwardable_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKEvent$PendingHTLCsForwardable;"));
-       CHECK(LDKEvent_PendingHTLCsForwardable_class != NULL);
-       LDKEvent_PendingHTLCsForwardable_meth = (*env)->GetMethodID(env, LDKEvent_PendingHTLCsForwardable_class, "<init>", "(J)V");
-       CHECK(LDKEvent_PendingHTLCsForwardable_meth != NULL);
-       LDKEvent_SpendableOutputs_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKEvent$SpendableOutputs;"));
-       CHECK(LDKEvent_SpendableOutputs_class != NULL);
-       LDKEvent_SpendableOutputs_meth = (*env)->GetMethodID(env, LDKEvent_SpendableOutputs_class, "<init>", "([J)V");
-       CHECK(LDKEvent_SpendableOutputs_meth != NULL);
-       LDKEvent_PaymentForwarded_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKEvent$PaymentForwarded;"));
-       CHECK(LDKEvent_PaymentForwarded_class != NULL);
-       LDKEvent_PaymentForwarded_meth = (*env)->GetMethodID(env, LDKEvent_PaymentForwarded_class, "<init>", "(JZ)V");
-       CHECK(LDKEvent_PaymentForwarded_meth != NULL);
-       LDKEvent_ChannelClosed_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKEvent$ChannelClosed;"));
-       CHECK(LDKEvent_ChannelClosed_class != NULL);
-       LDKEvent_ChannelClosed_meth = (*env)->GetMethodID(env, LDKEvent_ChannelClosed_class, "<init>", "([BJJ)V");
-       CHECK(LDKEvent_ChannelClosed_meth != NULL);
-       LDKEvent_DiscardFunding_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKEvent$DiscardFunding;"));
-       CHECK(LDKEvent_DiscardFunding_class != NULL);
-       LDKEvent_DiscardFunding_meth = (*env)->GetMethodID(env, LDKEvent_DiscardFunding_class, "<init>", "([B[B)V");
-       CHECK(LDKEvent_DiscardFunding_meth != NULL);
-}
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKEvent_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
-       LDKEvent *obj = (LDKEvent*)(ptr & ~1);
-       switch(obj->tag) {
-               case LDKEvent_FundingGenerationReady: {
-                       int8_tArray temporary_channel_id_arr = (*env)->NewByteArray(env, 32);
-                       (*env)->SetByteArrayRegion(env, temporary_channel_id_arr, 0, 32, obj->funding_generation_ready.temporary_channel_id.data);
-                       LDKCVec_u8Z output_script_var = obj->funding_generation_ready.output_script;
-                       int8_tArray output_script_arr = (*env)->NewByteArray(env, output_script_var.datalen);
-                       (*env)->SetByteArrayRegion(env, output_script_arr, 0, output_script_var.datalen, output_script_var.data);
-                       return (*env)->NewObject(env, LDKEvent_FundingGenerationReady_class, LDKEvent_FundingGenerationReady_meth, temporary_channel_id_arr, obj->funding_generation_ready.channel_value_satoshis, output_script_arr, obj->funding_generation_ready.user_channel_id);
-               }
-               case LDKEvent_PaymentReceived: {
-                       int8_tArray payment_hash_arr = (*env)->NewByteArray(env, 32);
-                       (*env)->SetByteArrayRegion(env, payment_hash_arr, 0, 32, obj->payment_received.payment_hash.data);
-                       uint64_t purpose_ref = ((uint64_t)&obj->payment_received.purpose) | 1;
-                       return (*env)->NewObject(env, LDKEvent_PaymentReceived_class, LDKEvent_PaymentReceived_meth, payment_hash_arr, obj->payment_received.amt, purpose_ref);
-               }
-               case LDKEvent_PaymentSent: {
-                       int8_tArray payment_id_arr = (*env)->NewByteArray(env, 32);
-                       (*env)->SetByteArrayRegion(env, payment_id_arr, 0, 32, obj->payment_sent.payment_id.data);
-                       int8_tArray payment_preimage_arr = (*env)->NewByteArray(env, 32);
-                       (*env)->SetByteArrayRegion(env, payment_preimage_arr, 0, 32, obj->payment_sent.payment_preimage.data);
-                       int8_tArray payment_hash_arr = (*env)->NewByteArray(env, 32);
-                       (*env)->SetByteArrayRegion(env, payment_hash_arr, 0, 32, obj->payment_sent.payment_hash.data);
-                       uint64_t fee_paid_msat_ref = ((uint64_t)&obj->payment_sent.fee_paid_msat) | 1;
-                       return (*env)->NewObject(env, LDKEvent_PaymentSent_class, LDKEvent_PaymentSent_meth, payment_id_arr, payment_preimage_arr, payment_hash_arr, fee_paid_msat_ref);
-               }
-               case LDKEvent_PaymentPathFailed: {
-                       int8_tArray payment_id_arr = (*env)->NewByteArray(env, 32);
-                       (*env)->SetByteArrayRegion(env, payment_id_arr, 0, 32, obj->payment_path_failed.payment_id.data);
-                       int8_tArray payment_hash_arr = (*env)->NewByteArray(env, 32);
-                       (*env)->SetByteArrayRegion(env, payment_hash_arr, 0, 32, obj->payment_path_failed.payment_hash.data);
-                       uint64_t network_update_ref = ((uint64_t)&obj->payment_path_failed.network_update) | 1;
-                       LDKCVec_RouteHopZ path_var = obj->payment_path_failed.path;
-                       int64_tArray path_arr = NULL;
-                       path_arr = (*env)->NewLongArray(env, path_var.datalen);
-                       int64_t *path_arr_ptr = (*env)->GetPrimitiveArrayCritical(env, path_arr, NULL);
-                       for (size_t k = 0; k < path_var.datalen; k++) {
-                               LDKRouteHop path_conv_10_var = path_var.data[k];
-                               uint64_t path_conv_10_ref = 0;
-                               CHECK((((uint64_t)path_conv_10_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
-                               CHECK((((uint64_t)&path_conv_10_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
-                               path_conv_10_ref = (uint64_t)path_conv_10_var.inner & ~1;
-                               path_arr_ptr[k] = path_conv_10_ref;
-                       }
-                       (*env)->ReleasePrimitiveArrayCritical(env, path_arr, path_arr_ptr, 0);
-                       uint64_t short_channel_id_ref = ((uint64_t)&obj->payment_path_failed.short_channel_id) | 1;
-                       LDKRouteParameters retry_var = obj->payment_path_failed.retry;
-                       uint64_t retry_ref = 0;
-                       if ((uint64_t)retry_var.inner > 4096) {
-                               CHECK((((uint64_t)retry_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
-                               CHECK((((uint64_t)&retry_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
-                               retry_ref = (uint64_t)retry_var.inner & ~1;
-                       }
-                       return (*env)->NewObject(env, LDKEvent_PaymentPathFailed_class, LDKEvent_PaymentPathFailed_meth, payment_id_arr, payment_hash_arr, obj->payment_path_failed.rejected_by_dest, network_update_ref, obj->payment_path_failed.all_paths_failed, path_arr, short_channel_id_ref, retry_ref);
-               }
-               case LDKEvent_PendingHTLCsForwardable: {
-                       return (*env)->NewObject(env, LDKEvent_PendingHTLCsForwardable_class, LDKEvent_PendingHTLCsForwardable_meth, obj->pending_htl_cs_forwardable.time_forwardable);
-               }
-               case LDKEvent_SpendableOutputs: {
-                       LDKCVec_SpendableOutputDescriptorZ outputs_var = obj->spendable_outputs.outputs;
-                       int64_tArray outputs_arr = NULL;
-                       outputs_arr = (*env)->NewLongArray(env, outputs_var.datalen);
-                       int64_t *outputs_arr_ptr = (*env)->GetPrimitiveArrayCritical(env, outputs_arr, NULL);
-                       for (size_t b = 0; b < outputs_var.datalen; b++) {
-                               uint64_t outputs_conv_27_ref = ((uint64_t)&outputs_var.data[b]) | 1;
-                               outputs_arr_ptr[b] = outputs_conv_27_ref;
-                       }
-                       (*env)->ReleasePrimitiveArrayCritical(env, outputs_arr, outputs_arr_ptr, 0);
-                       return (*env)->NewObject(env, LDKEvent_SpendableOutputs_class, LDKEvent_SpendableOutputs_meth, outputs_arr);
-               }
-               case LDKEvent_PaymentForwarded: {
-                       uint64_t fee_earned_msat_ref = ((uint64_t)&obj->payment_forwarded.fee_earned_msat) | 1;
-                       return (*env)->NewObject(env, LDKEvent_PaymentForwarded_class, LDKEvent_PaymentForwarded_meth, fee_earned_msat_ref, obj->payment_forwarded.claim_from_onchain_tx);
-               }
-               case LDKEvent_ChannelClosed: {
-                       int8_tArray channel_id_arr = (*env)->NewByteArray(env, 32);
-                       (*env)->SetByteArrayRegion(env, channel_id_arr, 0, 32, obj->channel_closed.channel_id.data);
-                       uint64_t reason_ref = ((uint64_t)&obj->channel_closed.reason) | 1;
-                       return (*env)->NewObject(env, LDKEvent_ChannelClosed_class, LDKEvent_ChannelClosed_meth, channel_id_arr, obj->channel_closed.user_channel_id, reason_ref);
-               }
-               case LDKEvent_DiscardFunding: {
-                       int8_tArray channel_id_arr = (*env)->NewByteArray(env, 32);
-                       (*env)->SetByteArrayRegion(env, channel_id_arr, 0, 32, obj->discard_funding.channel_id.data);
-                       LDKTransaction transaction_var = obj->discard_funding.transaction;
-                       int8_tArray transaction_arr = (*env)->NewByteArray(env, transaction_var.datalen);
-                       (*env)->SetByteArrayRegion(env, transaction_arr, 0, transaction_var.datalen, transaction_var.data);
-                       return (*env)->NewObject(env, LDKEvent_DiscardFunding_class, LDKEvent_DiscardFunding_meth, channel_id_arr, transaction_arr);
-               }
-               default: abort();
-       }
-}
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1EventZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_EventZ *ret = MALLOC(sizeof(LDKCVec_EventZ), "LDKCVec_EventZ");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKEvent) * ret->datalen, "LDKCVec_EventZ Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       int64_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKEvent arr_elem_conv = *(LDKEvent*)(arr_elem_ptr);
-                       arr_elem_conv = Event_clone((LDKEvent*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_EventZ CVec_EventZ_clone(const LDKCVec_EventZ *orig) {
        LDKCVec_EventZ ret = { .data = MALLOC(sizeof(LDKEvent) * orig->datalen, "LDKCVec_EventZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -5933,26 +5639,6 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32TxOutZ_1get_1b(
        return (uint64_t)ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1C2Tuple_1u32TxOutZZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_C2Tuple_u32TxOutZZ *ret = MALLOC(sizeof(LDKCVec_C2Tuple_u32TxOutZZ), "LDKCVec_C2Tuple_u32TxOutZZ");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKC2Tuple_u32TxOutZ) * ret->datalen, "LDKCVec_C2Tuple_u32TxOutZZ Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       int64_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKC2Tuple_u32TxOutZ arr_elem_conv = *(LDKC2Tuple_u32TxOutZ*)(arr_elem_ptr);
-                       arr_elem_conv = C2Tuple_u32TxOutZ_clone((LDKC2Tuple_u32TxOutZ*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_C2Tuple_u32TxOutZZ CVec_C2Tuple_u32TxOutZZ_clone(const LDKCVec_C2Tuple_u32TxOutZZ *orig) {
        LDKCVec_C2Tuple_u32TxOutZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_u32TxOutZ) * orig->datalen, "LDKCVec_C2Tuple_u32TxOutZZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -5989,26 +5675,6 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2T
        return ret_arr;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1C2Tuple_1TxidCVec_1C2Tuple_1u32TxOutZZZZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ *ret = MALLOC(sizeof(LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ), "LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ) * ret->datalen, "LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       int64_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ arr_elem_conv = *(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ*)(arr_elem_ptr);
-                       arr_elem_conv = C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_clone((LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ CVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ_clone(const LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ *orig) {
        LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ) * orig->datalen, "LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -6064,26 +5730,6 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKBalance_1ref_1from_1ptr(
                default: abort();
        }
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1BalanceZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_BalanceZ *ret = MALLOC(sizeof(LDKCVec_BalanceZ), "LDKCVec_BalanceZ");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKBalance) * ret->datalen, "LDKCVec_BalanceZ Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       int64_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKBalance arr_elem_conv = *(LDKBalance*)(arr_elem_ptr);
-                       arr_elem_conv = Balance_clone((LDKBalance*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_BalanceZ CVec_BalanceZ_clone(const LDKCVec_BalanceZ *orig) {
        LDKCVec_BalanceZ ret = { .data = MALLOC(sizeof(LDKBalance) * orig->datalen, "LDKCVec_BalanceZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -6091,9 +5737,6 @@ static inline LDKCVec_BalanceZ CVec_BalanceZ_clone(const LDKCVec_BalanceZ *orig)
        }
        return ret;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1C2Tuple_1BlockHashChannelMonitorZDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1C2Tuple_1BlockHashChannelMonitorZDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ *val = (LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -6109,12 +5752,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1C2Tuple_1BlockH
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneLightningErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_NoneLightningErrorZ*)arg)->result_ok;
-}
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneLightningErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_NoneLightningErrorZ *val = (LDKCResult_NoneLightningErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -6127,6 +5768,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneLightningEr
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
@@ -6150,26 +5792,6 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyTypeZ_1ge
        return (uint64_t)ret_ret;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1C2Tuple_1PublicKeyTypeZZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_C2Tuple_PublicKeyTypeZZ *ret = MALLOC(sizeof(LDKCVec_C2Tuple_PublicKeyTypeZZ), "LDKCVec_C2Tuple_PublicKeyTypeZZ");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKC2Tuple_PublicKeyTypeZ) * ret->datalen, "LDKCVec_C2Tuple_PublicKeyTypeZZ Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       int64_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKC2Tuple_PublicKeyTypeZ arr_elem_conv = *(LDKC2Tuple_PublicKeyTypeZ*)(arr_elem_ptr);
-                       arr_elem_conv = C2Tuple_PublicKeyTypeZ_clone((LDKC2Tuple_PublicKeyTypeZ*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_C2Tuple_PublicKeyTypeZZ CVec_C2Tuple_PublicKeyTypeZZ_clone(const LDKCVec_C2Tuple_PublicKeyTypeZZ *orig) {
        LDKCVec_C2Tuple_PublicKeyTypeZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_PublicKeyTypeZ) * orig->datalen, "LDKCVec_C2Tuple_PublicKeyTypeZZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -6177,9 +5799,6 @@ static inline LDKCVec_C2Tuple_PublicKeyTypeZZ CVec_C2Tuple_PublicKeyTypeZZ_clone
        }
        return ret;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1boolLightningErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_boolLightningErrorZ*)arg)->result_ok;
-}
 JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1boolLightningErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_boolLightningErrorZ *val = (LDKCResult_boolLightningErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -6192,6 +5811,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1boolLightningEr
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
@@ -6204,6 +5824,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C3Tuple_1ChannelAnnouncemen
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -6220,6 +5841,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C3Tuple_1ChannelAnnouncemen
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -6236,6 +5858,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C3Tuple_1ChannelAnnouncemen
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -6243,26 +5866,6 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C3Tuple_1ChannelAnnouncemen
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1C3Tuple_1ChannelAnnouncementChannelUpdateChannelUpdateZZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ *ret = MALLOC(sizeof(LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ), "LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ) * ret->datalen, "LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       int64_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ arr_elem_conv = *(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ*)(arr_elem_ptr);
-                       arr_elem_conv = C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_clone((LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ CVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ_clone(const LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ *orig) {
        LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ ret = { .data = MALLOC(sizeof(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ) * orig->datalen, "LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -6270,26 +5873,6 @@ static inline LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ CV
        }
        return ret;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1NodeAnnouncementZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_NodeAnnouncementZ *ret = MALLOC(sizeof(LDKCVec_NodeAnnouncementZ), "LDKCVec_NodeAnnouncementZ");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKNodeAnnouncement) * ret->datalen, "LDKCVec_NodeAnnouncementZ Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       int64_t arr_elem = java_elems[i];
-                       LDKNodeAnnouncement arr_elem_conv;
-                       arr_elem_conv.inner = (void*)(arr_elem & (~1));
-                       arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0);
-                       arr_elem_conv = NodeAnnouncement_clone(&arr_elem_conv);
-                       ret->data[i] = arr_elem_conv;
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_NodeAnnouncementZ CVec_NodeAnnouncementZ_clone(const LDKCVec_NodeAnnouncementZ *orig) {
        LDKCVec_NodeAnnouncementZ ret = { .data = MALLOC(sizeof(LDKNodeAnnouncement) * orig->datalen, "LDKCVec_NodeAnnouncementZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -6297,9 +5880,6 @@ static inline LDKCVec_NodeAnnouncementZ CVec_NodeAnnouncementZ_clone(const LDKCV
        }
        return ret;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CVec_1u8ZPeerHandleErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_CVec_u8ZPeerHandleErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CVec_1u8ZPeerHandleErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_CVec_u8ZPeerHandleErrorZ *val = (LDKCResult_CVec_u8ZPeerHandleErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -6315,12 +5895,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CVec_1u8ZPeerHa
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NonePeerHandleErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_NonePeerHandleErrorZ*)arg)->result_ok;
-}
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NonePeerHandleErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_NonePeerHandleErrorZ *val = (LDKCResult_NonePeerHandleErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -6333,12 +5911,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NonePeerHandleE
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1boolPeerHandleErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_boolPeerHandleErrorZ*)arg)->result_ok;
-}
 JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1boolPeerHandleErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_boolPeerHandleErrorZ *val = (LDKCResult_boolPeerHandleErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -6351,12 +5927,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1boolPeerHandleE
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeIdDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_NodeIdDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeIdDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_NodeIdDecodeErrorZ *val = (LDKCResult_NodeIdDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -6364,6 +5938,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeIdDecodeErr
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -6374,6 +5949,24 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeIdDecodeErr
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
+       err_ref = (uint64_t)err_var.inner & ~1;
+       return err_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1COption_1NetworkUpdateZDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_COption_NetworkUpdateZDecodeErrorZ *val = (LDKCResult_COption_NetworkUpdateZDecodeErrorZ*)(arg & ~1);
+       CHECK(val->result_ok);
+       uint64_t res_ref = ((uint64_t)&(*val->contents.result)) | 1;
+       return res_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1COption_1NetworkUpdateZDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_COption_NetworkUpdateZDecodeErrorZ *val = (LDKCResult_COption_NetworkUpdateZDecodeErrorZ*)(arg & ~1);
+       CHECK(!val->result_ok);
+       LDKDecodeError err_var = (*val->contents.err);
+       uint64_t err_ref = 0;
+       CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+       CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
@@ -6421,7 +6014,7 @@ LDKCResult_TxOutAccessErrorZ get_utxo_LDKAccess_jcall(const void* this_arg, cons
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_TxOutAccessErrorZ ret_conv = *(LDKCResult_TxOutAccessErrorZ*)(ret_ptr);
-       ret_conv = CResult_TxOutAccessErrorZ_clone((LDKCResult_TxOutAccessErrorZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -6501,9 +6094,6 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1AccessZ_1ref_1f
                default: abort();
        }
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1DirectionalChannelInfoDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_DirectionalChannelInfoDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1DirectionalChannelInfoDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_DirectionalChannelInfoDecodeErrorZ *val = (LDKCResult_DirectionalChannelInfoDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -6511,6 +6101,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1DirectionalChan
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -6521,12 +6112,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1DirectionalChan
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelInfoDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_ChannelInfoDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelInfoDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_ChannelInfoDecodeErrorZ *val = (LDKCResult_ChannelInfoDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -6534,6 +6123,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelInfoDeco
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -6544,12 +6134,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelInfoDeco
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RoutingFeesDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_RoutingFeesDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RoutingFeesDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_RoutingFeesDecodeErrorZ *val = (LDKCResult_RoutingFeesDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -6557,6 +6145,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RoutingFeesDeco
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -6567,12 +6156,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RoutingFeesDeco
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeAnnouncementInfoDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_NodeAnnouncementInfoDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeAnnouncementInfoDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_NodeAnnouncementInfoDecodeErrorZ *val = (LDKCResult_NodeAnnouncementInfoDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -6580,6 +6167,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeAnnouncemen
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -6590,32 +6178,15 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeAnnouncemen
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1u64Z_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_u64Z *ret = MALLOC(sizeof(LDKCVec_u64Z), "LDKCVec_u64Z");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(uint64_t) * ret->datalen, "LDKCVec_u64Z Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       ret->data[i] = java_elems[i];
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_u64Z CVec_u64Z_clone(const LDKCVec_u64Z *orig) {
        LDKCVec_u64Z ret = { .data = MALLOC(sizeof(int64_t) * orig->datalen, "LDKCVec_u64Z clone bytes"), .datalen = orig->datalen };
        memcpy(ret.data, orig->data, sizeof(int64_t) * ret.datalen);
        return ret;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeInfoDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_NodeInfoDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeInfoDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_NodeInfoDecodeErrorZ *val = (LDKCResult_NodeInfoDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -6623,6 +6194,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeInfoDecodeE
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -6633,12 +6205,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeInfoDecodeE
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NetworkGraphDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_NetworkGraphDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NetworkGraphDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_NetworkGraphDecodeErrorZ *val = (LDKCResult_NetworkGraphDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -6646,6 +6216,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NetworkGraphDec
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -6656,6 +6227,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NetworkGraphDec
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
@@ -6696,9 +6268,6 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1CVec_1NetAddres
                default: abort();
        }
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NetAddressDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_NetAddressDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NetAddressDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_NetAddressDecodeErrorZ *val = (LDKCResult_NetAddressDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -6712,29 +6281,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NetAddressDecod
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1UpdateAddHTLCZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_UpdateAddHTLCZ *ret = MALLOC(sizeof(LDKCVec_UpdateAddHTLCZ), "LDKCVec_UpdateAddHTLCZ");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKUpdateAddHTLC) * ret->datalen, "LDKCVec_UpdateAddHTLCZ Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       int64_t arr_elem = java_elems[i];
-                       LDKUpdateAddHTLC arr_elem_conv;
-                       arr_elem_conv.inner = (void*)(arr_elem & (~1));
-                       arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0);
-                       arr_elem_conv = UpdateAddHTLC_clone(&arr_elem_conv);
-                       ret->data[i] = arr_elem_conv;
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_UpdateAddHTLCZ CVec_UpdateAddHTLCZ_clone(const LDKCVec_UpdateAddHTLCZ *orig) {
        LDKCVec_UpdateAddHTLCZ ret = { .data = MALLOC(sizeof(LDKUpdateAddHTLC) * orig->datalen, "LDKCVec_UpdateAddHTLCZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -6742,26 +6292,6 @@ static inline LDKCVec_UpdateAddHTLCZ CVec_UpdateAddHTLCZ_clone(const LDKCVec_Upd
        }
        return ret;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1UpdateFulfillHTLCZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_UpdateFulfillHTLCZ *ret = MALLOC(sizeof(LDKCVec_UpdateFulfillHTLCZ), "LDKCVec_UpdateFulfillHTLCZ");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKUpdateFulfillHTLC) * ret->datalen, "LDKCVec_UpdateFulfillHTLCZ Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       int64_t arr_elem = java_elems[i];
-                       LDKUpdateFulfillHTLC arr_elem_conv;
-                       arr_elem_conv.inner = (void*)(arr_elem & (~1));
-                       arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0);
-                       arr_elem_conv = UpdateFulfillHTLC_clone(&arr_elem_conv);
-                       ret->data[i] = arr_elem_conv;
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_UpdateFulfillHTLCZ CVec_UpdateFulfillHTLCZ_clone(const LDKCVec_UpdateFulfillHTLCZ *orig) {
        LDKCVec_UpdateFulfillHTLCZ ret = { .data = MALLOC(sizeof(LDKUpdateFulfillHTLC) * orig->datalen, "LDKCVec_UpdateFulfillHTLCZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -6769,26 +6299,6 @@ static inline LDKCVec_UpdateFulfillHTLCZ CVec_UpdateFulfillHTLCZ_clone(const LDK
        }
        return ret;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1UpdateFailHTLCZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_UpdateFailHTLCZ *ret = MALLOC(sizeof(LDKCVec_UpdateFailHTLCZ), "LDKCVec_UpdateFailHTLCZ");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKUpdateFailHTLC) * ret->datalen, "LDKCVec_UpdateFailHTLCZ Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       int64_t arr_elem = java_elems[i];
-                       LDKUpdateFailHTLC arr_elem_conv;
-                       arr_elem_conv.inner = (void*)(arr_elem & (~1));
-                       arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0);
-                       arr_elem_conv = UpdateFailHTLC_clone(&arr_elem_conv);
-                       ret->data[i] = arr_elem_conv;
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_UpdateFailHTLCZ CVec_UpdateFailHTLCZ_clone(const LDKCVec_UpdateFailHTLCZ *orig) {
        LDKCVec_UpdateFailHTLCZ ret = { .data = MALLOC(sizeof(LDKUpdateFailHTLC) * orig->datalen, "LDKCVec_UpdateFailHTLCZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -6796,26 +6306,6 @@ static inline LDKCVec_UpdateFailHTLCZ CVec_UpdateFailHTLCZ_clone(const LDKCVec_U
        }
        return ret;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1UpdateFailMalformedHTLCZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_UpdateFailMalformedHTLCZ *ret = MALLOC(sizeof(LDKCVec_UpdateFailMalformedHTLCZ), "LDKCVec_UpdateFailMalformedHTLCZ");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKUpdateFailMalformedHTLC) * ret->datalen, "LDKCVec_UpdateFailMalformedHTLCZ Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       int64_t arr_elem = java_elems[i];
-                       LDKUpdateFailMalformedHTLC arr_elem_conv;
-                       arr_elem_conv.inner = (void*)(arr_elem & (~1));
-                       arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0);
-                       arr_elem_conv = UpdateFailMalformedHTLC_clone(&arr_elem_conv);
-                       ret->data[i] = arr_elem_conv;
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_UpdateFailMalformedHTLCZ CVec_UpdateFailMalformedHTLCZ_clone(const LDKCVec_UpdateFailMalformedHTLCZ *orig) {
        LDKCVec_UpdateFailMalformedHTLCZ ret = { .data = MALLOC(sizeof(LDKUpdateFailMalformedHTLC) * orig->datalen, "LDKCVec_UpdateFailMalformedHTLCZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -6823,9 +6313,6 @@ static inline LDKCVec_UpdateFailMalformedHTLCZ CVec_UpdateFailMalformedHTLCZ_clo
        }
        return ret;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1AcceptChannelDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_AcceptChannelDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1AcceptChannelDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_AcceptChannelDecodeErrorZ *val = (LDKCResult_AcceptChannelDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -6833,6 +6320,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1AcceptChannelDe
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -6843,12 +6331,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1AcceptChannelDe
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1AnnouncementSignaturesDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_AnnouncementSignaturesDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1AnnouncementSignaturesDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_AnnouncementSignaturesDecodeErrorZ *val = (LDKCResult_AnnouncementSignaturesDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -6856,6 +6342,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1AnnouncementSig
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -6866,12 +6353,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1AnnouncementSig
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelReestablishDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_ChannelReestablishDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelReestablishDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_ChannelReestablishDecodeErrorZ *val = (LDKCResult_ChannelReestablishDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -6879,6 +6364,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelReestabl
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -6889,12 +6375,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelReestabl
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ClosingSignedDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_ClosingSignedDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ClosingSignedDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_ClosingSignedDecodeErrorZ *val = (LDKCResult_ClosingSignedDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -6902,6 +6386,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ClosingSignedDe
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -6912,12 +6397,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ClosingSignedDe
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ClosingSignedFeeRangeDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_ClosingSignedFeeRangeDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ClosingSignedFeeRangeDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_ClosingSignedFeeRangeDecodeErrorZ *val = (LDKCResult_ClosingSignedFeeRangeDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -6925,6 +6408,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ClosingSignedFe
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -6935,12 +6419,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ClosingSignedFe
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CommitmentSignedDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_CommitmentSignedDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CommitmentSignedDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_CommitmentSignedDecodeErrorZ *val = (LDKCResult_CommitmentSignedDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -6948,6 +6430,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CommitmentSigne
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -6958,12 +6441,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CommitmentSigne
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1FundingCreatedDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_FundingCreatedDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1FundingCreatedDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_FundingCreatedDecodeErrorZ *val = (LDKCResult_FundingCreatedDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -6971,6 +6452,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1FundingCreatedD
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -6981,12 +6463,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1FundingCreatedD
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1FundingSignedDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_FundingSignedDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1FundingSignedDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_FundingSignedDecodeErrorZ *val = (LDKCResult_FundingSignedDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -6994,6 +6474,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1FundingSignedDe
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -7004,12 +6485,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1FundingSignedDe
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1FundingLockedDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_FundingLockedDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1FundingLockedDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_FundingLockedDecodeErrorZ *val = (LDKCResult_FundingLockedDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -7017,6 +6496,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1FundingLockedDe
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -7027,12 +6507,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1FundingLockedDe
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InitDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_InitDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InitDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_InitDecodeErrorZ *val = (LDKCResult_InitDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -7040,6 +6518,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InitDecodeError
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -7050,12 +6529,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InitDecodeError
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1OpenChannelDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_OpenChannelDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1OpenChannelDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_OpenChannelDecodeErrorZ *val = (LDKCResult_OpenChannelDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -7063,6 +6540,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1OpenChannelDeco
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -7073,12 +6551,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1OpenChannelDeco
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RevokeAndACKDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_RevokeAndACKDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RevokeAndACKDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_RevokeAndACKDecodeErrorZ *val = (LDKCResult_RevokeAndACKDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -7086,6 +6562,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RevokeAndACKDec
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -7096,12 +6573,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RevokeAndACKDec
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ShutdownDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_ShutdownDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ShutdownDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_ShutdownDecodeErrorZ *val = (LDKCResult_ShutdownDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -7109,6 +6584,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ShutdownDecodeE
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -7119,12 +6595,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ShutdownDecodeE
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UpdateFailHTLCDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_UpdateFailHTLCDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UpdateFailHTLCDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_UpdateFailHTLCDecodeErrorZ *val = (LDKCResult_UpdateFailHTLCDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -7132,6 +6606,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UpdateFailHTLCD
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -7142,12 +6617,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UpdateFailHTLCD
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UpdateFailMalformedHTLCDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UpdateFailMalformedHTLCDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ *val = (LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -7155,6 +6628,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UpdateFailMalfo
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -7165,12 +6639,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UpdateFailMalfo
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UpdateFeeDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_UpdateFeeDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UpdateFeeDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_UpdateFeeDecodeErrorZ *val = (LDKCResult_UpdateFeeDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -7178,6 +6650,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UpdateFeeDecode
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -7188,12 +6661,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UpdateFeeDecode
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UpdateFulfillHTLCDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_UpdateFulfillHTLCDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UpdateFulfillHTLCDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_UpdateFulfillHTLCDecodeErrorZ *val = (LDKCResult_UpdateFulfillHTLCDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -7201,6 +6672,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UpdateFulfillHT
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -7211,12 +6683,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UpdateFulfillHT
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UpdateAddHTLCDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_UpdateAddHTLCDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UpdateAddHTLCDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_UpdateAddHTLCDecodeErrorZ *val = (LDKCResult_UpdateAddHTLCDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -7224,6 +6694,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UpdateAddHTLCDe
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -7234,12 +6705,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UpdateAddHTLCDe
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PingDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_PingDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PingDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_PingDecodeErrorZ *val = (LDKCResult_PingDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -7247,6 +6716,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PingDecodeError
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -7257,12 +6727,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PingDecodeError
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PongDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_PongDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PongDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_PongDecodeErrorZ *val = (LDKCResult_PongDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -7270,6 +6738,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PongDecodeError
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -7280,12 +6749,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PongDecodeError
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UnsignedChannelAnnouncementDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UnsignedChannelAnnouncementDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ *val = (LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -7293,6 +6760,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UnsignedChannel
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -7303,12 +6771,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UnsignedChannel
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelAnnouncementDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_ChannelAnnouncementDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelAnnouncementDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_ChannelAnnouncementDecodeErrorZ *val = (LDKCResult_ChannelAnnouncementDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -7316,6 +6782,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelAnnounce
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -7326,12 +6793,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelAnnounce
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UnsignedChannelUpdateDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_UnsignedChannelUpdateDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UnsignedChannelUpdateDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_UnsignedChannelUpdateDecodeErrorZ *val = (LDKCResult_UnsignedChannelUpdateDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -7339,6 +6804,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UnsignedChannel
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -7349,12 +6815,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UnsignedChannel
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelUpdateDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_ChannelUpdateDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelUpdateDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_ChannelUpdateDecodeErrorZ *val = (LDKCResult_ChannelUpdateDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -7362,6 +6826,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelUpdateDe
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -7372,12 +6837,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelUpdateDe
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ErrorMessageDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_ErrorMessageDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ErrorMessageDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_ErrorMessageDecodeErrorZ *val = (LDKCResult_ErrorMessageDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -7385,6 +6848,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ErrorMessageDec
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -7395,12 +6859,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ErrorMessageDec
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UnsignedNodeAnnouncementDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UnsignedNodeAnnouncementDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ *val = (LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -7408,6 +6870,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UnsignedNodeAnn
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -7418,12 +6881,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UnsignedNodeAnn
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeAnnouncementDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_NodeAnnouncementDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeAnnouncementDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_NodeAnnouncementDecodeErrorZ *val = (LDKCResult_NodeAnnouncementDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -7431,6 +6892,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeAnnouncemen
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -7441,12 +6903,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeAnnouncemen
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1QueryShortChannelIdsDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_QueryShortChannelIdsDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1QueryShortChannelIdsDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_QueryShortChannelIdsDecodeErrorZ *val = (LDKCResult_QueryShortChannelIdsDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -7454,6 +6914,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1QueryShortChann
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -7464,12 +6925,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1QueryShortChann
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ReplyShortChannelIdsEndDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ReplyShortChannelIdsEndDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ *val = (LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -7477,6 +6936,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ReplyShortChann
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -7487,12 +6947,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ReplyShortChann
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1QueryChannelRangeDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_QueryChannelRangeDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1QueryChannelRangeDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_QueryChannelRangeDecodeErrorZ *val = (LDKCResult_QueryChannelRangeDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -7500,6 +6958,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1QueryChannelRan
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -7510,12 +6969,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1QueryChannelRan
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ReplyChannelRangeDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_ReplyChannelRangeDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ReplyChannelRangeDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_ReplyChannelRangeDecodeErrorZ *val = (LDKCResult_ReplyChannelRangeDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -7523,6 +6980,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ReplyChannelRan
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -7533,12 +6991,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ReplyChannelRan
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1GossipTimestampFilterDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_GossipTimestampFilterDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1GossipTimestampFilterDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_GossipTimestampFilterDecodeErrorZ *val = (LDKCResult_GossipTimestampFilterDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -7546,6 +7002,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1GossipTimestamp
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -7556,6 +7013,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1GossipTimestamp
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
@@ -7588,9 +7046,6 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKSignOrCreationError_1ref
                default: abort();
        }
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InvoiceSignOrCreationErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_InvoiceSignOrCreationErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InvoiceSignOrCreationErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_InvoiceSignOrCreationErrorZ *val = (LDKCResult_InvoiceSignOrCreationErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -7598,6 +7053,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InvoiceSignOrCr
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -7669,6 +7125,7 @@ LDKCOption_C2Tuple_usizeTransactionZZ register_output_LDKFilter_jcall(const void
        uint64_t output_ref = 0;
        CHECK((((uint64_t)output_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&output_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(output_var);
        output_ref = (uint64_t)output_var.inner;
        if (output_var.is_owned) {
                output_ref |= 1;
@@ -7683,7 +7140,7 @@ LDKCOption_C2Tuple_usizeTransactionZZ register_output_LDKFilter_jcall(const void
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCOption_C2Tuple_usizeTransactionZZ ret_conv = *(LDKCOption_C2Tuple_usizeTransactionZZ*)(ret_ptr);
-       ret_conv = COption_C2Tuple_usizeTransactionZZ_clone((LDKCOption_C2Tuple_usizeTransactionZZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -7740,6 +7197,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Filter_1register_1output(JN
        LDKWatchedOutput output_conv;
        output_conv.inner = (void*)(output & (~1));
        output_conv.is_owned = (output & 1) || (output == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(output_conv);
        output_conv = WatchedOutput_clone(&output_conv);
        LDKCOption_C2Tuple_usizeTransactionZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_usizeTransactionZZ), "LDKCOption_C2Tuple_usizeTransactionZZ");
        *ret_copy = (this_arg_conv->register_output)(this_arg_conv->this_arg, output_conv);
@@ -7782,9 +7240,6 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1FilterZ_1ref_1f
                default: abort();
        }
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1LockedChannelMonitorNoneZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_LockedChannelMonitorNoneZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1LockedChannelMonitorNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_LockedChannelMonitorNoneZ *val = (LDKCResult_LockedChannelMonitorNoneZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -7792,6 +7247,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1LockedChannelMo
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -7800,26 +7256,6 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1LockedChannelMonit
        CHECK(!val->result_ok);
        return *val->contents.err;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1OutPointZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_OutPointZ *ret = MALLOC(sizeof(LDKCVec_OutPointZ), "LDKCVec_OutPointZ");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKOutPoint) * ret->datalen, "LDKCVec_OutPointZ Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       int64_t arr_elem = java_elems[i];
-                       LDKOutPoint arr_elem_conv;
-                       arr_elem_conv.inner = (void*)(arr_elem & (~1));
-                       arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0);
-                       arr_elem_conv = OutPoint_clone(&arr_elem_conv);
-                       ret->data[i] = arr_elem_conv;
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_OutPointZ CVec_OutPointZ_clone(const LDKCVec_OutPointZ *orig) {
        LDKCVec_OutPointZ ret = { .data = MALLOC(sizeof(LDKOutPoint) * orig->datalen, "LDKCVec_OutPointZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -7878,7 +7314,7 @@ LDKCVec_MessageSendEventZ get_and_clear_pending_msg_events_LDKMessageSendEventsP
                void* ret_conv_18_ptr = (void*)(((uint64_t)ret_conv_18) & ~1);
                CHECK_ACCESS(ret_conv_18_ptr);
                LDKMessageSendEvent ret_conv_18_conv = *(LDKMessageSendEvent*)(ret_conv_18_ptr);
-               ret_conv_18_conv = MessageSendEvent_clone((LDKMessageSendEvent*)(((uint64_t)ret_conv_18) & ~1));
+               FREE((void*)ret_conv_18);
                ret_constr.data[s] = ret_conv_18_conv;
        }
        (*env)->ReleaseLongArrayElements(env, ret, ret_vals, 0);
@@ -8492,6 +7928,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ persist_new_channel_LDKPersist_jcall(con
        uint64_t channel_id_ref = 0;
        CHECK((((uint64_t)channel_id_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&channel_id_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_var);
        channel_id_ref = (uint64_t)channel_id_var.inner;
        if (channel_id_var.is_owned) {
                channel_id_ref |= 1;
@@ -8501,6 +7938,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ persist_new_channel_LDKPersist_jcall(con
        data_var = ChannelMonitor_clone(data);
        CHECK((((uint64_t)data_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&data_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(data_var);
        data_ref = (uint64_t)data_var.inner;
        if (data_var.is_owned) {
                data_ref |= 1;
@@ -8509,6 +7947,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ persist_new_channel_LDKPersist_jcall(con
        uint64_t update_id_ref = 0;
        CHECK((((uint64_t)update_id_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&update_id_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_id_var);
        update_id_ref = (uint64_t)update_id_var.inner;
        if (update_id_var.is_owned) {
                update_id_ref |= 1;
@@ -8523,7 +7962,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ persist_new_channel_LDKPersist_jcall(con
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneChannelMonitorUpdateErrZ ret_conv = *(LDKCResult_NoneChannelMonitorUpdateErrZ*)(ret_ptr);
-       ret_conv = CResult_NoneChannelMonitorUpdateErrZ_clone((LDKCResult_NoneChannelMonitorUpdateErrZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -8542,6 +7981,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ update_persisted_channel_LDKPersist_jcal
        uint64_t channel_id_ref = 0;
        CHECK((((uint64_t)channel_id_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&channel_id_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_var);
        channel_id_ref = (uint64_t)channel_id_var.inner;
        if (channel_id_var.is_owned) {
                channel_id_ref |= 1;
@@ -8552,6 +7992,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ update_persisted_channel_LDKPersist_jcal
                update_var = ChannelMonitorUpdate_clone(update);
                CHECK((((uint64_t)update_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&update_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_var);
                update_ref = (uint64_t)update_var.inner;
                if (update_var.is_owned) {
                        update_ref |= 1;
@@ -8562,6 +8003,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ update_persisted_channel_LDKPersist_jcal
        data_var = ChannelMonitor_clone(data);
        CHECK((((uint64_t)data_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&data_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(data_var);
        data_ref = (uint64_t)data_var.inner;
        if (data_var.is_owned) {
                data_ref |= 1;
@@ -8570,6 +8012,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ update_persisted_channel_LDKPersist_jcal
        uint64_t update_id_ref = 0;
        CHECK((((uint64_t)update_id_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&update_id_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_id_var);
        update_id_ref = (uint64_t)update_id_var.inner;
        if (update_id_var.is_owned) {
                update_id_ref |= 1;
@@ -8584,7 +8027,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ update_persisted_channel_LDKPersist_jcal
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneChannelMonitorUpdateErrZ ret_conv = *(LDKCResult_NoneChannelMonitorUpdateErrZ*)(ret_ptr);
-       ret_conv = CResult_NoneChannelMonitorUpdateErrZ_clone((LDKCResult_NoneChannelMonitorUpdateErrZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -8626,13 +8069,16 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Persist_1persist_1new_1chan
        LDKOutPoint channel_id_conv;
        channel_id_conv.inner = (void*)(channel_id & (~1));
        channel_id_conv.is_owned = (channel_id & 1) || (channel_id == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_conv);
        channel_id_conv = OutPoint_clone(&channel_id_conv);
        LDKChannelMonitor data_conv;
        data_conv.inner = (void*)(data & (~1));
        data_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(data_conv);
        LDKMonitorUpdateId update_id_conv;
        update_id_conv.inner = (void*)(update_id & (~1));
        update_id_conv.is_owned = (update_id & 1) || (update_id == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_id_conv);
        update_id_conv = MonitorUpdateId_clone(&update_id_conv);
        LDKCResult_NoneChannelMonitorUpdateErrZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneChannelMonitorUpdateErrZ), "LDKCResult_NoneChannelMonitorUpdateErrZ");
        *ret_conv = (this_arg_conv->persist_new_channel)(this_arg_conv->this_arg, channel_id_conv, &data_conv, update_id_conv);
@@ -8646,16 +8092,20 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Persist_1update_1persisted_
        LDKOutPoint channel_id_conv;
        channel_id_conv.inner = (void*)(channel_id & (~1));
        channel_id_conv.is_owned = (channel_id & 1) || (channel_id == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_conv);
        channel_id_conv = OutPoint_clone(&channel_id_conv);
        LDKChannelMonitorUpdate update_conv;
        update_conv.inner = (void*)(update & (~1));
        update_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_conv);
        LDKChannelMonitor data_conv;
        data_conv.inner = (void*)(data & (~1));
        data_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(data_conv);
        LDKMonitorUpdateId update_id_conv;
        update_id_conv.inner = (void*)(update_id & (~1));
        update_id_conv.is_owned = (update_id & 1) || (update_id == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_id_conv);
        update_id_conv = MonitorUpdateId_clone(&update_id_conv);
        LDKCResult_NoneChannelMonitorUpdateErrZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneChannelMonitorUpdateErrZ), "LDKCResult_NoneChannelMonitorUpdateErrZ");
        *ret_conv = (this_arg_conv->update_persisted_channel)(this_arg_conv->this_arg, channel_id_conv, &update_conv, &data_conv, update_id_conv);
@@ -8720,6 +8170,7 @@ void handle_open_channel_LDKChannelMessageHandler_jcall(const void* this_arg, LD
        uint64_t their_features_ref = 0;
        CHECK((((uint64_t)their_features_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&their_features_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(their_features_var);
        their_features_ref = (uint64_t)their_features_var.inner;
        if (their_features_var.is_owned) {
                their_features_ref |= 1;
@@ -8729,6 +8180,7 @@ void handle_open_channel_LDKChannelMessageHandler_jcall(const void* this_arg, LD
        msg_var = OpenChannel_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -8759,6 +8211,7 @@ void handle_accept_channel_LDKChannelMessageHandler_jcall(const void* this_arg,
        uint64_t their_features_ref = 0;
        CHECK((((uint64_t)their_features_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&their_features_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(their_features_var);
        their_features_ref = (uint64_t)their_features_var.inner;
        if (their_features_var.is_owned) {
                their_features_ref |= 1;
@@ -8768,6 +8221,7 @@ void handle_accept_channel_LDKChannelMessageHandler_jcall(const void* this_arg,
        msg_var = AcceptChannel_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -8799,6 +8253,7 @@ void handle_funding_created_LDKChannelMessageHandler_jcall(const void* this_arg,
        msg_var = FundingCreated_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -8830,6 +8285,7 @@ void handle_funding_signed_LDKChannelMessageHandler_jcall(const void* this_arg,
        msg_var = FundingSigned_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -8861,6 +8317,7 @@ void handle_funding_locked_LDKChannelMessageHandler_jcall(const void* this_arg,
        msg_var = FundingLocked_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -8892,6 +8349,7 @@ void handle_shutdown_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPub
        their_features_var = InitFeatures_clone(their_features);
        CHECK((((uint64_t)their_features_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&their_features_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(their_features_var);
        their_features_ref = (uint64_t)their_features_var.inner;
        if (their_features_var.is_owned) {
                their_features_ref |= 1;
@@ -8901,6 +8359,7 @@ void handle_shutdown_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPub
        msg_var = Shutdown_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -8932,6 +8391,7 @@ void handle_closing_signed_LDKChannelMessageHandler_jcall(const void* this_arg,
        msg_var = ClosingSigned_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -8963,6 +8423,7 @@ void handle_update_add_htlc_LDKChannelMessageHandler_jcall(const void* this_arg,
        msg_var = UpdateAddHTLC_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -8994,6 +8455,7 @@ void handle_update_fulfill_htlc_LDKChannelMessageHandler_jcall(const void* this_
        msg_var = UpdateFulfillHTLC_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -9025,6 +8487,7 @@ void handle_update_fail_htlc_LDKChannelMessageHandler_jcall(const void* this_arg
        msg_var = UpdateFailHTLC_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -9056,6 +8519,7 @@ void handle_update_fail_malformed_htlc_LDKChannelMessageHandler_jcall(const void
        msg_var = UpdateFailMalformedHTLC_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -9087,6 +8551,7 @@ void handle_commitment_signed_LDKChannelMessageHandler_jcall(const void* this_ar
        msg_var = CommitmentSigned_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -9118,6 +8583,7 @@ void handle_revoke_and_ack_LDKChannelMessageHandler_jcall(const void* this_arg,
        msg_var = RevokeAndACK_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -9149,6 +8615,7 @@ void handle_update_fee_LDKChannelMessageHandler_jcall(const void* this_arg, LDKP
        msg_var = UpdateFee_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -9180,6 +8647,7 @@ void handle_announcement_signatures_LDKChannelMessageHandler_jcall(const void* t
        msg_var = AnnouncementSignatures_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -9233,6 +8701,7 @@ void peer_connected_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPubl
        msg_var = Init_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -9264,6 +8733,7 @@ void handle_channel_reestablish_LDKChannelMessageHandler_jcall(const void* this_
        msg_var = ChannelReestablish_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -9295,6 +8765,7 @@ void handle_channel_update_LDKChannelMessageHandler_jcall(const void* this_arg,
        msg_var = ChannelUpdate_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -9326,6 +8797,7 @@ void handle_error_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublic
        msg_var = ErrorMessage_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -9443,10 +8915,12 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMessageHandler_1handle_
        LDKInitFeatures their_features_conv;
        their_features_conv.inner = (void*)(their_features & (~1));
        their_features_conv.is_owned = (their_features & 1) || (their_features == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(their_features_conv);
        their_features_conv = InitFeatures_clone(&their_features_conv);
        LDKOpenChannel msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_open_channel)(this_arg_conv->this_arg, their_node_id_ref, their_features_conv, &msg_conv);
 }
 
@@ -9460,10 +8934,12 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMessageHandler_1handle_
        LDKInitFeatures their_features_conv;
        their_features_conv.inner = (void*)(their_features & (~1));
        their_features_conv.is_owned = (their_features & 1) || (their_features == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(their_features_conv);
        their_features_conv = InitFeatures_clone(&their_features_conv);
        LDKAcceptChannel msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_accept_channel)(this_arg_conv->this_arg, their_node_id_ref, their_features_conv, &msg_conv);
 }
 
@@ -9477,6 +8953,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMessageHandler_1handle_
        LDKFundingCreated msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_funding_created)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -9490,6 +8967,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMessageHandler_1handle_
        LDKFundingSigned msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_funding_signed)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -9503,6 +8981,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMessageHandler_1handle_
        LDKFundingLocked msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_funding_locked)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -9516,9 +8995,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMessageHandler_1handle_
        LDKInitFeatures their_features_conv;
        their_features_conv.inner = (void*)(their_features & (~1));
        their_features_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(their_features_conv);
        LDKShutdown msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_shutdown)(this_arg_conv->this_arg, their_node_id_ref, &their_features_conv, &msg_conv);
 }
 
@@ -9532,6 +9013,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMessageHandler_1handle_
        LDKClosingSigned msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_closing_signed)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -9545,6 +9027,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMessageHandler_1handle_
        LDKUpdateAddHTLC msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_update_add_htlc)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -9558,6 +9041,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMessageHandler_1handle_
        LDKUpdateFulfillHTLC msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_update_fulfill_htlc)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -9571,6 +9055,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMessageHandler_1handle_
        LDKUpdateFailHTLC msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_update_fail_htlc)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -9584,6 +9069,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMessageHandler_1handle_
        LDKUpdateFailMalformedHTLC msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_update_fail_malformed_htlc)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -9597,6 +9083,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMessageHandler_1handle_
        LDKCommitmentSigned msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_commitment_signed)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -9610,6 +9097,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMessageHandler_1handle_
        LDKRevokeAndACK msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_revoke_and_ack)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -9623,6 +9111,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMessageHandler_1handle_
        LDKUpdateFee msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_update_fee)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -9636,6 +9125,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMessageHandler_1handle_
        LDKAnnouncementSignatures msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_announcement_signatures)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -9659,6 +9149,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMessageHandler_1peer_1c
        LDKInit msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->peer_connected)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -9672,6 +9163,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMessageHandler_1handle_
        LDKChannelReestablish msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_channel_reestablish)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -9685,6 +9177,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMessageHandler_1handle_
        LDKChannelUpdate msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_channel_update)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -9698,6 +9191,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMessageHandler_1handle_
        LDKErrorMessage msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_error)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -9748,6 +9242,7 @@ LDKCResult_boolLightningErrorZ handle_node_announcement_LDKRoutingMessageHandler
        msg_var = NodeAnnouncement_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -9762,7 +9257,7 @@ LDKCResult_boolLightningErrorZ handle_node_announcement_LDKRoutingMessageHandler
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_boolLightningErrorZ ret_conv = *(LDKCResult_boolLightningErrorZ*)(ret_ptr);
-       ret_conv = CResult_boolLightningErrorZ_clone((LDKCResult_boolLightningErrorZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -9782,6 +9277,7 @@ LDKCResult_boolLightningErrorZ handle_channel_announcement_LDKRoutingMessageHand
        msg_var = ChannelAnnouncement_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -9796,7 +9292,7 @@ LDKCResult_boolLightningErrorZ handle_channel_announcement_LDKRoutingMessageHand
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_boolLightningErrorZ ret_conv = *(LDKCResult_boolLightningErrorZ*)(ret_ptr);
-       ret_conv = CResult_boolLightningErrorZ_clone((LDKCResult_boolLightningErrorZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -9816,6 +9312,7 @@ LDKCResult_boolLightningErrorZ handle_channel_update_LDKRoutingMessageHandler_jc
        msg_var = ChannelUpdate_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -9830,7 +9327,7 @@ LDKCResult_boolLightningErrorZ handle_channel_update_LDKRoutingMessageHandler_jc
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_boolLightningErrorZ ret_conv = *(LDKCResult_boolLightningErrorZ*)(ret_ptr);
-       ret_conv = CResult_boolLightningErrorZ_clone((LDKCResult_boolLightningErrorZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -9864,7 +9361,7 @@ LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ get_next_channel
                void* ret_conv_59_ptr = (void*)(((uint64_t)ret_conv_59) & ~1);
                CHECK_ACCESS(ret_conv_59_ptr);
                LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ ret_conv_59_conv = *(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ*)(ret_conv_59_ptr);
-               ret_conv_59_conv = C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_clone((LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ*)(((uint64_t)ret_conv_59) & ~1));
+               FREE((void*)ret_conv_59);
                ret_constr.data[h] = ret_conv_59_conv;
        }
        (*env)->ReleaseLongArrayElements(env, ret, ret_vals, 0);
@@ -9903,7 +9400,7 @@ LDKCVec_NodeAnnouncementZ get_next_node_announcements_LDKRoutingMessageHandler_j
                LDKNodeAnnouncement ret_conv_18_conv;
                ret_conv_18_conv.inner = (void*)(ret_conv_18 & (~1));
                ret_conv_18_conv.is_owned = (ret_conv_18 & 1) || (ret_conv_18 == 0);
-               ret_conv_18_conv = NodeAnnouncement_clone(&ret_conv_18_conv);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_18_conv);
                ret_constr.data[s] = ret_conv_18_conv;
        }
        (*env)->ReleaseLongArrayElements(env, ret, ret_vals, 0);
@@ -9928,6 +9425,7 @@ void sync_routing_table_LDKRoutingMessageHandler_jcall(const void* this_arg, LDK
        init_var = Init_clone(init);
        CHECK((((uint64_t)init_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&init_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(init_var);
        init_ref = (uint64_t)init_var.inner;
        if (init_var.is_owned) {
                init_ref |= 1;
@@ -9958,6 +9456,7 @@ LDKCResult_NoneLightningErrorZ handle_reply_channel_range_LDKRoutingMessageHandl
        uint64_t msg_ref = 0;
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -9972,7 +9471,7 @@ LDKCResult_NoneLightningErrorZ handle_reply_channel_range_LDKRoutingMessageHandl
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneLightningErrorZ ret_conv = *(LDKCResult_NoneLightningErrorZ*)(ret_ptr);
-       ret_conv = CResult_NoneLightningErrorZ_clone((LDKCResult_NoneLightningErrorZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -9993,6 +9492,7 @@ LDKCResult_NoneLightningErrorZ handle_reply_short_channel_ids_end_LDKRoutingMess
        uint64_t msg_ref = 0;
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -10007,7 +9507,7 @@ LDKCResult_NoneLightningErrorZ handle_reply_short_channel_ids_end_LDKRoutingMess
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneLightningErrorZ ret_conv = *(LDKCResult_NoneLightningErrorZ*)(ret_ptr);
-       ret_conv = CResult_NoneLightningErrorZ_clone((LDKCResult_NoneLightningErrorZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -10028,6 +9528,7 @@ LDKCResult_NoneLightningErrorZ handle_query_channel_range_LDKRoutingMessageHandl
        uint64_t msg_ref = 0;
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -10042,7 +9543,7 @@ LDKCResult_NoneLightningErrorZ handle_query_channel_range_LDKRoutingMessageHandl
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneLightningErrorZ ret_conv = *(LDKCResult_NoneLightningErrorZ*)(ret_ptr);
-       ret_conv = CResult_NoneLightningErrorZ_clone((LDKCResult_NoneLightningErrorZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -10063,6 +9564,7 @@ LDKCResult_NoneLightningErrorZ handle_query_short_channel_ids_LDKRoutingMessageH
        uint64_t msg_ref = 0;
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -10077,7 +9579,7 @@ LDKCResult_NoneLightningErrorZ handle_query_short_channel_ids_LDKRoutingMessageH
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneLightningErrorZ ret_conv = *(LDKCResult_NoneLightningErrorZ*)(ret_ptr);
-       ret_conv = CResult_NoneLightningErrorZ_clone((LDKCResult_NoneLightningErrorZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -10152,6 +9654,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RoutingMessageHandler_1hand
        LDKNodeAnnouncement msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        LDKCResult_boolLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_boolLightningErrorZ), "LDKCResult_boolLightningErrorZ");
        *ret_conv = (this_arg_conv->handle_node_announcement)(this_arg_conv->this_arg, &msg_conv);
        return (uint64_t)ret_conv;
@@ -10164,6 +9667,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RoutingMessageHandler_1hand
        LDKChannelAnnouncement msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        LDKCResult_boolLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_boolLightningErrorZ), "LDKCResult_boolLightningErrorZ");
        *ret_conv = (this_arg_conv->handle_channel_announcement)(this_arg_conv->this_arg, &msg_conv);
        return (uint64_t)ret_conv;
@@ -10176,6 +9680,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RoutingMessageHandler_1hand
        LDKChannelUpdate msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        LDKCResult_boolLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_boolLightningErrorZ), "LDKCResult_boolLightningErrorZ");
        *ret_conv = (this_arg_conv->handle_channel_update)(this_arg_conv->this_arg, &msg_conv);
        return (uint64_t)ret_conv;
@@ -10215,6 +9720,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_RoutingMessageHandler_
                uint64_t ret_conv_18_ref = 0;
                CHECK((((uint64_t)ret_conv_18_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_conv_18_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_18_var);
                ret_conv_18_ref = (uint64_t)ret_conv_18_var.inner;
                if (ret_conv_18_var.is_owned) {
                        ret_conv_18_ref |= 1;
@@ -10236,6 +9742,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RoutingMessageHandler_1sync_1r
        LDKInit init_conv;
        init_conv.inner = (void*)(init & (~1));
        init_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(init_conv);
        (this_arg_conv->sync_routing_table)(this_arg_conv->this_arg, their_node_id_ref, &init_conv);
 }
 
@@ -10249,6 +9756,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RoutingMessageHandler_1hand
        LDKReplyChannelRange msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = ReplyChannelRange_clone(&msg_conv);
        LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
        *ret_conv = (this_arg_conv->handle_reply_channel_range)(this_arg_conv->this_arg, their_node_id_ref, msg_conv);
@@ -10265,6 +9773,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RoutingMessageHandler_1hand
        LDKReplyShortChannelIdsEnd msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = ReplyShortChannelIdsEnd_clone(&msg_conv);
        LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
        *ret_conv = (this_arg_conv->handle_reply_short_channel_ids_end)(this_arg_conv->this_arg, their_node_id_ref, msg_conv);
@@ -10281,6 +9790,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RoutingMessageHandler_1hand
        LDKQueryChannelRange msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = QueryChannelRange_clone(&msg_conv);
        LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
        *ret_conv = (this_arg_conv->handle_query_channel_range)(this_arg_conv->this_arg, their_node_id_ref, msg_conv);
@@ -10297,6 +9807,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RoutingMessageHandler_1hand
        LDKQueryShortChannelIds msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = QueryShortChannelIds_clone(&msg_conv);
        LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
        *ret_conv = (this_arg_conv->handle_query_short_channel_ids)(this_arg_conv->this_arg, their_node_id_ref, msg_conv);
@@ -10348,7 +9859,7 @@ LDKCResult_COption_TypeZDecodeErrorZ read_LDKCustomMessageReader_jcall(const voi
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_COption_TypeZDecodeErrorZ ret_conv = *(LDKCResult_COption_TypeZDecodeErrorZ*)(ret_ptr);
-       ret_conv = CResult_COption_TypeZDecodeErrorZ_clone((LDKCResult_COption_TypeZDecodeErrorZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -10441,7 +9952,7 @@ LDKCResult_NoneLightningErrorZ handle_custom_message_LDKCustomMessageHandler_jca
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneLightningErrorZ ret_conv = *(LDKCResult_NoneLightningErrorZ*)(ret_ptr);
-       ret_conv = CResult_NoneLightningErrorZ_clone((LDKCResult_NoneLightningErrorZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -10475,7 +9986,7 @@ LDKCVec_C2Tuple_PublicKeyTypeZZ get_and_clear_pending_msg_LDKCustomMessageHandle
                void* ret_conv_25_ptr = (void*)(((uint64_t)ret_conv_25) & ~1);
                CHECK_ACCESS(ret_conv_25_ptr);
                LDKC2Tuple_PublicKeyTypeZ ret_conv_25_conv = *(LDKC2Tuple_PublicKeyTypeZ*)(ret_conv_25_ptr);
-               ret_conv_25_conv = C2Tuple_PublicKeyTypeZ_clone((LDKC2Tuple_PublicKeyTypeZ*)(((uint64_t)ret_conv_25) & ~1));
+               FREE((void*)ret_conv_25);
                ret_constr.data[z] = ret_conv_25_conv;
        }
        (*env)->ReleaseLongArrayElements(env, ret, ret_vals, 0);
@@ -10775,6 +10286,7 @@ uint64_t channel_penalty_msat_LDKScore_jcall(const void* this_arg, uint64_t shor
        source_var = NodeId_clone(source);
        CHECK((((uint64_t)source_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&source_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(source_var);
        source_ref = (uint64_t)source_var.inner;
        if (source_var.is_owned) {
                source_ref |= 1;
@@ -10784,6 +10296,7 @@ uint64_t channel_penalty_msat_LDKScore_jcall(const void* this_arg, uint64_t shor
        target_var = NodeId_clone(target);
        CHECK((((uint64_t)target_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&target_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(target_var);
        target_ref = (uint64_t)target_var.inner;
        if (target_var.is_owned) {
                target_ref |= 1;
@@ -10818,6 +10331,7 @@ void payment_path_failed_LDKScore_jcall(void* this_arg, LDKCVec_RouteHopZ path,
                uint64_t path_conv_10_ref = 0;
                CHECK((((uint64_t)path_conv_10_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&path_conv_10_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv_10_var);
                path_conv_10_ref = (uint64_t)path_conv_10_var.inner;
                if (path_conv_10_var.is_owned) {
                        path_conv_10_ref |= 1;
@@ -10901,9 +10415,11 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Score_1channel_1penalty_1ms
        LDKNodeId source_conv;
        source_conv.inner = (void*)(source & (~1));
        source_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(source_conv);
        LDKNodeId target_conv;
        target_conv.inner = (void*)(target & (~1));
        target_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(target_conv);
        int64_t ret_val = (this_arg_conv->channel_penalty_msat)(this_arg_conv->this_arg, short_channel_id, &source_conv, &target_conv);
        return ret_val;
 }
@@ -10924,6 +10440,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Score_1payment_1path_1failed(J
                LDKRouteHop path_conv_10_conv;
                path_conv_10_conv.inner = (void*)(path_conv_10 & (~1));
                path_conv_10_conv.is_owned = (path_conv_10 & 1) || (path_conv_10 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv_10_conv);
                path_conv_10_conv = RouteHop_clone(&path_conv_10_conv);
                path_constr.data[k] = path_conv_10_conv;
        }
@@ -10979,6 +10496,7 @@ LDKCResult_NoneErrorZ persist_manager_LDKChannelManagerPersister_jcall(const voi
        // Warning: we may need a move here but no clone is available for LDKChannelManager
        CHECK((((uint64_t)channel_manager_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&channel_manager_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_manager_var);
        channel_manager_ref = (uint64_t)channel_manager_var.inner;
        if (channel_manager_var.is_owned) {
                channel_manager_ref |= 1;
@@ -10993,7 +10511,7 @@ LDKCResult_NoneErrorZ persist_manager_LDKChannelManagerPersister_jcall(const voi
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneErrorZ ret_conv = *(LDKCResult_NoneErrorZ*)(ret_ptr);
-       ret_conv = CResult_NoneErrorZ_clone((LDKCResult_NoneErrorZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -11032,6 +10550,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManagerPersister_1pe
        LDKChannelManager channel_manager_conv;
        channel_manager_conv.inner = (void*)(channel_manager & (~1));
        channel_manager_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_manager_conv);
        LDKCResult_NoneErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneErrorZ), "LDKCResult_NoneErrorZ");
        *ret_conv = (this_arg_conv->persist_manager)(this_arg_conv->this_arg, &channel_manager_conv);
        return (uint64_t)ret_conv;
@@ -11161,7 +10680,7 @@ LDKCVec_ChannelDetailsZ first_hops_LDKPayer_jcall(const void* this_arg) {
                LDKChannelDetails ret_conv_16_conv;
                ret_conv_16_conv.inner = (void*)(ret_conv_16 & (~1));
                ret_conv_16_conv.is_owned = (ret_conv_16 & 1) || (ret_conv_16 == 0);
-               ret_conv_16_conv = ChannelDetails_clone(&ret_conv_16_conv);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_16_conv);
                ret_constr.data[q] = ret_conv_16_conv;
        }
        (*env)->ReleaseLongArrayElements(env, ret, ret_vals, 0);
@@ -11184,6 +10703,7 @@ LDKCResult_PaymentIdPaymentSendFailureZ send_payment_LDKPayer_jcall(const void*
        route_var = Route_clone(route);
        CHECK((((uint64_t)route_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&route_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(route_var);
        route_ref = (uint64_t)route_var.inner;
        if (route_var.is_owned) {
                route_ref |= 1;
@@ -11202,7 +10722,7 @@ LDKCResult_PaymentIdPaymentSendFailureZ send_payment_LDKPayer_jcall(const void*
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_PaymentIdPaymentSendFailureZ ret_conv = *(LDKCResult_PaymentIdPaymentSendFailureZ*)(ret_ptr);
-       ret_conv = CResult_PaymentIdPaymentSendFailureZ_clone((LDKCResult_PaymentIdPaymentSendFailureZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -11222,6 +10742,7 @@ LDKCResult_NonePaymentSendFailureZ retry_payment_LDKPayer_jcall(const void* this
        route_var = Route_clone(route);
        CHECK((((uint64_t)route_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&route_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(route_var);
        route_ref = (uint64_t)route_var.inner;
        if (route_var.is_owned) {
                route_ref |= 1;
@@ -11238,7 +10759,7 @@ LDKCResult_NonePaymentSendFailureZ retry_payment_LDKPayer_jcall(const void* this
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NonePaymentSendFailureZ ret_conv = *(LDKCResult_NonePaymentSendFailureZ*)(ret_ptr);
-       ret_conv = CResult_NonePaymentSendFailureZ_clone((LDKCResult_NonePaymentSendFailureZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -11301,6 +10822,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_Payer_1first_1hops(JNI
                uint64_t ret_conv_16_ref = 0;
                CHECK((((uint64_t)ret_conv_16_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_conv_16_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_16_var);
                ret_conv_16_ref = (uint64_t)ret_conv_16_var.inner;
                if (ret_conv_16_var.is_owned) {
                        ret_conv_16_ref |= 1;
@@ -11319,6 +10841,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Payer_1send_1payment(JNIEnv
        LDKRoute route_conv;
        route_conv.inner = (void*)(route & (~1));
        route_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(route_conv);
        LDKThirtyTwoBytes payment_hash_ref;
        CHECK((*env)->GetArrayLength(env, payment_hash) == 32);
        (*env)->GetByteArrayRegion(env, payment_hash, 0, 32, payment_hash_ref.data);
@@ -11337,6 +10860,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Payer_1retry_1payment(JNIEn
        LDKRoute route_conv;
        route_conv.inner = (void*)(route & (~1));
        route_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(route_conv);
        LDKThirtyTwoBytes payment_id_ref;
        CHECK((*env)->GetArrayLength(env, payment_id) == 32);
        (*env)->GetByteArrayRegion(env, payment_id, 0, 32, payment_id_ref.data);
@@ -11384,6 +10908,7 @@ LDKCResult_RouteLightningErrorZ find_route_LDKRouter_jcall(const void* this_arg,
        params_var = RouteParameters_clone(params);
        CHECK((((uint64_t)params_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&params_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(params_var);
        params_ref = (uint64_t)params_var.inner;
        if (params_var.is_owned) {
                params_ref |= 1;
@@ -11399,6 +10924,7 @@ LDKCResult_RouteLightningErrorZ find_route_LDKRouter_jcall(const void* this_arg,
                        uint64_t first_hops_conv_16_ref = 0;
                        CHECK((((uint64_t)first_hops_conv_16_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&first_hops_conv_16_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(first_hops_conv_16_var);
                        first_hops_conv_16_ref = (uint64_t)first_hops_conv_16_var.inner;
                        if (first_hops_conv_16_var.is_owned) {
                                first_hops_conv_16_ref |= 1;
@@ -11419,7 +10945,7 @@ LDKCResult_RouteLightningErrorZ find_route_LDKRouter_jcall(const void* this_arg,
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_RouteLightningErrorZ ret_conv = *(LDKCResult_RouteLightningErrorZ*)(ret_ptr);
-       ret_conv = CResult_RouteLightningErrorZ_clone((LDKCResult_RouteLightningErrorZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -11461,6 +10987,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Router_1find_1route(JNIEnv
        LDKRouteParameters params_conv;
        params_conv.inner = (void*)(params & (~1));
        params_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(params_conv);
        LDKCVec_ChannelDetailsZ first_hops_constr;
        LDKCVec_ChannelDetailsZ *first_hops_ptr = NULL;
        if (first_hops != NULL) {
@@ -11475,6 +11002,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Router_1find_1route(JNIEnv
                        LDKChannelDetails first_hops_conv_16_conv;
                        first_hops_conv_16_conv.inner = (void*)(first_hops_conv_16 & (~1));
                        first_hops_conv_16_conv.is_owned = (first_hops_conv_16 & 1) || (first_hops_conv_16 == 0);
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(first_hops_conv_16_conv);
                        first_hops_constr.data[q] = first_hops_conv_16_conv;
                }
                (*env)->ReleaseLongArrayElements(env, first_hops, first_hops_vals, 0);
@@ -11531,6 +11059,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_TxOut_1free(JNIEnv *env, jclas
        TxOut_free(_res_conv);
 }
 
+static inline uint64_t TxOut_clone_ptr(LDKTxOut *NONNULL_PTR arg) {
+       LDKTxOut* ret_ref = MALLOC(sizeof(LDKTxOut), "LDKTxOut");
+       *ret_ref = TxOut_clone(arg);
+       return (uint64_t)ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_TxOut_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKTxOut* arg_conv = (LDKTxOut*)(arg & ~1);
+       int64_t ret_val = TxOut_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_TxOut_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKTxOut* orig_conv = (LDKTxOut*)(orig & ~1);
        LDKTxOut* ret_ref = MALLOC(sizeof(LDKTxOut), "LDKTxOut");
@@ -11559,6 +11098,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SecretKeyErrorZ_1e
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1SecretKeyErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_SecretKeyErrorZ* o_conv = (LDKCResult_SecretKeyErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_SecretKeyErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SecretKeyErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -11584,6 +11129,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeyErrorZ_1e
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeyErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_PublicKeyErrorZ* o_conv = (LDKCResult_PublicKeyErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_PublicKeyErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeyErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -11593,6 +11144,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeyErrorZ_1free
        CResult_PublicKeyErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_PublicKeyErrorZ_clone_ptr(LDKCResult_PublicKeyErrorZ *NONNULL_PTR arg) {
+       LDKCResult_PublicKeyErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PublicKeyErrorZ), "LDKCResult_PublicKeyErrorZ");
+       *ret_conv = CResult_PublicKeyErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeyErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_PublicKeyErrorZ* arg_conv = (LDKCResult_PublicKeyErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_PublicKeyErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeyErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_PublicKeyErrorZ* orig_conv = (LDKCResult_PublicKeyErrorZ*)(orig & ~1);
        LDKCResult_PublicKeyErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PublicKeyErrorZ), "LDKCResult_PublicKeyErrorZ");
@@ -11604,6 +11166,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1TxCreationKeysDeco
        LDKTxCreationKeys o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = TxCreationKeys_clone(&o_conv);
        LDKCResult_TxCreationKeysDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxCreationKeysDecodeErrorZ), "LDKCResult_TxCreationKeysDecodeErrorZ");
        *ret_conv = CResult_TxCreationKeysDecodeErrorZ_ok(o_conv);
@@ -11614,12 +11177,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1TxCreationKeysDeco
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_TxCreationKeysDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxCreationKeysDecodeErrorZ), "LDKCResult_TxCreationKeysDecodeErrorZ");
        *ret_conv = CResult_TxCreationKeysDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1TxCreationKeysDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_TxCreationKeysDecodeErrorZ* o_conv = (LDKCResult_TxCreationKeysDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_TxCreationKeysDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1TxCreationKeysDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -11629,6 +11199,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1TxCreationKeysDecodeE
        CResult_TxCreationKeysDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_TxCreationKeysDecodeErrorZ_clone_ptr(LDKCResult_TxCreationKeysDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_TxCreationKeysDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxCreationKeysDecodeErrorZ), "LDKCResult_TxCreationKeysDecodeErrorZ");
+       *ret_conv = CResult_TxCreationKeysDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1TxCreationKeysDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_TxCreationKeysDecodeErrorZ* arg_conv = (LDKCResult_TxCreationKeysDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_TxCreationKeysDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1TxCreationKeysDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_TxCreationKeysDecodeErrorZ* orig_conv = (LDKCResult_TxCreationKeysDecodeErrorZ*)(orig & ~1);
        LDKCResult_TxCreationKeysDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxCreationKeysDecodeErrorZ), "LDKCResult_TxCreationKeysDecodeErrorZ");
@@ -11640,6 +11221,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelPublicKeysD
        LDKChannelPublicKeys o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ChannelPublicKeys_clone(&o_conv);
        LDKCResult_ChannelPublicKeysDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelPublicKeysDecodeErrorZ), "LDKCResult_ChannelPublicKeysDecodeErrorZ");
        *ret_conv = CResult_ChannelPublicKeysDecodeErrorZ_ok(o_conv);
@@ -11650,12 +11232,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelPublicKeysD
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ChannelPublicKeysDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelPublicKeysDecodeErrorZ), "LDKCResult_ChannelPublicKeysDecodeErrorZ");
        *ret_conv = CResult_ChannelPublicKeysDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelPublicKeysDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ChannelPublicKeysDecodeErrorZ* o_conv = (LDKCResult_ChannelPublicKeysDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ChannelPublicKeysDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelPublicKeysDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -11665,6 +11254,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelPublicKeysDeco
        CResult_ChannelPublicKeysDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ChannelPublicKeysDecodeErrorZ_clone_ptr(LDKCResult_ChannelPublicKeysDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ChannelPublicKeysDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelPublicKeysDecodeErrorZ), "LDKCResult_ChannelPublicKeysDecodeErrorZ");
+       *ret_conv = CResult_ChannelPublicKeysDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelPublicKeysDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_ChannelPublicKeysDecodeErrorZ* arg_conv = (LDKCResult_ChannelPublicKeysDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ChannelPublicKeysDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelPublicKeysDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_ChannelPublicKeysDecodeErrorZ* orig_conv = (LDKCResult_ChannelPublicKeysDecodeErrorZ*)(orig & ~1);
        LDKCResult_ChannelPublicKeysDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelPublicKeysDecodeErrorZ), "LDKCResult_ChannelPublicKeysDecodeErrorZ");
@@ -11676,6 +11276,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1TxCreationKeysErro
        LDKTxCreationKeys o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = TxCreationKeys_clone(&o_conv);
        LDKCResult_TxCreationKeysErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxCreationKeysErrorZ), "LDKCResult_TxCreationKeysErrorZ");
        *ret_conv = CResult_TxCreationKeysErrorZ_ok(o_conv);
@@ -11689,6 +11290,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1TxCreationKeysErro
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1TxCreationKeysErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_TxCreationKeysErrorZ* o_conv = (LDKCResult_TxCreationKeysErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_TxCreationKeysErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1TxCreationKeysErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -11698,6 +11305,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1TxCreationKeysErrorZ_
        CResult_TxCreationKeysErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_TxCreationKeysErrorZ_clone_ptr(LDKCResult_TxCreationKeysErrorZ *NONNULL_PTR arg) {
+       LDKCResult_TxCreationKeysErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxCreationKeysErrorZ), "LDKCResult_TxCreationKeysErrorZ");
+       *ret_conv = CResult_TxCreationKeysErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1TxCreationKeysErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_TxCreationKeysErrorZ* arg_conv = (LDKCResult_TxCreationKeysErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_TxCreationKeysErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1TxCreationKeysErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_TxCreationKeysErrorZ* orig_conv = (LDKCResult_TxCreationKeysErrorZ*)(orig & ~1);
        LDKCResult_TxCreationKeysErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxCreationKeysErrorZ), "LDKCResult_TxCreationKeysErrorZ");
@@ -11728,6 +11346,18 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1u32Z_1free(JNIEnv *en
        COption_u32Z_free(_res_conv);
 }
 
+static inline uint64_t COption_u32Z_clone_ptr(LDKCOption_u32Z *NONNULL_PTR arg) {
+       LDKCOption_u32Z *ret_copy = MALLOC(sizeof(LDKCOption_u32Z), "LDKCOption_u32Z");
+       *ret_copy = COption_u32Z_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u32Z_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCOption_u32Z* arg_conv = (LDKCOption_u32Z*)arg;
+       int64_t ret_val = COption_u32Z_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u32Z_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCOption_u32Z* orig_conv = (LDKCOption_u32Z*)orig;
        LDKCOption_u32Z *ret_copy = MALLOC(sizeof(LDKCOption_u32Z), "LDKCOption_u32Z");
@@ -11740,6 +11370,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCOutputInCommit
        LDKHTLCOutputInCommitment o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = HTLCOutputInCommitment_clone(&o_conv);
        LDKCResult_HTLCOutputInCommitmentDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HTLCOutputInCommitmentDecodeErrorZ), "LDKCResult_HTLCOutputInCommitmentDecodeErrorZ");
        *ret_conv = CResult_HTLCOutputInCommitmentDecodeErrorZ_ok(o_conv);
@@ -11750,12 +11381,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCOutputInCommit
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_HTLCOutputInCommitmentDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HTLCOutputInCommitmentDecodeErrorZ), "LDKCResult_HTLCOutputInCommitmentDecodeErrorZ");
        *ret_conv = CResult_HTLCOutputInCommitmentDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCOutputInCommitmentDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_HTLCOutputInCommitmentDecodeErrorZ* o_conv = (LDKCResult_HTLCOutputInCommitmentDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_HTLCOutputInCommitmentDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCOutputInCommitmentDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -11765,6 +11403,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCOutputInCommitmen
        CResult_HTLCOutputInCommitmentDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_HTLCOutputInCommitmentDecodeErrorZ_clone_ptr(LDKCResult_HTLCOutputInCommitmentDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_HTLCOutputInCommitmentDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HTLCOutputInCommitmentDecodeErrorZ), "LDKCResult_HTLCOutputInCommitmentDecodeErrorZ");
+       *ret_conv = CResult_HTLCOutputInCommitmentDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCOutputInCommitmentDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_HTLCOutputInCommitmentDecodeErrorZ* arg_conv = (LDKCResult_HTLCOutputInCommitmentDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_HTLCOutputInCommitmentDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCOutputInCommitmentDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_HTLCOutputInCommitmentDecodeErrorZ* orig_conv = (LDKCResult_HTLCOutputInCommitmentDecodeErrorZ*)(orig & ~1);
        LDKCResult_HTLCOutputInCommitmentDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HTLCOutputInCommitmentDecodeErrorZ), "LDKCResult_HTLCOutputInCommitmentDecodeErrorZ");
@@ -11776,6 +11425,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CounterpartyChanne
        LDKCounterpartyChannelTransactionParameters o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = CounterpartyChannelTransactionParameters_clone(&o_conv);
        LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ), "LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ");
        *ret_conv = CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_ok(o_conv);
@@ -11786,12 +11436,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CounterpartyChanne
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ), "LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ");
        *ret_conv = CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1CounterpartyChannelTransactionParametersDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ* o_conv = (LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CounterpartyChannelTransactionParametersDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -11801,6 +11458,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CounterpartyChannelTr
        CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_clone_ptr(LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ), "LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ");
+       *ret_conv = CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CounterpartyChannelTransactionParametersDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ* arg_conv = (LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CounterpartyChannelTransactionParametersDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ* orig_conv = (LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ*)(orig & ~1);
        LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ), "LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ");
@@ -11812,6 +11480,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelTransaction
        LDKChannelTransactionParameters o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ChannelTransactionParameters_clone(&o_conv);
        LDKCResult_ChannelTransactionParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelTransactionParametersDecodeErrorZ), "LDKCResult_ChannelTransactionParametersDecodeErrorZ");
        *ret_conv = CResult_ChannelTransactionParametersDecodeErrorZ_ok(o_conv);
@@ -11822,12 +11491,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelTransaction
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ChannelTransactionParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelTransactionParametersDecodeErrorZ), "LDKCResult_ChannelTransactionParametersDecodeErrorZ");
        *ret_conv = CResult_ChannelTransactionParametersDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelTransactionParametersDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ChannelTransactionParametersDecodeErrorZ* o_conv = (LDKCResult_ChannelTransactionParametersDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ChannelTransactionParametersDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelTransactionParametersDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -11837,6 +11513,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelTransactionPar
        CResult_ChannelTransactionParametersDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ChannelTransactionParametersDecodeErrorZ_clone_ptr(LDKCResult_ChannelTransactionParametersDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ChannelTransactionParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelTransactionParametersDecodeErrorZ), "LDKCResult_ChannelTransactionParametersDecodeErrorZ");
+       *ret_conv = CResult_ChannelTransactionParametersDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelTransactionParametersDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_ChannelTransactionParametersDecodeErrorZ* arg_conv = (LDKCResult_ChannelTransactionParametersDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ChannelTransactionParametersDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelTransactionParametersDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_ChannelTransactionParametersDecodeErrorZ* orig_conv = (LDKCResult_ChannelTransactionParametersDecodeErrorZ*)(orig & ~1);
        LDKCResult_ChannelTransactionParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelTransactionParametersDecodeErrorZ), "LDKCResult_ChannelTransactionParametersDecodeErrorZ");
@@ -11865,6 +11552,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1HolderCommitmentTr
        LDKHolderCommitmentTransaction o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = HolderCommitmentTransaction_clone(&o_conv);
        LDKCResult_HolderCommitmentTransactionDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HolderCommitmentTransactionDecodeErrorZ), "LDKCResult_HolderCommitmentTransactionDecodeErrorZ");
        *ret_conv = CResult_HolderCommitmentTransactionDecodeErrorZ_ok(o_conv);
@@ -11875,12 +11563,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1HolderCommitmentTr
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_HolderCommitmentTransactionDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HolderCommitmentTransactionDecodeErrorZ), "LDKCResult_HolderCommitmentTransactionDecodeErrorZ");
        *ret_conv = CResult_HolderCommitmentTransactionDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1HolderCommitmentTransactionDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_HolderCommitmentTransactionDecodeErrorZ* o_conv = (LDKCResult_HolderCommitmentTransactionDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_HolderCommitmentTransactionDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1HolderCommitmentTransactionDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -11890,6 +11585,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1HolderCommitmentTrans
        CResult_HolderCommitmentTransactionDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_HolderCommitmentTransactionDecodeErrorZ_clone_ptr(LDKCResult_HolderCommitmentTransactionDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_HolderCommitmentTransactionDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HolderCommitmentTransactionDecodeErrorZ), "LDKCResult_HolderCommitmentTransactionDecodeErrorZ");
+       *ret_conv = CResult_HolderCommitmentTransactionDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1HolderCommitmentTransactionDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_HolderCommitmentTransactionDecodeErrorZ* arg_conv = (LDKCResult_HolderCommitmentTransactionDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_HolderCommitmentTransactionDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1HolderCommitmentTransactionDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_HolderCommitmentTransactionDecodeErrorZ* orig_conv = (LDKCResult_HolderCommitmentTransactionDecodeErrorZ*)(orig & ~1);
        LDKCResult_HolderCommitmentTransactionDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HolderCommitmentTransactionDecodeErrorZ), "LDKCResult_HolderCommitmentTransactionDecodeErrorZ");
@@ -11901,6 +11607,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1BuiltCommitmentTra
        LDKBuiltCommitmentTransaction o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = BuiltCommitmentTransaction_clone(&o_conv);
        LDKCResult_BuiltCommitmentTransactionDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BuiltCommitmentTransactionDecodeErrorZ), "LDKCResult_BuiltCommitmentTransactionDecodeErrorZ");
        *ret_conv = CResult_BuiltCommitmentTransactionDecodeErrorZ_ok(o_conv);
@@ -11911,12 +11618,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1BuiltCommitmentTra
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_BuiltCommitmentTransactionDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BuiltCommitmentTransactionDecodeErrorZ), "LDKCResult_BuiltCommitmentTransactionDecodeErrorZ");
        *ret_conv = CResult_BuiltCommitmentTransactionDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1BuiltCommitmentTransactionDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_BuiltCommitmentTransactionDecodeErrorZ* o_conv = (LDKCResult_BuiltCommitmentTransactionDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_BuiltCommitmentTransactionDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1BuiltCommitmentTransactionDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -11926,6 +11640,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1BuiltCommitmentTransa
        CResult_BuiltCommitmentTransactionDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_BuiltCommitmentTransactionDecodeErrorZ_clone_ptr(LDKCResult_BuiltCommitmentTransactionDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_BuiltCommitmentTransactionDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BuiltCommitmentTransactionDecodeErrorZ), "LDKCResult_BuiltCommitmentTransactionDecodeErrorZ");
+       *ret_conv = CResult_BuiltCommitmentTransactionDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1BuiltCommitmentTransactionDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_BuiltCommitmentTransactionDecodeErrorZ* arg_conv = (LDKCResult_BuiltCommitmentTransactionDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_BuiltCommitmentTransactionDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1BuiltCommitmentTransactionDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_BuiltCommitmentTransactionDecodeErrorZ* orig_conv = (LDKCResult_BuiltCommitmentTransactionDecodeErrorZ*)(orig & ~1);
        LDKCResult_BuiltCommitmentTransactionDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BuiltCommitmentTransactionDecodeErrorZ), "LDKCResult_BuiltCommitmentTransactionDecodeErrorZ");
@@ -11937,6 +11662,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1TrustedClosingTran
        LDKTrustedClosingTransaction o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        // Warning: we need a move here but no clone is available for LDKTrustedClosingTransaction
        LDKCResult_TrustedClosingTransactionNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_TrustedClosingTransactionNoneZ), "LDKCResult_TrustedClosingTransactionNoneZ");
        *ret_conv = CResult_TrustedClosingTransactionNoneZ_ok(o_conv);
@@ -11949,6 +11675,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1TrustedClosingTran
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1TrustedClosingTransactionNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_TrustedClosingTransactionNoneZ* o_conv = (LDKCResult_TrustedClosingTransactionNoneZ*)(o & ~1);
+       jboolean ret_val = CResult_TrustedClosingTransactionNoneZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1TrustedClosingTransactionNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -11962,6 +11694,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CommitmentTransact
        LDKCommitmentTransaction o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = CommitmentTransaction_clone(&o_conv);
        LDKCResult_CommitmentTransactionDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CommitmentTransactionDecodeErrorZ), "LDKCResult_CommitmentTransactionDecodeErrorZ");
        *ret_conv = CResult_CommitmentTransactionDecodeErrorZ_ok(o_conv);
@@ -11972,12 +11705,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CommitmentTransact
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_CommitmentTransactionDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CommitmentTransactionDecodeErrorZ), "LDKCResult_CommitmentTransactionDecodeErrorZ");
        *ret_conv = CResult_CommitmentTransactionDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1CommitmentTransactionDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_CommitmentTransactionDecodeErrorZ* o_conv = (LDKCResult_CommitmentTransactionDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_CommitmentTransactionDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CommitmentTransactionDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -11987,6 +11727,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CommitmentTransaction
        CResult_CommitmentTransactionDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_CommitmentTransactionDecodeErrorZ_clone_ptr(LDKCResult_CommitmentTransactionDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_CommitmentTransactionDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CommitmentTransactionDecodeErrorZ), "LDKCResult_CommitmentTransactionDecodeErrorZ");
+       *ret_conv = CResult_CommitmentTransactionDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CommitmentTransactionDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_CommitmentTransactionDecodeErrorZ* arg_conv = (LDKCResult_CommitmentTransactionDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_CommitmentTransactionDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CommitmentTransactionDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_CommitmentTransactionDecodeErrorZ* orig_conv = (LDKCResult_CommitmentTransactionDecodeErrorZ*)(orig & ~1);
        LDKCResult_CommitmentTransactionDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CommitmentTransactionDecodeErrorZ), "LDKCResult_CommitmentTransactionDecodeErrorZ");
@@ -11998,6 +11749,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1TrustedCommitmentT
        LDKTrustedCommitmentTransaction o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        // Warning: we need a move here but no clone is available for LDKTrustedCommitmentTransaction
        LDKCResult_TrustedCommitmentTransactionNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_TrustedCommitmentTransactionNoneZ), "LDKCResult_TrustedCommitmentTransactionNoneZ");
        *ret_conv = CResult_TrustedCommitmentTransactionNoneZ_ok(o_conv);
@@ -12010,6 +11762,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1TrustedCommitmentT
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1TrustedCommitmentTransactionNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_TrustedCommitmentTransactionNoneZ* o_conv = (LDKCResult_TrustedCommitmentTransactionNoneZ*)(o & ~1);
+       jboolean ret_val = CResult_TrustedCommitmentTransactionNoneZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1TrustedCommitmentTransactionNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12044,6 +11802,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1SignatureZNo
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1SignatureZNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_CVec_SignatureZNoneZ* o_conv = (LDKCResult_CVec_SignatureZNoneZ*)(o & ~1);
+       jboolean ret_val = CResult_CVec_SignatureZNoneZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1SignatureZNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12053,6 +11817,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1SignatureZNoneZ
        CResult_CVec_SignatureZNoneZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_CVec_SignatureZNoneZ_clone_ptr(LDKCResult_CVec_SignatureZNoneZ *NONNULL_PTR arg) {
+       LDKCResult_CVec_SignatureZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_SignatureZNoneZ), "LDKCResult_CVec_SignatureZNoneZ");
+       *ret_conv = CResult_CVec_SignatureZNoneZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1SignatureZNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_CVec_SignatureZNoneZ* arg_conv = (LDKCResult_CVec_SignatureZNoneZ*)(arg & ~1);
+       int64_t ret_val = CResult_CVec_SignatureZNoneZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1SignatureZNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_CVec_SignatureZNoneZ* orig_conv = (LDKCResult_CVec_SignatureZNoneZ*)(orig & ~1);
        LDKCResult_CVec_SignatureZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_SignatureZNoneZ), "LDKCResult_CVec_SignatureZNoneZ");
@@ -12064,6 +11839,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownScriptDeco
        LDKShutdownScript o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ShutdownScript_clone(&o_conv);
        LDKCResult_ShutdownScriptDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ShutdownScriptDecodeErrorZ), "LDKCResult_ShutdownScriptDecodeErrorZ");
        *ret_conv = CResult_ShutdownScriptDecodeErrorZ_ok(o_conv);
@@ -12074,12 +11850,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownScriptDeco
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ShutdownScriptDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ShutdownScriptDecodeErrorZ), "LDKCResult_ShutdownScriptDecodeErrorZ");
        *ret_conv = CResult_ShutdownScriptDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownScriptDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ShutdownScriptDecodeErrorZ* o_conv = (LDKCResult_ShutdownScriptDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ShutdownScriptDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownScriptDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12089,6 +11872,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownScriptDecodeE
        CResult_ShutdownScriptDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ShutdownScriptDecodeErrorZ_clone_ptr(LDKCResult_ShutdownScriptDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ShutdownScriptDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ShutdownScriptDecodeErrorZ), "LDKCResult_ShutdownScriptDecodeErrorZ");
+       *ret_conv = CResult_ShutdownScriptDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownScriptDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_ShutdownScriptDecodeErrorZ* arg_conv = (LDKCResult_ShutdownScriptDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ShutdownScriptDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownScriptDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_ShutdownScriptDecodeErrorZ* orig_conv = (LDKCResult_ShutdownScriptDecodeErrorZ*)(orig & ~1);
        LDKCResult_ShutdownScriptDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ShutdownScriptDecodeErrorZ), "LDKCResult_ShutdownScriptDecodeErrorZ");
@@ -12100,6 +11894,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownScriptInva
        LDKShutdownScript o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ShutdownScript_clone(&o_conv);
        LDKCResult_ShutdownScriptInvalidShutdownScriptZ* ret_conv = MALLOC(sizeof(LDKCResult_ShutdownScriptInvalidShutdownScriptZ), "LDKCResult_ShutdownScriptInvalidShutdownScriptZ");
        *ret_conv = CResult_ShutdownScriptInvalidShutdownScriptZ_ok(o_conv);
@@ -12110,12 +11905,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownScriptInva
        LDKInvalidShutdownScript e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = InvalidShutdownScript_clone(&e_conv);
        LDKCResult_ShutdownScriptInvalidShutdownScriptZ* ret_conv = MALLOC(sizeof(LDKCResult_ShutdownScriptInvalidShutdownScriptZ), "LDKCResult_ShutdownScriptInvalidShutdownScriptZ");
        *ret_conv = CResult_ShutdownScriptInvalidShutdownScriptZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownScriptInvalidShutdownScriptZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ShutdownScriptInvalidShutdownScriptZ* o_conv = (LDKCResult_ShutdownScriptInvalidShutdownScriptZ*)(o & ~1);
+       jboolean ret_val = CResult_ShutdownScriptInvalidShutdownScriptZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownScriptInvalidShutdownScriptZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12125,6 +11927,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownScriptInvalid
        CResult_ShutdownScriptInvalidShutdownScriptZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ShutdownScriptInvalidShutdownScriptZ_clone_ptr(LDKCResult_ShutdownScriptInvalidShutdownScriptZ *NONNULL_PTR arg) {
+       LDKCResult_ShutdownScriptInvalidShutdownScriptZ* ret_conv = MALLOC(sizeof(LDKCResult_ShutdownScriptInvalidShutdownScriptZ), "LDKCResult_ShutdownScriptInvalidShutdownScriptZ");
+       *ret_conv = CResult_ShutdownScriptInvalidShutdownScriptZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownScriptInvalidShutdownScriptZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_ShutdownScriptInvalidShutdownScriptZ* arg_conv = (LDKCResult_ShutdownScriptInvalidShutdownScriptZ*)(arg & ~1);
+       int64_t ret_val = CResult_ShutdownScriptInvalidShutdownScriptZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownScriptInvalidShutdownScriptZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_ShutdownScriptInvalidShutdownScriptZ* orig_conv = (LDKCResult_ShutdownScriptInvalidShutdownScriptZ*)(orig & ~1);
        LDKCResult_ShutdownScriptInvalidShutdownScriptZ* ret_conv = MALLOC(sizeof(LDKCResult_ShutdownScriptInvalidShutdownScriptZ), "LDKCResult_ShutdownScriptInvalidShutdownScriptZ");
@@ -12145,6 +11958,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneErrorZ_1err(JN
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NoneErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_NoneErrorZ* o_conv = (LDKCResult_NoneErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_NoneErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12154,6 +11973,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneErrorZ_1free(JNIE
        CResult_NoneErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_NoneErrorZ_clone_ptr(LDKCResult_NoneErrorZ *NONNULL_PTR arg) {
+       LDKCResult_NoneErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneErrorZ), "LDKCResult_NoneErrorZ");
+       *ret_conv = CResult_NoneErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_NoneErrorZ* arg_conv = (LDKCResult_NoneErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_NoneErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_NoneErrorZ* orig_conv = (LDKCResult_NoneErrorZ*)(orig & ~1);
        LDKCResult_NoneErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneErrorZ), "LDKCResult_NoneErrorZ");
@@ -12165,6 +11995,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RouteHopDecodeErro
        LDKRouteHop o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = RouteHop_clone(&o_conv);
        LDKCResult_RouteHopDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHopDecodeErrorZ), "LDKCResult_RouteHopDecodeErrorZ");
        *ret_conv = CResult_RouteHopDecodeErrorZ_ok(o_conv);
@@ -12175,12 +12006,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RouteHopDecodeErro
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_RouteHopDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHopDecodeErrorZ), "LDKCResult_RouteHopDecodeErrorZ");
        *ret_conv = CResult_RouteHopDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1RouteHopDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_RouteHopDecodeErrorZ* o_conv = (LDKCResult_RouteHopDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_RouteHopDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RouteHopDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12190,6 +12028,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RouteHopDecodeErrorZ_
        CResult_RouteHopDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_RouteHopDecodeErrorZ_clone_ptr(LDKCResult_RouteHopDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_RouteHopDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHopDecodeErrorZ), "LDKCResult_RouteHopDecodeErrorZ");
+       *ret_conv = CResult_RouteHopDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RouteHopDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_RouteHopDecodeErrorZ* arg_conv = (LDKCResult_RouteHopDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_RouteHopDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RouteHopDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_RouteHopDecodeErrorZ* orig_conv = (LDKCResult_RouteHopDecodeErrorZ*)(orig & ~1);
        LDKCResult_RouteHopDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHopDecodeErrorZ), "LDKCResult_RouteHopDecodeErrorZ");
@@ -12210,6 +12059,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1RouteHopZ_1free(JNIEnv *
                LDKRouteHop _res_conv_10_conv;
                _res_conv_10_conv.inner = (void*)(_res_conv_10 & (~1));
                _res_conv_10_conv.is_owned = (_res_conv_10 & 1) || (_res_conv_10 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_10_conv);
                _res_constr.data[k] = _res_conv_10_conv;
        }
        (*env)->ReleaseLongArrayElements(env, _res, _res_vals, 0);
@@ -12237,6 +12087,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1CVec_1RouteHopZZ_1free(J
                        LDKRouteHop _res_conv_12_conv_10_conv;
                        _res_conv_12_conv_10_conv.inner = (void*)(_res_conv_12_conv_10 & (~1));
                        _res_conv_12_conv_10_conv.is_owned = (_res_conv_12_conv_10 & 1) || (_res_conv_12_conv_10 == 0);
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_12_conv_10_conv);
                        _res_conv_12_constr.data[k] = _res_conv_12_conv_10_conv;
                }
                (*env)->ReleaseLongArrayElements(env, _res_conv_12, _res_conv_12_vals, 0);
@@ -12249,6 +12100,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RouteDecodeErrorZ_
        LDKRoute o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = Route_clone(&o_conv);
        LDKCResult_RouteDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteDecodeErrorZ), "LDKCResult_RouteDecodeErrorZ");
        *ret_conv = CResult_RouteDecodeErrorZ_ok(o_conv);
@@ -12259,12 +12111,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RouteDecodeErrorZ_
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_RouteDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteDecodeErrorZ), "LDKCResult_RouteDecodeErrorZ");
        *ret_conv = CResult_RouteDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1RouteDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_RouteDecodeErrorZ* o_conv = (LDKCResult_RouteDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_RouteDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RouteDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12274,6 +12133,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RouteDecodeErrorZ_1fr
        CResult_RouteDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_RouteDecodeErrorZ_clone_ptr(LDKCResult_RouteDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_RouteDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteDecodeErrorZ), "LDKCResult_RouteDecodeErrorZ");
+       *ret_conv = CResult_RouteDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RouteDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_RouteDecodeErrorZ* arg_conv = (LDKCResult_RouteDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_RouteDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RouteDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_RouteDecodeErrorZ* orig_conv = (LDKCResult_RouteDecodeErrorZ*)(orig & ~1);
        LDKCResult_RouteDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteDecodeErrorZ), "LDKCResult_RouteDecodeErrorZ");
@@ -12285,6 +12155,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RouteParametersDec
        LDKRouteParameters o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = RouteParameters_clone(&o_conv);
        LDKCResult_RouteParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteParametersDecodeErrorZ), "LDKCResult_RouteParametersDecodeErrorZ");
        *ret_conv = CResult_RouteParametersDecodeErrorZ_ok(o_conv);
@@ -12295,12 +12166,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RouteParametersDec
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_RouteParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteParametersDecodeErrorZ), "LDKCResult_RouteParametersDecodeErrorZ");
        *ret_conv = CResult_RouteParametersDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1RouteParametersDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_RouteParametersDecodeErrorZ* o_conv = (LDKCResult_RouteParametersDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_RouteParametersDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RouteParametersDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12310,6 +12188,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RouteParametersDecode
        CResult_RouteParametersDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_RouteParametersDecodeErrorZ_clone_ptr(LDKCResult_RouteParametersDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_RouteParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteParametersDecodeErrorZ), "LDKCResult_RouteParametersDecodeErrorZ");
+       *ret_conv = CResult_RouteParametersDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RouteParametersDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_RouteParametersDecodeErrorZ* arg_conv = (LDKCResult_RouteParametersDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_RouteParametersDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RouteParametersDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_RouteParametersDecodeErrorZ* orig_conv = (LDKCResult_RouteParametersDecodeErrorZ*)(orig & ~1);
        LDKCResult_RouteParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteParametersDecodeErrorZ), "LDKCResult_RouteParametersDecodeErrorZ");
@@ -12330,6 +12219,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1RouteHintZ_1free(JNIEnv
                LDKRouteHint _res_conv_11_conv;
                _res_conv_11_conv.inner = (void*)(_res_conv_11 & (~1));
                _res_conv_11_conv.is_owned = (_res_conv_11 & 1) || (_res_conv_11 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_11_conv);
                _res_constr.data[l] = _res_conv_11_conv;
        }
        (*env)->ReleaseLongArrayElements(env, _res, _res_vals, 0);
@@ -12359,6 +12249,18 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1u64Z_1free(JNIEnv *en
        COption_u64Z_free(_res_conv);
 }
 
+static inline uint64_t COption_u64Z_clone_ptr(LDKCOption_u64Z *NONNULL_PTR arg) {
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = COption_u64Z_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u64Z_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCOption_u64Z* arg_conv = (LDKCOption_u64Z*)arg;
+       int64_t ret_val = COption_u64Z_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u64Z_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCOption_u64Z* orig_conv = (LDKCOption_u64Z*)orig;
        LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
@@ -12371,6 +12273,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PayeeDecodeErrorZ_
        LDKPayee o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = Payee_clone(&o_conv);
        LDKCResult_PayeeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PayeeDecodeErrorZ), "LDKCResult_PayeeDecodeErrorZ");
        *ret_conv = CResult_PayeeDecodeErrorZ_ok(o_conv);
@@ -12381,12 +12284,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PayeeDecodeErrorZ_
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_PayeeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PayeeDecodeErrorZ), "LDKCResult_PayeeDecodeErrorZ");
        *ret_conv = CResult_PayeeDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PayeeDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_PayeeDecodeErrorZ* o_conv = (LDKCResult_PayeeDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_PayeeDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PayeeDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12396,6 +12306,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PayeeDecodeErrorZ_1fr
        CResult_PayeeDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_PayeeDecodeErrorZ_clone_ptr(LDKCResult_PayeeDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_PayeeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PayeeDecodeErrorZ), "LDKCResult_PayeeDecodeErrorZ");
+       *ret_conv = CResult_PayeeDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PayeeDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_PayeeDecodeErrorZ* arg_conv = (LDKCResult_PayeeDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_PayeeDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PayeeDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_PayeeDecodeErrorZ* orig_conv = (LDKCResult_PayeeDecodeErrorZ*)(orig & ~1);
        LDKCResult_PayeeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PayeeDecodeErrorZ), "LDKCResult_PayeeDecodeErrorZ");
@@ -12416,6 +12337,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1RouteHintHopZ_1free(JNIE
                LDKRouteHintHop _res_conv_14_conv;
                _res_conv_14_conv.inner = (void*)(_res_conv_14 & (~1));
                _res_conv_14_conv.is_owned = (_res_conv_14 & 1) || (_res_conv_14 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_14_conv);
                _res_constr.data[o] = _res_conv_14_conv;
        }
        (*env)->ReleaseLongArrayElements(env, _res, _res_vals, 0);
@@ -12426,6 +12348,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RouteHintDecodeErr
        LDKRouteHint o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = RouteHint_clone(&o_conv);
        LDKCResult_RouteHintDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHintDecodeErrorZ), "LDKCResult_RouteHintDecodeErrorZ");
        *ret_conv = CResult_RouteHintDecodeErrorZ_ok(o_conv);
@@ -12436,12 +12359,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RouteHintDecodeErr
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_RouteHintDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHintDecodeErrorZ), "LDKCResult_RouteHintDecodeErrorZ");
        *ret_conv = CResult_RouteHintDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1RouteHintDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_RouteHintDecodeErrorZ* o_conv = (LDKCResult_RouteHintDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_RouteHintDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RouteHintDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12451,6 +12381,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RouteHintDecodeErrorZ
        CResult_RouteHintDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_RouteHintDecodeErrorZ_clone_ptr(LDKCResult_RouteHintDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_RouteHintDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHintDecodeErrorZ), "LDKCResult_RouteHintDecodeErrorZ");
+       *ret_conv = CResult_RouteHintDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RouteHintDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_RouteHintDecodeErrorZ* arg_conv = (LDKCResult_RouteHintDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_RouteHintDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RouteHintDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_RouteHintDecodeErrorZ* orig_conv = (LDKCResult_RouteHintDecodeErrorZ*)(orig & ~1);
        LDKCResult_RouteHintDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHintDecodeErrorZ), "LDKCResult_RouteHintDecodeErrorZ");
@@ -12462,6 +12403,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RouteHintHopDecode
        LDKRouteHintHop o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = RouteHintHop_clone(&o_conv);
        LDKCResult_RouteHintHopDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHintHopDecodeErrorZ), "LDKCResult_RouteHintHopDecodeErrorZ");
        *ret_conv = CResult_RouteHintHopDecodeErrorZ_ok(o_conv);
@@ -12472,12 +12414,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RouteHintHopDecode
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_RouteHintHopDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHintHopDecodeErrorZ), "LDKCResult_RouteHintHopDecodeErrorZ");
        *ret_conv = CResult_RouteHintHopDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1RouteHintHopDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_RouteHintHopDecodeErrorZ* o_conv = (LDKCResult_RouteHintHopDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_RouteHintHopDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RouteHintHopDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12487,6 +12436,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RouteHintHopDecodeErr
        CResult_RouteHintHopDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_RouteHintHopDecodeErrorZ_clone_ptr(LDKCResult_RouteHintHopDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_RouteHintHopDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHintHopDecodeErrorZ), "LDKCResult_RouteHintHopDecodeErrorZ");
+       *ret_conv = CResult_RouteHintHopDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RouteHintHopDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_RouteHintHopDecodeErrorZ* arg_conv = (LDKCResult_RouteHintHopDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_RouteHintHopDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RouteHintHopDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_RouteHintHopDecodeErrorZ* orig_conv = (LDKCResult_RouteHintHopDecodeErrorZ*)(orig & ~1);
        LDKCResult_RouteHintHopDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHintHopDecodeErrorZ), "LDKCResult_RouteHintHopDecodeErrorZ");
@@ -12507,6 +12467,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1ChannelDetailsZ_1free(JN
                LDKChannelDetails _res_conv_16_conv;
                _res_conv_16_conv.inner = (void*)(_res_conv_16 & (~1));
                _res_conv_16_conv.is_owned = (_res_conv_16 & 1) || (_res_conv_16 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_16_conv);
                _res_constr.data[q] = _res_conv_16_conv;
        }
        (*env)->ReleaseLongArrayElements(env, _res, _res_vals, 0);
@@ -12517,6 +12478,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RouteLightningErro
        LDKRoute o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = Route_clone(&o_conv);
        LDKCResult_RouteLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteLightningErrorZ), "LDKCResult_RouteLightningErrorZ");
        *ret_conv = CResult_RouteLightningErrorZ_ok(o_conv);
@@ -12527,12 +12489,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RouteLightningErro
        LDKLightningError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = LightningError_clone(&e_conv);
        LDKCResult_RouteLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteLightningErrorZ), "LDKCResult_RouteLightningErrorZ");
        *ret_conv = CResult_RouteLightningErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1RouteLightningErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_RouteLightningErrorZ* o_conv = (LDKCResult_RouteLightningErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_RouteLightningErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RouteLightningErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12542,6 +12511,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RouteLightningErrorZ_
        CResult_RouteLightningErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_RouteLightningErrorZ_clone_ptr(LDKCResult_RouteLightningErrorZ *NONNULL_PTR arg) {
+       LDKCResult_RouteLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteLightningErrorZ), "LDKCResult_RouteLightningErrorZ");
+       *ret_conv = CResult_RouteLightningErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RouteLightningErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_RouteLightningErrorZ* arg_conv = (LDKCResult_RouteLightningErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_RouteLightningErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RouteLightningErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_RouteLightningErrorZ* orig_conv = (LDKCResult_RouteLightningErrorZ*)(orig & ~1);
        LDKCResult_RouteLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteLightningErrorZ), "LDKCResult_RouteLightningErrorZ");
@@ -12566,6 +12546,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1TxOutAccessErrorZ_
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1TxOutAccessErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_TxOutAccessErrorZ* o_conv = (LDKCResult_TxOutAccessErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_TxOutAccessErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1TxOutAccessErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12575,6 +12561,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1TxOutAccessErrorZ_1fr
        CResult_TxOutAccessErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_TxOutAccessErrorZ_clone_ptr(LDKCResult_TxOutAccessErrorZ *NONNULL_PTR arg) {
+       LDKCResult_TxOutAccessErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxOutAccessErrorZ), "LDKCResult_TxOutAccessErrorZ");
+       *ret_conv = CResult_TxOutAccessErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1TxOutAccessErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_TxOutAccessErrorZ* arg_conv = (LDKCResult_TxOutAccessErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_TxOutAccessErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1TxOutAccessErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_TxOutAccessErrorZ* orig_conv = (LDKCResult_TxOutAccessErrorZ*)(orig & ~1);
        LDKCResult_TxOutAccessErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxOutAccessErrorZ), "LDKCResult_TxOutAccessErrorZ");
@@ -12582,6 +12579,17 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1TxOutAccessErrorZ_
        return (uint64_t)ret_conv;
 }
 
+static inline uint64_t C2Tuple_usizeTransactionZ_clone_ptr(LDKC2Tuple_usizeTransactionZ *NONNULL_PTR arg) {
+       LDKC2Tuple_usizeTransactionZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_usizeTransactionZ), "LDKC2Tuple_usizeTransactionZ");
+       *ret_conv = C2Tuple_usizeTransactionZ_clone(arg);
+       return ((uint64_t)ret_conv);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1usizeTransactionZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKC2Tuple_usizeTransactionZ* arg_conv = (LDKC2Tuple_usizeTransactionZ*)(arg & ~1);
+       int64_t ret_val = C2Tuple_usizeTransactionZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1usizeTransactionZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKC2Tuple_usizeTransactionZ* orig_conv = (LDKC2Tuple_usizeTransactionZ*)(orig & ~1);
        LDKC2Tuple_usizeTransactionZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_usizeTransactionZ), "LDKC2Tuple_usizeTransactionZ");
@@ -12659,6 +12667,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneChannelMonitor
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NoneChannelMonitorUpdateErrZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_NoneChannelMonitorUpdateErrZ* o_conv = (LDKCResult_NoneChannelMonitorUpdateErrZ*)(o & ~1);
+       jboolean ret_val = CResult_NoneChannelMonitorUpdateErrZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneChannelMonitorUpdateErrZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12668,6 +12682,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneChannelMonitorUpd
        CResult_NoneChannelMonitorUpdateErrZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_NoneChannelMonitorUpdateErrZ_clone_ptr(LDKCResult_NoneChannelMonitorUpdateErrZ *NONNULL_PTR arg) {
+       LDKCResult_NoneChannelMonitorUpdateErrZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneChannelMonitorUpdateErrZ), "LDKCResult_NoneChannelMonitorUpdateErrZ");
+       *ret_conv = CResult_NoneChannelMonitorUpdateErrZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneChannelMonitorUpdateErrZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_NoneChannelMonitorUpdateErrZ* arg_conv = (LDKCResult_NoneChannelMonitorUpdateErrZ*)(arg & ~1);
+       int64_t ret_val = CResult_NoneChannelMonitorUpdateErrZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneChannelMonitorUpdateErrZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_NoneChannelMonitorUpdateErrZ* orig_conv = (LDKCResult_NoneChannelMonitorUpdateErrZ*)(orig & ~1);
        LDKCResult_NoneChannelMonitorUpdateErrZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneChannelMonitorUpdateErrZ), "LDKCResult_NoneChannelMonitorUpdateErrZ");
@@ -12722,6 +12747,18 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1C2Tuple_1usizeTransac
        COption_C2Tuple_usizeTransactionZZ_free(_res_conv);
 }
 
+static inline uint64_t COption_C2Tuple_usizeTransactionZZ_clone_ptr(LDKCOption_C2Tuple_usizeTransactionZZ *NONNULL_PTR arg) {
+       LDKCOption_C2Tuple_usizeTransactionZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_usizeTransactionZZ), "LDKCOption_C2Tuple_usizeTransactionZZ");
+       *ret_copy = COption_C2Tuple_usizeTransactionZZ_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1C2Tuple_1usizeTransactionZZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCOption_C2Tuple_usizeTransactionZZ* arg_conv = (LDKCOption_C2Tuple_usizeTransactionZZ*)arg;
+       int64_t ret_val = COption_C2Tuple_usizeTransactionZZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1C2Tuple_1usizeTransactionZZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCOption_C2Tuple_usizeTransactionZZ* orig_conv = (LDKCOption_C2Tuple_usizeTransactionZZ*)orig;
        LDKCOption_C2Tuple_usizeTransactionZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_usizeTransactionZZ), "LDKCOption_C2Tuple_usizeTransactionZZ");
@@ -12730,6 +12767,107 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1C2Tuple_1usizeTran
        return ret_ref;
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1ClosureReasonZ_1some(JNIEnv *env, jclass clz, int64_t o) {
+       void* o_ptr = (void*)(((uint64_t)o) & ~1);
+       CHECK_ACCESS(o_ptr);
+       LDKClosureReason o_conv = *(LDKClosureReason*)(o_ptr);
+       o_conv = ClosureReason_clone((LDKClosureReason*)(((uint64_t)o) & ~1));
+       LDKCOption_ClosureReasonZ *ret_copy = MALLOC(sizeof(LDKCOption_ClosureReasonZ), "LDKCOption_ClosureReasonZ");
+       *ret_copy = COption_ClosureReasonZ_some(o_conv);
+       uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1ClosureReasonZ_1none(JNIEnv *env, jclass clz) {
+       LDKCOption_ClosureReasonZ *ret_copy = MALLOC(sizeof(LDKCOption_ClosureReasonZ), "LDKCOption_ClosureReasonZ");
+       *ret_copy = COption_ClosureReasonZ_none();
+       uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1ClosureReasonZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if ((_res & 1) != 0) return;
+       void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
+       CHECK_ACCESS(_res_ptr);
+       LDKCOption_ClosureReasonZ _res_conv = *(LDKCOption_ClosureReasonZ*)(_res_ptr);
+       FREE((void*)_res);
+       COption_ClosureReasonZ_free(_res_conv);
+}
+
+static inline uint64_t COption_ClosureReasonZ_clone_ptr(LDKCOption_ClosureReasonZ *NONNULL_PTR arg) {
+       LDKCOption_ClosureReasonZ *ret_copy = MALLOC(sizeof(LDKCOption_ClosureReasonZ), "LDKCOption_ClosureReasonZ");
+       *ret_copy = COption_ClosureReasonZ_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1ClosureReasonZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCOption_ClosureReasonZ* arg_conv = (LDKCOption_ClosureReasonZ*)arg;
+       int64_t ret_val = COption_ClosureReasonZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1ClosureReasonZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCOption_ClosureReasonZ* orig_conv = (LDKCOption_ClosureReasonZ*)orig;
+       LDKCOption_ClosureReasonZ *ret_copy = MALLOC(sizeof(LDKCOption_ClosureReasonZ), "LDKCOption_ClosureReasonZ");
+       *ret_copy = COption_ClosureReasonZ_clone(orig_conv);
+       uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1ClosureReasonZDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       void* o_ptr = (void*)(((uint64_t)o) & ~1);
+       CHECK_ACCESS(o_ptr);
+       LDKCOption_ClosureReasonZ o_conv = *(LDKCOption_ClosureReasonZ*)(o_ptr);
+       o_conv = COption_ClosureReasonZ_clone((LDKCOption_ClosureReasonZ*)(((uint64_t)o) & ~1));
+       LDKCResult_COption_ClosureReasonZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_ClosureReasonZDecodeErrorZ), "LDKCResult_COption_ClosureReasonZDecodeErrorZ");
+       *ret_conv = CResult_COption_ClosureReasonZDecodeErrorZ_ok(o_conv);
+       return (uint64_t)ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1ClosureReasonZDecodeErrorZ_1err(JNIEnv *env, jclass clz, int64_t e) {
+       LDKDecodeError e_conv;
+       e_conv.inner = (void*)(e & (~1));
+       e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
+       e_conv = DecodeError_clone(&e_conv);
+       LDKCResult_COption_ClosureReasonZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_ClosureReasonZDecodeErrorZ), "LDKCResult_COption_ClosureReasonZDecodeErrorZ");
+       *ret_conv = CResult_COption_ClosureReasonZDecodeErrorZ_err(e_conv);
+       return (uint64_t)ret_conv;
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1ClosureReasonZDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_COption_ClosureReasonZDecodeErrorZ* o_conv = (LDKCResult_COption_ClosureReasonZDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_COption_ClosureReasonZDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1ClosureReasonZDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if ((_res & 1) != 0) return;
+       void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_COption_ClosureReasonZDecodeErrorZ _res_conv = *(LDKCResult_COption_ClosureReasonZDecodeErrorZ*)(_res_ptr);
+       FREE((void*)_res);
+       CResult_COption_ClosureReasonZDecodeErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_COption_ClosureReasonZDecodeErrorZ_clone_ptr(LDKCResult_COption_ClosureReasonZDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_COption_ClosureReasonZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_ClosureReasonZDecodeErrorZ), "LDKCResult_COption_ClosureReasonZDecodeErrorZ");
+       *ret_conv = CResult_COption_ClosureReasonZDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1ClosureReasonZDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_COption_ClosureReasonZDecodeErrorZ* arg_conv = (LDKCResult_COption_ClosureReasonZDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_COption_ClosureReasonZDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1ClosureReasonZDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_COption_ClosureReasonZDecodeErrorZ* orig_conv = (LDKCResult_COption_ClosureReasonZDecodeErrorZ*)(orig & ~1);
+       LDKCResult_COption_ClosureReasonZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_ClosureReasonZDecodeErrorZ), "LDKCResult_COption_ClosureReasonZDecodeErrorZ");
+       *ret_conv = CResult_COption_ClosureReasonZDecodeErrorZ_clone(orig_conv);
+       return (uint64_t)ret_conv;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1NetworkUpdateZ_1some(JNIEnv *env, jclass clz, int64_t o) {
        void* o_ptr = (void*)(((uint64_t)o) & ~1);
        CHECK_ACCESS(o_ptr);
@@ -12757,6 +12895,18 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1NetworkUpdateZ_1free(
        COption_NetworkUpdateZ_free(_res_conv);
 }
 
+static inline uint64_t COption_NetworkUpdateZ_clone_ptr(LDKCOption_NetworkUpdateZ *NONNULL_PTR arg) {
+       LDKCOption_NetworkUpdateZ *ret_copy = MALLOC(sizeof(LDKCOption_NetworkUpdateZ), "LDKCOption_NetworkUpdateZ");
+       *ret_copy = COption_NetworkUpdateZ_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1NetworkUpdateZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCOption_NetworkUpdateZ* arg_conv = (LDKCOption_NetworkUpdateZ*)arg;
+       int64_t ret_val = COption_NetworkUpdateZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1NetworkUpdateZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCOption_NetworkUpdateZ* orig_conv = (LDKCOption_NetworkUpdateZ*)orig;
        LDKCOption_NetworkUpdateZ *ret_copy = MALLOC(sizeof(LDKCOption_NetworkUpdateZ), "LDKCOption_NetworkUpdateZ");
@@ -12785,6 +12935,107 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1SpendableOutputDescripto
        CVec_SpendableOutputDescriptorZ_free(_res_constr);
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1EventZ_1some(JNIEnv *env, jclass clz, int64_t o) {
+       void* o_ptr = (void*)(((uint64_t)o) & ~1);
+       CHECK_ACCESS(o_ptr);
+       LDKEvent o_conv = *(LDKEvent*)(o_ptr);
+       o_conv = Event_clone((LDKEvent*)(((uint64_t)o) & ~1));
+       LDKCOption_EventZ *ret_copy = MALLOC(sizeof(LDKCOption_EventZ), "LDKCOption_EventZ");
+       *ret_copy = COption_EventZ_some(o_conv);
+       uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1EventZ_1none(JNIEnv *env, jclass clz) {
+       LDKCOption_EventZ *ret_copy = MALLOC(sizeof(LDKCOption_EventZ), "LDKCOption_EventZ");
+       *ret_copy = COption_EventZ_none();
+       uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1EventZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if ((_res & 1) != 0) return;
+       void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
+       CHECK_ACCESS(_res_ptr);
+       LDKCOption_EventZ _res_conv = *(LDKCOption_EventZ*)(_res_ptr);
+       FREE((void*)_res);
+       COption_EventZ_free(_res_conv);
+}
+
+static inline uint64_t COption_EventZ_clone_ptr(LDKCOption_EventZ *NONNULL_PTR arg) {
+       LDKCOption_EventZ *ret_copy = MALLOC(sizeof(LDKCOption_EventZ), "LDKCOption_EventZ");
+       *ret_copy = COption_EventZ_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1EventZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCOption_EventZ* arg_conv = (LDKCOption_EventZ*)arg;
+       int64_t ret_val = COption_EventZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1EventZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCOption_EventZ* orig_conv = (LDKCOption_EventZ*)orig;
+       LDKCOption_EventZ *ret_copy = MALLOC(sizeof(LDKCOption_EventZ), "LDKCOption_EventZ");
+       *ret_copy = COption_EventZ_clone(orig_conv);
+       uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1EventZDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       void* o_ptr = (void*)(((uint64_t)o) & ~1);
+       CHECK_ACCESS(o_ptr);
+       LDKCOption_EventZ o_conv = *(LDKCOption_EventZ*)(o_ptr);
+       o_conv = COption_EventZ_clone((LDKCOption_EventZ*)(((uint64_t)o) & ~1));
+       LDKCResult_COption_EventZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_EventZDecodeErrorZ), "LDKCResult_COption_EventZDecodeErrorZ");
+       *ret_conv = CResult_COption_EventZDecodeErrorZ_ok(o_conv);
+       return (uint64_t)ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1EventZDecodeErrorZ_1err(JNIEnv *env, jclass clz, int64_t e) {
+       LDKDecodeError e_conv;
+       e_conv.inner = (void*)(e & (~1));
+       e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
+       e_conv = DecodeError_clone(&e_conv);
+       LDKCResult_COption_EventZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_EventZDecodeErrorZ), "LDKCResult_COption_EventZDecodeErrorZ");
+       *ret_conv = CResult_COption_EventZDecodeErrorZ_err(e_conv);
+       return (uint64_t)ret_conv;
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1EventZDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_COption_EventZDecodeErrorZ* o_conv = (LDKCResult_COption_EventZDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_COption_EventZDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1EventZDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if ((_res & 1) != 0) return;
+       void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_COption_EventZDecodeErrorZ _res_conv = *(LDKCResult_COption_EventZDecodeErrorZ*)(_res_ptr);
+       FREE((void*)_res);
+       CResult_COption_EventZDecodeErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_COption_EventZDecodeErrorZ_clone_ptr(LDKCResult_COption_EventZDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_COption_EventZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_EventZDecodeErrorZ), "LDKCResult_COption_EventZDecodeErrorZ");
+       *ret_conv = CResult_COption_EventZDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1EventZDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_COption_EventZDecodeErrorZ* arg_conv = (LDKCResult_COption_EventZDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_COption_EventZDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1EventZDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_COption_EventZDecodeErrorZ* orig_conv = (LDKCResult_COption_EventZDecodeErrorZ*)(orig & ~1);
+       LDKCResult_COption_EventZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_EventZDecodeErrorZ), "LDKCResult_COption_EventZDecodeErrorZ");
+       *ret_conv = CResult_COption_EventZDecodeErrorZ_clone(orig_conv);
+       return (uint64_t)ret_conv;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1MessageSendEventZ_1free(JNIEnv *env, jclass clz, int64_tArray _res) {
        LDKCVec_MessageSendEventZ _res_constr;
        _res_constr.datalen = (*env)->GetArrayLength(env, _res);
@@ -12809,6 +13060,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1InitFeaturesDecode
        LDKInitFeatures o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = InitFeatures_clone(&o_conv);
        LDKCResult_InitFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InitFeaturesDecodeErrorZ), "LDKCResult_InitFeaturesDecodeErrorZ");
        *ret_conv = CResult_InitFeaturesDecodeErrorZ_ok(o_conv);
@@ -12819,12 +13071,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1InitFeaturesDecode
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_InitFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InitFeaturesDecodeErrorZ), "LDKCResult_InitFeaturesDecodeErrorZ");
        *ret_conv = CResult_InitFeaturesDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1InitFeaturesDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_InitFeaturesDecodeErrorZ* o_conv = (LDKCResult_InitFeaturesDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_InitFeaturesDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1InitFeaturesDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12838,6 +13097,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NodeFeaturesDecode
        LDKNodeFeatures o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = NodeFeatures_clone(&o_conv);
        LDKCResult_NodeFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeFeaturesDecodeErrorZ), "LDKCResult_NodeFeaturesDecodeErrorZ");
        *ret_conv = CResult_NodeFeaturesDecodeErrorZ_ok(o_conv);
@@ -12848,12 +13108,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NodeFeaturesDecode
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_NodeFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeFeaturesDecodeErrorZ), "LDKCResult_NodeFeaturesDecodeErrorZ");
        *ret_conv = CResult_NodeFeaturesDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NodeFeaturesDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_NodeFeaturesDecodeErrorZ* o_conv = (LDKCResult_NodeFeaturesDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_NodeFeaturesDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NodeFeaturesDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12867,6 +13134,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelFeaturesDec
        LDKChannelFeatures o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ChannelFeatures_clone(&o_conv);
        LDKCResult_ChannelFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelFeaturesDecodeErrorZ), "LDKCResult_ChannelFeaturesDecodeErrorZ");
        *ret_conv = CResult_ChannelFeaturesDecodeErrorZ_ok(o_conv);
@@ -12877,12 +13145,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelFeaturesDec
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ChannelFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelFeaturesDecodeErrorZ), "LDKCResult_ChannelFeaturesDecodeErrorZ");
        *ret_conv = CResult_ChannelFeaturesDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelFeaturesDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ChannelFeaturesDecodeErrorZ* o_conv = (LDKCResult_ChannelFeaturesDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ChannelFeaturesDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelFeaturesDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12896,6 +13171,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceFeaturesDec
        LDKInvoiceFeatures o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = InvoiceFeatures_clone(&o_conv);
        LDKCResult_InvoiceFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceFeaturesDecodeErrorZ), "LDKCResult_InvoiceFeaturesDecodeErrorZ");
        *ret_conv = CResult_InvoiceFeaturesDecodeErrorZ_ok(o_conv);
@@ -12906,12 +13182,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceFeaturesDec
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_InvoiceFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceFeaturesDecodeErrorZ), "LDKCResult_InvoiceFeaturesDecodeErrorZ");
        *ret_conv = CResult_InvoiceFeaturesDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceFeaturesDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_InvoiceFeaturesDecodeErrorZ* o_conv = (LDKCResult_InvoiceFeaturesDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_InvoiceFeaturesDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceFeaturesDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12925,6 +13208,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ScoringParametersD
        LDKScoringParameters o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        // Warning: we need a move here but no clone is available for LDKScoringParameters
        LDKCResult_ScoringParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ScoringParametersDecodeErrorZ), "LDKCResult_ScoringParametersDecodeErrorZ");
        *ret_conv = CResult_ScoringParametersDecodeErrorZ_ok(o_conv);
@@ -12935,12 +13219,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ScoringParametersD
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ScoringParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ScoringParametersDecodeErrorZ), "LDKCResult_ScoringParametersDecodeErrorZ");
        *ret_conv = CResult_ScoringParametersDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ScoringParametersDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ScoringParametersDecodeErrorZ* o_conv = (LDKCResult_ScoringParametersDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ScoringParametersDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ScoringParametersDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12954,6 +13245,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ScorerDecodeErrorZ
        LDKScorer o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        // Warning: we need a move here but no clone is available for LDKScorer
        LDKCResult_ScorerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ScorerDecodeErrorZ), "LDKCResult_ScorerDecodeErrorZ");
        *ret_conv = CResult_ScorerDecodeErrorZ_ok(o_conv);
@@ -12964,12 +13256,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ScorerDecodeErrorZ
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ScorerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ScorerDecodeErrorZ), "LDKCResult_ScorerDecodeErrorZ");
        *ret_conv = CResult_ScorerDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ScorerDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ScorerDecodeErrorZ* o_conv = (LDKCResult_ScorerDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ScorerDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ScorerDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12983,6 +13282,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1DelayedPaymentOutp
        LDKDelayedPaymentOutputDescriptor o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = DelayedPaymentOutputDescriptor_clone(&o_conv);
        LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ), "LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ");
        *ret_conv = CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_ok(o_conv);
@@ -12993,12 +13293,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1DelayedPaymentOutp
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ), "LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ");
        *ret_conv = CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1DelayedPaymentOutputDescriptorDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ* o_conv = (LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1DelayedPaymentOutputDescriptorDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13008,6 +13315,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1DelayedPaymentOutputD
        CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_clone_ptr(LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ), "LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ");
+       *ret_conv = CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1DelayedPaymentOutputDescriptorDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ* arg_conv = (LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1DelayedPaymentOutputDescriptorDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ* orig_conv = (LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ*)(orig & ~1);
        LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ), "LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ");
@@ -13019,6 +13337,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1StaticPaymentOutpu
        LDKStaticPaymentOutputDescriptor o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = StaticPaymentOutputDescriptor_clone(&o_conv);
        LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ), "LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ");
        *ret_conv = CResult_StaticPaymentOutputDescriptorDecodeErrorZ_ok(o_conv);
@@ -13029,12 +13348,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1StaticPaymentOutpu
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ), "LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ");
        *ret_conv = CResult_StaticPaymentOutputDescriptorDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1StaticPaymentOutputDescriptorDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ* o_conv = (LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_StaticPaymentOutputDescriptorDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1StaticPaymentOutputDescriptorDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13044,6 +13370,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1StaticPaymentOutputDe
        CResult_StaticPaymentOutputDescriptorDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_StaticPaymentOutputDescriptorDecodeErrorZ_clone_ptr(LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ), "LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ");
+       *ret_conv = CResult_StaticPaymentOutputDescriptorDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1StaticPaymentOutputDescriptorDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ* arg_conv = (LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_StaticPaymentOutputDescriptorDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1StaticPaymentOutputDescriptorDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ* orig_conv = (LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ*)(orig & ~1);
        LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ), "LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ");
@@ -13065,12 +13402,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SpendableOutputDes
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_SpendableOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SpendableOutputDescriptorDecodeErrorZ), "LDKCResult_SpendableOutputDescriptorDecodeErrorZ");
        *ret_conv = CResult_SpendableOutputDescriptorDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1SpendableOutputDescriptorDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_SpendableOutputDescriptorDecodeErrorZ* o_conv = (LDKCResult_SpendableOutputDescriptorDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_SpendableOutputDescriptorDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SpendableOutputDescriptorDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13080,6 +13424,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SpendableOutputDescri
        CResult_SpendableOutputDescriptorDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_SpendableOutputDescriptorDecodeErrorZ_clone_ptr(LDKCResult_SpendableOutputDescriptorDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_SpendableOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SpendableOutputDescriptorDecodeErrorZ), "LDKCResult_SpendableOutputDescriptorDecodeErrorZ");
+       *ret_conv = CResult_SpendableOutputDescriptorDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SpendableOutputDescriptorDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_SpendableOutputDescriptorDecodeErrorZ* arg_conv = (LDKCResult_SpendableOutputDescriptorDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_SpendableOutputDescriptorDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SpendableOutputDescriptorDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_SpendableOutputDescriptorDecodeErrorZ* orig_conv = (LDKCResult_SpendableOutputDescriptorDecodeErrorZ*)(orig & ~1);
        LDKCResult_SpendableOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SpendableOutputDescriptorDecodeErrorZ), "LDKCResult_SpendableOutputDescriptorDecodeErrorZ");
@@ -13099,6 +13454,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneNoneZ_1err(JNI
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NoneNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_NoneNoneZ* o_conv = (LDKCResult_NoneNoneZ*)(o & ~1);
+       jboolean ret_val = CResult_NoneNoneZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13108,6 +13469,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneNoneZ_1free(JNIEn
        CResult_NoneNoneZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_NoneNoneZ_clone_ptr(LDKCResult_NoneNoneZ *NONNULL_PTR arg) {
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = CResult_NoneNoneZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_NoneNoneZ* arg_conv = (LDKCResult_NoneNoneZ*)(arg & ~1);
+       int64_t ret_val = CResult_NoneNoneZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_NoneNoneZ* orig_conv = (LDKCResult_NoneNoneZ*)(orig & ~1);
        LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
@@ -13115,6 +13487,17 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneNoneZ_1clone(J
        return (uint64_t)ret_conv;
 }
 
+static inline uint64_t C2Tuple_SignatureCVec_SignatureZZ_clone_ptr(LDKC2Tuple_SignatureCVec_SignatureZZ *NONNULL_PTR arg) {
+       LDKC2Tuple_SignatureCVec_SignatureZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_SignatureCVec_SignatureZZ), "LDKC2Tuple_SignatureCVec_SignatureZZ");
+       *ret_conv = C2Tuple_SignatureCVec_SignatureZZ_clone(arg);
+       return ((uint64_t)ret_conv);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1SignatureCVec_1SignatureZZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKC2Tuple_SignatureCVec_SignatureZZ* arg_conv = (LDKC2Tuple_SignatureCVec_SignatureZZ*)(arg & ~1);
+       int64_t ret_val = C2Tuple_SignatureCVec_SignatureZZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1SignatureCVec_1SignatureZZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKC2Tuple_SignatureCVec_SignatureZZ* orig_conv = (LDKC2Tuple_SignatureCVec_SignatureZZ*)(orig & ~1);
        LDKC2Tuple_SignatureCVec_SignatureZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_SignatureCVec_SignatureZZ), "LDKC2Tuple_SignatureCVec_SignatureZZ");
@@ -13169,6 +13552,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1Signature
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1SignatureCVec_1SignatureZZNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* o_conv = (LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)(o & ~1);
+       jboolean ret_val = CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1SignatureCVec_1SignatureZZNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13178,6 +13567,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1SignatureCVe
        CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone_ptr(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ *NONNULL_PTR arg) {
+       LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ), "LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ");
+       *ret_conv = CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1SignatureCVec_1SignatureZZNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* arg_conv = (LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)(arg & ~1);
+       int64_t ret_val = CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1SignatureCVec_1SignatureZZNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* orig_conv = (LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)(orig & ~1);
        LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ), "LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ");
@@ -13200,6 +13600,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SignatureNoneZ_1er
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1SignatureNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_SignatureNoneZ* o_conv = (LDKCResult_SignatureNoneZ*)(o & ~1);
+       jboolean ret_val = CResult_SignatureNoneZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SignatureNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13209,6 +13615,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SignatureNoneZ_1free(
        CResult_SignatureNoneZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_SignatureNoneZ_clone_ptr(LDKCResult_SignatureNoneZ *NONNULL_PTR arg) {
+       LDKCResult_SignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignatureNoneZ), "LDKCResult_SignatureNoneZ");
+       *ret_conv = CResult_SignatureNoneZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SignatureNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_SignatureNoneZ* arg_conv = (LDKCResult_SignatureNoneZ*)(arg & ~1);
+       int64_t ret_val = CResult_SignatureNoneZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SignatureNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_SignatureNoneZ* orig_conv = (LDKCResult_SignatureNoneZ*)(orig & ~1);
        LDKCResult_SignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignatureNoneZ), "LDKCResult_SignatureNoneZ");
@@ -13233,12 +13650,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SignDecodeErrorZ_1
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_SignDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SignDecodeErrorZ), "LDKCResult_SignDecodeErrorZ");
        *ret_conv = CResult_SignDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1SignDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_SignDecodeErrorZ* o_conv = (LDKCResult_SignDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_SignDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SignDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13248,6 +13672,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SignDecodeErrorZ_1fre
        CResult_SignDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_SignDecodeErrorZ_clone_ptr(LDKCResult_SignDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_SignDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SignDecodeErrorZ), "LDKCResult_SignDecodeErrorZ");
+       *ret_conv = CResult_SignDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SignDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_SignDecodeErrorZ* arg_conv = (LDKCResult_SignDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_SignDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SignDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_SignDecodeErrorZ* orig_conv = (LDKCResult_SignDecodeErrorZ*)(orig & ~1);
        LDKCResult_SignDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SignDecodeErrorZ), "LDKCResult_SignDecodeErrorZ");
@@ -13278,6 +13713,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RecoverableSignatu
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1RecoverableSignatureNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_RecoverableSignatureNoneZ* o_conv = (LDKCResult_RecoverableSignatureNoneZ*)(o & ~1);
+       jboolean ret_val = CResult_RecoverableSignatureNoneZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RecoverableSignatureNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13287,6 +13728,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RecoverableSignatureN
        CResult_RecoverableSignatureNoneZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_RecoverableSignatureNoneZ_clone_ptr(LDKCResult_RecoverableSignatureNoneZ *NONNULL_PTR arg) {
+       LDKCResult_RecoverableSignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_RecoverableSignatureNoneZ), "LDKCResult_RecoverableSignatureNoneZ");
+       *ret_conv = CResult_RecoverableSignatureNoneZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RecoverableSignatureNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_RecoverableSignatureNoneZ* arg_conv = (LDKCResult_RecoverableSignatureNoneZ*)(arg & ~1);
+       int64_t ret_val = CResult_RecoverableSignatureNoneZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RecoverableSignatureNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_RecoverableSignatureNoneZ* orig_conv = (LDKCResult_RecoverableSignatureNoneZ*)(orig & ~1);
        LDKCResult_RecoverableSignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_RecoverableSignatureNoneZ), "LDKCResult_RecoverableSignatureNoneZ");
@@ -13338,6 +13790,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1CVec_1u8ZZNo
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1CVec_1u8ZZNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_CVec_CVec_u8ZZNoneZ* o_conv = (LDKCResult_CVec_CVec_u8ZZNoneZ*)(o & ~1);
+       jboolean ret_val = CResult_CVec_CVec_u8ZZNoneZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1CVec_1u8ZZNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13347,6 +13805,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1CVec_1u8ZZNoneZ
        CResult_CVec_CVec_u8ZZNoneZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_CVec_CVec_u8ZZNoneZ_clone_ptr(LDKCResult_CVec_CVec_u8ZZNoneZ *NONNULL_PTR arg) {
+       LDKCResult_CVec_CVec_u8ZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_CVec_u8ZZNoneZ), "LDKCResult_CVec_CVec_u8ZZNoneZ");
+       *ret_conv = CResult_CVec_CVec_u8ZZNoneZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1CVec_1u8ZZNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_CVec_CVec_u8ZZNoneZ* arg_conv = (LDKCResult_CVec_CVec_u8ZZNoneZ*)(arg & ~1);
+       int64_t ret_val = CResult_CVec_CVec_u8ZZNoneZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1CVec_1u8ZZNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_CVec_CVec_u8ZZNoneZ* orig_conv = (LDKCResult_CVec_CVec_u8ZZNoneZ*)(orig & ~1);
        LDKCResult_CVec_CVec_u8ZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_CVec_u8ZZNoneZ), "LDKCResult_CVec_CVec_u8ZZNoneZ");
@@ -13358,6 +13827,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1InMemorySignerDeco
        LDKInMemorySigner o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = InMemorySigner_clone(&o_conv);
        LDKCResult_InMemorySignerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InMemorySignerDecodeErrorZ), "LDKCResult_InMemorySignerDecodeErrorZ");
        *ret_conv = CResult_InMemorySignerDecodeErrorZ_ok(o_conv);
@@ -13368,12 +13838,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1InMemorySignerDeco
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_InMemorySignerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InMemorySignerDecodeErrorZ), "LDKCResult_InMemorySignerDecodeErrorZ");
        *ret_conv = CResult_InMemorySignerDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1InMemorySignerDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_InMemorySignerDecodeErrorZ* o_conv = (LDKCResult_InMemorySignerDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_InMemorySignerDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1InMemorySignerDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13383,6 +13860,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1InMemorySignerDecodeE
        CResult_InMemorySignerDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_InMemorySignerDecodeErrorZ_clone_ptr(LDKCResult_InMemorySignerDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_InMemorySignerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InMemorySignerDecodeErrorZ), "LDKCResult_InMemorySignerDecodeErrorZ");
+       *ret_conv = CResult_InMemorySignerDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1InMemorySignerDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_InMemorySignerDecodeErrorZ* arg_conv = (LDKCResult_InMemorySignerDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_InMemorySignerDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1InMemorySignerDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_InMemorySignerDecodeErrorZ* orig_conv = (LDKCResult_InMemorySignerDecodeErrorZ*)(orig & ~1);
        LDKCResult_InMemorySignerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InMemorySignerDecodeErrorZ), "LDKCResult_InMemorySignerDecodeErrorZ");
@@ -13427,6 +13915,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1TransactionNoneZ_1
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1TransactionNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_TransactionNoneZ* o_conv = (LDKCResult_TransactionNoneZ*)(o & ~1);
+       jboolean ret_val = CResult_TransactionNoneZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1TransactionNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13436,6 +13930,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1TransactionNoneZ_1fre
        CResult_TransactionNoneZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_TransactionNoneZ_clone_ptr(LDKCResult_TransactionNoneZ *NONNULL_PTR arg) {
+       LDKCResult_TransactionNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_TransactionNoneZ), "LDKCResult_TransactionNoneZ");
+       *ret_conv = CResult_TransactionNoneZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1TransactionNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_TransactionNoneZ* arg_conv = (LDKCResult_TransactionNoneZ*)(arg & ~1);
+       int64_t ret_val = CResult_TransactionNoneZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1TransactionNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_TransactionNoneZ* orig_conv = (LDKCResult_TransactionNoneZ*)(orig & ~1);
        LDKCResult_TransactionNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_TransactionNoneZ), "LDKCResult_TransactionNoneZ");
@@ -13443,6 +13948,17 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1TransactionNoneZ_1
        return (uint64_t)ret_conv;
 }
 
+static inline uint64_t C2Tuple_BlockHashChannelMonitorZ_clone_ptr(LDKC2Tuple_BlockHashChannelMonitorZ *NONNULL_PTR arg) {
+       LDKC2Tuple_BlockHashChannelMonitorZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_BlockHashChannelMonitorZ), "LDKC2Tuple_BlockHashChannelMonitorZ");
+       *ret_conv = C2Tuple_BlockHashChannelMonitorZ_clone(arg);
+       return ((uint64_t)ret_conv);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelMonitorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKC2Tuple_BlockHashChannelMonitorZ* arg_conv = (LDKC2Tuple_BlockHashChannelMonitorZ*)(arg & ~1);
+       int64_t ret_val = C2Tuple_BlockHashChannelMonitorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelMonitorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKC2Tuple_BlockHashChannelMonitorZ* orig_conv = (LDKC2Tuple_BlockHashChannelMonitorZ*)(orig & ~1);
        LDKC2Tuple_BlockHashChannelMonitorZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_BlockHashChannelMonitorZ), "LDKC2Tuple_BlockHashChannelMonitorZ");
@@ -13457,6 +13973,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelMo
        LDKChannelMonitor b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = (b & 1) || (b == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv = ChannelMonitor_clone(&b_conv);
        LDKC2Tuple_BlockHashChannelMonitorZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_BlockHashChannelMonitorZ), "LDKC2Tuple_BlockHashChannelMonitorZ");
        *ret_conv = C2Tuple_BlockHashChannelMonitorZ_new(a_ref, b_conv);
@@ -13521,6 +14038,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1Blo
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1BlockHashChannelMonitorZZErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ* o_conv = (LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1BlockHashChannelMonitorZZErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13530,6 +14053,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1BlockH
        CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_clone_ptr(LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ *NONNULL_PTR arg) {
+       LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ), "LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ");
+       *ret_conv = CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1BlockHashChannelMonitorZZErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ* arg_conv = (LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1BlockHashChannelMonitorZZErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ* orig_conv = (LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ*)(orig & ~1);
        LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ), "LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ");
@@ -13560,6 +14094,18 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1u16Z_1free(JNIEnv *en
        COption_u16Z_free(_res_conv);
 }
 
+static inline uint64_t COption_u16Z_clone_ptr(LDKCOption_u16Z *NONNULL_PTR arg) {
+       LDKCOption_u16Z *ret_copy = MALLOC(sizeof(LDKCOption_u16Z), "LDKCOption_u16Z");
+       *ret_copy = COption_u16Z_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u16Z_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCOption_u16Z* arg_conv = (LDKCOption_u16Z*)arg;
+       int64_t ret_val = COption_u16Z_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u16Z_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCOption_u16Z* orig_conv = (LDKCOption_u16Z*)orig;
        LDKCOption_u16Z *ret_copy = MALLOC(sizeof(LDKCOption_u16Z), "LDKCOption_u16Z");
@@ -13584,6 +14130,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneAPIErrorZ_1err
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NoneAPIErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_NoneAPIErrorZ* o_conv = (LDKCResult_NoneAPIErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_NoneAPIErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneAPIErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13593,6 +14145,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneAPIErrorZ_1free(J
        CResult_NoneAPIErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_NoneAPIErrorZ_clone_ptr(LDKCResult_NoneAPIErrorZ *NONNULL_PTR arg) {
+       LDKCResult_NoneAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneAPIErrorZ), "LDKCResult_NoneAPIErrorZ");
+       *ret_conv = CResult_NoneAPIErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneAPIErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_NoneAPIErrorZ* arg_conv = (LDKCResult_NoneAPIErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_NoneAPIErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneAPIErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_NoneAPIErrorZ* orig_conv = (LDKCResult_NoneAPIErrorZ*)(orig & ~1);
        LDKCResult_NoneAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneAPIErrorZ), "LDKCResult_NoneAPIErrorZ");
@@ -13659,6 +14222,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1_1u832APIErrorZ_1e
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1_1u832APIErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult__u832APIErrorZ* o_conv = (LDKCResult__u832APIErrorZ*)(o & ~1);
+       jboolean ret_val = CResult__u832APIErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1_1u832APIErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13668,6 +14237,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1_1u832APIErrorZ_1free
        CResult__u832APIErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult__u832APIErrorZ_clone_ptr(LDKCResult__u832APIErrorZ *NONNULL_PTR arg) {
+       LDKCResult__u832APIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult__u832APIErrorZ), "LDKCResult__u832APIErrorZ");
+       *ret_conv = CResult__u832APIErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1_1u832APIErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult__u832APIErrorZ* arg_conv = (LDKCResult__u832APIErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult__u832APIErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1_1u832APIErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult__u832APIErrorZ* orig_conv = (LDKCResult__u832APIErrorZ*)(orig & ~1);
        LDKCResult__u832APIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult__u832APIErrorZ), "LDKCResult__u832APIErrorZ");
@@ -13694,6 +14274,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentSe
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentSendFailureZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_PaymentIdPaymentSendFailureZ* o_conv = (LDKCResult_PaymentIdPaymentSendFailureZ*)(o & ~1);
+       jboolean ret_val = CResult_PaymentIdPaymentSendFailureZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentSendFailureZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13703,6 +14289,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentSendF
        CResult_PaymentIdPaymentSendFailureZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_PaymentIdPaymentSendFailureZ_clone_ptr(LDKCResult_PaymentIdPaymentSendFailureZ *NONNULL_PTR arg) {
+       LDKCResult_PaymentIdPaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentIdPaymentSendFailureZ), "LDKCResult_PaymentIdPaymentSendFailureZ");
+       *ret_conv = CResult_PaymentIdPaymentSendFailureZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentSendFailureZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_PaymentIdPaymentSendFailureZ* arg_conv = (LDKCResult_PaymentIdPaymentSendFailureZ*)(arg & ~1);
+       int64_t ret_val = CResult_PaymentIdPaymentSendFailureZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentSendFailureZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_PaymentIdPaymentSendFailureZ* orig_conv = (LDKCResult_PaymentIdPaymentSendFailureZ*)(orig & ~1);
        LDKCResult_PaymentIdPaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentIdPaymentSendFailureZ), "LDKCResult_PaymentIdPaymentSendFailureZ");
@@ -13726,6 +14323,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NonePaymentSendFai
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NonePaymentSendFailureZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_NonePaymentSendFailureZ* o_conv = (LDKCResult_NonePaymentSendFailureZ*)(o & ~1);
+       jboolean ret_val = CResult_NonePaymentSendFailureZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NonePaymentSendFailureZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13735,6 +14338,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NonePaymentSendFailur
        CResult_NonePaymentSendFailureZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_NonePaymentSendFailureZ_clone_ptr(LDKCResult_NonePaymentSendFailureZ *NONNULL_PTR arg) {
+       LDKCResult_NonePaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_NonePaymentSendFailureZ), "LDKCResult_NonePaymentSendFailureZ");
+       *ret_conv = CResult_NonePaymentSendFailureZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NonePaymentSendFailureZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_NonePaymentSendFailureZ* arg_conv = (LDKCResult_NonePaymentSendFailureZ*)(arg & ~1);
+       int64_t ret_val = CResult_NonePaymentSendFailureZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NonePaymentSendFailureZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_NonePaymentSendFailureZ* orig_conv = (LDKCResult_NonePaymentSendFailureZ*)(orig & ~1);
        LDKCResult_NonePaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_NonePaymentSendFailureZ), "LDKCResult_NonePaymentSendFailureZ");
@@ -13742,6 +14356,17 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NonePaymentSendFai
        return (uint64_t)ret_conv;
 }
 
+static inline uint64_t C2Tuple_PaymentHashPaymentIdZ_clone_ptr(LDKC2Tuple_PaymentHashPaymentIdZ *NONNULL_PTR arg) {
+       LDKC2Tuple_PaymentHashPaymentIdZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PaymentHashPaymentIdZ), "LDKC2Tuple_PaymentHashPaymentIdZ");
+       *ret_conv = C2Tuple_PaymentHashPaymentIdZ_clone(arg);
+       return ((uint64_t)ret_conv);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PaymentHashPaymentIdZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKC2Tuple_PaymentHashPaymentIdZ* arg_conv = (LDKC2Tuple_PaymentHashPaymentIdZ*)(arg & ~1);
+       int64_t ret_val = C2Tuple_PaymentHashPaymentIdZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PaymentHashPaymentIdZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKC2Tuple_PaymentHashPaymentIdZ* orig_conv = (LDKC2Tuple_PaymentHashPaymentIdZ*)(orig & ~1);
        LDKC2Tuple_PaymentHashPaymentIdZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PaymentHashPaymentIdZ), "LDKC2Tuple_PaymentHashPaymentIdZ");
@@ -13790,6 +14415,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHa
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentIdZPaymentSendFailureZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ* o_conv = (LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ*)(o & ~1);
+       jboolean ret_val = CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentIdZPaymentSendFailureZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13799,6 +14430,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashP
        CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_clone_ptr(LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ *NONNULL_PTR arg) {
+       LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ), "LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ");
+       *ret_conv = CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentIdZPaymentSendFailureZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ* arg_conv = (LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ*)(arg & ~1);
+       int64_t ret_val = CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentIdZPaymentSendFailureZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ* orig_conv = (LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ*)(orig & ~1);
        LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ), "LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ");
@@ -13826,6 +14468,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1NetAddressZ_1free(JNIEnv
        CVec_NetAddressZ_free(_res_constr);
 }
 
+static inline uint64_t C2Tuple_PaymentHashPaymentSecretZ_clone_ptr(LDKC2Tuple_PaymentHashPaymentSecretZ *NONNULL_PTR arg) {
+       LDKC2Tuple_PaymentHashPaymentSecretZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PaymentHashPaymentSecretZ), "LDKC2Tuple_PaymentHashPaymentSecretZ");
+       *ret_conv = C2Tuple_PaymentHashPaymentSecretZ_clone(arg);
+       return ((uint64_t)ret_conv);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PaymentHashPaymentSecretZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKC2Tuple_PaymentHashPaymentSecretZ* arg_conv = (LDKC2Tuple_PaymentHashPaymentSecretZ*)(arg & ~1);
+       int64_t ret_val = C2Tuple_PaymentHashPaymentSecretZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PaymentHashPaymentSecretZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKC2Tuple_PaymentHashPaymentSecretZ* orig_conv = (LDKC2Tuple_PaymentHashPaymentSecretZ*)(orig & ~1);
        LDKC2Tuple_PaymentHashPaymentSecretZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PaymentHashPaymentSecretZ), "LDKC2Tuple_PaymentHashPaymentSecretZ");
@@ -13873,6 +14526,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentSecretAPIEr
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentSecretAPIErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_PaymentSecretAPIErrorZ* o_conv = (LDKCResult_PaymentSecretAPIErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_PaymentSecretAPIErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentSecretAPIErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13882,6 +14541,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentSecretAPIError
        CResult_PaymentSecretAPIErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_PaymentSecretAPIErrorZ_clone_ptr(LDKCResult_PaymentSecretAPIErrorZ *NONNULL_PTR arg) {
+       LDKCResult_PaymentSecretAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentSecretAPIErrorZ), "LDKCResult_PaymentSecretAPIErrorZ");
+       *ret_conv = CResult_PaymentSecretAPIErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentSecretAPIErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_PaymentSecretAPIErrorZ* arg_conv = (LDKCResult_PaymentSecretAPIErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_PaymentSecretAPIErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentSecretAPIErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_PaymentSecretAPIErrorZ* orig_conv = (LDKCResult_PaymentSecretAPIErrorZ*)(orig & ~1);
        LDKCResult_PaymentSecretAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentSecretAPIErrorZ), "LDKCResult_PaymentSecretAPIErrorZ");
@@ -13902,6 +14572,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1ChannelMonitorZ_1free(JN
                LDKChannelMonitor _res_conv_16_conv;
                _res_conv_16_conv.inner = (void*)(_res_conv_16 & (~1));
                _res_conv_16_conv.is_owned = (_res_conv_16 & 1) || (_res_conv_16 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_16_conv);
                _res_constr.data[q] = _res_conv_16_conv;
        }
        (*env)->ReleaseLongArrayElements(env, _res, _res_vals, 0);
@@ -13915,6 +14586,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelMa
        LDKChannelManager b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = (b & 1) || (b == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        // Warning: we need a move here but no clone is available for LDKChannelManager
        LDKC2Tuple_BlockHashChannelManagerZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_BlockHashChannelManagerZ), "LDKC2Tuple_BlockHashChannelManagerZ");
        *ret_conv = C2Tuple_BlockHashChannelManagerZ_new(a_ref, b_conv);
@@ -13944,12 +14616,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHash
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ), "LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ");
        *ret_conv = CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelManagerZDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ* o_conv = (LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelManagerZDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13963,6 +14642,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelConfigDecod
        LDKChannelConfig o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ChannelConfig_clone(&o_conv);
        LDKCResult_ChannelConfigDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelConfigDecodeErrorZ), "LDKCResult_ChannelConfigDecodeErrorZ");
        *ret_conv = CResult_ChannelConfigDecodeErrorZ_ok(o_conv);
@@ -13973,12 +14653,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelConfigDecod
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ChannelConfigDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelConfigDecodeErrorZ), "LDKCResult_ChannelConfigDecodeErrorZ");
        *ret_conv = CResult_ChannelConfigDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelConfigDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ChannelConfigDecodeErrorZ* o_conv = (LDKCResult_ChannelConfigDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ChannelConfigDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelConfigDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13988,6 +14675,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelConfigDecodeEr
        CResult_ChannelConfigDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ChannelConfigDecodeErrorZ_clone_ptr(LDKCResult_ChannelConfigDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ChannelConfigDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelConfigDecodeErrorZ), "LDKCResult_ChannelConfigDecodeErrorZ");
+       *ret_conv = CResult_ChannelConfigDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelConfigDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_ChannelConfigDecodeErrorZ* arg_conv = (LDKCResult_ChannelConfigDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ChannelConfigDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelConfigDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_ChannelConfigDecodeErrorZ* orig_conv = (LDKCResult_ChannelConfigDecodeErrorZ*)(orig & ~1);
        LDKCResult_ChannelConfigDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelConfigDecodeErrorZ), "LDKCResult_ChannelConfigDecodeErrorZ");
@@ -13999,6 +14697,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1OutPointDecodeErro
        LDKOutPoint o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = OutPoint_clone(&o_conv);
        LDKCResult_OutPointDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OutPointDecodeErrorZ), "LDKCResult_OutPointDecodeErrorZ");
        *ret_conv = CResult_OutPointDecodeErrorZ_ok(o_conv);
@@ -14009,12 +14708,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1OutPointDecodeErro
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_OutPointDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OutPointDecodeErrorZ), "LDKCResult_OutPointDecodeErrorZ");
        *ret_conv = CResult_OutPointDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1OutPointDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_OutPointDecodeErrorZ* o_conv = (LDKCResult_OutPointDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_OutPointDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1OutPointDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -14024,6 +14730,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1OutPointDecodeErrorZ_
        CResult_OutPointDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_OutPointDecodeErrorZ_clone_ptr(LDKCResult_OutPointDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_OutPointDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OutPointDecodeErrorZ), "LDKCResult_OutPointDecodeErrorZ");
+       *ret_conv = CResult_OutPointDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1OutPointDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_OutPointDecodeErrorZ* arg_conv = (LDKCResult_OutPointDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_OutPointDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1OutPointDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_OutPointDecodeErrorZ* orig_conv = (LDKCResult_OutPointDecodeErrorZ*)(orig & ~1);
        LDKCResult_OutPointDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OutPointDecodeErrorZ), "LDKCResult_OutPointDecodeErrorZ");
@@ -14061,6 +14778,18 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1TypeZ_1free(JNIEnv *e
        COption_TypeZ_free(_res_conv);
 }
 
+static inline uint64_t COption_TypeZ_clone_ptr(LDKCOption_TypeZ *NONNULL_PTR arg) {
+       LDKCOption_TypeZ *ret_copy = MALLOC(sizeof(LDKCOption_TypeZ), "LDKCOption_TypeZ");
+       *ret_copy = COption_TypeZ_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1TypeZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCOption_TypeZ* arg_conv = (LDKCOption_TypeZ*)arg;
+       int64_t ret_val = COption_TypeZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1TypeZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCOption_TypeZ* orig_conv = (LDKCOption_TypeZ*)orig;
        LDKCOption_TypeZ *ret_copy = MALLOC(sizeof(LDKCOption_TypeZ), "LDKCOption_TypeZ");
@@ -14083,12 +14812,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1TypeZDeco
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_COption_TypeZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_TypeZDecodeErrorZ), "LDKCResult_COption_TypeZDecodeErrorZ");
        *ret_conv = CResult_COption_TypeZDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1TypeZDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_COption_TypeZDecodeErrorZ* o_conv = (LDKCResult_COption_TypeZDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_COption_TypeZDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1TypeZDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -14098,6 +14834,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1TypeZDecodeE
        CResult_COption_TypeZDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_COption_TypeZDecodeErrorZ_clone_ptr(LDKCResult_COption_TypeZDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_COption_TypeZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_TypeZDecodeErrorZ), "LDKCResult_COption_TypeZDecodeErrorZ");
+       *ret_conv = CResult_COption_TypeZDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1TypeZDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_COption_TypeZDecodeErrorZ* arg_conv = (LDKCResult_COption_TypeZDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_COption_TypeZDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1TypeZDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_COption_TypeZDecodeErrorZ* orig_conv = (LDKCResult_COption_TypeZDecodeErrorZ*)(orig & ~1);
        LDKCResult_COption_TypeZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_TypeZDecodeErrorZ), "LDKCResult_COption_TypeZDecodeErrorZ");
@@ -14124,6 +14871,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentEr
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_PaymentIdPaymentErrorZ* o_conv = (LDKCResult_PaymentIdPaymentErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_PaymentIdPaymentErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -14133,6 +14886,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentError
        CResult_PaymentIdPaymentErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_PaymentIdPaymentErrorZ_clone_ptr(LDKCResult_PaymentIdPaymentErrorZ *NONNULL_PTR arg) {
+       LDKCResult_PaymentIdPaymentErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentIdPaymentErrorZ), "LDKCResult_PaymentIdPaymentErrorZ");
+       *ret_conv = CResult_PaymentIdPaymentErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_PaymentIdPaymentErrorZ* arg_conv = (LDKCResult_PaymentIdPaymentErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_PaymentIdPaymentErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_PaymentIdPaymentErrorZ* orig_conv = (LDKCResult_PaymentIdPaymentErrorZ*)(orig & ~1);
        LDKCResult_PaymentIdPaymentErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentIdPaymentErrorZ), "LDKCResult_PaymentIdPaymentErrorZ");
@@ -14153,6 +14917,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SiPrefixNoneZ_1err
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1SiPrefixNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_SiPrefixNoneZ* o_conv = (LDKCResult_SiPrefixNoneZ*)(o & ~1);
+       jboolean ret_val = CResult_SiPrefixNoneZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SiPrefixNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -14162,6 +14932,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SiPrefixNoneZ_1free(J
        CResult_SiPrefixNoneZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_SiPrefixNoneZ_clone_ptr(LDKCResult_SiPrefixNoneZ *NONNULL_PTR arg) {
+       LDKCResult_SiPrefixNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SiPrefixNoneZ), "LDKCResult_SiPrefixNoneZ");
+       *ret_conv = CResult_SiPrefixNoneZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SiPrefixNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_SiPrefixNoneZ* arg_conv = (LDKCResult_SiPrefixNoneZ*)(arg & ~1);
+       int64_t ret_val = CResult_SiPrefixNoneZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SiPrefixNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_SiPrefixNoneZ* orig_conv = (LDKCResult_SiPrefixNoneZ*)(orig & ~1);
        LDKCResult_SiPrefixNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SiPrefixNoneZ), "LDKCResult_SiPrefixNoneZ");
@@ -14173,6 +14954,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceNoneZ_1ok(J
        LDKInvoice o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = Invoice_clone(&o_conv);
        LDKCResult_InvoiceNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceNoneZ), "LDKCResult_InvoiceNoneZ");
        *ret_conv = CResult_InvoiceNoneZ_ok(o_conv);
@@ -14185,6 +14967,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceNoneZ_1err(
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_InvoiceNoneZ* o_conv = (LDKCResult_InvoiceNoneZ*)(o & ~1);
+       jboolean ret_val = CResult_InvoiceNoneZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -14194,6 +14982,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceNoneZ_1free(JN
        CResult_InvoiceNoneZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_InvoiceNoneZ_clone_ptr(LDKCResult_InvoiceNoneZ *NONNULL_PTR arg) {
+       LDKCResult_InvoiceNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceNoneZ), "LDKCResult_InvoiceNoneZ");
+       *ret_conv = CResult_InvoiceNoneZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_InvoiceNoneZ* arg_conv = (LDKCResult_InvoiceNoneZ*)(arg & ~1);
+       int64_t ret_val = CResult_InvoiceNoneZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_InvoiceNoneZ* orig_conv = (LDKCResult_InvoiceNoneZ*)(orig & ~1);
        LDKCResult_InvoiceNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceNoneZ), "LDKCResult_InvoiceNoneZ");
@@ -14205,6 +15004,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SignedRawInvoiceNo
        LDKSignedRawInvoice o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = SignedRawInvoice_clone(&o_conv);
        LDKCResult_SignedRawInvoiceNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignedRawInvoiceNoneZ), "LDKCResult_SignedRawInvoiceNoneZ");
        *ret_conv = CResult_SignedRawInvoiceNoneZ_ok(o_conv);
@@ -14217,6 +15017,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SignedRawInvoiceNo
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1SignedRawInvoiceNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_SignedRawInvoiceNoneZ* o_conv = (LDKCResult_SignedRawInvoiceNoneZ*)(o & ~1);
+       jboolean ret_val = CResult_SignedRawInvoiceNoneZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SignedRawInvoiceNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -14226,6 +15032,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SignedRawInvoiceNoneZ
        CResult_SignedRawInvoiceNoneZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_SignedRawInvoiceNoneZ_clone_ptr(LDKCResult_SignedRawInvoiceNoneZ *NONNULL_PTR arg) {
+       LDKCResult_SignedRawInvoiceNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignedRawInvoiceNoneZ), "LDKCResult_SignedRawInvoiceNoneZ");
+       *ret_conv = CResult_SignedRawInvoiceNoneZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SignedRawInvoiceNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_SignedRawInvoiceNoneZ* arg_conv = (LDKCResult_SignedRawInvoiceNoneZ*)(arg & ~1);
+       int64_t ret_val = CResult_SignedRawInvoiceNoneZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SignedRawInvoiceNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_SignedRawInvoiceNoneZ* orig_conv = (LDKCResult_SignedRawInvoiceNoneZ*)(orig & ~1);
        LDKCResult_SignedRawInvoiceNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignedRawInvoiceNoneZ), "LDKCResult_SignedRawInvoiceNoneZ");
@@ -14233,6 +15050,17 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SignedRawInvoiceNo
        return (uint64_t)ret_conv;
 }
 
+static inline uint64_t C3Tuple_RawInvoice_u832InvoiceSignatureZ_clone_ptr(LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ *NONNULL_PTR arg) {
+       LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ* ret_conv = MALLOC(sizeof(LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ), "LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ");
+       *ret_conv = C3Tuple_RawInvoice_u832InvoiceSignatureZ_clone(arg);
+       return ((uint64_t)ret_conv);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C3Tuple_1RawInvoice_1u832InvoiceSignatureZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ* arg_conv = (LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ*)(arg & ~1);
+       int64_t ret_val = C3Tuple_RawInvoice_u832InvoiceSignatureZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C3Tuple_1RawInvoice_1u832InvoiceSignatureZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ* orig_conv = (LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ*)(orig & ~1);
        LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ* ret_conv = MALLOC(sizeof(LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ), "LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ");
@@ -14244,6 +15072,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C3Tuple_1RawInvoice_1u832In
        LDKRawInvoice a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = (a & 1) || (a == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv = RawInvoice_clone(&a_conv);
        LDKThirtyTwoBytes b_ref;
        CHECK((*env)->GetArrayLength(env, b) == 32);
@@ -14251,6 +15080,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C3Tuple_1RawInvoice_1u832In
        LDKInvoiceSignature c_conv;
        c_conv.inner = (void*)(c & (~1));
        c_conv.is_owned = (c & 1) || (c == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(c_conv);
        c_conv = InvoiceSignature_clone(&c_conv);
        LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ* ret_conv = MALLOC(sizeof(LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ), "LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ");
        *ret_conv = C3Tuple_RawInvoice_u832InvoiceSignatureZ_new(a_conv, b_ref, c_conv);
@@ -14270,6 +15100,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeyErrorZ_
        LDKPayeePubKey o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = PayeePubKey_clone(&o_conv);
        LDKCResult_PayeePubKeyErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PayeePubKeyErrorZ), "LDKCResult_PayeePubKeyErrorZ");
        *ret_conv = CResult_PayeePubKeyErrorZ_ok(o_conv);
@@ -14283,6 +15114,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeyErrorZ_
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeyErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_PayeePubKeyErrorZ* o_conv = (LDKCResult_PayeePubKeyErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_PayeePubKeyErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeyErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -14292,6 +15129,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeyErrorZ_1fr
        CResult_PayeePubKeyErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_PayeePubKeyErrorZ_clone_ptr(LDKCResult_PayeePubKeyErrorZ *NONNULL_PTR arg) {
+       LDKCResult_PayeePubKeyErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PayeePubKeyErrorZ), "LDKCResult_PayeePubKeyErrorZ");
+       *ret_conv = CResult_PayeePubKeyErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeyErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_PayeePubKeyErrorZ* arg_conv = (LDKCResult_PayeePubKeyErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_PayeePubKeyErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeyErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_PayeePubKeyErrorZ* orig_conv = (LDKCResult_PayeePubKeyErrorZ*)(orig & ~1);
        LDKCResult_PayeePubKeyErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PayeePubKeyErrorZ), "LDKCResult_PayeePubKeyErrorZ");
@@ -14312,6 +15160,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1PrivateRouteZ_1free(JNIE
                LDKPrivateRoute _res_conv_14_conv;
                _res_conv_14_conv.inner = (void*)(_res_conv_14 & (~1));
                _res_conv_14_conv.is_owned = (_res_conv_14 & 1) || (_res_conv_14 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_14_conv);
                _res_constr.data[o] = _res_conv_14_conv;
        }
        (*env)->ReleaseLongArrayElements(env, _res, _res_vals, 0);
@@ -14322,6 +15171,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PositiveTimestampC
        LDKPositiveTimestamp o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = PositiveTimestamp_clone(&o_conv);
        LDKCResult_PositiveTimestampCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PositiveTimestampCreationErrorZ), "LDKCResult_PositiveTimestampCreationErrorZ");
        *ret_conv = CResult_PositiveTimestampCreationErrorZ_ok(o_conv);
@@ -14335,6 +15185,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PositiveTimestampC
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PositiveTimestampCreationErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_PositiveTimestampCreationErrorZ* o_conv = (LDKCResult_PositiveTimestampCreationErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_PositiveTimestampCreationErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PositiveTimestampCreationErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -14344,6 +15200,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PositiveTimestampCrea
        CResult_PositiveTimestampCreationErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_PositiveTimestampCreationErrorZ_clone_ptr(LDKCResult_PositiveTimestampCreationErrorZ *NONNULL_PTR arg) {
+       LDKCResult_PositiveTimestampCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PositiveTimestampCreationErrorZ), "LDKCResult_PositiveTimestampCreationErrorZ");
+       *ret_conv = CResult_PositiveTimestampCreationErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PositiveTimestampCreationErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_PositiveTimestampCreationErrorZ* arg_conv = (LDKCResult_PositiveTimestampCreationErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_PositiveTimestampCreationErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PositiveTimestampCreationErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_PositiveTimestampCreationErrorZ* orig_conv = (LDKCResult_PositiveTimestampCreationErrorZ*)(orig & ~1);
        LDKCResult_PositiveTimestampCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PositiveTimestampCreationErrorZ), "LDKCResult_PositiveTimestampCreationErrorZ");
@@ -14364,6 +15231,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneSemanticErrorZ
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NoneSemanticErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_NoneSemanticErrorZ* o_conv = (LDKCResult_NoneSemanticErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_NoneSemanticErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneSemanticErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -14373,6 +15246,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneSemanticErrorZ_1f
        CResult_NoneSemanticErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_NoneSemanticErrorZ_clone_ptr(LDKCResult_NoneSemanticErrorZ *NONNULL_PTR arg) {
+       LDKCResult_NoneSemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneSemanticErrorZ), "LDKCResult_NoneSemanticErrorZ");
+       *ret_conv = CResult_NoneSemanticErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneSemanticErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_NoneSemanticErrorZ* arg_conv = (LDKCResult_NoneSemanticErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_NoneSemanticErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneSemanticErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_NoneSemanticErrorZ* orig_conv = (LDKCResult_NoneSemanticErrorZ*)(orig & ~1);
        LDKCResult_NoneSemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneSemanticErrorZ), "LDKCResult_NoneSemanticErrorZ");
@@ -14384,6 +15268,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceSemanticErr
        LDKInvoice o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = Invoice_clone(&o_conv);
        LDKCResult_InvoiceSemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceSemanticErrorZ), "LDKCResult_InvoiceSemanticErrorZ");
        *ret_conv = CResult_InvoiceSemanticErrorZ_ok(o_conv);
@@ -14397,6 +15282,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceSemanticErr
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceSemanticErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_InvoiceSemanticErrorZ* o_conv = (LDKCResult_InvoiceSemanticErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_InvoiceSemanticErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceSemanticErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -14406,6 +15297,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceSemanticErrorZ
        CResult_InvoiceSemanticErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_InvoiceSemanticErrorZ_clone_ptr(LDKCResult_InvoiceSemanticErrorZ *NONNULL_PTR arg) {
+       LDKCResult_InvoiceSemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceSemanticErrorZ), "LDKCResult_InvoiceSemanticErrorZ");
+       *ret_conv = CResult_InvoiceSemanticErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceSemanticErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_InvoiceSemanticErrorZ* arg_conv = (LDKCResult_InvoiceSemanticErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_InvoiceSemanticErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceSemanticErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_InvoiceSemanticErrorZ* orig_conv = (LDKCResult_InvoiceSemanticErrorZ*)(orig & ~1);
        LDKCResult_InvoiceSemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceSemanticErrorZ), "LDKCResult_InvoiceSemanticErrorZ");
@@ -14417,6 +15319,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1DescriptionCreatio
        LDKDescription o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = Description_clone(&o_conv);
        LDKCResult_DescriptionCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_DescriptionCreationErrorZ), "LDKCResult_DescriptionCreationErrorZ");
        *ret_conv = CResult_DescriptionCreationErrorZ_ok(o_conv);
@@ -14430,6 +15333,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1DescriptionCreatio
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1DescriptionCreationErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_DescriptionCreationErrorZ* o_conv = (LDKCResult_DescriptionCreationErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_DescriptionCreationErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1DescriptionCreationErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -14439,6 +15348,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1DescriptionCreationEr
        CResult_DescriptionCreationErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_DescriptionCreationErrorZ_clone_ptr(LDKCResult_DescriptionCreationErrorZ *NONNULL_PTR arg) {
+       LDKCResult_DescriptionCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_DescriptionCreationErrorZ), "LDKCResult_DescriptionCreationErrorZ");
+       *ret_conv = CResult_DescriptionCreationErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1DescriptionCreationErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_DescriptionCreationErrorZ* arg_conv = (LDKCResult_DescriptionCreationErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_DescriptionCreationErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1DescriptionCreationErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_DescriptionCreationErrorZ* orig_conv = (LDKCResult_DescriptionCreationErrorZ*)(orig & ~1);
        LDKCResult_DescriptionCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_DescriptionCreationErrorZ), "LDKCResult_DescriptionCreationErrorZ");
@@ -14450,6 +15370,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ExpiryTimeCreation
        LDKExpiryTime o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ExpiryTime_clone(&o_conv);
        LDKCResult_ExpiryTimeCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ExpiryTimeCreationErrorZ), "LDKCResult_ExpiryTimeCreationErrorZ");
        *ret_conv = CResult_ExpiryTimeCreationErrorZ_ok(o_conv);
@@ -14463,6 +15384,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ExpiryTimeCreation
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ExpiryTimeCreationErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ExpiryTimeCreationErrorZ* o_conv = (LDKCResult_ExpiryTimeCreationErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ExpiryTimeCreationErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ExpiryTimeCreationErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -14472,6 +15399,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ExpiryTimeCreationErr
        CResult_ExpiryTimeCreationErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ExpiryTimeCreationErrorZ_clone_ptr(LDKCResult_ExpiryTimeCreationErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ExpiryTimeCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ExpiryTimeCreationErrorZ), "LDKCResult_ExpiryTimeCreationErrorZ");
+       *ret_conv = CResult_ExpiryTimeCreationErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ExpiryTimeCreationErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_ExpiryTimeCreationErrorZ* arg_conv = (LDKCResult_ExpiryTimeCreationErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ExpiryTimeCreationErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ExpiryTimeCreationErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_ExpiryTimeCreationErrorZ* orig_conv = (LDKCResult_ExpiryTimeCreationErrorZ*)(orig & ~1);
        LDKCResult_ExpiryTimeCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ExpiryTimeCreationErrorZ), "LDKCResult_ExpiryTimeCreationErrorZ");
@@ -14483,6 +15421,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PrivateRouteCreati
        LDKPrivateRoute o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = PrivateRoute_clone(&o_conv);
        LDKCResult_PrivateRouteCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PrivateRouteCreationErrorZ), "LDKCResult_PrivateRouteCreationErrorZ");
        *ret_conv = CResult_PrivateRouteCreationErrorZ_ok(o_conv);
@@ -14496,6 +15435,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PrivateRouteCreati
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PrivateRouteCreationErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_PrivateRouteCreationErrorZ* o_conv = (LDKCResult_PrivateRouteCreationErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_PrivateRouteCreationErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PrivateRouteCreationErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -14505,6 +15450,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PrivateRouteCreationE
        CResult_PrivateRouteCreationErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_PrivateRouteCreationErrorZ_clone_ptr(LDKCResult_PrivateRouteCreationErrorZ *NONNULL_PTR arg) {
+       LDKCResult_PrivateRouteCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PrivateRouteCreationErrorZ), "LDKCResult_PrivateRouteCreationErrorZ");
+       *ret_conv = CResult_PrivateRouteCreationErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PrivateRouteCreationErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_PrivateRouteCreationErrorZ* arg_conv = (LDKCResult_PrivateRouteCreationErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_PrivateRouteCreationErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PrivateRouteCreationErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_PrivateRouteCreationErrorZ* orig_conv = (LDKCResult_PrivateRouteCreationErrorZ*)(orig & ~1);
        LDKCResult_PrivateRouteCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PrivateRouteCreationErrorZ), "LDKCResult_PrivateRouteCreationErrorZ");
@@ -14526,6 +15482,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1StringErrorZ_1err(
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1StringErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_StringErrorZ* o_conv = (LDKCResult_StringErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_StringErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1StringErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -14539,6 +15501,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelMonitorUpda
        LDKChannelMonitorUpdate o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ChannelMonitorUpdate_clone(&o_conv);
        LDKCResult_ChannelMonitorUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelMonitorUpdateDecodeErrorZ), "LDKCResult_ChannelMonitorUpdateDecodeErrorZ");
        *ret_conv = CResult_ChannelMonitorUpdateDecodeErrorZ_ok(o_conv);
@@ -14549,12 +15512,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelMonitorUpda
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ChannelMonitorUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelMonitorUpdateDecodeErrorZ), "LDKCResult_ChannelMonitorUpdateDecodeErrorZ");
        *ret_conv = CResult_ChannelMonitorUpdateDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelMonitorUpdateDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ChannelMonitorUpdateDecodeErrorZ* o_conv = (LDKCResult_ChannelMonitorUpdateDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ChannelMonitorUpdateDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelMonitorUpdateDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -14564,6 +15534,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelMonitorUpdateD
        CResult_ChannelMonitorUpdateDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ChannelMonitorUpdateDecodeErrorZ_clone_ptr(LDKCResult_ChannelMonitorUpdateDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ChannelMonitorUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelMonitorUpdateDecodeErrorZ), "LDKCResult_ChannelMonitorUpdateDecodeErrorZ");
+       *ret_conv = CResult_ChannelMonitorUpdateDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelMonitorUpdateDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_ChannelMonitorUpdateDecodeErrorZ* arg_conv = (LDKCResult_ChannelMonitorUpdateDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ChannelMonitorUpdateDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelMonitorUpdateDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_ChannelMonitorUpdateDecodeErrorZ* orig_conv = (LDKCResult_ChannelMonitorUpdateDecodeErrorZ*)(orig & ~1);
        LDKCResult_ChannelMonitorUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelMonitorUpdateDecodeErrorZ), "LDKCResult_ChannelMonitorUpdateDecodeErrorZ");
@@ -14571,10 +15552,112 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelMonitorUpda
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1MonitorEventZ_1some(JNIEnv *env, jclass clz, int64_t o) {
+       void* o_ptr = (void*)(((uint64_t)o) & ~1);
+       CHECK_ACCESS(o_ptr);
+       LDKMonitorEvent o_conv = *(LDKMonitorEvent*)(o_ptr);
+       o_conv = MonitorEvent_clone((LDKMonitorEvent*)(((uint64_t)o) & ~1));
+       LDKCOption_MonitorEventZ *ret_copy = MALLOC(sizeof(LDKCOption_MonitorEventZ), "LDKCOption_MonitorEventZ");
+       *ret_copy = COption_MonitorEventZ_some(o_conv);
+       uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1MonitorEventZ_1none(JNIEnv *env, jclass clz) {
+       LDKCOption_MonitorEventZ *ret_copy = MALLOC(sizeof(LDKCOption_MonitorEventZ), "LDKCOption_MonitorEventZ");
+       *ret_copy = COption_MonitorEventZ_none();
+       uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1MonitorEventZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if ((_res & 1) != 0) return;
+       void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
+       CHECK_ACCESS(_res_ptr);
+       LDKCOption_MonitorEventZ _res_conv = *(LDKCOption_MonitorEventZ*)(_res_ptr);
+       FREE((void*)_res);
+       COption_MonitorEventZ_free(_res_conv);
+}
+
+static inline uint64_t COption_MonitorEventZ_clone_ptr(LDKCOption_MonitorEventZ *NONNULL_PTR arg) {
+       LDKCOption_MonitorEventZ *ret_copy = MALLOC(sizeof(LDKCOption_MonitorEventZ), "LDKCOption_MonitorEventZ");
+       *ret_copy = COption_MonitorEventZ_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1MonitorEventZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCOption_MonitorEventZ* arg_conv = (LDKCOption_MonitorEventZ*)arg;
+       int64_t ret_val = COption_MonitorEventZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1MonitorEventZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCOption_MonitorEventZ* orig_conv = (LDKCOption_MonitorEventZ*)orig;
+       LDKCOption_MonitorEventZ *ret_copy = MALLOC(sizeof(LDKCOption_MonitorEventZ), "LDKCOption_MonitorEventZ");
+       *ret_copy = COption_MonitorEventZ_clone(orig_conv);
+       uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1MonitorEventZDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       void* o_ptr = (void*)(((uint64_t)o) & ~1);
+       CHECK_ACCESS(o_ptr);
+       LDKCOption_MonitorEventZ o_conv = *(LDKCOption_MonitorEventZ*)(o_ptr);
+       o_conv = COption_MonitorEventZ_clone((LDKCOption_MonitorEventZ*)(((uint64_t)o) & ~1));
+       LDKCResult_COption_MonitorEventZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_MonitorEventZDecodeErrorZ), "LDKCResult_COption_MonitorEventZDecodeErrorZ");
+       *ret_conv = CResult_COption_MonitorEventZDecodeErrorZ_ok(o_conv);
+       return (uint64_t)ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1MonitorEventZDecodeErrorZ_1err(JNIEnv *env, jclass clz, int64_t e) {
+       LDKDecodeError e_conv;
+       e_conv.inner = (void*)(e & (~1));
+       e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
+       e_conv = DecodeError_clone(&e_conv);
+       LDKCResult_COption_MonitorEventZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_MonitorEventZDecodeErrorZ), "LDKCResult_COption_MonitorEventZDecodeErrorZ");
+       *ret_conv = CResult_COption_MonitorEventZDecodeErrorZ_err(e_conv);
+       return (uint64_t)ret_conv;
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1MonitorEventZDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_COption_MonitorEventZDecodeErrorZ* o_conv = (LDKCResult_COption_MonitorEventZDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_COption_MonitorEventZDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1MonitorEventZDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if ((_res & 1) != 0) return;
+       void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_COption_MonitorEventZDecodeErrorZ _res_conv = *(LDKCResult_COption_MonitorEventZDecodeErrorZ*)(_res_ptr);
+       FREE((void*)_res);
+       CResult_COption_MonitorEventZDecodeErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_COption_MonitorEventZDecodeErrorZ_clone_ptr(LDKCResult_COption_MonitorEventZDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_COption_MonitorEventZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_MonitorEventZDecodeErrorZ), "LDKCResult_COption_MonitorEventZDecodeErrorZ");
+       *ret_conv = CResult_COption_MonitorEventZDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1MonitorEventZDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_COption_MonitorEventZDecodeErrorZ* arg_conv = (LDKCResult_COption_MonitorEventZDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_COption_MonitorEventZDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1MonitorEventZDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_COption_MonitorEventZDecodeErrorZ* orig_conv = (LDKCResult_COption_MonitorEventZDecodeErrorZ*)(orig & ~1);
+       LDKCResult_COption_MonitorEventZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_MonitorEventZDecodeErrorZ), "LDKCResult_COption_MonitorEventZDecodeErrorZ");
+       *ret_conv = CResult_COption_MonitorEventZDecodeErrorZ_clone(orig_conv);
+       return (uint64_t)ret_conv;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCUpdateDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
        LDKHTLCUpdate o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = HTLCUpdate_clone(&o_conv);
        LDKCResult_HTLCUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HTLCUpdateDecodeErrorZ), "LDKCResult_HTLCUpdateDecodeErrorZ");
        *ret_conv = CResult_HTLCUpdateDecodeErrorZ_ok(o_conv);
@@ -14585,12 +15668,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCUpdateDecodeEr
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_HTLCUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HTLCUpdateDecodeErrorZ), "LDKCResult_HTLCUpdateDecodeErrorZ");
        *ret_conv = CResult_HTLCUpdateDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCUpdateDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_HTLCUpdateDecodeErrorZ* o_conv = (LDKCResult_HTLCUpdateDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_HTLCUpdateDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCUpdateDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -14600,6 +15690,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCUpdateDecodeError
        CResult_HTLCUpdateDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_HTLCUpdateDecodeErrorZ_clone_ptr(LDKCResult_HTLCUpdateDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_HTLCUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HTLCUpdateDecodeErrorZ), "LDKCResult_HTLCUpdateDecodeErrorZ");
+       *ret_conv = CResult_HTLCUpdateDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCUpdateDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_HTLCUpdateDecodeErrorZ* arg_conv = (LDKCResult_HTLCUpdateDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_HTLCUpdateDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCUpdateDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_HTLCUpdateDecodeErrorZ* orig_conv = (LDKCResult_HTLCUpdateDecodeErrorZ*)(orig & ~1);
        LDKCResult_HTLCUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HTLCUpdateDecodeErrorZ), "LDKCResult_HTLCUpdateDecodeErrorZ");
@@ -14617,12 +15718,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneMonitorUpdateE
        LDKMonitorUpdateError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = MonitorUpdateError_clone(&e_conv);
        LDKCResult_NoneMonitorUpdateErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneMonitorUpdateErrorZ), "LDKCResult_NoneMonitorUpdateErrorZ");
        *ret_conv = CResult_NoneMonitorUpdateErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NoneMonitorUpdateErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_NoneMonitorUpdateErrorZ* o_conv = (LDKCResult_NoneMonitorUpdateErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_NoneMonitorUpdateErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneMonitorUpdateErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -14632,6 +15740,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneMonitorUpdateErro
        CResult_NoneMonitorUpdateErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_NoneMonitorUpdateErrorZ_clone_ptr(LDKCResult_NoneMonitorUpdateErrorZ *NONNULL_PTR arg) {
+       LDKCResult_NoneMonitorUpdateErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneMonitorUpdateErrorZ), "LDKCResult_NoneMonitorUpdateErrorZ");
+       *ret_conv = CResult_NoneMonitorUpdateErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneMonitorUpdateErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_NoneMonitorUpdateErrorZ* arg_conv = (LDKCResult_NoneMonitorUpdateErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_NoneMonitorUpdateErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneMonitorUpdateErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_NoneMonitorUpdateErrorZ* orig_conv = (LDKCResult_NoneMonitorUpdateErrorZ*)(orig & ~1);
        LDKCResult_NoneMonitorUpdateErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneMonitorUpdateErrorZ), "LDKCResult_NoneMonitorUpdateErrorZ");
@@ -14639,6 +15758,17 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneMonitorUpdateE
        return (uint64_t)ret_conv;
 }
 
+static inline uint64_t C2Tuple_OutPointScriptZ_clone_ptr(LDKC2Tuple_OutPointScriptZ *NONNULL_PTR arg) {
+       LDKC2Tuple_OutPointScriptZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OutPointScriptZ), "LDKC2Tuple_OutPointScriptZ");
+       *ret_conv = C2Tuple_OutPointScriptZ_clone(arg);
+       return ((uint64_t)ret_conv);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1OutPointScriptZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKC2Tuple_OutPointScriptZ* arg_conv = (LDKC2Tuple_OutPointScriptZ*)(arg & ~1);
+       int64_t ret_val = C2Tuple_OutPointScriptZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1OutPointScriptZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKC2Tuple_OutPointScriptZ* orig_conv = (LDKC2Tuple_OutPointScriptZ*)(orig & ~1);
        LDKC2Tuple_OutPointScriptZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OutPointScriptZ), "LDKC2Tuple_OutPointScriptZ");
@@ -14650,6 +15780,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1OutPointScriptZ_1n
        LDKOutPoint a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = (a & 1) || (a == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv = OutPoint_clone(&a_conv);
        LDKCVec_u8Z b_ref;
        b_ref.datalen = (*env)->GetArrayLength(env, b);
@@ -14669,6 +15800,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1OutPointScriptZ_1free
        C2Tuple_OutPointScriptZ_free(_res_conv);
 }
 
+static inline uint64_t C2Tuple_u32ScriptZ_clone_ptr(LDKC2Tuple_u32ScriptZ *NONNULL_PTR arg) {
+       LDKC2Tuple_u32ScriptZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_u32ScriptZ), "LDKC2Tuple_u32ScriptZ");
+       *ret_conv = C2Tuple_u32ScriptZ_clone(arg);
+       return ((uint64_t)ret_conv);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32ScriptZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKC2Tuple_u32ScriptZ* arg_conv = (LDKC2Tuple_u32ScriptZ*)(arg & ~1);
+       int64_t ret_val = C2Tuple_u32ScriptZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32ScriptZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKC2Tuple_u32ScriptZ* orig_conv = (LDKC2Tuple_u32ScriptZ*)(orig & ~1);
        LDKC2Tuple_u32ScriptZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_u32ScriptZ), "LDKC2Tuple_u32ScriptZ");
@@ -14715,6 +15857,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1u32ScriptZZ_1fr
        CVec_C2Tuple_u32ScriptZZ_free(_res_constr);
 }
 
+static inline uint64_t C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_clone_ptr(LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ *NONNULL_PTR arg) {
+       LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ), "LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ");
+       *ret_conv = C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_clone(arg);
+       return ((uint64_t)ret_conv);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2Tuple_1u32ScriptZZZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ* arg_conv = (LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ*)(arg & ~1);
+       int64_t ret_val = C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2Tuple_1u32ScriptZZZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ* orig_conv = (LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ*)(orig & ~1);
        LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ), "LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ");
@@ -14815,6 +15968,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1TransactionZ_1free(JNIEn
        CVec_TransactionZ_free(_res_constr);
 }
 
+static inline uint64_t C2Tuple_u32TxOutZ_clone_ptr(LDKC2Tuple_u32TxOutZ *NONNULL_PTR arg) {
+       LDKC2Tuple_u32TxOutZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_u32TxOutZ), "LDKC2Tuple_u32TxOutZ");
+       *ret_conv = C2Tuple_u32TxOutZ_clone(arg);
+       return ((uint64_t)ret_conv);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32TxOutZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKC2Tuple_u32TxOutZ* arg_conv = (LDKC2Tuple_u32TxOutZ*)(arg & ~1);
+       int64_t ret_val = C2Tuple_u32TxOutZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32TxOutZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKC2Tuple_u32TxOutZ* orig_conv = (LDKC2Tuple_u32TxOutZ*)(orig & ~1);
        LDKC2Tuple_u32TxOutZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_u32TxOutZ), "LDKC2Tuple_u32TxOutZ");
@@ -14861,6 +16025,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1u32TxOutZZ_1fre
        CVec_C2Tuple_u32TxOutZZ_free(_res_constr);
 }
 
+static inline uint64_t C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_clone_ptr(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ *NONNULL_PTR arg) {
+       LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ), "LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ");
+       *ret_conv = C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_clone(arg);
+       return ((uint64_t)ret_conv);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2Tuple_1u32TxOutZZZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ* arg_conv = (LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ*)(arg & ~1);
+       int64_t ret_val = C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2Tuple_1u32TxOutZZZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ* orig_conv = (LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ*)(orig & ~1);
        LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ), "LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ");
@@ -14956,12 +16131,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHash
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ), "LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ");
        *ret_conv = CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelMonitorZDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ* o_conv = (LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelMonitorZDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -14971,6 +16153,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashCha
        CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_clone_ptr(LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ), "LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ");
+       *ret_conv = CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelMonitorZDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ* arg_conv = (LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelMonitorZDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ* orig_conv = (LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ*)(orig & ~1);
        LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ), "LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ");
@@ -14988,12 +16181,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneLightningError
        LDKLightningError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = LightningError_clone(&e_conv);
        LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
        *ret_conv = CResult_NoneLightningErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NoneLightningErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_NoneLightningErrorZ* o_conv = (LDKCResult_NoneLightningErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_NoneLightningErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneLightningErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -15003,6 +16203,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneLightningErrorZ_1
        CResult_NoneLightningErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_NoneLightningErrorZ_clone_ptr(LDKCResult_NoneLightningErrorZ *NONNULL_PTR arg) {
+       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
+       *ret_conv = CResult_NoneLightningErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneLightningErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_NoneLightningErrorZ* arg_conv = (LDKCResult_NoneLightningErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_NoneLightningErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneLightningErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_NoneLightningErrorZ* orig_conv = (LDKCResult_NoneLightningErrorZ*)(orig & ~1);
        LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
@@ -15010,6 +16221,17 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneLightningError
        return (uint64_t)ret_conv;
 }
 
+static inline uint64_t C2Tuple_PublicKeyTypeZ_clone_ptr(LDKC2Tuple_PublicKeyTypeZ *NONNULL_PTR arg) {
+       LDKC2Tuple_PublicKeyTypeZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PublicKeyTypeZ), "LDKC2Tuple_PublicKeyTypeZ");
+       *ret_conv = C2Tuple_PublicKeyTypeZ_clone(arg);
+       return ((uint64_t)ret_conv);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyTypeZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKC2Tuple_PublicKeyTypeZ* arg_conv = (LDKC2Tuple_PublicKeyTypeZ*)(arg & ~1);
+       int64_t ret_val = C2Tuple_PublicKeyTypeZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyTypeZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKC2Tuple_PublicKeyTypeZ* orig_conv = (LDKC2Tuple_PublicKeyTypeZ*)(orig & ~1);
        LDKC2Tuple_PublicKeyTypeZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PublicKeyTypeZ), "LDKC2Tuple_PublicKeyTypeZ");
@@ -15072,12 +16294,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1boolLightningError
        LDKLightningError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = LightningError_clone(&e_conv);
        LDKCResult_boolLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_boolLightningErrorZ), "LDKCResult_boolLightningErrorZ");
        *ret_conv = CResult_boolLightningErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1boolLightningErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_boolLightningErrorZ* o_conv = (LDKCResult_boolLightningErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_boolLightningErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1boolLightningErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -15087,6 +16316,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1boolLightningErrorZ_1
        CResult_boolLightningErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_boolLightningErrorZ_clone_ptr(LDKCResult_boolLightningErrorZ *NONNULL_PTR arg) {
+       LDKCResult_boolLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_boolLightningErrorZ), "LDKCResult_boolLightningErrorZ");
+       *ret_conv = CResult_boolLightningErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1boolLightningErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_boolLightningErrorZ* arg_conv = (LDKCResult_boolLightningErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_boolLightningErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1boolLightningErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_boolLightningErrorZ* orig_conv = (LDKCResult_boolLightningErrorZ*)(orig & ~1);
        LDKCResult_boolLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_boolLightningErrorZ), "LDKCResult_boolLightningErrorZ");
@@ -15094,6 +16334,17 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1boolLightningError
        return (uint64_t)ret_conv;
 }
 
+static inline uint64_t C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_clone_ptr(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ *NONNULL_PTR arg) {
+       LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ* ret_conv = MALLOC(sizeof(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ), "LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ");
+       *ret_conv = C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_clone(arg);
+       return ((uint64_t)ret_conv);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C3Tuple_1ChannelAnnouncementChannelUpdateChannelUpdateZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ* arg_conv = (LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ*)(arg & ~1);
+       int64_t ret_val = C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C3Tuple_1ChannelAnnouncementChannelUpdateChannelUpdateZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ* orig_conv = (LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ*)(orig & ~1);
        LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ* ret_conv = MALLOC(sizeof(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ), "LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ");
@@ -15105,14 +16356,17 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C3Tuple_1ChannelAnnouncemen
        LDKChannelAnnouncement a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = (a & 1) || (a == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv = ChannelAnnouncement_clone(&a_conv);
        LDKChannelUpdate b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = (b & 1) || (b == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv = ChannelUpdate_clone(&b_conv);
        LDKChannelUpdate c_conv;
        c_conv.inner = (void*)(c & (~1));
        c_conv.is_owned = (c & 1) || (c == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(c_conv);
        c_conv = ChannelUpdate_clone(&c_conv);
        LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ* ret_conv = MALLOC(sizeof(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ), "LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ");
        *ret_conv = C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_new(a_conv, b_conv, c_conv);
@@ -15161,6 +16415,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1NodeAnnouncementZ_1free(
                LDKNodeAnnouncement _res_conv_18_conv;
                _res_conv_18_conv.inner = (void*)(_res_conv_18 & (~1));
                _res_conv_18_conv.is_owned = (_res_conv_18 & 1) || (_res_conv_18 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_18_conv);
                _res_constr.data[s] = _res_conv_18_conv;
        }
        (*env)->ReleaseLongArrayElements(env, _res, _res_vals, 0);
@@ -15198,12 +16453,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZPeerHandl
        LDKPeerHandleError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = PeerHandleError_clone(&e_conv);
        LDKCResult_CVec_u8ZPeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_u8ZPeerHandleErrorZ), "LDKCResult_CVec_u8ZPeerHandleErrorZ");
        *ret_conv = CResult_CVec_u8ZPeerHandleErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZPeerHandleErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_CVec_u8ZPeerHandleErrorZ* o_conv = (LDKCResult_CVec_u8ZPeerHandleErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_CVec_u8ZPeerHandleErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZPeerHandleErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -15213,6 +16475,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZPeerHandleEr
        CResult_CVec_u8ZPeerHandleErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_CVec_u8ZPeerHandleErrorZ_clone_ptr(LDKCResult_CVec_u8ZPeerHandleErrorZ *NONNULL_PTR arg) {
+       LDKCResult_CVec_u8ZPeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_u8ZPeerHandleErrorZ), "LDKCResult_CVec_u8ZPeerHandleErrorZ");
+       *ret_conv = CResult_CVec_u8ZPeerHandleErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZPeerHandleErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_CVec_u8ZPeerHandleErrorZ* arg_conv = (LDKCResult_CVec_u8ZPeerHandleErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_CVec_u8ZPeerHandleErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZPeerHandleErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_CVec_u8ZPeerHandleErrorZ* orig_conv = (LDKCResult_CVec_u8ZPeerHandleErrorZ*)(orig & ~1);
        LDKCResult_CVec_u8ZPeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_u8ZPeerHandleErrorZ), "LDKCResult_CVec_u8ZPeerHandleErrorZ");
@@ -15230,12 +16503,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NonePeerHandleErro
        LDKPeerHandleError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = PeerHandleError_clone(&e_conv);
        LDKCResult_NonePeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NonePeerHandleErrorZ), "LDKCResult_NonePeerHandleErrorZ");
        *ret_conv = CResult_NonePeerHandleErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NonePeerHandleErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_NonePeerHandleErrorZ* o_conv = (LDKCResult_NonePeerHandleErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_NonePeerHandleErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NonePeerHandleErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -15245,6 +16525,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NonePeerHandleErrorZ_
        CResult_NonePeerHandleErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_NonePeerHandleErrorZ_clone_ptr(LDKCResult_NonePeerHandleErrorZ *NONNULL_PTR arg) {
+       LDKCResult_NonePeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NonePeerHandleErrorZ), "LDKCResult_NonePeerHandleErrorZ");
+       *ret_conv = CResult_NonePeerHandleErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NonePeerHandleErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_NonePeerHandleErrorZ* arg_conv = (LDKCResult_NonePeerHandleErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_NonePeerHandleErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NonePeerHandleErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_NonePeerHandleErrorZ* orig_conv = (LDKCResult_NonePeerHandleErrorZ*)(orig & ~1);
        LDKCResult_NonePeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NonePeerHandleErrorZ), "LDKCResult_NonePeerHandleErrorZ");
@@ -15262,12 +16553,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1boolPeerHandleErro
        LDKPeerHandleError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = PeerHandleError_clone(&e_conv);
        LDKCResult_boolPeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_boolPeerHandleErrorZ), "LDKCResult_boolPeerHandleErrorZ");
        *ret_conv = CResult_boolPeerHandleErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1boolPeerHandleErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_boolPeerHandleErrorZ* o_conv = (LDKCResult_boolPeerHandleErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_boolPeerHandleErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1boolPeerHandleErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -15277,6 +16575,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1boolPeerHandleErrorZ_
        CResult_boolPeerHandleErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_boolPeerHandleErrorZ_clone_ptr(LDKCResult_boolPeerHandleErrorZ *NONNULL_PTR arg) {
+       LDKCResult_boolPeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_boolPeerHandleErrorZ), "LDKCResult_boolPeerHandleErrorZ");
+       *ret_conv = CResult_boolPeerHandleErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1boolPeerHandleErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_boolPeerHandleErrorZ* arg_conv = (LDKCResult_boolPeerHandleErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_boolPeerHandleErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1boolPeerHandleErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_boolPeerHandleErrorZ* orig_conv = (LDKCResult_boolPeerHandleErrorZ*)(orig & ~1);
        LDKCResult_boolPeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_boolPeerHandleErrorZ), "LDKCResult_boolPeerHandleErrorZ");
@@ -15288,6 +16597,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NodeIdDecodeErrorZ
        LDKNodeId o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = NodeId_clone(&o_conv);
        LDKCResult_NodeIdDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeIdDecodeErrorZ), "LDKCResult_NodeIdDecodeErrorZ");
        *ret_conv = CResult_NodeIdDecodeErrorZ_ok(o_conv);
@@ -15298,12 +16608,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NodeIdDecodeErrorZ
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_NodeIdDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeIdDecodeErrorZ), "LDKCResult_NodeIdDecodeErrorZ");
        *ret_conv = CResult_NodeIdDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NodeIdDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_NodeIdDecodeErrorZ* o_conv = (LDKCResult_NodeIdDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_NodeIdDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NodeIdDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -15313,6 +16630,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NodeIdDecodeErrorZ_1f
        CResult_NodeIdDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_NodeIdDecodeErrorZ_clone_ptr(LDKCResult_NodeIdDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_NodeIdDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeIdDecodeErrorZ), "LDKCResult_NodeIdDecodeErrorZ");
+       *ret_conv = CResult_NodeIdDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NodeIdDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_NodeIdDecodeErrorZ* arg_conv = (LDKCResult_NodeIdDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_NodeIdDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NodeIdDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_NodeIdDecodeErrorZ* orig_conv = (LDKCResult_NodeIdDecodeErrorZ*)(orig & ~1);
        LDKCResult_NodeIdDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeIdDecodeErrorZ), "LDKCResult_NodeIdDecodeErrorZ");
@@ -15320,6 +16648,60 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NodeIdDecodeErrorZ
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1NetworkUpdateZDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       void* o_ptr = (void*)(((uint64_t)o) & ~1);
+       CHECK_ACCESS(o_ptr);
+       LDKCOption_NetworkUpdateZ o_conv = *(LDKCOption_NetworkUpdateZ*)(o_ptr);
+       o_conv = COption_NetworkUpdateZ_clone((LDKCOption_NetworkUpdateZ*)(((uint64_t)o) & ~1));
+       LDKCResult_COption_NetworkUpdateZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_NetworkUpdateZDecodeErrorZ), "LDKCResult_COption_NetworkUpdateZDecodeErrorZ");
+       *ret_conv = CResult_COption_NetworkUpdateZDecodeErrorZ_ok(o_conv);
+       return (uint64_t)ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1NetworkUpdateZDecodeErrorZ_1err(JNIEnv *env, jclass clz, int64_t e) {
+       LDKDecodeError e_conv;
+       e_conv.inner = (void*)(e & (~1));
+       e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
+       e_conv = DecodeError_clone(&e_conv);
+       LDKCResult_COption_NetworkUpdateZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_NetworkUpdateZDecodeErrorZ), "LDKCResult_COption_NetworkUpdateZDecodeErrorZ");
+       *ret_conv = CResult_COption_NetworkUpdateZDecodeErrorZ_err(e_conv);
+       return (uint64_t)ret_conv;
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1NetworkUpdateZDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_COption_NetworkUpdateZDecodeErrorZ* o_conv = (LDKCResult_COption_NetworkUpdateZDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_COption_NetworkUpdateZDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1NetworkUpdateZDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if ((_res & 1) != 0) return;
+       void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_COption_NetworkUpdateZDecodeErrorZ _res_conv = *(LDKCResult_COption_NetworkUpdateZDecodeErrorZ*)(_res_ptr);
+       FREE((void*)_res);
+       CResult_COption_NetworkUpdateZDecodeErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_COption_NetworkUpdateZDecodeErrorZ_clone_ptr(LDKCResult_COption_NetworkUpdateZDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_COption_NetworkUpdateZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_NetworkUpdateZDecodeErrorZ), "LDKCResult_COption_NetworkUpdateZDecodeErrorZ");
+       *ret_conv = CResult_COption_NetworkUpdateZDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1NetworkUpdateZDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_COption_NetworkUpdateZDecodeErrorZ* arg_conv = (LDKCResult_COption_NetworkUpdateZDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_COption_NetworkUpdateZDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1NetworkUpdateZDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_COption_NetworkUpdateZDecodeErrorZ* orig_conv = (LDKCResult_COption_NetworkUpdateZDecodeErrorZ*)(orig & ~1);
+       LDKCResult_COption_NetworkUpdateZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_NetworkUpdateZDecodeErrorZ), "LDKCResult_COption_NetworkUpdateZDecodeErrorZ");
+       *ret_conv = CResult_COption_NetworkUpdateZDecodeErrorZ_clone(orig_conv);
+       return (uint64_t)ret_conv;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1AccessZ_1some(JNIEnv *env, jclass clz, int64_t o) {
        void* o_ptr = (void*)(((uint64_t)o) & ~1);
        CHECK_ACCESS(o_ptr);
@@ -15354,6 +16736,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1DirectionalChannel
        LDKDirectionalChannelInfo o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = DirectionalChannelInfo_clone(&o_conv);
        LDKCResult_DirectionalChannelInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_DirectionalChannelInfoDecodeErrorZ), "LDKCResult_DirectionalChannelInfoDecodeErrorZ");
        *ret_conv = CResult_DirectionalChannelInfoDecodeErrorZ_ok(o_conv);
@@ -15364,12 +16747,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1DirectionalChannel
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_DirectionalChannelInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_DirectionalChannelInfoDecodeErrorZ), "LDKCResult_DirectionalChannelInfoDecodeErrorZ");
        *ret_conv = CResult_DirectionalChannelInfoDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1DirectionalChannelInfoDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_DirectionalChannelInfoDecodeErrorZ* o_conv = (LDKCResult_DirectionalChannelInfoDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_DirectionalChannelInfoDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1DirectionalChannelInfoDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -15379,6 +16769,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1DirectionalChannelInf
        CResult_DirectionalChannelInfoDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_DirectionalChannelInfoDecodeErrorZ_clone_ptr(LDKCResult_DirectionalChannelInfoDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_DirectionalChannelInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_DirectionalChannelInfoDecodeErrorZ), "LDKCResult_DirectionalChannelInfoDecodeErrorZ");
+       *ret_conv = CResult_DirectionalChannelInfoDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1DirectionalChannelInfoDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_DirectionalChannelInfoDecodeErrorZ* arg_conv = (LDKCResult_DirectionalChannelInfoDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_DirectionalChannelInfoDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1DirectionalChannelInfoDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_DirectionalChannelInfoDecodeErrorZ* orig_conv = (LDKCResult_DirectionalChannelInfoDecodeErrorZ*)(orig & ~1);
        LDKCResult_DirectionalChannelInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_DirectionalChannelInfoDecodeErrorZ), "LDKCResult_DirectionalChannelInfoDecodeErrorZ");
@@ -15390,6 +16791,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelInfoDecodeE
        LDKChannelInfo o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ChannelInfo_clone(&o_conv);
        LDKCResult_ChannelInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelInfoDecodeErrorZ), "LDKCResult_ChannelInfoDecodeErrorZ");
        *ret_conv = CResult_ChannelInfoDecodeErrorZ_ok(o_conv);
@@ -15400,12 +16802,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelInfoDecodeE
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ChannelInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelInfoDecodeErrorZ), "LDKCResult_ChannelInfoDecodeErrorZ");
        *ret_conv = CResult_ChannelInfoDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelInfoDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ChannelInfoDecodeErrorZ* o_conv = (LDKCResult_ChannelInfoDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ChannelInfoDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelInfoDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -15415,6 +16824,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelInfoDecodeErro
        CResult_ChannelInfoDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ChannelInfoDecodeErrorZ_clone_ptr(LDKCResult_ChannelInfoDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ChannelInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelInfoDecodeErrorZ), "LDKCResult_ChannelInfoDecodeErrorZ");
+       *ret_conv = CResult_ChannelInfoDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelInfoDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_ChannelInfoDecodeErrorZ* arg_conv = (LDKCResult_ChannelInfoDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ChannelInfoDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelInfoDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_ChannelInfoDecodeErrorZ* orig_conv = (LDKCResult_ChannelInfoDecodeErrorZ*)(orig & ~1);
        LDKCResult_ChannelInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelInfoDecodeErrorZ), "LDKCResult_ChannelInfoDecodeErrorZ");
@@ -15426,6 +16846,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RoutingFeesDecodeE
        LDKRoutingFees o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = RoutingFees_clone(&o_conv);
        LDKCResult_RoutingFeesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RoutingFeesDecodeErrorZ), "LDKCResult_RoutingFeesDecodeErrorZ");
        *ret_conv = CResult_RoutingFeesDecodeErrorZ_ok(o_conv);
@@ -15436,12 +16857,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RoutingFeesDecodeE
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_RoutingFeesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RoutingFeesDecodeErrorZ), "LDKCResult_RoutingFeesDecodeErrorZ");
        *ret_conv = CResult_RoutingFeesDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1RoutingFeesDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_RoutingFeesDecodeErrorZ* o_conv = (LDKCResult_RoutingFeesDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_RoutingFeesDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RoutingFeesDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -15451,6 +16879,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RoutingFeesDecodeErro
        CResult_RoutingFeesDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_RoutingFeesDecodeErrorZ_clone_ptr(LDKCResult_RoutingFeesDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_RoutingFeesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RoutingFeesDecodeErrorZ), "LDKCResult_RoutingFeesDecodeErrorZ");
+       *ret_conv = CResult_RoutingFeesDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RoutingFeesDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_RoutingFeesDecodeErrorZ* arg_conv = (LDKCResult_RoutingFeesDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_RoutingFeesDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RoutingFeesDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_RoutingFeesDecodeErrorZ* orig_conv = (LDKCResult_RoutingFeesDecodeErrorZ*)(orig & ~1);
        LDKCResult_RoutingFeesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RoutingFeesDecodeErrorZ), "LDKCResult_RoutingFeesDecodeErrorZ");
@@ -15462,6 +16901,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NodeAnnouncementIn
        LDKNodeAnnouncementInfo o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = NodeAnnouncementInfo_clone(&o_conv);
        LDKCResult_NodeAnnouncementInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeAnnouncementInfoDecodeErrorZ), "LDKCResult_NodeAnnouncementInfoDecodeErrorZ");
        *ret_conv = CResult_NodeAnnouncementInfoDecodeErrorZ_ok(o_conv);
@@ -15472,12 +16912,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NodeAnnouncementIn
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_NodeAnnouncementInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeAnnouncementInfoDecodeErrorZ), "LDKCResult_NodeAnnouncementInfoDecodeErrorZ");
        *ret_conv = CResult_NodeAnnouncementInfoDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NodeAnnouncementInfoDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_NodeAnnouncementInfoDecodeErrorZ* o_conv = (LDKCResult_NodeAnnouncementInfoDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_NodeAnnouncementInfoDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NodeAnnouncementInfoDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -15487,6 +16934,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NodeAnnouncementInfoD
        CResult_NodeAnnouncementInfoDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_NodeAnnouncementInfoDecodeErrorZ_clone_ptr(LDKCResult_NodeAnnouncementInfoDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_NodeAnnouncementInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeAnnouncementInfoDecodeErrorZ), "LDKCResult_NodeAnnouncementInfoDecodeErrorZ");
+       *ret_conv = CResult_NodeAnnouncementInfoDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NodeAnnouncementInfoDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_NodeAnnouncementInfoDecodeErrorZ* arg_conv = (LDKCResult_NodeAnnouncementInfoDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_NodeAnnouncementInfoDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NodeAnnouncementInfoDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_NodeAnnouncementInfoDecodeErrorZ* orig_conv = (LDKCResult_NodeAnnouncementInfoDecodeErrorZ*)(orig & ~1);
        LDKCResult_NodeAnnouncementInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeAnnouncementInfoDecodeErrorZ), "LDKCResult_NodeAnnouncementInfoDecodeErrorZ");
@@ -15514,6 +16972,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NodeInfoDecodeErro
        LDKNodeInfo o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = NodeInfo_clone(&o_conv);
        LDKCResult_NodeInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeInfoDecodeErrorZ), "LDKCResult_NodeInfoDecodeErrorZ");
        *ret_conv = CResult_NodeInfoDecodeErrorZ_ok(o_conv);
@@ -15524,12 +16983,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NodeInfoDecodeErro
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_NodeInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeInfoDecodeErrorZ), "LDKCResult_NodeInfoDecodeErrorZ");
        *ret_conv = CResult_NodeInfoDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NodeInfoDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_NodeInfoDecodeErrorZ* o_conv = (LDKCResult_NodeInfoDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_NodeInfoDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NodeInfoDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -15539,6 +17005,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NodeInfoDecodeErrorZ_
        CResult_NodeInfoDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_NodeInfoDecodeErrorZ_clone_ptr(LDKCResult_NodeInfoDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_NodeInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeInfoDecodeErrorZ), "LDKCResult_NodeInfoDecodeErrorZ");
+       *ret_conv = CResult_NodeInfoDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NodeInfoDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_NodeInfoDecodeErrorZ* arg_conv = (LDKCResult_NodeInfoDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_NodeInfoDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NodeInfoDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_NodeInfoDecodeErrorZ* orig_conv = (LDKCResult_NodeInfoDecodeErrorZ*)(orig & ~1);
        LDKCResult_NodeInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeInfoDecodeErrorZ), "LDKCResult_NodeInfoDecodeErrorZ");
@@ -15550,6 +17027,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NetworkGraphDecode
        LDKNetworkGraph o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = NetworkGraph_clone(&o_conv);
        LDKCResult_NetworkGraphDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NetworkGraphDecodeErrorZ), "LDKCResult_NetworkGraphDecodeErrorZ");
        *ret_conv = CResult_NetworkGraphDecodeErrorZ_ok(o_conv);
@@ -15560,12 +17038,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NetworkGraphDecode
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_NetworkGraphDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NetworkGraphDecodeErrorZ), "LDKCResult_NetworkGraphDecodeErrorZ");
        *ret_conv = CResult_NetworkGraphDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NetworkGraphDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_NetworkGraphDecodeErrorZ* o_conv = (LDKCResult_NetworkGraphDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_NetworkGraphDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NetworkGraphDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -15575,6 +17060,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NetworkGraphDecodeErr
        CResult_NetworkGraphDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_NetworkGraphDecodeErrorZ_clone_ptr(LDKCResult_NetworkGraphDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_NetworkGraphDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NetworkGraphDecodeErrorZ), "LDKCResult_NetworkGraphDecodeErrorZ");
+       *ret_conv = CResult_NetworkGraphDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NetworkGraphDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_NetworkGraphDecodeErrorZ* arg_conv = (LDKCResult_NetworkGraphDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_NetworkGraphDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NetworkGraphDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_NetworkGraphDecodeErrorZ* orig_conv = (LDKCResult_NetworkGraphDecodeErrorZ*)(orig & ~1);
        LDKCResult_NetworkGraphDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NetworkGraphDecodeErrorZ), "LDKCResult_NetworkGraphDecodeErrorZ");
@@ -15621,6 +17117,18 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1NetAddressZZ_1f
        COption_CVec_NetAddressZZ_free(_res_conv);
 }
 
+static inline uint64_t COption_CVec_NetAddressZZ_clone_ptr(LDKCOption_CVec_NetAddressZZ *NONNULL_PTR arg) {
+       LDKCOption_CVec_NetAddressZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_NetAddressZZ), "LDKCOption_CVec_NetAddressZZ");
+       *ret_copy = COption_CVec_NetAddressZZ_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1NetAddressZZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCOption_CVec_NetAddressZZ* arg_conv = (LDKCOption_CVec_NetAddressZZ*)arg;
+       int64_t ret_val = COption_CVec_NetAddressZZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1NetAddressZZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCOption_CVec_NetAddressZZ* orig_conv = (LDKCOption_CVec_NetAddressZZ*)orig;
        LDKCOption_CVec_NetAddressZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_NetAddressZZ), "LDKCOption_CVec_NetAddressZZ");
@@ -15643,12 +17151,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NetAddressDecodeEr
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_NetAddressDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NetAddressDecodeErrorZ), "LDKCResult_NetAddressDecodeErrorZ");
        *ret_conv = CResult_NetAddressDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NetAddressDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_NetAddressDecodeErrorZ* o_conv = (LDKCResult_NetAddressDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_NetAddressDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NetAddressDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -15658,6 +17173,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NetAddressDecodeError
        CResult_NetAddressDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_NetAddressDecodeErrorZ_clone_ptr(LDKCResult_NetAddressDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_NetAddressDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NetAddressDecodeErrorZ), "LDKCResult_NetAddressDecodeErrorZ");
+       *ret_conv = CResult_NetAddressDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NetAddressDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_NetAddressDecodeErrorZ* arg_conv = (LDKCResult_NetAddressDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_NetAddressDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NetAddressDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_NetAddressDecodeErrorZ* orig_conv = (LDKCResult_NetAddressDecodeErrorZ*)(orig & ~1);
        LDKCResult_NetAddressDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NetAddressDecodeErrorZ), "LDKCResult_NetAddressDecodeErrorZ");
@@ -15678,6 +17204,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1UpdateAddHTLCZ_1free(JNI
                LDKUpdateAddHTLC _res_conv_15_conv;
                _res_conv_15_conv.inner = (void*)(_res_conv_15 & (~1));
                _res_conv_15_conv.is_owned = (_res_conv_15 & 1) || (_res_conv_15 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_15_conv);
                _res_constr.data[p] = _res_conv_15_conv;
        }
        (*env)->ReleaseLongArrayElements(env, _res, _res_vals, 0);
@@ -15697,6 +17224,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1UpdateFulfillHTLCZ_1free
                LDKUpdateFulfillHTLC _res_conv_19_conv;
                _res_conv_19_conv.inner = (void*)(_res_conv_19 & (~1));
                _res_conv_19_conv.is_owned = (_res_conv_19 & 1) || (_res_conv_19 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_19_conv);
                _res_constr.data[t] = _res_conv_19_conv;
        }
        (*env)->ReleaseLongArrayElements(env, _res, _res_vals, 0);
@@ -15716,6 +17244,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1UpdateFailHTLCZ_1free(JN
                LDKUpdateFailHTLC _res_conv_16_conv;
                _res_conv_16_conv.inner = (void*)(_res_conv_16 & (~1));
                _res_conv_16_conv.is_owned = (_res_conv_16 & 1) || (_res_conv_16 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_16_conv);
                _res_constr.data[q] = _res_conv_16_conv;
        }
        (*env)->ReleaseLongArrayElements(env, _res, _res_vals, 0);
@@ -15735,6 +17264,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1UpdateFailMalformedHTLCZ
                LDKUpdateFailMalformedHTLC _res_conv_25_conv;
                _res_conv_25_conv.inner = (void*)(_res_conv_25 & (~1));
                _res_conv_25_conv.is_owned = (_res_conv_25 & 1) || (_res_conv_25 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_25_conv);
                _res_constr.data[z] = _res_conv_25_conv;
        }
        (*env)->ReleaseLongArrayElements(env, _res, _res_vals, 0);
@@ -15745,6 +17275,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1AcceptChannelDecod
        LDKAcceptChannel o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = AcceptChannel_clone(&o_conv);
        LDKCResult_AcceptChannelDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_AcceptChannelDecodeErrorZ), "LDKCResult_AcceptChannelDecodeErrorZ");
        *ret_conv = CResult_AcceptChannelDecodeErrorZ_ok(o_conv);
@@ -15755,12 +17286,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1AcceptChannelDecod
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_AcceptChannelDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_AcceptChannelDecodeErrorZ), "LDKCResult_AcceptChannelDecodeErrorZ");
        *ret_conv = CResult_AcceptChannelDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1AcceptChannelDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_AcceptChannelDecodeErrorZ* o_conv = (LDKCResult_AcceptChannelDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_AcceptChannelDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1AcceptChannelDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -15770,6 +17308,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1AcceptChannelDecodeEr
        CResult_AcceptChannelDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_AcceptChannelDecodeErrorZ_clone_ptr(LDKCResult_AcceptChannelDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_AcceptChannelDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_AcceptChannelDecodeErrorZ), "LDKCResult_AcceptChannelDecodeErrorZ");
+       *ret_conv = CResult_AcceptChannelDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1AcceptChannelDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_AcceptChannelDecodeErrorZ* arg_conv = (LDKCResult_AcceptChannelDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_AcceptChannelDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1AcceptChannelDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_AcceptChannelDecodeErrorZ* orig_conv = (LDKCResult_AcceptChannelDecodeErrorZ*)(orig & ~1);
        LDKCResult_AcceptChannelDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_AcceptChannelDecodeErrorZ), "LDKCResult_AcceptChannelDecodeErrorZ");
@@ -15781,6 +17330,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1AnnouncementSignat
        LDKAnnouncementSignatures o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = AnnouncementSignatures_clone(&o_conv);
        LDKCResult_AnnouncementSignaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_AnnouncementSignaturesDecodeErrorZ), "LDKCResult_AnnouncementSignaturesDecodeErrorZ");
        *ret_conv = CResult_AnnouncementSignaturesDecodeErrorZ_ok(o_conv);
@@ -15791,12 +17341,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1AnnouncementSignat
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_AnnouncementSignaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_AnnouncementSignaturesDecodeErrorZ), "LDKCResult_AnnouncementSignaturesDecodeErrorZ");
        *ret_conv = CResult_AnnouncementSignaturesDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1AnnouncementSignaturesDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_AnnouncementSignaturesDecodeErrorZ* o_conv = (LDKCResult_AnnouncementSignaturesDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_AnnouncementSignaturesDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1AnnouncementSignaturesDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -15806,6 +17363,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1AnnouncementSignature
        CResult_AnnouncementSignaturesDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_AnnouncementSignaturesDecodeErrorZ_clone_ptr(LDKCResult_AnnouncementSignaturesDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_AnnouncementSignaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_AnnouncementSignaturesDecodeErrorZ), "LDKCResult_AnnouncementSignaturesDecodeErrorZ");
+       *ret_conv = CResult_AnnouncementSignaturesDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1AnnouncementSignaturesDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_AnnouncementSignaturesDecodeErrorZ* arg_conv = (LDKCResult_AnnouncementSignaturesDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_AnnouncementSignaturesDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1AnnouncementSignaturesDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_AnnouncementSignaturesDecodeErrorZ* orig_conv = (LDKCResult_AnnouncementSignaturesDecodeErrorZ*)(orig & ~1);
        LDKCResult_AnnouncementSignaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_AnnouncementSignaturesDecodeErrorZ), "LDKCResult_AnnouncementSignaturesDecodeErrorZ");
@@ -15817,6 +17385,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelReestablish
        LDKChannelReestablish o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ChannelReestablish_clone(&o_conv);
        LDKCResult_ChannelReestablishDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelReestablishDecodeErrorZ), "LDKCResult_ChannelReestablishDecodeErrorZ");
        *ret_conv = CResult_ChannelReestablishDecodeErrorZ_ok(o_conv);
@@ -15827,12 +17396,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelReestablish
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ChannelReestablishDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelReestablishDecodeErrorZ), "LDKCResult_ChannelReestablishDecodeErrorZ");
        *ret_conv = CResult_ChannelReestablishDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelReestablishDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ChannelReestablishDecodeErrorZ* o_conv = (LDKCResult_ChannelReestablishDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ChannelReestablishDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelReestablishDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -15842,6 +17418,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelReestablishDec
        CResult_ChannelReestablishDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ChannelReestablishDecodeErrorZ_clone_ptr(LDKCResult_ChannelReestablishDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ChannelReestablishDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelReestablishDecodeErrorZ), "LDKCResult_ChannelReestablishDecodeErrorZ");
+       *ret_conv = CResult_ChannelReestablishDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelReestablishDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_ChannelReestablishDecodeErrorZ* arg_conv = (LDKCResult_ChannelReestablishDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ChannelReestablishDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelReestablishDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_ChannelReestablishDecodeErrorZ* orig_conv = (LDKCResult_ChannelReestablishDecodeErrorZ*)(orig & ~1);
        LDKCResult_ChannelReestablishDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelReestablishDecodeErrorZ), "LDKCResult_ChannelReestablishDecodeErrorZ");
@@ -15853,6 +17440,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ClosingSignedDecod
        LDKClosingSigned o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ClosingSigned_clone(&o_conv);
        LDKCResult_ClosingSignedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ClosingSignedDecodeErrorZ), "LDKCResult_ClosingSignedDecodeErrorZ");
        *ret_conv = CResult_ClosingSignedDecodeErrorZ_ok(o_conv);
@@ -15863,12 +17451,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ClosingSignedDecod
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ClosingSignedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ClosingSignedDecodeErrorZ), "LDKCResult_ClosingSignedDecodeErrorZ");
        *ret_conv = CResult_ClosingSignedDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ClosingSignedDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ClosingSignedDecodeErrorZ* o_conv = (LDKCResult_ClosingSignedDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ClosingSignedDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ClosingSignedDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -15878,6 +17473,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ClosingSignedDecodeEr
        CResult_ClosingSignedDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ClosingSignedDecodeErrorZ_clone_ptr(LDKCResult_ClosingSignedDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ClosingSignedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ClosingSignedDecodeErrorZ), "LDKCResult_ClosingSignedDecodeErrorZ");
+       *ret_conv = CResult_ClosingSignedDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ClosingSignedDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_ClosingSignedDecodeErrorZ* arg_conv = (LDKCResult_ClosingSignedDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ClosingSignedDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ClosingSignedDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_ClosingSignedDecodeErrorZ* orig_conv = (LDKCResult_ClosingSignedDecodeErrorZ*)(orig & ~1);
        LDKCResult_ClosingSignedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ClosingSignedDecodeErrorZ), "LDKCResult_ClosingSignedDecodeErrorZ");
@@ -15889,6 +17495,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ClosingSignedFeeRa
        LDKClosingSignedFeeRange o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ClosingSignedFeeRange_clone(&o_conv);
        LDKCResult_ClosingSignedFeeRangeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ClosingSignedFeeRangeDecodeErrorZ), "LDKCResult_ClosingSignedFeeRangeDecodeErrorZ");
        *ret_conv = CResult_ClosingSignedFeeRangeDecodeErrorZ_ok(o_conv);
@@ -15899,12 +17506,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ClosingSignedFeeRa
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ClosingSignedFeeRangeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ClosingSignedFeeRangeDecodeErrorZ), "LDKCResult_ClosingSignedFeeRangeDecodeErrorZ");
        *ret_conv = CResult_ClosingSignedFeeRangeDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ClosingSignedFeeRangeDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ClosingSignedFeeRangeDecodeErrorZ* o_conv = (LDKCResult_ClosingSignedFeeRangeDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ClosingSignedFeeRangeDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ClosingSignedFeeRangeDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -15914,6 +17528,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ClosingSignedFeeRange
        CResult_ClosingSignedFeeRangeDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ClosingSignedFeeRangeDecodeErrorZ_clone_ptr(LDKCResult_ClosingSignedFeeRangeDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ClosingSignedFeeRangeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ClosingSignedFeeRangeDecodeErrorZ), "LDKCResult_ClosingSignedFeeRangeDecodeErrorZ");
+       *ret_conv = CResult_ClosingSignedFeeRangeDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ClosingSignedFeeRangeDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_ClosingSignedFeeRangeDecodeErrorZ* arg_conv = (LDKCResult_ClosingSignedFeeRangeDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ClosingSignedFeeRangeDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ClosingSignedFeeRangeDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_ClosingSignedFeeRangeDecodeErrorZ* orig_conv = (LDKCResult_ClosingSignedFeeRangeDecodeErrorZ*)(orig & ~1);
        LDKCResult_ClosingSignedFeeRangeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ClosingSignedFeeRangeDecodeErrorZ), "LDKCResult_ClosingSignedFeeRangeDecodeErrorZ");
@@ -15925,6 +17550,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CommitmentSignedDe
        LDKCommitmentSigned o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = CommitmentSigned_clone(&o_conv);
        LDKCResult_CommitmentSignedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CommitmentSignedDecodeErrorZ), "LDKCResult_CommitmentSignedDecodeErrorZ");
        *ret_conv = CResult_CommitmentSignedDecodeErrorZ_ok(o_conv);
@@ -15935,12 +17561,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CommitmentSignedDe
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_CommitmentSignedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CommitmentSignedDecodeErrorZ), "LDKCResult_CommitmentSignedDecodeErrorZ");
        *ret_conv = CResult_CommitmentSignedDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1CommitmentSignedDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_CommitmentSignedDecodeErrorZ* o_conv = (LDKCResult_CommitmentSignedDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_CommitmentSignedDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CommitmentSignedDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -15950,6 +17583,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CommitmentSignedDecod
        CResult_CommitmentSignedDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_CommitmentSignedDecodeErrorZ_clone_ptr(LDKCResult_CommitmentSignedDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_CommitmentSignedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CommitmentSignedDecodeErrorZ), "LDKCResult_CommitmentSignedDecodeErrorZ");
+       *ret_conv = CResult_CommitmentSignedDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CommitmentSignedDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_CommitmentSignedDecodeErrorZ* arg_conv = (LDKCResult_CommitmentSignedDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_CommitmentSignedDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CommitmentSignedDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_CommitmentSignedDecodeErrorZ* orig_conv = (LDKCResult_CommitmentSignedDecodeErrorZ*)(orig & ~1);
        LDKCResult_CommitmentSignedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CommitmentSignedDecodeErrorZ), "LDKCResult_CommitmentSignedDecodeErrorZ");
@@ -15961,6 +17605,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1FundingCreatedDeco
        LDKFundingCreated o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = FundingCreated_clone(&o_conv);
        LDKCResult_FundingCreatedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FundingCreatedDecodeErrorZ), "LDKCResult_FundingCreatedDecodeErrorZ");
        *ret_conv = CResult_FundingCreatedDecodeErrorZ_ok(o_conv);
@@ -15971,12 +17616,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1FundingCreatedDeco
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_FundingCreatedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FundingCreatedDecodeErrorZ), "LDKCResult_FundingCreatedDecodeErrorZ");
        *ret_conv = CResult_FundingCreatedDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1FundingCreatedDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_FundingCreatedDecodeErrorZ* o_conv = (LDKCResult_FundingCreatedDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_FundingCreatedDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1FundingCreatedDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -15986,6 +17638,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1FundingCreatedDecodeE
        CResult_FundingCreatedDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_FundingCreatedDecodeErrorZ_clone_ptr(LDKCResult_FundingCreatedDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_FundingCreatedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FundingCreatedDecodeErrorZ), "LDKCResult_FundingCreatedDecodeErrorZ");
+       *ret_conv = CResult_FundingCreatedDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1FundingCreatedDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_FundingCreatedDecodeErrorZ* arg_conv = (LDKCResult_FundingCreatedDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_FundingCreatedDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1FundingCreatedDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_FundingCreatedDecodeErrorZ* orig_conv = (LDKCResult_FundingCreatedDecodeErrorZ*)(orig & ~1);
        LDKCResult_FundingCreatedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FundingCreatedDecodeErrorZ), "LDKCResult_FundingCreatedDecodeErrorZ");
@@ -15997,6 +17660,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1FundingSignedDecod
        LDKFundingSigned o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = FundingSigned_clone(&o_conv);
        LDKCResult_FundingSignedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FundingSignedDecodeErrorZ), "LDKCResult_FundingSignedDecodeErrorZ");
        *ret_conv = CResult_FundingSignedDecodeErrorZ_ok(o_conv);
@@ -16007,12 +17671,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1FundingSignedDecod
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_FundingSignedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FundingSignedDecodeErrorZ), "LDKCResult_FundingSignedDecodeErrorZ");
        *ret_conv = CResult_FundingSignedDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1FundingSignedDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_FundingSignedDecodeErrorZ* o_conv = (LDKCResult_FundingSignedDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_FundingSignedDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1FundingSignedDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -16022,6 +17693,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1FundingSignedDecodeEr
        CResult_FundingSignedDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_FundingSignedDecodeErrorZ_clone_ptr(LDKCResult_FundingSignedDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_FundingSignedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FundingSignedDecodeErrorZ), "LDKCResult_FundingSignedDecodeErrorZ");
+       *ret_conv = CResult_FundingSignedDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1FundingSignedDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_FundingSignedDecodeErrorZ* arg_conv = (LDKCResult_FundingSignedDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_FundingSignedDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1FundingSignedDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_FundingSignedDecodeErrorZ* orig_conv = (LDKCResult_FundingSignedDecodeErrorZ*)(orig & ~1);
        LDKCResult_FundingSignedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FundingSignedDecodeErrorZ), "LDKCResult_FundingSignedDecodeErrorZ");
@@ -16033,6 +17715,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1FundingLockedDecod
        LDKFundingLocked o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = FundingLocked_clone(&o_conv);
        LDKCResult_FundingLockedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FundingLockedDecodeErrorZ), "LDKCResult_FundingLockedDecodeErrorZ");
        *ret_conv = CResult_FundingLockedDecodeErrorZ_ok(o_conv);
@@ -16043,12 +17726,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1FundingLockedDecod
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_FundingLockedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FundingLockedDecodeErrorZ), "LDKCResult_FundingLockedDecodeErrorZ");
        *ret_conv = CResult_FundingLockedDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1FundingLockedDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_FundingLockedDecodeErrorZ* o_conv = (LDKCResult_FundingLockedDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_FundingLockedDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1FundingLockedDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -16058,6 +17748,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1FundingLockedDecodeEr
        CResult_FundingLockedDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_FundingLockedDecodeErrorZ_clone_ptr(LDKCResult_FundingLockedDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_FundingLockedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FundingLockedDecodeErrorZ), "LDKCResult_FundingLockedDecodeErrorZ");
+       *ret_conv = CResult_FundingLockedDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1FundingLockedDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_FundingLockedDecodeErrorZ* arg_conv = (LDKCResult_FundingLockedDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_FundingLockedDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1FundingLockedDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_FundingLockedDecodeErrorZ* orig_conv = (LDKCResult_FundingLockedDecodeErrorZ*)(orig & ~1);
        LDKCResult_FundingLockedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FundingLockedDecodeErrorZ), "LDKCResult_FundingLockedDecodeErrorZ");
@@ -16069,6 +17770,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1InitDecodeErrorZ_1
        LDKInit o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = Init_clone(&o_conv);
        LDKCResult_InitDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InitDecodeErrorZ), "LDKCResult_InitDecodeErrorZ");
        *ret_conv = CResult_InitDecodeErrorZ_ok(o_conv);
@@ -16079,12 +17781,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1InitDecodeErrorZ_1
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_InitDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InitDecodeErrorZ), "LDKCResult_InitDecodeErrorZ");
        *ret_conv = CResult_InitDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1InitDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_InitDecodeErrorZ* o_conv = (LDKCResult_InitDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_InitDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1InitDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -16094,6 +17803,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1InitDecodeErrorZ_1fre
        CResult_InitDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_InitDecodeErrorZ_clone_ptr(LDKCResult_InitDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_InitDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InitDecodeErrorZ), "LDKCResult_InitDecodeErrorZ");
+       *ret_conv = CResult_InitDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1InitDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_InitDecodeErrorZ* arg_conv = (LDKCResult_InitDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_InitDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1InitDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_InitDecodeErrorZ* orig_conv = (LDKCResult_InitDecodeErrorZ*)(orig & ~1);
        LDKCResult_InitDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InitDecodeErrorZ), "LDKCResult_InitDecodeErrorZ");
@@ -16105,6 +17825,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1OpenChannelDecodeE
        LDKOpenChannel o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = OpenChannel_clone(&o_conv);
        LDKCResult_OpenChannelDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OpenChannelDecodeErrorZ), "LDKCResult_OpenChannelDecodeErrorZ");
        *ret_conv = CResult_OpenChannelDecodeErrorZ_ok(o_conv);
@@ -16115,12 +17836,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1OpenChannelDecodeE
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_OpenChannelDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OpenChannelDecodeErrorZ), "LDKCResult_OpenChannelDecodeErrorZ");
        *ret_conv = CResult_OpenChannelDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1OpenChannelDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_OpenChannelDecodeErrorZ* o_conv = (LDKCResult_OpenChannelDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_OpenChannelDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1OpenChannelDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -16130,6 +17858,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1OpenChannelDecodeErro
        CResult_OpenChannelDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_OpenChannelDecodeErrorZ_clone_ptr(LDKCResult_OpenChannelDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_OpenChannelDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OpenChannelDecodeErrorZ), "LDKCResult_OpenChannelDecodeErrorZ");
+       *ret_conv = CResult_OpenChannelDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1OpenChannelDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_OpenChannelDecodeErrorZ* arg_conv = (LDKCResult_OpenChannelDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_OpenChannelDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1OpenChannelDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_OpenChannelDecodeErrorZ* orig_conv = (LDKCResult_OpenChannelDecodeErrorZ*)(orig & ~1);
        LDKCResult_OpenChannelDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OpenChannelDecodeErrorZ), "LDKCResult_OpenChannelDecodeErrorZ");
@@ -16141,6 +17880,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RevokeAndACKDecode
        LDKRevokeAndACK o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = RevokeAndACK_clone(&o_conv);
        LDKCResult_RevokeAndACKDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RevokeAndACKDecodeErrorZ), "LDKCResult_RevokeAndACKDecodeErrorZ");
        *ret_conv = CResult_RevokeAndACKDecodeErrorZ_ok(o_conv);
@@ -16151,12 +17891,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RevokeAndACKDecode
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_RevokeAndACKDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RevokeAndACKDecodeErrorZ), "LDKCResult_RevokeAndACKDecodeErrorZ");
        *ret_conv = CResult_RevokeAndACKDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1RevokeAndACKDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_RevokeAndACKDecodeErrorZ* o_conv = (LDKCResult_RevokeAndACKDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_RevokeAndACKDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RevokeAndACKDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -16166,6 +17913,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RevokeAndACKDecodeErr
        CResult_RevokeAndACKDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_RevokeAndACKDecodeErrorZ_clone_ptr(LDKCResult_RevokeAndACKDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_RevokeAndACKDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RevokeAndACKDecodeErrorZ), "LDKCResult_RevokeAndACKDecodeErrorZ");
+       *ret_conv = CResult_RevokeAndACKDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RevokeAndACKDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_RevokeAndACKDecodeErrorZ* arg_conv = (LDKCResult_RevokeAndACKDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_RevokeAndACKDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RevokeAndACKDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_RevokeAndACKDecodeErrorZ* orig_conv = (LDKCResult_RevokeAndACKDecodeErrorZ*)(orig & ~1);
        LDKCResult_RevokeAndACKDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RevokeAndACKDecodeErrorZ), "LDKCResult_RevokeAndACKDecodeErrorZ");
@@ -16177,6 +17935,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownDecodeErro
        LDKShutdown o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = Shutdown_clone(&o_conv);
        LDKCResult_ShutdownDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ShutdownDecodeErrorZ), "LDKCResult_ShutdownDecodeErrorZ");
        *ret_conv = CResult_ShutdownDecodeErrorZ_ok(o_conv);
@@ -16187,12 +17946,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownDecodeErro
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ShutdownDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ShutdownDecodeErrorZ), "LDKCResult_ShutdownDecodeErrorZ");
        *ret_conv = CResult_ShutdownDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ShutdownDecodeErrorZ* o_conv = (LDKCResult_ShutdownDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ShutdownDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -16202,6 +17968,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownDecodeErrorZ_
        CResult_ShutdownDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ShutdownDecodeErrorZ_clone_ptr(LDKCResult_ShutdownDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ShutdownDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ShutdownDecodeErrorZ), "LDKCResult_ShutdownDecodeErrorZ");
+       *ret_conv = CResult_ShutdownDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_ShutdownDecodeErrorZ* arg_conv = (LDKCResult_ShutdownDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ShutdownDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_ShutdownDecodeErrorZ* orig_conv = (LDKCResult_ShutdownDecodeErrorZ*)(orig & ~1);
        LDKCResult_ShutdownDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ShutdownDecodeErrorZ), "LDKCResult_ShutdownDecodeErrorZ");
@@ -16213,6 +17990,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFailHTLCDeco
        LDKUpdateFailHTLC o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = UpdateFailHTLC_clone(&o_conv);
        LDKCResult_UpdateFailHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFailHTLCDecodeErrorZ), "LDKCResult_UpdateFailHTLCDecodeErrorZ");
        *ret_conv = CResult_UpdateFailHTLCDecodeErrorZ_ok(o_conv);
@@ -16223,12 +18001,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFailHTLCDeco
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_UpdateFailHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFailHTLCDecodeErrorZ), "LDKCResult_UpdateFailHTLCDecodeErrorZ");
        *ret_conv = CResult_UpdateFailHTLCDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFailHTLCDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_UpdateFailHTLCDecodeErrorZ* o_conv = (LDKCResult_UpdateFailHTLCDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_UpdateFailHTLCDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFailHTLCDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -16238,6 +18023,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFailHTLCDecodeE
        CResult_UpdateFailHTLCDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_UpdateFailHTLCDecodeErrorZ_clone_ptr(LDKCResult_UpdateFailHTLCDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_UpdateFailHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFailHTLCDecodeErrorZ), "LDKCResult_UpdateFailHTLCDecodeErrorZ");
+       *ret_conv = CResult_UpdateFailHTLCDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFailHTLCDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_UpdateFailHTLCDecodeErrorZ* arg_conv = (LDKCResult_UpdateFailHTLCDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_UpdateFailHTLCDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFailHTLCDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_UpdateFailHTLCDecodeErrorZ* orig_conv = (LDKCResult_UpdateFailHTLCDecodeErrorZ*)(orig & ~1);
        LDKCResult_UpdateFailHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFailHTLCDecodeErrorZ), "LDKCResult_UpdateFailHTLCDecodeErrorZ");
@@ -16249,6 +18045,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFailMalforme
        LDKUpdateFailMalformedHTLC o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = UpdateFailMalformedHTLC_clone(&o_conv);
        LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ), "LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ");
        *ret_conv = CResult_UpdateFailMalformedHTLCDecodeErrorZ_ok(o_conv);
@@ -16259,12 +18056,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFailMalforme
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ), "LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ");
        *ret_conv = CResult_UpdateFailMalformedHTLCDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFailMalformedHTLCDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ* o_conv = (LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_UpdateFailMalformedHTLCDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFailMalformedHTLCDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -16274,6 +18078,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFailMalformedHT
        CResult_UpdateFailMalformedHTLCDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_UpdateFailMalformedHTLCDecodeErrorZ_clone_ptr(LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ), "LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ");
+       *ret_conv = CResult_UpdateFailMalformedHTLCDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFailMalformedHTLCDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ* arg_conv = (LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_UpdateFailMalformedHTLCDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFailMalformedHTLCDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ* orig_conv = (LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ*)(orig & ~1);
        LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ), "LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ");
@@ -16285,6 +18100,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFeeDecodeErr
        LDKUpdateFee o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = UpdateFee_clone(&o_conv);
        LDKCResult_UpdateFeeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFeeDecodeErrorZ), "LDKCResult_UpdateFeeDecodeErrorZ");
        *ret_conv = CResult_UpdateFeeDecodeErrorZ_ok(o_conv);
@@ -16295,12 +18111,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFeeDecodeErr
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_UpdateFeeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFeeDecodeErrorZ), "LDKCResult_UpdateFeeDecodeErrorZ");
        *ret_conv = CResult_UpdateFeeDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFeeDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_UpdateFeeDecodeErrorZ* o_conv = (LDKCResult_UpdateFeeDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_UpdateFeeDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFeeDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -16310,6 +18133,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFeeDecodeErrorZ
        CResult_UpdateFeeDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_UpdateFeeDecodeErrorZ_clone_ptr(LDKCResult_UpdateFeeDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_UpdateFeeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFeeDecodeErrorZ), "LDKCResult_UpdateFeeDecodeErrorZ");
+       *ret_conv = CResult_UpdateFeeDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFeeDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_UpdateFeeDecodeErrorZ* arg_conv = (LDKCResult_UpdateFeeDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_UpdateFeeDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFeeDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_UpdateFeeDecodeErrorZ* orig_conv = (LDKCResult_UpdateFeeDecodeErrorZ*)(orig & ~1);
        LDKCResult_UpdateFeeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFeeDecodeErrorZ), "LDKCResult_UpdateFeeDecodeErrorZ");
@@ -16321,6 +18155,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFulfillHTLCD
        LDKUpdateFulfillHTLC o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = UpdateFulfillHTLC_clone(&o_conv);
        LDKCResult_UpdateFulfillHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFulfillHTLCDecodeErrorZ), "LDKCResult_UpdateFulfillHTLCDecodeErrorZ");
        *ret_conv = CResult_UpdateFulfillHTLCDecodeErrorZ_ok(o_conv);
@@ -16331,12 +18166,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFulfillHTLCD
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_UpdateFulfillHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFulfillHTLCDecodeErrorZ), "LDKCResult_UpdateFulfillHTLCDecodeErrorZ");
        *ret_conv = CResult_UpdateFulfillHTLCDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFulfillHTLCDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_UpdateFulfillHTLCDecodeErrorZ* o_conv = (LDKCResult_UpdateFulfillHTLCDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_UpdateFulfillHTLCDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFulfillHTLCDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -16346,6 +18188,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFulfillHTLCDeco
        CResult_UpdateFulfillHTLCDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_UpdateFulfillHTLCDecodeErrorZ_clone_ptr(LDKCResult_UpdateFulfillHTLCDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_UpdateFulfillHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFulfillHTLCDecodeErrorZ), "LDKCResult_UpdateFulfillHTLCDecodeErrorZ");
+       *ret_conv = CResult_UpdateFulfillHTLCDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFulfillHTLCDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_UpdateFulfillHTLCDecodeErrorZ* arg_conv = (LDKCResult_UpdateFulfillHTLCDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_UpdateFulfillHTLCDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFulfillHTLCDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_UpdateFulfillHTLCDecodeErrorZ* orig_conv = (LDKCResult_UpdateFulfillHTLCDecodeErrorZ*)(orig & ~1);
        LDKCResult_UpdateFulfillHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFulfillHTLCDecodeErrorZ), "LDKCResult_UpdateFulfillHTLCDecodeErrorZ");
@@ -16357,6 +18210,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateAddHTLCDecod
        LDKUpdateAddHTLC o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = UpdateAddHTLC_clone(&o_conv);
        LDKCResult_UpdateAddHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateAddHTLCDecodeErrorZ), "LDKCResult_UpdateAddHTLCDecodeErrorZ");
        *ret_conv = CResult_UpdateAddHTLCDecodeErrorZ_ok(o_conv);
@@ -16367,12 +18221,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateAddHTLCDecod
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_UpdateAddHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateAddHTLCDecodeErrorZ), "LDKCResult_UpdateAddHTLCDecodeErrorZ");
        *ret_conv = CResult_UpdateAddHTLCDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateAddHTLCDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_UpdateAddHTLCDecodeErrorZ* o_conv = (LDKCResult_UpdateAddHTLCDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_UpdateAddHTLCDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateAddHTLCDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -16382,6 +18243,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateAddHTLCDecodeEr
        CResult_UpdateAddHTLCDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_UpdateAddHTLCDecodeErrorZ_clone_ptr(LDKCResult_UpdateAddHTLCDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_UpdateAddHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateAddHTLCDecodeErrorZ), "LDKCResult_UpdateAddHTLCDecodeErrorZ");
+       *ret_conv = CResult_UpdateAddHTLCDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateAddHTLCDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_UpdateAddHTLCDecodeErrorZ* arg_conv = (LDKCResult_UpdateAddHTLCDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_UpdateAddHTLCDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateAddHTLCDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_UpdateAddHTLCDecodeErrorZ* orig_conv = (LDKCResult_UpdateAddHTLCDecodeErrorZ*)(orig & ~1);
        LDKCResult_UpdateAddHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateAddHTLCDecodeErrorZ), "LDKCResult_UpdateAddHTLCDecodeErrorZ");
@@ -16393,6 +18265,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PingDecodeErrorZ_1
        LDKPing o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = Ping_clone(&o_conv);
        LDKCResult_PingDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PingDecodeErrorZ), "LDKCResult_PingDecodeErrorZ");
        *ret_conv = CResult_PingDecodeErrorZ_ok(o_conv);
@@ -16403,12 +18276,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PingDecodeErrorZ_1
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_PingDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PingDecodeErrorZ), "LDKCResult_PingDecodeErrorZ");
        *ret_conv = CResult_PingDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PingDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_PingDecodeErrorZ* o_conv = (LDKCResult_PingDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_PingDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PingDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -16418,6 +18298,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PingDecodeErrorZ_1fre
        CResult_PingDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_PingDecodeErrorZ_clone_ptr(LDKCResult_PingDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_PingDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PingDecodeErrorZ), "LDKCResult_PingDecodeErrorZ");
+       *ret_conv = CResult_PingDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PingDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_PingDecodeErrorZ* arg_conv = (LDKCResult_PingDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_PingDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PingDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_PingDecodeErrorZ* orig_conv = (LDKCResult_PingDecodeErrorZ*)(orig & ~1);
        LDKCResult_PingDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PingDecodeErrorZ), "LDKCResult_PingDecodeErrorZ");
@@ -16429,6 +18320,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PongDecodeErrorZ_1
        LDKPong o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = Pong_clone(&o_conv);
        LDKCResult_PongDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PongDecodeErrorZ), "LDKCResult_PongDecodeErrorZ");
        *ret_conv = CResult_PongDecodeErrorZ_ok(o_conv);
@@ -16439,12 +18331,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PongDecodeErrorZ_1
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_PongDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PongDecodeErrorZ), "LDKCResult_PongDecodeErrorZ");
        *ret_conv = CResult_PongDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PongDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_PongDecodeErrorZ* o_conv = (LDKCResult_PongDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_PongDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PongDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -16454,6 +18353,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PongDecodeErrorZ_1fre
        CResult_PongDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_PongDecodeErrorZ_clone_ptr(LDKCResult_PongDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_PongDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PongDecodeErrorZ), "LDKCResult_PongDecodeErrorZ");
+       *ret_conv = CResult_PongDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PongDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_PongDecodeErrorZ* arg_conv = (LDKCResult_PongDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_PongDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PongDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_PongDecodeErrorZ* orig_conv = (LDKCResult_PongDecodeErrorZ*)(orig & ~1);
        LDKCResult_PongDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PongDecodeErrorZ), "LDKCResult_PongDecodeErrorZ");
@@ -16465,6 +18375,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedChannelAnn
        LDKUnsignedChannelAnnouncement o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = UnsignedChannelAnnouncement_clone(&o_conv);
        LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ), "LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ");
        *ret_conv = CResult_UnsignedChannelAnnouncementDecodeErrorZ_ok(o_conv);
@@ -16475,12 +18386,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedChannelAnn
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ), "LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ");
        *ret_conv = CResult_UnsignedChannelAnnouncementDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedChannelAnnouncementDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ* o_conv = (LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_UnsignedChannelAnnouncementDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedChannelAnnouncementDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -16490,6 +18408,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedChannelAnnoun
        CResult_UnsignedChannelAnnouncementDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_UnsignedChannelAnnouncementDecodeErrorZ_clone_ptr(LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ), "LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ");
+       *ret_conv = CResult_UnsignedChannelAnnouncementDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedChannelAnnouncementDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ* arg_conv = (LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_UnsignedChannelAnnouncementDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedChannelAnnouncementDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ* orig_conv = (LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ*)(orig & ~1);
        LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ), "LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ");
@@ -16501,6 +18430,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelAnnouncemen
        LDKChannelAnnouncement o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ChannelAnnouncement_clone(&o_conv);
        LDKCResult_ChannelAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelAnnouncementDecodeErrorZ), "LDKCResult_ChannelAnnouncementDecodeErrorZ");
        *ret_conv = CResult_ChannelAnnouncementDecodeErrorZ_ok(o_conv);
@@ -16511,12 +18441,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelAnnouncemen
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ChannelAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelAnnouncementDecodeErrorZ), "LDKCResult_ChannelAnnouncementDecodeErrorZ");
        *ret_conv = CResult_ChannelAnnouncementDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelAnnouncementDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ChannelAnnouncementDecodeErrorZ* o_conv = (LDKCResult_ChannelAnnouncementDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ChannelAnnouncementDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelAnnouncementDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -16526,6 +18463,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelAnnouncementDe
        CResult_ChannelAnnouncementDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ChannelAnnouncementDecodeErrorZ_clone_ptr(LDKCResult_ChannelAnnouncementDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ChannelAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelAnnouncementDecodeErrorZ), "LDKCResult_ChannelAnnouncementDecodeErrorZ");
+       *ret_conv = CResult_ChannelAnnouncementDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelAnnouncementDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_ChannelAnnouncementDecodeErrorZ* arg_conv = (LDKCResult_ChannelAnnouncementDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ChannelAnnouncementDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelAnnouncementDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_ChannelAnnouncementDecodeErrorZ* orig_conv = (LDKCResult_ChannelAnnouncementDecodeErrorZ*)(orig & ~1);
        LDKCResult_ChannelAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelAnnouncementDecodeErrorZ), "LDKCResult_ChannelAnnouncementDecodeErrorZ");
@@ -16537,6 +18485,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedChannelUpd
        LDKUnsignedChannelUpdate o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = UnsignedChannelUpdate_clone(&o_conv);
        LDKCResult_UnsignedChannelUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedChannelUpdateDecodeErrorZ), "LDKCResult_UnsignedChannelUpdateDecodeErrorZ");
        *ret_conv = CResult_UnsignedChannelUpdateDecodeErrorZ_ok(o_conv);
@@ -16547,12 +18496,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedChannelUpd
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_UnsignedChannelUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedChannelUpdateDecodeErrorZ), "LDKCResult_UnsignedChannelUpdateDecodeErrorZ");
        *ret_conv = CResult_UnsignedChannelUpdateDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedChannelUpdateDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_UnsignedChannelUpdateDecodeErrorZ* o_conv = (LDKCResult_UnsignedChannelUpdateDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_UnsignedChannelUpdateDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedChannelUpdateDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -16562,6 +18518,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedChannelUpdate
        CResult_UnsignedChannelUpdateDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_UnsignedChannelUpdateDecodeErrorZ_clone_ptr(LDKCResult_UnsignedChannelUpdateDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_UnsignedChannelUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedChannelUpdateDecodeErrorZ), "LDKCResult_UnsignedChannelUpdateDecodeErrorZ");
+       *ret_conv = CResult_UnsignedChannelUpdateDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedChannelUpdateDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_UnsignedChannelUpdateDecodeErrorZ* arg_conv = (LDKCResult_UnsignedChannelUpdateDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_UnsignedChannelUpdateDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedChannelUpdateDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_UnsignedChannelUpdateDecodeErrorZ* orig_conv = (LDKCResult_UnsignedChannelUpdateDecodeErrorZ*)(orig & ~1);
        LDKCResult_UnsignedChannelUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedChannelUpdateDecodeErrorZ), "LDKCResult_UnsignedChannelUpdateDecodeErrorZ");
@@ -16573,6 +18540,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelUpdateDecod
        LDKChannelUpdate o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ChannelUpdate_clone(&o_conv);
        LDKCResult_ChannelUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelUpdateDecodeErrorZ), "LDKCResult_ChannelUpdateDecodeErrorZ");
        *ret_conv = CResult_ChannelUpdateDecodeErrorZ_ok(o_conv);
@@ -16583,12 +18551,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelUpdateDecod
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ChannelUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelUpdateDecodeErrorZ), "LDKCResult_ChannelUpdateDecodeErrorZ");
        *ret_conv = CResult_ChannelUpdateDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelUpdateDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ChannelUpdateDecodeErrorZ* o_conv = (LDKCResult_ChannelUpdateDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ChannelUpdateDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelUpdateDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -16598,6 +18573,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelUpdateDecodeEr
        CResult_ChannelUpdateDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ChannelUpdateDecodeErrorZ_clone_ptr(LDKCResult_ChannelUpdateDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ChannelUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelUpdateDecodeErrorZ), "LDKCResult_ChannelUpdateDecodeErrorZ");
+       *ret_conv = CResult_ChannelUpdateDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelUpdateDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_ChannelUpdateDecodeErrorZ* arg_conv = (LDKCResult_ChannelUpdateDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ChannelUpdateDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelUpdateDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_ChannelUpdateDecodeErrorZ* orig_conv = (LDKCResult_ChannelUpdateDecodeErrorZ*)(orig & ~1);
        LDKCResult_ChannelUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelUpdateDecodeErrorZ), "LDKCResult_ChannelUpdateDecodeErrorZ");
@@ -16609,6 +18595,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ErrorMessageDecode
        LDKErrorMessage o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ErrorMessage_clone(&o_conv);
        LDKCResult_ErrorMessageDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ErrorMessageDecodeErrorZ), "LDKCResult_ErrorMessageDecodeErrorZ");
        *ret_conv = CResult_ErrorMessageDecodeErrorZ_ok(o_conv);
@@ -16619,12 +18606,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ErrorMessageDecode
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ErrorMessageDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ErrorMessageDecodeErrorZ), "LDKCResult_ErrorMessageDecodeErrorZ");
        *ret_conv = CResult_ErrorMessageDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ErrorMessageDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ErrorMessageDecodeErrorZ* o_conv = (LDKCResult_ErrorMessageDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ErrorMessageDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ErrorMessageDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -16634,6 +18628,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ErrorMessageDecodeErr
        CResult_ErrorMessageDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ErrorMessageDecodeErrorZ_clone_ptr(LDKCResult_ErrorMessageDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ErrorMessageDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ErrorMessageDecodeErrorZ), "LDKCResult_ErrorMessageDecodeErrorZ");
+       *ret_conv = CResult_ErrorMessageDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ErrorMessageDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_ErrorMessageDecodeErrorZ* arg_conv = (LDKCResult_ErrorMessageDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ErrorMessageDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ErrorMessageDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_ErrorMessageDecodeErrorZ* orig_conv = (LDKCResult_ErrorMessageDecodeErrorZ*)(orig & ~1);
        LDKCResult_ErrorMessageDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ErrorMessageDecodeErrorZ), "LDKCResult_ErrorMessageDecodeErrorZ");
@@ -16645,6 +18650,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedNodeAnnoun
        LDKUnsignedNodeAnnouncement o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = UnsignedNodeAnnouncement_clone(&o_conv);
        LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ), "LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ");
        *ret_conv = CResult_UnsignedNodeAnnouncementDecodeErrorZ_ok(o_conv);
@@ -16655,12 +18661,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedNodeAnnoun
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ), "LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ");
        *ret_conv = CResult_UnsignedNodeAnnouncementDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedNodeAnnouncementDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ* o_conv = (LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_UnsignedNodeAnnouncementDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedNodeAnnouncementDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -16670,6 +18683,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedNodeAnnouncem
        CResult_UnsignedNodeAnnouncementDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_UnsignedNodeAnnouncementDecodeErrorZ_clone_ptr(LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ), "LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ");
+       *ret_conv = CResult_UnsignedNodeAnnouncementDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedNodeAnnouncementDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ* arg_conv = (LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_UnsignedNodeAnnouncementDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedNodeAnnouncementDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ* orig_conv = (LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ*)(orig & ~1);
        LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ), "LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ");
@@ -16681,6 +18705,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NodeAnnouncementDe
        LDKNodeAnnouncement o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = NodeAnnouncement_clone(&o_conv);
        LDKCResult_NodeAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeAnnouncementDecodeErrorZ), "LDKCResult_NodeAnnouncementDecodeErrorZ");
        *ret_conv = CResult_NodeAnnouncementDecodeErrorZ_ok(o_conv);
@@ -16691,12 +18716,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NodeAnnouncementDe
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_NodeAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeAnnouncementDecodeErrorZ), "LDKCResult_NodeAnnouncementDecodeErrorZ");
        *ret_conv = CResult_NodeAnnouncementDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NodeAnnouncementDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_NodeAnnouncementDecodeErrorZ* o_conv = (LDKCResult_NodeAnnouncementDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_NodeAnnouncementDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NodeAnnouncementDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -16706,6 +18738,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NodeAnnouncementDecod
        CResult_NodeAnnouncementDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_NodeAnnouncementDecodeErrorZ_clone_ptr(LDKCResult_NodeAnnouncementDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_NodeAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeAnnouncementDecodeErrorZ), "LDKCResult_NodeAnnouncementDecodeErrorZ");
+       *ret_conv = CResult_NodeAnnouncementDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NodeAnnouncementDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_NodeAnnouncementDecodeErrorZ* arg_conv = (LDKCResult_NodeAnnouncementDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_NodeAnnouncementDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NodeAnnouncementDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_NodeAnnouncementDecodeErrorZ* orig_conv = (LDKCResult_NodeAnnouncementDecodeErrorZ*)(orig & ~1);
        LDKCResult_NodeAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeAnnouncementDecodeErrorZ), "LDKCResult_NodeAnnouncementDecodeErrorZ");
@@ -16717,6 +18760,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1QueryShortChannelI
        LDKQueryShortChannelIds o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = QueryShortChannelIds_clone(&o_conv);
        LDKCResult_QueryShortChannelIdsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_QueryShortChannelIdsDecodeErrorZ), "LDKCResult_QueryShortChannelIdsDecodeErrorZ");
        *ret_conv = CResult_QueryShortChannelIdsDecodeErrorZ_ok(o_conv);
@@ -16727,12 +18771,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1QueryShortChannelI
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_QueryShortChannelIdsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_QueryShortChannelIdsDecodeErrorZ), "LDKCResult_QueryShortChannelIdsDecodeErrorZ");
        *ret_conv = CResult_QueryShortChannelIdsDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1QueryShortChannelIdsDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_QueryShortChannelIdsDecodeErrorZ* o_conv = (LDKCResult_QueryShortChannelIdsDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_QueryShortChannelIdsDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1QueryShortChannelIdsDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -16742,6 +18793,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1QueryShortChannelIdsD
        CResult_QueryShortChannelIdsDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_QueryShortChannelIdsDecodeErrorZ_clone_ptr(LDKCResult_QueryShortChannelIdsDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_QueryShortChannelIdsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_QueryShortChannelIdsDecodeErrorZ), "LDKCResult_QueryShortChannelIdsDecodeErrorZ");
+       *ret_conv = CResult_QueryShortChannelIdsDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1QueryShortChannelIdsDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_QueryShortChannelIdsDecodeErrorZ* arg_conv = (LDKCResult_QueryShortChannelIdsDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_QueryShortChannelIdsDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1QueryShortChannelIdsDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_QueryShortChannelIdsDecodeErrorZ* orig_conv = (LDKCResult_QueryShortChannelIdsDecodeErrorZ*)(orig & ~1);
        LDKCResult_QueryShortChannelIdsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_QueryShortChannelIdsDecodeErrorZ), "LDKCResult_QueryShortChannelIdsDecodeErrorZ");
@@ -16753,6 +18815,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ReplyShortChannelI
        LDKReplyShortChannelIdsEnd o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ReplyShortChannelIdsEnd_clone(&o_conv);
        LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ), "LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ");
        *ret_conv = CResult_ReplyShortChannelIdsEndDecodeErrorZ_ok(o_conv);
@@ -16763,12 +18826,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ReplyShortChannelI
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ), "LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ");
        *ret_conv = CResult_ReplyShortChannelIdsEndDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ReplyShortChannelIdsEndDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ* o_conv = (LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ReplyShortChannelIdsEndDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ReplyShortChannelIdsEndDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -16778,6 +18848,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ReplyShortChannelIdsE
        CResult_ReplyShortChannelIdsEndDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ReplyShortChannelIdsEndDecodeErrorZ_clone_ptr(LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ), "LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ");
+       *ret_conv = CResult_ReplyShortChannelIdsEndDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ReplyShortChannelIdsEndDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ* arg_conv = (LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ReplyShortChannelIdsEndDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ReplyShortChannelIdsEndDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ* orig_conv = (LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ*)(orig & ~1);
        LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ), "LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ");
@@ -16789,6 +18870,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1QueryChannelRangeD
        LDKQueryChannelRange o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = QueryChannelRange_clone(&o_conv);
        LDKCResult_QueryChannelRangeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_QueryChannelRangeDecodeErrorZ), "LDKCResult_QueryChannelRangeDecodeErrorZ");
        *ret_conv = CResult_QueryChannelRangeDecodeErrorZ_ok(o_conv);
@@ -16799,12 +18881,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1QueryChannelRangeD
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_QueryChannelRangeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_QueryChannelRangeDecodeErrorZ), "LDKCResult_QueryChannelRangeDecodeErrorZ");
        *ret_conv = CResult_QueryChannelRangeDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1QueryChannelRangeDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_QueryChannelRangeDecodeErrorZ* o_conv = (LDKCResult_QueryChannelRangeDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_QueryChannelRangeDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1QueryChannelRangeDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -16814,6 +18903,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1QueryChannelRangeDeco
        CResult_QueryChannelRangeDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_QueryChannelRangeDecodeErrorZ_clone_ptr(LDKCResult_QueryChannelRangeDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_QueryChannelRangeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_QueryChannelRangeDecodeErrorZ), "LDKCResult_QueryChannelRangeDecodeErrorZ");
+       *ret_conv = CResult_QueryChannelRangeDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1QueryChannelRangeDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_QueryChannelRangeDecodeErrorZ* arg_conv = (LDKCResult_QueryChannelRangeDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_QueryChannelRangeDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1QueryChannelRangeDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_QueryChannelRangeDecodeErrorZ* orig_conv = (LDKCResult_QueryChannelRangeDecodeErrorZ*)(orig & ~1);
        LDKCResult_QueryChannelRangeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_QueryChannelRangeDecodeErrorZ), "LDKCResult_QueryChannelRangeDecodeErrorZ");
@@ -16825,6 +18925,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ReplyChannelRangeD
        LDKReplyChannelRange o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ReplyChannelRange_clone(&o_conv);
        LDKCResult_ReplyChannelRangeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReplyChannelRangeDecodeErrorZ), "LDKCResult_ReplyChannelRangeDecodeErrorZ");
        *ret_conv = CResult_ReplyChannelRangeDecodeErrorZ_ok(o_conv);
@@ -16835,12 +18936,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ReplyChannelRangeD
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ReplyChannelRangeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReplyChannelRangeDecodeErrorZ), "LDKCResult_ReplyChannelRangeDecodeErrorZ");
        *ret_conv = CResult_ReplyChannelRangeDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ReplyChannelRangeDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ReplyChannelRangeDecodeErrorZ* o_conv = (LDKCResult_ReplyChannelRangeDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ReplyChannelRangeDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ReplyChannelRangeDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -16850,6 +18958,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ReplyChannelRangeDeco
        CResult_ReplyChannelRangeDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ReplyChannelRangeDecodeErrorZ_clone_ptr(LDKCResult_ReplyChannelRangeDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ReplyChannelRangeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReplyChannelRangeDecodeErrorZ), "LDKCResult_ReplyChannelRangeDecodeErrorZ");
+       *ret_conv = CResult_ReplyChannelRangeDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ReplyChannelRangeDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_ReplyChannelRangeDecodeErrorZ* arg_conv = (LDKCResult_ReplyChannelRangeDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ReplyChannelRangeDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ReplyChannelRangeDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_ReplyChannelRangeDecodeErrorZ* orig_conv = (LDKCResult_ReplyChannelRangeDecodeErrorZ*)(orig & ~1);
        LDKCResult_ReplyChannelRangeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReplyChannelRangeDecodeErrorZ), "LDKCResult_ReplyChannelRangeDecodeErrorZ");
@@ -16861,6 +18980,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1GossipTimestampFil
        LDKGossipTimestampFilter o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = GossipTimestampFilter_clone(&o_conv);
        LDKCResult_GossipTimestampFilterDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_GossipTimestampFilterDecodeErrorZ), "LDKCResult_GossipTimestampFilterDecodeErrorZ");
        *ret_conv = CResult_GossipTimestampFilterDecodeErrorZ_ok(o_conv);
@@ -16871,12 +18991,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1GossipTimestampFil
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_GossipTimestampFilterDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_GossipTimestampFilterDecodeErrorZ), "LDKCResult_GossipTimestampFilterDecodeErrorZ");
        *ret_conv = CResult_GossipTimestampFilterDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1GossipTimestampFilterDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_GossipTimestampFilterDecodeErrorZ* o_conv = (LDKCResult_GossipTimestampFilterDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_GossipTimestampFilterDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1GossipTimestampFilterDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -16886,6 +19013,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1GossipTimestampFilter
        CResult_GossipTimestampFilterDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_GossipTimestampFilterDecodeErrorZ_clone_ptr(LDKCResult_GossipTimestampFilterDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_GossipTimestampFilterDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_GossipTimestampFilterDecodeErrorZ), "LDKCResult_GossipTimestampFilterDecodeErrorZ");
+       *ret_conv = CResult_GossipTimestampFilterDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1GossipTimestampFilterDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_GossipTimestampFilterDecodeErrorZ* arg_conv = (LDKCResult_GossipTimestampFilterDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_GossipTimestampFilterDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1GossipTimestampFilterDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_GossipTimestampFilterDecodeErrorZ* orig_conv = (LDKCResult_GossipTimestampFilterDecodeErrorZ*)(orig & ~1);
        LDKCResult_GossipTimestampFilterDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_GossipTimestampFilterDecodeErrorZ), "LDKCResult_GossipTimestampFilterDecodeErrorZ");
@@ -16897,6 +19035,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceSignOrCreat
        LDKInvoice o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = Invoice_clone(&o_conv);
        LDKCResult_InvoiceSignOrCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceSignOrCreationErrorZ), "LDKCResult_InvoiceSignOrCreationErrorZ");
        *ret_conv = CResult_InvoiceSignOrCreationErrorZ_ok(o_conv);
@@ -16913,6 +19052,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceSignOrCreat
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceSignOrCreationErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_InvoiceSignOrCreationErrorZ* o_conv = (LDKCResult_InvoiceSignOrCreationErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_InvoiceSignOrCreationErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceSignOrCreationErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -16922,6 +19067,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceSignOrCreation
        CResult_InvoiceSignOrCreationErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_InvoiceSignOrCreationErrorZ_clone_ptr(LDKCResult_InvoiceSignOrCreationErrorZ *NONNULL_PTR arg) {
+       LDKCResult_InvoiceSignOrCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceSignOrCreationErrorZ), "LDKCResult_InvoiceSignOrCreationErrorZ");
+       *ret_conv = CResult_InvoiceSignOrCreationErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceSignOrCreationErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_InvoiceSignOrCreationErrorZ* arg_conv = (LDKCResult_InvoiceSignOrCreationErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_InvoiceSignOrCreationErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceSignOrCreationErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_InvoiceSignOrCreationErrorZ* orig_conv = (LDKCResult_InvoiceSignOrCreationErrorZ*)(orig & ~1);
        LDKCResult_InvoiceSignOrCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceSignOrCreationErrorZ), "LDKCResult_InvoiceSignOrCreationErrorZ");
@@ -16963,6 +19119,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1LockedChannelMonit
        LDKLockedChannelMonitor o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        // Warning: we need a move here but no clone is available for LDKLockedChannelMonitor
        LDKCResult_LockedChannelMonitorNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_LockedChannelMonitorNoneZ), "LDKCResult_LockedChannelMonitorNoneZ");
        *ret_conv = CResult_LockedChannelMonitorNoneZ_ok(o_conv);
@@ -16975,6 +19132,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1LockedChannelMonit
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1LockedChannelMonitorNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_LockedChannelMonitorNoneZ* o_conv = (LDKCResult_LockedChannelMonitorNoneZ*)(o & ~1);
+       jboolean ret_val = CResult_LockedChannelMonitorNoneZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1LockedChannelMonitorNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -16997,6 +19160,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1OutPointZ_1free(JNIEnv *
                LDKOutPoint _res_conv_10_conv;
                _res_conv_10_conv.inner = (void*)(_res_conv_10 & (~1));
                _res_conv_10_conv.is_owned = (_res_conv_10 & 1) || (_res_conv_10 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_10_conv);
                _res_constr.data[k] = _res_conv_10_conv;
        }
        (*env)->ReleaseLongArrayElements(env, _res, _res_vals, 0);
@@ -17012,6 +19176,18 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentPurpose_1free(JNIEnv *e
        PaymentPurpose_free(this_ptr_conv);
 }
 
+static inline uint64_t PaymentPurpose_clone_ptr(LDKPaymentPurpose *NONNULL_PTR arg) {
+       LDKPaymentPurpose *ret_copy = MALLOC(sizeof(LDKPaymentPurpose), "LDKPaymentPurpose");
+       *ret_copy = PaymentPurpose_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentPurpose_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKPaymentPurpose* arg_conv = (LDKPaymentPurpose*)arg;
+       int64_t ret_val = PaymentPurpose_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentPurpose_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKPaymentPurpose* orig_conv = (LDKPaymentPurpose*)orig;
        LDKPaymentPurpose *ret_copy = MALLOC(sizeof(LDKPaymentPurpose), "LDKPaymentPurpose");
@@ -17052,6 +19228,18 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ClosureReason_1free(JNIEnv *en
        ClosureReason_free(this_ptr_conv);
 }
 
+static inline uint64_t ClosureReason_clone_ptr(LDKClosureReason *NONNULL_PTR arg) {
+       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
+       *ret_copy = ClosureReason_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClosureReason_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKClosureReason* arg_conv = (LDKClosureReason*)arg;
+       int64_t ret_val = ClosureReason_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClosureReason_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKClosureReason* orig_conv = (LDKClosureReason*)orig;
        LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
@@ -17120,6 +19308,16 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ClosureReason_1write(JN
        return ret_arr;
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClosureReason_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
+       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
+       LDKCResult_COption_ClosureReasonZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_ClosureReasonZDecodeErrorZ), "LDKCResult_COption_ClosureReasonZDecodeErrorZ");
+       *ret_conv = ClosureReason_read(ser_ref);
+       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
+       return (uint64_t)ret_conv;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Event_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
        if ((this_ptr & 1) != 0) return;
        void* this_ptr_ptr = (void*)(((uint64_t)this_ptr) & ~1);
@@ -17129,6 +19327,18 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Event_1free(JNIEnv *env, jclas
        Event_free(this_ptr_conv);
 }
 
+static inline uint64_t Event_clone_ptr(LDKEvent *NONNULL_PTR arg) {
+       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
+       *ret_copy = Event_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKEvent* arg_conv = (LDKEvent*)arg;
+       int64_t ret_val = Event_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKEvent* orig_conv = (LDKEvent*)orig;
        LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
@@ -17208,6 +19418,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1payment_1path_1faile
                LDKRouteHop path_conv_10_conv;
                path_conv_10_conv.inner = (void*)(path_conv_10 & (~1));
                path_conv_10_conv.is_owned = (path_conv_10 & 1) || (path_conv_10 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv_10_conv);
                path_conv_10_conv = RouteHop_clone(&path_conv_10_conv);
                path_constr.data[k] = path_conv_10_conv;
        }
@@ -17219,6 +19430,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1payment_1path_1faile
        LDKRouteParameters retry_conv;
        retry_conv.inner = (void*)(retry & (~1));
        retry_conv.is_owned = (retry & 1) || (retry == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(retry_conv);
        retry_conv = RouteParameters_clone(&retry_conv);
        LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
        *ret_copy = Event_payment_path_failed(payment_id_ref, payment_hash_ref, rejected_by_dest, network_update_conv, all_paths_failed, path_constr, short_channel_id_conv, retry_conv);
@@ -17305,6 +19517,16 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Event_1write(JNIEnv *en
        return ret_arr;
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
+       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
+       LDKCResult_COption_EventZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_EventZDecodeErrorZ), "LDKCResult_COption_EventZDecodeErrorZ");
+       *ret_conv = Event_read(ser_ref);
+       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
+       return (uint64_t)ret_conv;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MessageSendEvent_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
        if ((this_ptr & 1) != 0) return;
        void* this_ptr_ptr = (void*)(((uint64_t)this_ptr) & ~1);
@@ -17314,6 +19536,18 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MessageSendEvent_1free(JNIEnv
        MessageSendEvent_free(this_ptr_conv);
 }
 
+static inline uint64_t MessageSendEvent_clone_ptr(LDKMessageSendEvent *NONNULL_PTR arg) {
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MessageSendEvent_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKMessageSendEvent* arg_conv = (LDKMessageSendEvent*)arg;
+       int64_t ret_val = MessageSendEvent_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MessageSendEvent_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKMessageSendEvent* orig_conv = (LDKMessageSendEvent*)orig;
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
@@ -17329,6 +19563,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MessageSendEvent_1send_1acc
        LDKAcceptChannel msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = AcceptChannel_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_send_accept_channel(node_id_ref, msg_conv);
@@ -17343,6 +19578,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MessageSendEvent_1send_1ope
        LDKOpenChannel msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = OpenChannel_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_send_open_channel(node_id_ref, msg_conv);
@@ -17357,6 +19593,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MessageSendEvent_1send_1fun
        LDKFundingCreated msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = FundingCreated_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_send_funding_created(node_id_ref, msg_conv);
@@ -17371,6 +19608,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MessageSendEvent_1send_1fun
        LDKFundingSigned msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = FundingSigned_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_send_funding_signed(node_id_ref, msg_conv);
@@ -17385,6 +19623,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MessageSendEvent_1send_1fun
        LDKFundingLocked msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = FundingLocked_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_send_funding_locked(node_id_ref, msg_conv);
@@ -17399,6 +19638,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MessageSendEvent_1send_1ann
        LDKAnnouncementSignatures msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = AnnouncementSignatures_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_send_announcement_signatures(node_id_ref, msg_conv);
@@ -17413,6 +19653,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MessageSendEvent_1update_1h
        LDKCommitmentUpdate updates_conv;
        updates_conv.inner = (void*)(updates & (~1));
        updates_conv.is_owned = (updates & 1) || (updates == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(updates_conv);
        updates_conv = CommitmentUpdate_clone(&updates_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_update_htlcs(node_id_ref, updates_conv);
@@ -17427,6 +19668,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MessageSendEvent_1send_1rev
        LDKRevokeAndACK msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = RevokeAndACK_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_send_revoke_and_ack(node_id_ref, msg_conv);
@@ -17441,6 +19683,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MessageSendEvent_1send_1clo
        LDKClosingSigned msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = ClosingSigned_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_send_closing_signed(node_id_ref, msg_conv);
@@ -17455,6 +19698,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MessageSendEvent_1send_1shu
        LDKShutdown msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = Shutdown_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_send_shutdown(node_id_ref, msg_conv);
@@ -17469,6 +19713,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MessageSendEvent_1send_1cha
        LDKChannelReestablish msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = ChannelReestablish_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_send_channel_reestablish(node_id_ref, msg_conv);
@@ -17480,10 +19725,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MessageSendEvent_1broadcast
        LDKChannelAnnouncement msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = ChannelAnnouncement_clone(&msg_conv);
        LDKChannelUpdate update_msg_conv;
        update_msg_conv.inner = (void*)(update_msg & (~1));
        update_msg_conv.is_owned = (update_msg & 1) || (update_msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_msg_conv);
        update_msg_conv = ChannelUpdate_clone(&update_msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_broadcast_channel_announcement(msg_conv, update_msg_conv);
@@ -17495,6 +19742,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MessageSendEvent_1broadcast
        LDKNodeAnnouncement msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = NodeAnnouncement_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_broadcast_node_announcement(msg_conv);
@@ -17506,6 +19754,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MessageSendEvent_1broadcast
        LDKChannelUpdate msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = ChannelUpdate_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_broadcast_channel_update(msg_conv);
@@ -17520,6 +19769,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MessageSendEvent_1send_1cha
        LDKChannelUpdate msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = ChannelUpdate_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_send_channel_update(node_id_ref, msg_conv);
@@ -17548,6 +19798,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MessageSendEvent_1send_1cha
        LDKQueryChannelRange msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = QueryChannelRange_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_send_channel_range_query(node_id_ref, msg_conv);
@@ -17562,6 +19813,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MessageSendEvent_1send_1sho
        LDKQueryShortChannelIds msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = QueryShortChannelIds_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_send_short_ids_query(node_id_ref, msg_conv);
@@ -17576,6 +19828,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MessageSendEvent_1send_1rep
        LDKReplyChannelRange msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = ReplyChannelRange_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_send_reply_channel_range(node_id_ref, msg_conv);
@@ -17619,6 +19872,18 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_APIError_1free(JNIEnv *env, jc
        APIError_free(this_ptr_conv);
 }
 
+static inline uint64_t APIError_clone_ptr(LDKAPIError *NONNULL_PTR arg) {
+       LDKAPIError *ret_copy = MALLOC(sizeof(LDKAPIError), "LDKAPIError");
+       *ret_copy = APIError_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_APIError_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKAPIError* arg_conv = (LDKAPIError*)arg;
+       int64_t ret_val = APIError_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_APIError_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKAPIError* orig_conv = (LDKAPIError*)orig;
        LDKAPIError *ret_copy = MALLOC(sizeof(LDKAPIError), "LDKAPIError");
@@ -17670,6 +19935,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_APIError_1incompatible_1shu
        LDKShutdownScript script_conv;
        script_conv.inner = (void*)(script & (~1));
        script_conv.is_owned = (script & 1) || (script == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(script_conv);
        script_conv = ShutdownScript_clone(&script_conv);
        LDKAPIError *ret_copy = MALLOC(sizeof(LDKAPIError), "LDKAPIError");
        *ret_copy = APIError_incompatible_shutdown_script(script_conv);
@@ -17764,6 +20030,147 @@ JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Level_1max(JNIEnv *env, jcla
        return ret_conv;
 }
 
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Record_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKRecord this_obj_conv;
+       this_obj_conv.inner = (void*)(this_obj & (~1));
+       this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       Record_free(this_obj_conv);
+}
+
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Record_1get_1level(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKRecord this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       jclass ret_conv = LDKLevel_to_java(env, Record_get_level(&this_ptr_conv));
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Record_1set_1level(JNIEnv *env, jclass clz, int64_t this_ptr, jclass val) {
+       LDKRecord this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKLevel val_conv = LDKLevel_from_java(env, val);
+       Record_set_level(&this_ptr_conv, val_conv);
+}
+
+JNIEXPORT jstring JNICALL Java_org_ldk_impl_bindings_Record_1get_1args(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKRecord this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKStr ret_str = Record_get_args(&this_ptr_conv);
+       jstring ret_conv = str_ref_to_java(env, ret_str.chars, ret_str.len);
+       Str_free(ret_str);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Record_1set_1args(JNIEnv *env, jclass clz, int64_t this_ptr, jstring val) {
+       LDKRecord this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKStr val_conv = java_to_owned_str(env, val);
+       Record_set_args(&this_ptr_conv, val_conv);
+}
+
+JNIEXPORT jstring JNICALL Java_org_ldk_impl_bindings_Record_1get_1module_1path(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKRecord this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKStr ret_str = Record_get_module_path(&this_ptr_conv);
+       jstring ret_conv = str_ref_to_java(env, ret_str.chars, ret_str.len);
+       Str_free(ret_str);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Record_1set_1module_1path(JNIEnv *env, jclass clz, int64_t this_ptr, jstring val) {
+       LDKRecord this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKStr val_conv = java_to_owned_str(env, val);
+       Record_set_module_path(&this_ptr_conv, val_conv);
+}
+
+JNIEXPORT jstring JNICALL Java_org_ldk_impl_bindings_Record_1get_1file(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKRecord this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKStr ret_str = Record_get_file(&this_ptr_conv);
+       jstring ret_conv = str_ref_to_java(env, ret_str.chars, ret_str.len);
+       Str_free(ret_str);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Record_1set_1file(JNIEnv *env, jclass clz, int64_t this_ptr, jstring val) {
+       LDKRecord this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKStr val_conv = java_to_owned_str(env, val);
+       Record_set_file(&this_ptr_conv, val_conv);
+}
+
+JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_Record_1get_1line(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKRecord this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       int32_t ret_val = Record_get_line(&this_ptr_conv);
+       return ret_val;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Record_1set_1line(JNIEnv *env, jclass clz, int64_t this_ptr, int32_t val) {
+       LDKRecord this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       Record_set_line(&this_ptr_conv, val);
+}
+
+static inline uint64_t Record_clone_ptr(LDKRecord *NONNULL_PTR arg) {
+       LDKRecord ret_var = Record_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Record_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKRecord arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = Record_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Record_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKRecord orig_conv;
+       orig_conv.inner = (void*)(orig & (~1));
+       orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       LDKRecord ret_var = Record_clone(&orig_conv);
+       uint64_t ret_ref = 0;
+       CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+       CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = (uint64_t)ret_var.inner;
+       if (ret_var.is_owned) {
+               ret_ref |= 1;
+       }
+       return ret_ref;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Logger_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
        if ((this_ptr & 1) != 0) return;
        void* this_ptr_ptr = (void*)(((uint64_t)this_ptr) & ~1);
@@ -17777,6 +20184,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeConfig_1free(J
        LDKChannelHandshakeConfig this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelHandshakeConfig_free(this_obj_conv);
 }
 
@@ -17784,6 +20192,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeConfig_1get
        LDKChannelHandshakeConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = ChannelHandshakeConfig_get_minimum_depth(&this_ptr_conv);
        return ret_val;
 }
@@ -17792,6 +20201,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeConfig_1set_1m
        LDKChannelHandshakeConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelHandshakeConfig_set_minimum_depth(&this_ptr_conv, val);
 }
 
@@ -17799,6 +20209,7 @@ JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeConfig_1get
        LDKChannelHandshakeConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = ChannelHandshakeConfig_get_our_to_self_delay(&this_ptr_conv);
        return ret_val;
 }
@@ -17807,6 +20218,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeConfig_1set_1o
        LDKChannelHandshakeConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelHandshakeConfig_set_our_to_self_delay(&this_ptr_conv, val);
 }
 
@@ -17814,6 +20226,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeConfig_1get
        LDKChannelHandshakeConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelHandshakeConfig_get_our_htlc_minimum_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -17822,6 +20235,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeConfig_1set_1o
        LDKChannelHandshakeConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelHandshakeConfig_set_our_htlc_minimum_msat(&this_ptr_conv, val);
 }
 
@@ -17830,6 +20244,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeConfig_1new
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -17837,14 +20252,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeConfig_1new
        return ret_ref;
 }
 
+static inline uint64_t ChannelHandshakeConfig_clone_ptr(LDKChannelHandshakeConfig *NONNULL_PTR arg) {
+       LDKChannelHandshakeConfig ret_var = ChannelHandshakeConfig_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeConfig_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKChannelHandshakeConfig arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChannelHandshakeConfig_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeConfig_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKChannelHandshakeConfig orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChannelHandshakeConfig ret_var = ChannelHandshakeConfig_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -17857,6 +20295,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeConfig_1def
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -17868,6 +20307,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeLimits_1free(J
        LDKChannelHandshakeLimits this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelHandshakeLimits_free(this_obj_conv);
 }
 
@@ -17875,6 +20315,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeLimits_1get
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelHandshakeLimits_get_min_funding_satoshis(&this_ptr_conv);
        return ret_val;
 }
@@ -17883,6 +20324,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeLimits_1set_1m
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelHandshakeLimits_set_min_funding_satoshis(&this_ptr_conv, val);
 }
 
@@ -17890,6 +20332,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeLimits_1get
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelHandshakeLimits_get_max_htlc_minimum_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -17898,6 +20341,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeLimits_1set_1m
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelHandshakeLimits_set_max_htlc_minimum_msat(&this_ptr_conv, val);
 }
 
@@ -17905,6 +20349,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeLimits_1get
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelHandshakeLimits_get_min_max_htlc_value_in_flight_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -17913,6 +20358,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeLimits_1set_1m
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelHandshakeLimits_set_min_max_htlc_value_in_flight_msat(&this_ptr_conv, val);
 }
 
@@ -17920,6 +20366,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeLimits_1get
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelHandshakeLimits_get_max_channel_reserve_satoshis(&this_ptr_conv);
        return ret_val;
 }
@@ -17928,6 +20375,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeLimits_1set_1m
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelHandshakeLimits_set_max_channel_reserve_satoshis(&this_ptr_conv, val);
 }
 
@@ -17935,6 +20383,7 @@ JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeLimits_1get
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = ChannelHandshakeLimits_get_min_max_accepted_htlcs(&this_ptr_conv);
        return ret_val;
 }
@@ -17943,6 +20392,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeLimits_1set_1m
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelHandshakeLimits_set_min_max_accepted_htlcs(&this_ptr_conv, val);
 }
 
@@ -17950,6 +20400,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeLimits_1get
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = ChannelHandshakeLimits_get_max_minimum_depth(&this_ptr_conv);
        return ret_val;
 }
@@ -17958,6 +20409,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeLimits_1set_1m
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelHandshakeLimits_set_max_minimum_depth(&this_ptr_conv, val);
 }
 
@@ -17965,6 +20417,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeLimits_1ge
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        jboolean ret_val = ChannelHandshakeLimits_get_force_announced_channel_preference(&this_ptr_conv);
        return ret_val;
 }
@@ -17973,6 +20426,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeLimits_1set_1f
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelHandshakeLimits_set_force_announced_channel_preference(&this_ptr_conv, val);
 }
 
@@ -17980,6 +20434,7 @@ JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeLimits_1get
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = ChannelHandshakeLimits_get_their_to_self_delay(&this_ptr_conv);
        return ret_val;
 }
@@ -17988,6 +20443,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeLimits_1set_1t
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelHandshakeLimits_set_their_to_self_delay(&this_ptr_conv, val);
 }
 
@@ -17996,6 +20452,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeLimits_1new
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18003,14 +20460,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeLimits_1new
        return ret_ref;
 }
 
+static inline uint64_t ChannelHandshakeLimits_clone_ptr(LDKChannelHandshakeLimits *NONNULL_PTR arg) {
+       LDKChannelHandshakeLimits ret_var = ChannelHandshakeLimits_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeLimits_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKChannelHandshakeLimits arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChannelHandshakeLimits_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeLimits_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKChannelHandshakeLimits orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChannelHandshakeLimits ret_var = ChannelHandshakeLimits_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18023,6 +20503,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeLimits_1def
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18034,6 +20515,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelConfig_1free(JNIEnv *en
        LDKChannelConfig this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelConfig_free(this_obj_conv);
 }
 
@@ -18041,6 +20523,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_ChannelConfig_1get_1forward
        LDKChannelConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = ChannelConfig_get_forwarding_fee_proportional_millionths(&this_ptr_conv);
        return ret_val;
 }
@@ -18049,6 +20532,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelConfig_1set_1forwarding
        LDKChannelConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelConfig_set_forwarding_fee_proportional_millionths(&this_ptr_conv, val);
 }
 
@@ -18056,6 +20540,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_ChannelConfig_1get_1forward
        LDKChannelConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = ChannelConfig_get_forwarding_fee_base_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -18064,6 +20549,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelConfig_1set_1forwarding
        LDKChannelConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelConfig_set_forwarding_fee_base_msat(&this_ptr_conv, val);
 }
 
@@ -18071,6 +20557,7 @@ JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_ChannelConfig_1get_1cltv_1e
        LDKChannelConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = ChannelConfig_get_cltv_expiry_delta(&this_ptr_conv);
        return ret_val;
 }
@@ -18079,6 +20566,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelConfig_1set_1cltv_1expi
        LDKChannelConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelConfig_set_cltv_expiry_delta(&this_ptr_conv, val);
 }
 
@@ -18086,6 +20574,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelConfig_1get_1announ
        LDKChannelConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        jboolean ret_val = ChannelConfig_get_announced_channel(&this_ptr_conv);
        return ret_val;
 }
@@ -18094,6 +20583,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelConfig_1set_1announced_
        LDKChannelConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelConfig_set_announced_channel(&this_ptr_conv, val);
 }
 
@@ -18101,6 +20591,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelConfig_1get_1commit
        LDKChannelConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        jboolean ret_val = ChannelConfig_get_commit_upfront_shutdown_pubkey(&this_ptr_conv);
        return ret_val;
 }
@@ -18109,6 +20600,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelConfig_1set_1commit_1up
        LDKChannelConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelConfig_set_commit_upfront_shutdown_pubkey(&this_ptr_conv, val);
 }
 
@@ -18116,6 +20608,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelConfig_1get_1max_1du
        LDKChannelConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelConfig_get_max_dust_htlc_exposure_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -18124,6 +20617,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelConfig_1set_1max_1dust_
        LDKChannelConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelConfig_set_max_dust_htlc_exposure_msat(&this_ptr_conv, val);
 }
 
@@ -18131,6 +20625,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelConfig_1get_1force_1
        LDKChannelConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelConfig_get_force_close_avoidance_max_fee_satoshis(&this_ptr_conv);
        return ret_val;
 }
@@ -18139,6 +20634,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelConfig_1set_1force_1clo
        LDKChannelConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelConfig_set_force_close_avoidance_max_fee_satoshis(&this_ptr_conv, val);
 }
 
@@ -18147,6 +20643,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelConfig_1new(JNIEnv *
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18154,14 +20651,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelConfig_1new(JNIEnv *
        return ret_ref;
 }
 
+static inline uint64_t ChannelConfig_clone_ptr(LDKChannelConfig *NONNULL_PTR arg) {
+       LDKChannelConfig ret_var = ChannelConfig_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelConfig_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKChannelConfig arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChannelConfig_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelConfig_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKChannelConfig orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChannelConfig ret_var = ChannelConfig_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18174,6 +20694,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelConfig_1default(JNIE
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18185,6 +20706,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelConfig_1write(JN
        LDKChannelConfig obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ChannelConfig_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -18206,6 +20728,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UserConfig_1free(JNIEnv *env,
        LDKUserConfig this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        UserConfig_free(this_obj_conv);
 }
 
@@ -18213,10 +20736,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UserConfig_1get_1own_1chann
        LDKUserConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelHandshakeConfig ret_var = UserConfig_get_own_channel_config(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18228,9 +20753,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UserConfig_1set_1own_1channel_
        LDKUserConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelHandshakeConfig val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = ChannelHandshakeConfig_clone(&val_conv);
        UserConfig_set_own_channel_config(&this_ptr_conv, val_conv);
 }
@@ -18239,10 +20766,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UserConfig_1get_1peer_1chan
        LDKUserConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelHandshakeLimits ret_var = UserConfig_get_peer_channel_config_limits(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18254,9 +20783,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UserConfig_1set_1peer_1channel
        LDKUserConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelHandshakeLimits val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = ChannelHandshakeLimits_clone(&val_conv);
        UserConfig_set_peer_channel_config_limits(&this_ptr_conv, val_conv);
 }
@@ -18265,10 +20796,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UserConfig_1get_1channel_1o
        LDKUserConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelConfig ret_var = UserConfig_get_channel_options(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18280,9 +20813,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UserConfig_1set_1channel_1opti
        LDKUserConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelConfig val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = ChannelConfig_clone(&val_conv);
        UserConfig_set_channel_options(&this_ptr_conv, val_conv);
 }
@@ -18291,6 +20826,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_UserConfig_1get_1accept_1f
        LDKUserConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        jboolean ret_val = UserConfig_get_accept_forwards_to_priv_channels(&this_ptr_conv);
        return ret_val;
 }
@@ -18299,6 +20835,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UserConfig_1set_1accept_1forwa
        LDKUserConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UserConfig_set_accept_forwards_to_priv_channels(&this_ptr_conv, val);
 }
 
@@ -18306,19 +20843,23 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UserConfig_1new(JNIEnv *env
        LDKChannelHandshakeConfig own_channel_config_arg_conv;
        own_channel_config_arg_conv.inner = (void*)(own_channel_config_arg & (~1));
        own_channel_config_arg_conv.is_owned = (own_channel_config_arg & 1) || (own_channel_config_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(own_channel_config_arg_conv);
        own_channel_config_arg_conv = ChannelHandshakeConfig_clone(&own_channel_config_arg_conv);
        LDKChannelHandshakeLimits peer_channel_config_limits_arg_conv;
        peer_channel_config_limits_arg_conv.inner = (void*)(peer_channel_config_limits_arg & (~1));
        peer_channel_config_limits_arg_conv.is_owned = (peer_channel_config_limits_arg & 1) || (peer_channel_config_limits_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(peer_channel_config_limits_arg_conv);
        peer_channel_config_limits_arg_conv = ChannelHandshakeLimits_clone(&peer_channel_config_limits_arg_conv);
        LDKChannelConfig channel_options_arg_conv;
        channel_options_arg_conv.inner = (void*)(channel_options_arg & (~1));
        channel_options_arg_conv.is_owned = (channel_options_arg & 1) || (channel_options_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_options_arg_conv);
        channel_options_arg_conv = ChannelConfig_clone(&channel_options_arg_conv);
        LDKUserConfig ret_var = UserConfig_new(own_channel_config_arg_conv, peer_channel_config_limits_arg_conv, channel_options_arg_conv, accept_forwards_to_priv_channels_arg);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18326,14 +20867,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UserConfig_1new(JNIEnv *env
        return ret_ref;
 }
 
+static inline uint64_t UserConfig_clone_ptr(LDKUserConfig *NONNULL_PTR arg) {
+       LDKUserConfig ret_var = UserConfig_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UserConfig_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKUserConfig arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = UserConfig_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UserConfig_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKUserConfig orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKUserConfig ret_var = UserConfig_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18346,6 +20910,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UserConfig_1default(JNIEnv
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18357,17 +20922,41 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BestBlock_1free(JNIEnv *env, j
        LDKBestBlock this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        BestBlock_free(this_obj_conv);
 }
 
+static inline uint64_t BestBlock_clone_ptr(LDKBestBlock *NONNULL_PTR arg) {
+       LDKBestBlock ret_var = BestBlock_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BestBlock_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKBestBlock arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = BestBlock_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BestBlock_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKBestBlock orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKBestBlock ret_var = BestBlock_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18381,6 +20970,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BestBlock_1from_1genesis(JN
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18396,6 +20986,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BestBlock_1new(JNIEnv *env,
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18407,6 +20998,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_BestBlock_1block_1hash(
        LDKBestBlock this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, BestBlock_block_hash(&this_arg_conv).data);
        return ret_arr;
@@ -18416,6 +21008,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_BestBlock_1height(JNIEnv *e
        LDKBestBlock this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int32_t ret_val = BestBlock_height(&this_arg_conv);
        return ret_val;
 }
@@ -18501,6 +21094,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_WatchedOutput_1free(JNIEnv *en
        LDKWatchedOutput this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        WatchedOutput_free(this_obj_conv);
 }
 
@@ -18508,6 +21102,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_WatchedOutput_1get_1blo
        LDKWatchedOutput this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, WatchedOutput_get_block_hash(&this_ptr_conv).data);
        return ret_arr;
@@ -18517,6 +21112,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_WatchedOutput_1set_1block_1has
        LDKWatchedOutput this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -18527,10 +21123,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_WatchedOutput_1get_1outpoin
        LDKWatchedOutput this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKOutPoint ret_var = WatchedOutput_get_outpoint(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18542,9 +21140,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_WatchedOutput_1set_1outpoint(J
        LDKWatchedOutput this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKOutPoint val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = OutPoint_clone(&val_conv);
        WatchedOutput_set_outpoint(&this_ptr_conv, val_conv);
 }
@@ -18553,6 +21153,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_WatchedOutput_1get_1scr
        LDKWatchedOutput this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKu8slice ret_var = WatchedOutput_get_script_pubkey(&this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -18563,6 +21164,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_WatchedOutput_1set_1script_1pu
        LDKWatchedOutput this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_u8Z val_ref;
        val_ref.datalen = (*env)->GetArrayLength(env, val);
        val_ref.data = MALLOC(val_ref.datalen, "LDKCVec_u8Z Bytes");
@@ -18577,6 +21179,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_WatchedOutput_1new(JNIEnv *
        LDKOutPoint outpoint_arg_conv;
        outpoint_arg_conv.inner = (void*)(outpoint_arg & (~1));
        outpoint_arg_conv.is_owned = (outpoint_arg & 1) || (outpoint_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_arg_conv);
        outpoint_arg_conv = OutPoint_clone(&outpoint_arg_conv);
        LDKCVec_u8Z script_pubkey_arg_ref;
        script_pubkey_arg_ref.datalen = (*env)->GetArrayLength(env, script_pubkey_arg);
@@ -18586,6 +21189,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_WatchedOutput_1new(JNIEnv *
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18593,14 +21197,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_WatchedOutput_1new(JNIEnv *
        return ret_ref;
 }
 
+static inline uint64_t WatchedOutput_clone_ptr(LDKWatchedOutput *NONNULL_PTR arg) {
+       LDKWatchedOutput ret_var = WatchedOutput_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_WatchedOutput_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKWatchedOutput arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = WatchedOutput_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_WatchedOutput_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKWatchedOutput orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKWatchedOutput ret_var = WatchedOutput_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18612,6 +21239,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_WatchedOutput_1hash(JNIEnv
        LDKWatchedOutput o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = WatchedOutput_hash(&o_conv);
        return ret_val;
 }
@@ -18666,17 +21294,41 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MonitorUpdateId_1free(JNIEnv *
        LDKMonitorUpdateId this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        MonitorUpdateId_free(this_obj_conv);
 }
 
+static inline uint64_t MonitorUpdateId_clone_ptr(LDKMonitorUpdateId *NONNULL_PTR arg) {
+       LDKMonitorUpdateId ret_var = MonitorUpdateId_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MonitorUpdateId_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKMonitorUpdateId arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = MonitorUpdateId_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MonitorUpdateId_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKMonitorUpdateId orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKMonitorUpdateId ret_var = MonitorUpdateId_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18688,6 +21340,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MonitorUpdateId_1hash(JNIEn
        LDKMonitorUpdateId o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = MonitorUpdateId_hash(&o_conv);
        return ret_val;
 }
@@ -18696,9 +21349,11 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_MonitorUpdateId_1eq(JNIEnv
        LDKMonitorUpdateId a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKMonitorUpdateId b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = MonitorUpdateId_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -18716,6 +21371,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LockedChannelMonitor_1free(JNI
        LDKLockedChannelMonitor this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        LockedChannelMonitor_free(this_obj_conv);
 }
 
@@ -18723,6 +21379,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChainMonitor_1free(JNIEnv *env
        LDKChainMonitor this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChainMonitor_free(this_obj_conv);
 }
 
@@ -18770,6 +21427,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChainMonitor_1new(JNIEnv *e
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18781,6 +21439,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_ChainMonitor_1get_1cla
        LDKChainMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCVec_ChannelDetailsZ ignored_channels_constr;
        ignored_channels_constr.datalen = (*env)->GetArrayLength(env, ignored_channels);
        if (ignored_channels_constr.datalen > 0)
@@ -18793,6 +21452,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_ChainMonitor_1get_1cla
                LDKChannelDetails ignored_channels_conv_16_conv;
                ignored_channels_conv_16_conv.inner = (void*)(ignored_channels_conv_16 & (~1));
                ignored_channels_conv_16_conv.is_owned = (ignored_channels_conv_16 & 1) || (ignored_channels_conv_16 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ignored_channels_conv_16_conv);
                ignored_channels_conv_16_conv = ChannelDetails_clone(&ignored_channels_conv_16_conv);
                ignored_channels_constr.data[q] = ignored_channels_conv_16_conv;
        }
@@ -18816,9 +21476,11 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChainMonitor_1get_1monitor(
        LDKChainMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKOutPoint funding_txo_conv;
        funding_txo_conv.inner = (void*)(funding_txo & (~1));
        funding_txo_conv.is_owned = (funding_txo & 1) || (funding_txo == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_txo_conv);
        funding_txo_conv = OutPoint_clone(&funding_txo_conv);
        LDKCResult_LockedChannelMonitorNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_LockedChannelMonitorNoneZ), "LDKCResult_LockedChannelMonitorNoneZ");
        *ret_conv = ChainMonitor_get_monitor(&this_arg_conv, funding_txo_conv);
@@ -18829,6 +21491,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_ChainMonitor_1list_1mo
        LDKChainMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCVec_OutPointZ ret_var = ChainMonitor_list_monitors(&this_arg_conv);
        int64_tArray ret_arr = NULL;
        ret_arr = (*env)->NewLongArray(env, ret_var.datalen);
@@ -18838,6 +21501,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_ChainMonitor_1list_1mo
                uint64_t ret_conv_10_ref = 0;
                CHECK((((uint64_t)ret_conv_10_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_conv_10_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_10_var);
                ret_conv_10_ref = (uint64_t)ret_conv_10_var.inner;
                if (ret_conv_10_var.is_owned) {
                        ret_conv_10_ref |= 1;
@@ -18853,13 +21517,16 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChainMonitor_1channel_1moni
        LDKChainMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKOutPoint funding_txo_conv;
        funding_txo_conv.inner = (void*)(funding_txo & (~1));
        funding_txo_conv.is_owned = (funding_txo & 1) || (funding_txo == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_txo_conv);
        funding_txo_conv = OutPoint_clone(&funding_txo_conv);
        LDKMonitorUpdateId completed_update_id_conv;
        completed_update_id_conv.inner = (void*)(completed_update_id & (~1));
        completed_update_id_conv.is_owned = (completed_update_id & 1) || (completed_update_id == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(completed_update_id_conv);
        completed_update_id_conv = MonitorUpdateId_clone(&completed_update_id_conv);
        LDKCResult_NoneAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneAPIErrorZ), "LDKCResult_NoneAPIErrorZ");
        *ret_conv = ChainMonitor_channel_monitor_updated(&this_arg_conv, funding_txo_conv, completed_update_id_conv);
@@ -18870,6 +21537,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChainMonitor_1as_1Listen(JN
        LDKChainMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKListen* ret_ret = MALLOC(sizeof(LDKListen), "LDKListen");
        *ret_ret = ChainMonitor_as_Listen(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -18879,6 +21547,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChainMonitor_1as_1Confirm(J
        LDKChainMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKConfirm* ret_ret = MALLOC(sizeof(LDKConfirm), "LDKConfirm");
        *ret_ret = ChainMonitor_as_Confirm(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -18888,6 +21557,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChainMonitor_1as_1Watch(JNI
        LDKChainMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKWatch* ret_ret = MALLOC(sizeof(LDKWatch), "LDKWatch");
        *ret_ret = ChainMonitor_as_Watch(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -18897,6 +21567,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChainMonitor_1as_1EventsPro
        LDKChainMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKEventsProvider* ret_ret = MALLOC(sizeof(LDKEventsProvider), "LDKEventsProvider");
        *ret_ret = ChainMonitor_as_EventsProvider(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -18906,6 +21577,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMonitorUpdate_1free(JNI
        LDKChannelMonitorUpdate this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelMonitorUpdate_free(this_obj_conv);
 }
 
@@ -18913,6 +21585,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelMonitorUpdate_1get_1
        LDKChannelMonitorUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelMonitorUpdate_get_update_id(&this_ptr_conv);
        return ret_val;
 }
@@ -18921,17 +21594,41 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMonitorUpdate_1set_1upd
        LDKChannelMonitorUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelMonitorUpdate_set_update_id(&this_ptr_conv, val);
 }
 
+static inline uint64_t ChannelMonitorUpdate_clone_ptr(LDKChannelMonitorUpdate *NONNULL_PTR arg) {
+       LDKChannelMonitorUpdate ret_var = ChannelMonitorUpdate_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelMonitorUpdate_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKChannelMonitorUpdate arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChannelMonitorUpdate_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelMonitorUpdate_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKChannelMonitorUpdate orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChannelMonitorUpdate ret_var = ChannelMonitorUpdate_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18943,6 +21640,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelMonitorUpdate_1w
        LDKChannelMonitorUpdate obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ChannelMonitorUpdate_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -18964,6 +21662,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MonitorUpdateError_1free(JNIEn
        LDKMonitorUpdateError this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        MonitorUpdateError_free(this_obj_conv);
 }
 
@@ -18971,6 +21670,7 @@ JNIEXPORT jstring JNICALL Java_org_ldk_impl_bindings_MonitorUpdateError_1get_1a(
        LDKMonitorUpdateError this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKStr ret_str = MonitorUpdateError_get_a(&this_ptr_conv);
        jstring ret_conv = str_ref_to_java(env, ret_str.chars, ret_str.len);
        Str_free(ret_str);
@@ -18981,6 +21681,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MonitorUpdateError_1set_1a(JNI
        LDKMonitorUpdateError this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKStr val_conv = java_to_owned_str(env, val);
        MonitorUpdateError_set_a(&this_ptr_conv, val_conv);
 }
@@ -18991,6 +21692,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MonitorUpdateError_1new(JNI
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18998,14 +21700,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MonitorUpdateError_1new(JNI
        return ret_ref;
 }
 
+static inline uint64_t MonitorUpdateError_clone_ptr(LDKMonitorUpdateError *NONNULL_PTR arg) {
+       LDKMonitorUpdateError ret_var = MonitorUpdateError_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MonitorUpdateError_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKMonitorUpdateError arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = MonitorUpdateError_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MonitorUpdateError_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKMonitorUpdateError orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKMonitorUpdateError ret_var = MonitorUpdateError_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -19022,6 +21747,18 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MonitorEvent_1free(JNIEnv *env
        MonitorEvent_free(this_ptr_conv);
 }
 
+static inline uint64_t MonitorEvent_clone_ptr(LDKMonitorEvent *NONNULL_PTR arg) {
+       LDKMonitorEvent *ret_copy = MALLOC(sizeof(LDKMonitorEvent), "LDKMonitorEvent");
+       *ret_copy = MonitorEvent_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MonitorEvent_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKMonitorEvent* arg_conv = (LDKMonitorEvent*)arg;
+       int64_t ret_val = MonitorEvent_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MonitorEvent_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKMonitorEvent* orig_conv = (LDKMonitorEvent*)orig;
        LDKMonitorEvent *ret_copy = MALLOC(sizeof(LDKMonitorEvent), "LDKMonitorEvent");
@@ -19034,6 +21771,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MonitorEvent_1htlcevent(JNI
        LDKHTLCUpdate a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = (a & 1) || (a == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv = HTLCUpdate_clone(&a_conv);
        LDKMonitorEvent *ret_copy = MALLOC(sizeof(LDKMonitorEvent), "LDKMonitorEvent");
        *ret_copy = MonitorEvent_htlcevent(a_conv);
@@ -19045,6 +21783,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MonitorEvent_1commitment_1t
        LDKOutPoint a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = (a & 1) || (a == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv = OutPoint_clone(&a_conv);
        LDKMonitorEvent *ret_copy = MALLOC(sizeof(LDKMonitorEvent), "LDKMonitorEvent");
        *ret_copy = MonitorEvent_commitment_tx_confirmed(a_conv);
@@ -19056,6 +21795,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MonitorEvent_1update_1compl
        LDKOutPoint funding_txo_conv;
        funding_txo_conv.inner = (void*)(funding_txo & (~1));
        funding_txo_conv.is_owned = (funding_txo & 1) || (funding_txo == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_txo_conv);
        funding_txo_conv = OutPoint_clone(&funding_txo_conv);
        LDKMonitorEvent *ret_copy = MALLOC(sizeof(LDKMonitorEvent), "LDKMonitorEvent");
        *ret_copy = MonitorEvent_update_completed(funding_txo_conv, monitor_update_id);
@@ -19067,6 +21807,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MonitorEvent_1update_1faile
        LDKOutPoint a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = (a & 1) || (a == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv = OutPoint_clone(&a_conv);
        LDKMonitorEvent *ret_copy = MALLOC(sizeof(LDKMonitorEvent), "LDKMonitorEvent");
        *ret_copy = MonitorEvent_update_failed(a_conv);
@@ -19083,21 +21824,55 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_MonitorEvent_1write(JNI
        return ret_arr;
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MonitorEvent_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
+       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
+       LDKCResult_COption_MonitorEventZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_MonitorEventZDecodeErrorZ), "LDKCResult_COption_MonitorEventZDecodeErrorZ");
+       *ret_conv = MonitorEvent_read(ser_ref);
+       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
+       return (uint64_t)ret_conv;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_HTLCUpdate_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
        LDKHTLCUpdate this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        HTLCUpdate_free(this_obj_conv);
 }
 
+static inline uint64_t HTLCUpdate_clone_ptr(LDKHTLCUpdate *NONNULL_PTR arg) {
+       LDKHTLCUpdate ret_var = HTLCUpdate_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_HTLCUpdate_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKHTLCUpdate arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = HTLCUpdate_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_HTLCUpdate_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKHTLCUpdate orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKHTLCUpdate ret_var = HTLCUpdate_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -19109,6 +21884,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_HTLCUpdate_1write(JNIEn
        LDKHTLCUpdate obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = HTLCUpdate_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -19135,6 +21911,18 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Balance_1free(JNIEnv *env, jcl
        Balance_free(this_ptr_conv);
 }
 
+static inline uint64_t Balance_clone_ptr(LDKBalance *NONNULL_PTR arg) {
+       LDKBalance *ret_copy = MALLOC(sizeof(LDKBalance), "LDKBalance");
+       *ret_copy = Balance_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Balance_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKBalance* arg_conv = (LDKBalance*)arg;
+       int64_t ret_val = Balance_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Balance_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKBalance* orig_conv = (LDKBalance*)orig;
        LDKBalance *ret_copy = MALLOC(sizeof(LDKBalance), "LDKBalance");
@@ -19182,17 +21970,41 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1free(JNIEnv *e
        LDKChannelMonitor this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelMonitor_free(this_obj_conv);
 }
 
+static inline uint64_t ChannelMonitor_clone_ptr(LDKChannelMonitor *NONNULL_PTR arg) {
+       LDKChannelMonitor ret_var = ChannelMonitor_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKChannelMonitor arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChannelMonitor_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKChannelMonitor orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChannelMonitor ret_var = ChannelMonitor_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -19204,6 +22016,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1write(J
        LDKChannelMonitor obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ChannelMonitor_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -19215,9 +22028,11 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1update_1mon
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKChannelMonitorUpdate updates_conv;
        updates_conv.inner = (void*)(updates & (~1));
        updates_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(updates_conv);
        void* broadcaster_ptr = (void*)(((uint64_t)broadcaster) & ~1);
        if (!(broadcaster & 1)) { CHECK_ACCESS(broadcaster_ptr); }
        LDKBroadcasterInterface* broadcaster_conv = (LDKBroadcasterInterface*)broadcaster_ptr;
@@ -19236,6 +22051,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1get_1latest
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = ChannelMonitor_get_latest_update_id(&this_arg_conv);
        return ret_val;
 }
@@ -19244,6 +22060,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1get_1fundin
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKC2Tuple_OutPointScriptZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OutPointScriptZ), "LDKC2Tuple_OutPointScriptZ");
        *ret_conv = ChannelMonitor_get_funding_txo(&this_arg_conv);
        return ((uint64_t)ret_conv);
@@ -19253,6 +22070,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1get_1o
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ ret_var = ChannelMonitor_get_outputs_to_watch(&this_arg_conv);
        int64_tArray ret_arr = NULL;
        ret_arr = (*env)->NewLongArray(env, ret_var.datalen);
@@ -19271,6 +22089,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1load_1outputs_
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        void* filter_ptr = (void*)(((uint64_t)filter) & ~1);
        if (!(filter & 1)) { CHECK_ACCESS(filter_ptr); }
        LDKFilter* filter_conv = (LDKFilter*)filter_ptr;
@@ -19281,6 +22100,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1get_1a
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCVec_MonitorEventZ ret_var = ChannelMonitor_get_and_clear_pending_monitor_events(&this_arg_conv);
        int64_tArray ret_arr = NULL;
        ret_arr = (*env)->NewLongArray(env, ret_var.datalen);
@@ -19300,6 +22120,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1get_1a
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCVec_EventZ ret_var = ChannelMonitor_get_and_clear_pending_events(&this_arg_conv);
        int64_tArray ret_arr = NULL;
        ret_arr = (*env)->NewLongArray(env, ret_var.datalen);
@@ -19319,6 +22140,7 @@ JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1get_1l
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        void* logger_ptr = (void*)(((uint64_t)logger) & ~1);
        if (!(logger & 1)) { CHECK_ACCESS(logger_ptr); }
        LDKLogger* logger_conv = (LDKLogger*)logger_ptr;
@@ -19342,6 +22164,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1block_
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char header_arr[80];
        CHECK((*env)->GetArrayLength(env, header) == 80);
        (*env)->GetByteArrayRegion(env, header, 0, 80, header_arr);
@@ -19401,6 +22224,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1block_1disconn
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char header_arr[80];
        CHECK((*env)->GetArrayLength(env, header) == 80);
        (*env)->GetByteArrayRegion(env, header, 0, 80, header_arr);
@@ -19433,6 +22257,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1transa
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char header_arr[80];
        CHECK((*env)->GetArrayLength(env, header) == 80);
        (*env)->GetByteArrayRegion(env, header, 0, 80, header_arr);
@@ -19492,6 +22317,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1transaction_1u
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char txid_arr[32];
        CHECK((*env)->GetArrayLength(env, txid) == 32);
        (*env)->GetByteArrayRegion(env, txid, 0, 32, txid_arr);
@@ -19524,6 +22350,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1best_1
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char header_arr[80];
        CHECK((*env)->GetArrayLength(env, header) == 80);
        (*env)->GetByteArrayRegion(env, header, 0, 80, header_arr);
@@ -19567,6 +22394,7 @@ JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1get_1r
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCVec_TxidZ ret_var = ChannelMonitor_get_relevant_txids(&this_arg_conv);
        jobjectArray ret_arr = NULL;
        ret_arr = (*env)->NewObjectArray(env, ret_var.datalen, arr_of_B_clz, NULL);
@@ -19585,10 +22413,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1current_1be
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKBestBlock ret_var = ChannelMonitor_current_best_block(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -19600,6 +22430,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1get_1c
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCVec_BalanceZ ret_var = ChannelMonitor_get_claimable_balances(&this_arg_conv);
        int64_tArray ret_arr = NULL;
        ret_arr = (*env)->NewLongArray(env, ret_var.datalen);
@@ -19632,6 +22463,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OutPoint_1free(JNIEnv *env, jc
        LDKOutPoint this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        OutPoint_free(this_obj_conv);
 }
 
@@ -19639,6 +22471,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_OutPoint_1get_1txid(JNI
        LDKOutPoint this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *OutPoint_get_txid(&this_ptr_conv));
        return ret_arr;
@@ -19648,6 +22481,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OutPoint_1set_1txid(JNIEnv *en
        LDKOutPoint this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -19658,6 +22492,7 @@ JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_OutPoint_1get_1index(JNIEnv
        LDKOutPoint this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = OutPoint_get_index(&this_ptr_conv);
        return ret_val;
 }
@@ -19666,6 +22501,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OutPoint_1set_1index(JNIEnv *e
        LDKOutPoint this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        OutPoint_set_index(&this_ptr_conv, val);
 }
 
@@ -19677,6 +22513,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OutPoint_1new(JNIEnv *env,
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -19684,14 +22521,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OutPoint_1new(JNIEnv *env,
        return ret_ref;
 }
 
+static inline uint64_t OutPoint_clone_ptr(LDKOutPoint *NONNULL_PTR arg) {
+       LDKOutPoint ret_var = OutPoint_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OutPoint_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKOutPoint arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = OutPoint_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OutPoint_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKOutPoint orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKOutPoint ret_var = OutPoint_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -19703,9 +22563,11 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_OutPoint_1eq(JNIEnv *env,
        LDKOutPoint a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKOutPoint b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = OutPoint_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -19714,6 +22576,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OutPoint_1hash(JNIEnv *env,
        LDKOutPoint o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = OutPoint_hash(&o_conv);
        return ret_val;
 }
@@ -19722,6 +22585,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_OutPoint_1to_1channel_1
        LDKOutPoint this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, OutPoint_to_channel_id(&this_arg_conv).data);
        return ret_arr;
@@ -19731,6 +22595,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_OutPoint_1write(JNIEnv
        LDKOutPoint obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = OutPoint_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -19752,6 +22617,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor
        LDKDelayedPaymentOutputDescriptor this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        DelayedPaymentOutputDescriptor_free(this_obj_conv);
 }
 
@@ -19759,10 +22625,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescrip
        LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKOutPoint ret_var = DelayedPaymentOutputDescriptor_get_outpoint(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -19774,9 +22642,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor
        LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKOutPoint val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = OutPoint_clone(&val_conv);
        DelayedPaymentOutputDescriptor_set_outpoint(&this_ptr_conv, val_conv);
 }
@@ -19785,6 +22655,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDes
        LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, DelayedPaymentOutputDescriptor_get_per_commitment_point(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -19794,6 +22665,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor
        LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -19804,6 +22676,7 @@ JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescrip
        LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = DelayedPaymentOutputDescriptor_get_to_self_delay(&this_ptr_conv);
        return ret_val;
 }
@@ -19812,6 +22685,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor
        LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        DelayedPaymentOutputDescriptor_set_to_self_delay(&this_ptr_conv, val);
 }
 
@@ -19819,6 +22693,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor
        LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKTxOut val_conv = *(LDKTxOut*)(val_ptr);
@@ -19830,6 +22705,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDes
        LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, DelayedPaymentOutputDescriptor_get_revocation_pubkey(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -19839,6 +22715,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor
        LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -19849,6 +22726,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDes
        LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *DelayedPaymentOutputDescriptor_get_channel_keys_id(&this_ptr_conv));
        return ret_arr;
@@ -19858,6 +22736,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor
        LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -19868,6 +22747,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescrip
        LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = DelayedPaymentOutputDescriptor_get_channel_value_satoshis(&this_ptr_conv);
        return ret_val;
 }
@@ -19876,6 +22756,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor
        LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        DelayedPaymentOutputDescriptor_set_channel_value_satoshis(&this_ptr_conv, val);
 }
 
@@ -19883,6 +22764,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescrip
        LDKOutPoint outpoint_arg_conv;
        outpoint_arg_conv.inner = (void*)(outpoint_arg & (~1));
        outpoint_arg_conv.is_owned = (outpoint_arg & 1) || (outpoint_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_arg_conv);
        outpoint_arg_conv = OutPoint_clone(&outpoint_arg_conv);
        LDKPublicKey per_commitment_point_arg_ref;
        CHECK((*env)->GetArrayLength(env, per_commitment_point_arg) == 33);
@@ -19901,6 +22783,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescrip
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -19908,14 +22791,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescrip
        return ret_ref;
 }
 
+static inline uint64_t DelayedPaymentOutputDescriptor_clone_ptr(LDKDelayedPaymentOutputDescriptor *NONNULL_PTR arg) {
+       LDKDelayedPaymentOutputDescriptor ret_var = DelayedPaymentOutputDescriptor_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKDelayedPaymentOutputDescriptor arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = DelayedPaymentOutputDescriptor_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKDelayedPaymentOutputDescriptor orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKDelayedPaymentOutputDescriptor ret_var = DelayedPaymentOutputDescriptor_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -19927,6 +22833,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDes
        LDKDelayedPaymentOutputDescriptor obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = DelayedPaymentOutputDescriptor_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -19948,6 +22855,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_
        LDKStaticPaymentOutputDescriptor this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        StaticPaymentOutputDescriptor_free(this_obj_conv);
 }
 
@@ -19955,10 +22863,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescript
        LDKStaticPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKOutPoint ret_var = StaticPaymentOutputDescriptor_get_outpoint(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -19970,9 +22880,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_
        LDKStaticPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKOutPoint val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = OutPoint_clone(&val_conv);
        StaticPaymentOutputDescriptor_set_outpoint(&this_ptr_conv, val_conv);
 }
@@ -19981,6 +22893,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_
        LDKStaticPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKTxOut val_conv = *(LDKTxOut*)(val_ptr);
@@ -19992,6 +22905,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDesc
        LDKStaticPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *StaticPaymentOutputDescriptor_get_channel_keys_id(&this_ptr_conv));
        return ret_arr;
@@ -20001,6 +22915,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_
        LDKStaticPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -20011,6 +22926,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescript
        LDKStaticPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = StaticPaymentOutputDescriptor_get_channel_value_satoshis(&this_ptr_conv);
        return ret_val;
 }
@@ -20019,6 +22935,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_
        LDKStaticPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        StaticPaymentOutputDescriptor_set_channel_value_satoshis(&this_ptr_conv, val);
 }
 
@@ -20026,6 +22943,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescript
        LDKOutPoint outpoint_arg_conv;
        outpoint_arg_conv.inner = (void*)(outpoint_arg & (~1));
        outpoint_arg_conv.is_owned = (outpoint_arg & 1) || (outpoint_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_arg_conv);
        outpoint_arg_conv = OutPoint_clone(&outpoint_arg_conv);
        void* output_arg_ptr = (void*)(((uint64_t)output_arg) & ~1);
        CHECK_ACCESS(output_arg_ptr);
@@ -20038,6 +22956,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescript
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20045,14 +22964,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescript
        return ret_ref;
 }
 
+static inline uint64_t StaticPaymentOutputDescriptor_clone_ptr(LDKStaticPaymentOutputDescriptor *NONNULL_PTR arg) {
+       LDKStaticPaymentOutputDescriptor ret_var = StaticPaymentOutputDescriptor_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKStaticPaymentOutputDescriptor arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = StaticPaymentOutputDescriptor_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKStaticPaymentOutputDescriptor orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKStaticPaymentOutputDescriptor ret_var = StaticPaymentOutputDescriptor_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20064,6 +23006,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDesc
        LDKStaticPaymentOutputDescriptor obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = StaticPaymentOutputDescriptor_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -20090,6 +23033,18 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1fre
        SpendableOutputDescriptor_free(this_ptr_conv);
 }
 
+static inline uint64_t SpendableOutputDescriptor_clone_ptr(LDKSpendableOutputDescriptor *NONNULL_PTR arg) {
+       LDKSpendableOutputDescriptor *ret_copy = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor");
+       *ret_copy = SpendableOutputDescriptor_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKSpendableOutputDescriptor* arg_conv = (LDKSpendableOutputDescriptor*)arg;
+       int64_t ret_val = SpendableOutputDescriptor_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKSpendableOutputDescriptor* orig_conv = (LDKSpendableOutputDescriptor*)orig;
        LDKSpendableOutputDescriptor *ret_copy = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor");
@@ -20102,6 +23057,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1
        LDKOutPoint outpoint_conv;
        outpoint_conv.inner = (void*)(outpoint & (~1));
        outpoint_conv.is_owned = (outpoint & 1) || (outpoint == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_conv);
        outpoint_conv = OutPoint_clone(&outpoint_conv);
        void* output_ptr = (void*)(((uint64_t)output) & ~1);
        CHECK_ACCESS(output_ptr);
@@ -20117,6 +23073,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1
        LDKDelayedPaymentOutputDescriptor a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = (a & 1) || (a == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv = DelayedPaymentOutputDescriptor_clone(&a_conv);
        LDKSpendableOutputDescriptor *ret_copy = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor");
        *ret_copy = SpendableOutputDescriptor_delayed_payment_output(a_conv);
@@ -20128,6 +23085,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1
        LDKStaticPaymentOutputDescriptor a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = (a & 1) || (a == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv = StaticPaymentOutputDescriptor_clone(&a_conv);
        LDKSpendableOutputDescriptor *ret_copy = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor");
        *ret_copy = SpendableOutputDescriptor_static_payment_output(a_conv);
@@ -20163,6 +23121,19 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BaseSign_1free(JNIEnv *env, jc
        BaseSign_free(this_ptr_conv);
 }
 
+static inline uint64_t Sign_clone_ptr(LDKSign *NONNULL_PTR arg) {
+       LDKSign* ret_ret = MALLOC(sizeof(LDKSign), "LDKSign");
+       *ret_ret = Sign_clone(arg);
+       return (uint64_t)ret_ret;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Sign_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       void* arg_ptr = (void*)(((uint64_t)arg) & ~1);
+       if (!(arg & 1)) { CHECK_ACCESS(arg_ptr); }
+       LDKSign* arg_conv = (LDKSign*)arg_ptr;
+       int64_t ret_val = Sign_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Sign_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        void* orig_ptr = (void*)(((uint64_t)orig) & ~1);
        if (!(orig & 1)) { CHECK_ACCESS(orig_ptr); }
@@ -20194,6 +23165,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1free(JNIEnv *e
        LDKInMemorySigner this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        InMemorySigner_free(this_obj_conv);
 }
 
@@ -20201,6 +23173,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1get_1fu
        LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *InMemorySigner_get_funding_key(&this_ptr_conv));
        return ret_arr;
@@ -20210,6 +23183,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1set_1funding_1
        LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSecretKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.bytes);
@@ -20220,6 +23194,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1get_1re
        LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *InMemorySigner_get_revocation_base_key(&this_ptr_conv));
        return ret_arr;
@@ -20229,6 +23204,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1set_1revocatio
        LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSecretKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.bytes);
@@ -20239,6 +23215,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1get_1pa
        LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *InMemorySigner_get_payment_key(&this_ptr_conv));
        return ret_arr;
@@ -20248,6 +23225,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1set_1payment_1
        LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSecretKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.bytes);
@@ -20258,6 +23236,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1get_1de
        LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *InMemorySigner_get_delayed_payment_base_key(&this_ptr_conv));
        return ret_arr;
@@ -20267,6 +23246,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1set_1delayed_1
        LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSecretKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.bytes);
@@ -20277,6 +23257,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1get_1ht
        LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *InMemorySigner_get_htlc_base_key(&this_ptr_conv));
        return ret_arr;
@@ -20286,6 +23267,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1set_1htlc_1bas
        LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSecretKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.bytes);
@@ -20296,6 +23278,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1get_1co
        LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *InMemorySigner_get_commitment_seed(&this_ptr_conv));
        return ret_arr;
@@ -20305,20 +23288,44 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1set_1commitmen
        LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
        InMemorySigner_set_commitment_seed(&this_ptr_conv, val_ref);
 }
 
+static inline uint64_t InMemorySigner_clone_ptr(LDKInMemorySigner *NONNULL_PTR arg) {
+       LDKInMemorySigner ret_var = InMemorySigner_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKInMemorySigner arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = InMemorySigner_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKInMemorySigner orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKInMemorySigner ret_var = InMemorySigner_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20352,6 +23359,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1new(JNIEnv
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20363,10 +23371,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1counterpart
        LDKInMemorySigner this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKChannelPublicKeys ret_var = InMemorySigner_counterparty_pubkeys(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20378,6 +23388,7 @@ JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1counterpart
        LDKInMemorySigner this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int16_t ret_val = InMemorySigner_counterparty_selected_contest_delay(&this_arg_conv);
        return ret_val;
 }
@@ -20386,6 +23397,7 @@ JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1holder_1sel
        LDKInMemorySigner this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int16_t ret_val = InMemorySigner_holder_selected_contest_delay(&this_arg_conv);
        return ret_val;
 }
@@ -20394,6 +23406,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1is_1outbou
        LDKInMemorySigner this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        jboolean ret_val = InMemorySigner_is_outbound(&this_arg_conv);
        return ret_val;
 }
@@ -20402,10 +23415,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1funding_1ou
        LDKInMemorySigner this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKOutPoint ret_var = InMemorySigner_funding_outpoint(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20417,10 +23432,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1get_1channe
        LDKInMemorySigner this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKChannelTransactionParameters ret_var = InMemorySigner_get_channel_parameters(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20432,6 +23449,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1sign_1count
        LDKInMemorySigner this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKTransaction spend_tx_ref;
        spend_tx_ref.datalen = (*env)->GetArrayLength(env, spend_tx);
        spend_tx_ref.data = MALLOC(spend_tx_ref.datalen, "LDKTransaction Bytes");
@@ -20440,6 +23458,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1sign_1count
        LDKStaticPaymentOutputDescriptor descriptor_conv;
        descriptor_conv.inner = (void*)(descriptor & (~1));
        descriptor_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(descriptor_conv);
        LDKCResult_CVec_CVec_u8ZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_CVec_u8ZZNoneZ), "LDKCResult_CVec_CVec_u8ZZNoneZ");
        *ret_conv = InMemorySigner_sign_counterparty_payment_input(&this_arg_conv, spend_tx_ref, input_idx, &descriptor_conv);
        return (uint64_t)ret_conv;
@@ -20449,6 +23468,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1sign_1dynam
        LDKInMemorySigner this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKTransaction spend_tx_ref;
        spend_tx_ref.datalen = (*env)->GetArrayLength(env, spend_tx);
        spend_tx_ref.data = MALLOC(spend_tx_ref.datalen, "LDKTransaction Bytes");
@@ -20457,6 +23477,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1sign_1dynam
        LDKDelayedPaymentOutputDescriptor descriptor_conv;
        descriptor_conv.inner = (void*)(descriptor & (~1));
        descriptor_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(descriptor_conv);
        LDKCResult_CVec_CVec_u8ZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_CVec_u8ZZNoneZ), "LDKCResult_CVec_CVec_u8ZZNoneZ");
        *ret_conv = InMemorySigner_sign_dynamic_p2wsh_input(&this_arg_conv, spend_tx_ref, input_idx, &descriptor_conv);
        return (uint64_t)ret_conv;
@@ -20466,6 +23487,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1as_1BaseSig
        LDKInMemorySigner this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKBaseSign* ret_ret = MALLOC(sizeof(LDKBaseSign), "LDKBaseSign");
        *ret_ret = InMemorySigner_as_BaseSign(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -20475,6 +23497,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1as_1Sign(JN
        LDKInMemorySigner this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKSign* ret_ret = MALLOC(sizeof(LDKSign), "LDKSign");
        *ret_ret = InMemorySigner_as_Sign(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -20484,6 +23507,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1write(J
        LDKInMemorySigner obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = InMemorySigner_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -20505,6 +23529,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_KeysManager_1free(JNIEnv *env,
        LDKKeysManager this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        KeysManager_free(this_obj_conv);
 }
 
@@ -20517,6 +23542,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_KeysManager_1new(JNIEnv *en
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20528,6 +23554,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_KeysManager_1derive_1channe
        LDKKeysManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char params_arr[32];
        CHECK((*env)->GetArrayLength(env, params) == 32);
        (*env)->GetByteArrayRegion(env, params, 0, 32, params_arr);
@@ -20536,6 +23563,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_KeysManager_1derive_1channe
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20547,6 +23575,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_KeysManager_1spend_1spendab
        LDKKeysManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCVec_SpendableOutputDescriptorZ descriptors_constr;
        descriptors_constr.datalen = (*env)->GetArrayLength(env, descriptors);
        if (descriptors_constr.datalen > 0)
@@ -20592,6 +23621,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_KeysManager_1as_1KeysInterf
        LDKKeysManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKKeysInterface* ret_ret = MALLOC(sizeof(LDKKeysInterface), "LDKKeysInterface");
        *ret_ret = KeysManager_as_KeysInterface(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -20601,6 +23631,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelManager_1free(JNIEnv *e
        LDKChannelManager this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelManager_free(this_obj_conv);
 }
 
@@ -20608,6 +23639,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChainParameters_1free(JNIEnv *
        LDKChainParameters this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChainParameters_free(this_obj_conv);
 }
 
@@ -20615,6 +23647,7 @@ JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_ChainParameters_1get_1networ
        LDKChainParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        jclass ret_conv = LDKNetwork_to_java(env, ChainParameters_get_network(&this_ptr_conv));
        return ret_conv;
 }
@@ -20623,6 +23656,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChainParameters_1set_1network(
        LDKChainParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNetwork val_conv = LDKNetwork_from_java(env, val);
        ChainParameters_set_network(&this_ptr_conv, val_conv);
 }
@@ -20631,10 +23665,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChainParameters_1get_1best_
        LDKChainParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKBestBlock ret_var = ChainParameters_get_best_block(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20646,9 +23682,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChainParameters_1set_1best_1bl
        LDKChainParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKBestBlock val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = BestBlock_clone(&val_conv);
        ChainParameters_set_best_block(&this_ptr_conv, val_conv);
 }
@@ -20658,11 +23696,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChainParameters_1new(JNIEnv
        LDKBestBlock best_block_arg_conv;
        best_block_arg_conv.inner = (void*)(best_block_arg & (~1));
        best_block_arg_conv.is_owned = (best_block_arg & 1) || (best_block_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(best_block_arg_conv);
        best_block_arg_conv = BestBlock_clone(&best_block_arg_conv);
        LDKChainParameters ret_var = ChainParameters_new(network_arg_conv, best_block_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20670,14 +23710,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChainParameters_1new(JNIEnv
        return ret_ref;
 }
 
+static inline uint64_t ChainParameters_clone_ptr(LDKChainParameters *NONNULL_PTR arg) {
+       LDKChainParameters ret_var = ChainParameters_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChainParameters_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKChainParameters arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChainParameters_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChainParameters_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKChainParameters orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChainParameters ret_var = ChainParameters_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20689,6 +23752,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CounterpartyForwardingInfo_1fr
        LDKCounterpartyForwardingInfo this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        CounterpartyForwardingInfo_free(this_obj_conv);
 }
 
@@ -20696,6 +23760,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_CounterpartyForwardingInfo_
        LDKCounterpartyForwardingInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = CounterpartyForwardingInfo_get_fee_base_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -20704,6 +23769,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CounterpartyForwardingInfo_1se
        LDKCounterpartyForwardingInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        CounterpartyForwardingInfo_set_fee_base_msat(&this_ptr_conv, val);
 }
 
@@ -20711,6 +23777,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_CounterpartyForwardingInfo_
        LDKCounterpartyForwardingInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = CounterpartyForwardingInfo_get_fee_proportional_millionths(&this_ptr_conv);
        return ret_val;
 }
@@ -20719,6 +23786,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CounterpartyForwardingInfo_1se
        LDKCounterpartyForwardingInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        CounterpartyForwardingInfo_set_fee_proportional_millionths(&this_ptr_conv, val);
 }
 
@@ -20726,6 +23794,7 @@ JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_CounterpartyForwardingInfo_
        LDKCounterpartyForwardingInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = CounterpartyForwardingInfo_get_cltv_expiry_delta(&this_ptr_conv);
        return ret_val;
 }
@@ -20734,6 +23803,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CounterpartyForwardingInfo_1se
        LDKCounterpartyForwardingInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        CounterpartyForwardingInfo_set_cltv_expiry_delta(&this_ptr_conv, val);
 }
 
@@ -20742,6 +23812,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CounterpartyForwardingInfo_
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20749,14 +23820,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CounterpartyForwardingInfo_
        return ret_ref;
 }
 
+static inline uint64_t CounterpartyForwardingInfo_clone_ptr(LDKCounterpartyForwardingInfo *NONNULL_PTR arg) {
+       LDKCounterpartyForwardingInfo ret_var = CounterpartyForwardingInfo_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CounterpartyForwardingInfo_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCounterpartyForwardingInfo arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = CounterpartyForwardingInfo_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CounterpartyForwardingInfo_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCounterpartyForwardingInfo orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKCounterpartyForwardingInfo ret_var = CounterpartyForwardingInfo_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20768,6 +23862,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelCounterparty_1free(JNIE
        LDKChannelCounterparty this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelCounterparty_free(this_obj_conv);
 }
 
@@ -20775,6 +23870,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelCounterparty_1ge
        LDKChannelCounterparty this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, ChannelCounterparty_get_node_id(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -20784,6 +23880,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelCounterparty_1set_1node
        LDKChannelCounterparty this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -20794,10 +23891,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelCounterparty_1get_1f
        LDKChannelCounterparty this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKInitFeatures ret_var = ChannelCounterparty_get_features(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20809,9 +23908,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelCounterparty_1set_1feat
        LDKChannelCounterparty this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKInitFeatures val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = InitFeatures_clone(&val_conv);
        ChannelCounterparty_set_features(&this_ptr_conv, val_conv);
 }
@@ -20820,6 +23921,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelCounterparty_1get_1u
        LDKChannelCounterparty this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelCounterparty_get_unspendable_punishment_reserve(&this_ptr_conv);
        return ret_val;
 }
@@ -20828,6 +23930,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelCounterparty_1set_1unsp
        LDKChannelCounterparty this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelCounterparty_set_unspendable_punishment_reserve(&this_ptr_conv, val);
 }
 
@@ -20835,11 +23938,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelCounterparty_1get_1f
        LDKChannelCounterparty this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCounterpartyForwardingInfo ret_var = ChannelCounterparty_get_forwarding_info(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -20852,9 +23957,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelCounterparty_1set_1forw
        LDKChannelCounterparty this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCounterpartyForwardingInfo val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = CounterpartyForwardingInfo_clone(&val_conv);
        ChannelCounterparty_set_forwarding_info(&this_ptr_conv, val_conv);
 }
@@ -20866,15 +23973,18 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelCounterparty_1new(JN
        LDKInitFeatures features_arg_conv;
        features_arg_conv.inner = (void*)(features_arg & (~1));
        features_arg_conv.is_owned = (features_arg & 1) || (features_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_arg_conv);
        features_arg_conv = InitFeatures_clone(&features_arg_conv);
        LDKCounterpartyForwardingInfo forwarding_info_arg_conv;
        forwarding_info_arg_conv.inner = (void*)(forwarding_info_arg & (~1));
        forwarding_info_arg_conv.is_owned = (forwarding_info_arg & 1) || (forwarding_info_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(forwarding_info_arg_conv);
        forwarding_info_arg_conv = CounterpartyForwardingInfo_clone(&forwarding_info_arg_conv);
        LDKChannelCounterparty ret_var = ChannelCounterparty_new(node_id_arg_ref, features_arg_conv, unspendable_punishment_reserve_arg, forwarding_info_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20882,14 +23992,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelCounterparty_1new(JN
        return ret_ref;
 }
 
+static inline uint64_t ChannelCounterparty_clone_ptr(LDKChannelCounterparty *NONNULL_PTR arg) {
+       LDKChannelCounterparty ret_var = ChannelCounterparty_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelCounterparty_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKChannelCounterparty arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChannelCounterparty_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelCounterparty_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKChannelCounterparty orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChannelCounterparty ret_var = ChannelCounterparty_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20901,6 +24034,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1free(JNIEnv *e
        LDKChannelDetails this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelDetails_free(this_obj_conv);
 }
 
@@ -20908,6 +24042,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1get_1ch
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *ChannelDetails_get_channel_id(&this_ptr_conv));
        return ret_arr;
@@ -20917,6 +24052,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1set_1channel_1
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -20927,10 +24063,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1get_1counte
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelCounterparty ret_var = ChannelDetails_get_counterparty(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20942,9 +24080,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1set_1counterpa
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelCounterparty val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = ChannelCounterparty_clone(&val_conv);
        ChannelDetails_set_counterparty(&this_ptr_conv, val_conv);
 }
@@ -20953,11 +24093,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1get_1fundin
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKOutPoint ret_var = ChannelDetails_get_funding_txo(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -20970,9 +24112,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1set_1funding_1
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKOutPoint val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = OutPoint_clone(&val_conv);
        ChannelDetails_set_funding_txo(&this_ptr_conv, val_conv);
 }
@@ -20981,6 +24125,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1get_1short_
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
        *ret_copy = ChannelDetails_get_short_channel_id(&this_ptr_conv);
        uint64_t ret_ref = (uint64_t)ret_copy;
@@ -20991,6 +24136,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1set_1short_1ch
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
@@ -21002,6 +24148,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1get_1channe
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelDetails_get_channel_value_satoshis(&this_ptr_conv);
        return ret_val;
 }
@@ -21010,6 +24157,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1set_1channel_1
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelDetails_set_channel_value_satoshis(&this_ptr_conv, val);
 }
 
@@ -21017,6 +24165,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1get_1unspen
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
        *ret_copy = ChannelDetails_get_unspendable_punishment_reserve(&this_ptr_conv);
        uint64_t ret_ref = (uint64_t)ret_copy;
@@ -21027,6 +24176,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1set_1unspendab
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
@@ -21038,6 +24188,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1get_1user_1
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelDetails_get_user_channel_id(&this_ptr_conv);
        return ret_val;
 }
@@ -21046,6 +24197,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1set_1user_1cha
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelDetails_set_user_channel_id(&this_ptr_conv, val);
 }
 
@@ -21053,6 +24205,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1get_1outbou
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelDetails_get_outbound_capacity_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -21061,6 +24214,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1set_1outbound_
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelDetails_set_outbound_capacity_msat(&this_ptr_conv, val);
 }
 
@@ -21068,6 +24222,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1get_1inboun
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelDetails_get_inbound_capacity_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -21076,6 +24231,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1set_1inbound_1
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelDetails_set_inbound_capacity_msat(&this_ptr_conv, val);
 }
 
@@ -21083,6 +24239,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1get_1confir
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCOption_u32Z *ret_copy = MALLOC(sizeof(LDKCOption_u32Z), "LDKCOption_u32Z");
        *ret_copy = ChannelDetails_get_confirmations_required(&this_ptr_conv);
        uint64_t ret_ref = (uint64_t)ret_copy;
@@ -21093,6 +24250,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1set_1confirmat
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKCOption_u32Z val_conv = *(LDKCOption_u32Z*)(val_ptr);
@@ -21104,6 +24262,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1get_1force_
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCOption_u16Z *ret_copy = MALLOC(sizeof(LDKCOption_u16Z), "LDKCOption_u16Z");
        *ret_copy = ChannelDetails_get_force_close_spend_delay(&this_ptr_conv);
        uint64_t ret_ref = (uint64_t)ret_copy;
@@ -21114,6 +24273,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1set_1force_1cl
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKCOption_u16Z val_conv = *(LDKCOption_u16Z*)(val_ptr);
@@ -21125,6 +24285,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1get_1is_1o
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        jboolean ret_val = ChannelDetails_get_is_outbound(&this_ptr_conv);
        return ret_val;
 }
@@ -21133,6 +24294,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1set_1is_1outbo
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelDetails_set_is_outbound(&this_ptr_conv, val);
 }
 
@@ -21140,6 +24302,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1get_1is_1f
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        jboolean ret_val = ChannelDetails_get_is_funding_locked(&this_ptr_conv);
        return ret_val;
 }
@@ -21148,6 +24311,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1set_1is_1fundi
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelDetails_set_is_funding_locked(&this_ptr_conv, val);
 }
 
@@ -21155,6 +24319,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1get_1is_1u
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        jboolean ret_val = ChannelDetails_get_is_usable(&this_ptr_conv);
        return ret_val;
 }
@@ -21163,6 +24328,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1set_1is_1usabl
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelDetails_set_is_usable(&this_ptr_conv, val);
 }
 
@@ -21170,6 +24336,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1get_1is_1p
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        jboolean ret_val = ChannelDetails_get_is_public(&this_ptr_conv);
        return ret_val;
 }
@@ -21178,6 +24345,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1set_1is_1publi
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelDetails_set_is_public(&this_ptr_conv, val);
 }
 
@@ -21188,10 +24356,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1new(JNIEnv
        LDKChannelCounterparty counterparty_arg_conv;
        counterparty_arg_conv.inner = (void*)(counterparty_arg & (~1));
        counterparty_arg_conv.is_owned = (counterparty_arg & 1) || (counterparty_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(counterparty_arg_conv);
        counterparty_arg_conv = ChannelCounterparty_clone(&counterparty_arg_conv);
        LDKOutPoint funding_txo_arg_conv;
        funding_txo_arg_conv.inner = (void*)(funding_txo_arg & (~1));
        funding_txo_arg_conv.is_owned = (funding_txo_arg & 1) || (funding_txo_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_txo_arg_conv);
        funding_txo_arg_conv = OutPoint_clone(&funding_txo_arg_conv);
        void* short_channel_id_arg_ptr = (void*)(((uint64_t)short_channel_id_arg) & ~1);
        CHECK_ACCESS(short_channel_id_arg_ptr);
@@ -21212,6 +24382,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1new(JNIEnv
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -21219,14 +24390,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1new(JNIEnv
        return ret_ref;
 }
 
+static inline uint64_t ChannelDetails_clone_ptr(LDKChannelDetails *NONNULL_PTR arg) {
+       LDKChannelDetails ret_var = ChannelDetails_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKChannelDetails arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChannelDetails_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKChannelDetails orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChannelDetails ret_var = ChannelDetails_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -21243,6 +24437,18 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentSendFailure_1free(JNIEn
        PaymentSendFailure_free(this_ptr_conv);
 }
 
+static inline uint64_t PaymentSendFailure_clone_ptr(LDKPaymentSendFailure *NONNULL_PTR arg) {
+       LDKPaymentSendFailure *ret_copy = MALLOC(sizeof(LDKPaymentSendFailure), "LDKPaymentSendFailure");
+       *ret_copy = PaymentSendFailure_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentSendFailure_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKPaymentSendFailure* arg_conv = (LDKPaymentSendFailure*)arg;
+       int64_t ret_val = PaymentSendFailure_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentSendFailure_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKPaymentSendFailure* orig_conv = (LDKPaymentSendFailure*)orig;
        LDKPaymentSendFailure *ret_copy = MALLOC(sizeof(LDKPaymentSendFailure), "LDKPaymentSendFailure");
@@ -21327,6 +24533,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentSendFailure_1partial
        LDKRouteParameters failed_paths_retry_conv;
        failed_paths_retry_conv.inner = (void*)(failed_paths_retry & (~1));
        failed_paths_retry_conv.is_owned = (failed_paths_retry & 1) || (failed_paths_retry == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(failed_paths_retry_conv);
        failed_paths_retry_conv = RouteParameters_clone(&failed_paths_retry_conv);
        LDKThirtyTwoBytes payment_id_ref;
        CHECK((*env)->GetArrayLength(env, payment_id) == 32);
@@ -21376,15 +24583,18 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1new(JNIEnv
        LDKUserConfig config_conv;
        config_conv.inner = (void*)(config & (~1));
        config_conv.is_owned = (config & 1) || (config == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(config_conv);
        config_conv = UserConfig_clone(&config_conv);
        LDKChainParameters params_conv;
        params_conv.inner = (void*)(params & (~1));
        params_conv.is_owned = (params & 1) || (params == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(params_conv);
        params_conv = ChainParameters_clone(&params_conv);
        LDKChannelManager ret_var = ChannelManager_new(fee_est_conv, chain_monitor_conv, tx_broadcaster_conv, logger_conv, keys_manager_conv, config_conv, params_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -21396,10 +24606,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1get_1curren
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKUserConfig ret_var = ChannelManager_get_current_default_configuration(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -21411,12 +24623,14 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1create_1cha
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKPublicKey their_network_key_ref;
        CHECK((*env)->GetArrayLength(env, their_network_key) == 33);
        (*env)->GetByteArrayRegion(env, their_network_key, 0, 33, their_network_key_ref.compressed_form);
        LDKUserConfig override_config_conv;
        override_config_conv.inner = (void*)(override_config & (~1));
        override_config_conv.is_owned = (override_config & 1) || (override_config == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(override_config_conv);
        override_config_conv = UserConfig_clone(&override_config_conv);
        LDKCResult__u832APIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult__u832APIErrorZ), "LDKCResult__u832APIErrorZ");
        *ret_conv = ChannelManager_create_channel(&this_arg_conv, their_network_key_ref, channel_value_satoshis, push_msat, user_channel_id, override_config_conv);
@@ -21427,6 +24641,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_ChannelManager_1list_1
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCVec_ChannelDetailsZ ret_var = ChannelManager_list_channels(&this_arg_conv);
        int64_tArray ret_arr = NULL;
        ret_arr = (*env)->NewLongArray(env, ret_var.datalen);
@@ -21436,6 +24651,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_ChannelManager_1list_1
                uint64_t ret_conv_16_ref = 0;
                CHECK((((uint64_t)ret_conv_16_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_conv_16_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_16_var);
                ret_conv_16_ref = (uint64_t)ret_conv_16_var.inner;
                if (ret_conv_16_var.is_owned) {
                        ret_conv_16_ref |= 1;
@@ -21451,6 +24667,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_ChannelManager_1list_1
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCVec_ChannelDetailsZ ret_var = ChannelManager_list_usable_channels(&this_arg_conv);
        int64_tArray ret_arr = NULL;
        ret_arr = (*env)->NewLongArray(env, ret_var.datalen);
@@ -21460,6 +24677,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_ChannelManager_1list_1
                uint64_t ret_conv_16_ref = 0;
                CHECK((((uint64_t)ret_conv_16_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_conv_16_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_16_var);
                ret_conv_16_ref = (uint64_t)ret_conv_16_var.inner;
                if (ret_conv_16_var.is_owned) {
                        ret_conv_16_ref |= 1;
@@ -21475,6 +24693,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1close_1chan
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char channel_id_arr[32];
        CHECK((*env)->GetArrayLength(env, channel_id) == 32);
        (*env)->GetByteArrayRegion(env, channel_id, 0, 32, channel_id_arr);
@@ -21488,6 +24707,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1close_1chan
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char channel_id_arr[32];
        CHECK((*env)->GetArrayLength(env, channel_id) == 32);
        (*env)->GetByteArrayRegion(env, channel_id, 0, 32, channel_id_arr);
@@ -21501,6 +24721,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1force_1clos
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char channel_id_arr[32];
        CHECK((*env)->GetArrayLength(env, channel_id) == 32);
        (*env)->GetByteArrayRegion(env, channel_id, 0, 32, channel_id_arr);
@@ -21514,6 +24735,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelManager_1force_1close_1
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        ChannelManager_force_close_all_channels(&this_arg_conv);
 }
 
@@ -21521,9 +24743,11 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1send_1payme
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKRoute route_conv;
        route_conv.inner = (void*)(route & (~1));
        route_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(route_conv);
        LDKThirtyTwoBytes payment_hash_ref;
        CHECK((*env)->GetArrayLength(env, payment_hash) == 32);
        (*env)->GetByteArrayRegion(env, payment_hash, 0, 32, payment_hash_ref.data);
@@ -21539,9 +24763,11 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1retry_1paym
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKRoute route_conv;
        route_conv.inner = (void*)(route & (~1));
        route_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(route_conv);
        LDKThirtyTwoBytes payment_id_ref;
        CHECK((*env)->GetArrayLength(env, payment_id) == 32);
        (*env)->GetByteArrayRegion(env, payment_id, 0, 32, payment_id_ref.data);
@@ -21554,9 +24780,11 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1send_1spont
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKRoute route_conv;
        route_conv.inner = (void*)(route & (~1));
        route_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(route_conv);
        LDKThirtyTwoBytes payment_preimage_ref;
        CHECK((*env)->GetArrayLength(env, payment_preimage) == 32);
        (*env)->GetByteArrayRegion(env, payment_preimage, 0, 32, payment_preimage_ref.data);
@@ -21569,6 +24797,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1funding_1tr
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char temporary_channel_id_arr[32];
        CHECK((*env)->GetArrayLength(env, temporary_channel_id) == 32);
        (*env)->GetByteArrayRegion(env, temporary_channel_id, 0, 32, temporary_channel_id_arr);
@@ -21587,6 +24816,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelManager_1broadcast_1nod
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKThreeBytes rgb_ref;
        CHECK((*env)->GetArrayLength(env, rgb) == 3);
        (*env)->GetByteArrayRegion(env, rgb, 0, 3, rgb_ref.data);
@@ -21615,6 +24845,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelManager_1process_1pendi
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        ChannelManager_process_pending_htlc_forwards(&this_arg_conv);
 }
 
@@ -21622,6 +24853,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelManager_1timer_1tick_1o
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        ChannelManager_timer_tick_occurred(&this_arg_conv);
 }
 
@@ -21629,6 +24861,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelManager_1fail_1htlc
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char payment_hash_arr[32];
        CHECK((*env)->GetArrayLength(env, payment_hash) == 32);
        (*env)->GetByteArrayRegion(env, payment_hash, 0, 32, payment_hash_arr);
@@ -21641,6 +24874,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelManager_1claim_1fun
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKThirtyTwoBytes payment_preimage_ref;
        CHECK((*env)->GetArrayLength(env, payment_preimage) == 32);
        (*env)->GetByteArrayRegion(env, payment_preimage, 0, 32, payment_preimage_ref.data);
@@ -21652,6 +24886,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelManager_1get_1ou
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, ChannelManager_get_our_node_id(&this_arg_conv).compressed_form);
        return ret_arr;
@@ -21661,6 +24896,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1create_1inb
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        void* min_value_msat_ptr = (void*)(((uint64_t)min_value_msat) & ~1);
        CHECK_ACCESS(min_value_msat_ptr);
        LDKCOption_u64Z min_value_msat_conv = *(LDKCOption_u64Z*)(min_value_msat_ptr);
@@ -21674,6 +24910,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1create_1inb
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKThirtyTwoBytes payment_hash_ref;
        CHECK((*env)->GetArrayLength(env, payment_hash) == 32);
        (*env)->GetByteArrayRegion(env, payment_hash, 0, 32, payment_hash_ref.data);
@@ -21690,6 +24927,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1as_1Message
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKMessageSendEventsProvider* ret_ret = MALLOC(sizeof(LDKMessageSendEventsProvider), "LDKMessageSendEventsProvider");
        *ret_ret = ChannelManager_as_MessageSendEventsProvider(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -21699,6 +24937,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1as_1EventsP
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKEventsProvider* ret_ret = MALLOC(sizeof(LDKEventsProvider), "LDKEventsProvider");
        *ret_ret = ChannelManager_as_EventsProvider(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -21708,6 +24947,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1as_1Listen(
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKListen* ret_ret = MALLOC(sizeof(LDKListen), "LDKListen");
        *ret_ret = ChannelManager_as_Listen(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -21717,6 +24957,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1as_1Confirm
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKConfirm* ret_ret = MALLOC(sizeof(LDKConfirm), "LDKConfirm");
        *ret_ret = ChannelManager_as_Confirm(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -21726,6 +24967,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelManager_1await_1per
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        jboolean ret_val = ChannelManager_await_persistable_update_timeout(&this_arg_conv, max_wait);
        return ret_val;
 }
@@ -21734,6 +24976,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelManager_1await_1persist
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        ChannelManager_await_persistable_update(&this_arg_conv);
 }
 
@@ -21741,10 +24984,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1current_1be
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKBestBlock ret_var = ChannelManager_current_best_block(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -21756,6 +25001,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1as_1Channel
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKChannelMessageHandler* ret_ret = MALLOC(sizeof(LDKChannelMessageHandler), "LDKChannelMessageHandler");
        *ret_ret = ChannelManager_as_ChannelMessageHandler(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -21765,6 +25011,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelManager_1write(J
        LDKChannelManager obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ChannelManager_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -21776,6 +25023,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelManagerReadArgs_1free(J
        LDKChannelManagerReadArgs this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelManagerReadArgs_free(this_obj_conv);
 }
 
@@ -21783,6 +25031,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManagerReadArgs_1get
        LDKChannelManagerReadArgs this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        // WARNING: This object doesn't live past this scope, needs clone!
        uint64_t ret_ret = ((uint64_t)ChannelManagerReadArgs_get_keys_manager(&this_ptr_conv)) | 1;
        return ret_ret;
@@ -21792,6 +25041,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelManagerReadArgs_1set_1k
        LDKChannelManagerReadArgs this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKKeysInterface val_conv = *(LDKKeysInterface*)(val_ptr);
@@ -21806,6 +25056,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManagerReadArgs_1get
        LDKChannelManagerReadArgs this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        // WARNING: This object doesn't live past this scope, needs clone!
        uint64_t ret_ret = ((uint64_t)ChannelManagerReadArgs_get_fee_estimator(&this_ptr_conv)) | 1;
        return ret_ret;
@@ -21815,6 +25066,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelManagerReadArgs_1set_1f
        LDKChannelManagerReadArgs this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKFeeEstimator val_conv = *(LDKFeeEstimator*)(val_ptr);
@@ -21829,6 +25081,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManagerReadArgs_1get
        LDKChannelManagerReadArgs this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        // WARNING: This object doesn't live past this scope, needs clone!
        uint64_t ret_ret = ((uint64_t)ChannelManagerReadArgs_get_chain_monitor(&this_ptr_conv)) | 1;
        return ret_ret;
@@ -21838,6 +25091,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelManagerReadArgs_1set_1c
        LDKChannelManagerReadArgs this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKWatch val_conv = *(LDKWatch*)(val_ptr);
@@ -21852,6 +25106,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManagerReadArgs_1get
        LDKChannelManagerReadArgs this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        // WARNING: This object doesn't live past this scope, needs clone!
        uint64_t ret_ret = ((uint64_t)ChannelManagerReadArgs_get_tx_broadcaster(&this_ptr_conv)) | 1;
        return ret_ret;
@@ -21861,6 +25116,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelManagerReadArgs_1set_1t
        LDKChannelManagerReadArgs this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKBroadcasterInterface val_conv = *(LDKBroadcasterInterface*)(val_ptr);
@@ -21875,6 +25131,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManagerReadArgs_1get
        LDKChannelManagerReadArgs this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        // WARNING: This object doesn't live past this scope, needs clone!
        uint64_t ret_ret = ((uint64_t)ChannelManagerReadArgs_get_logger(&this_ptr_conv)) | 1;
        return ret_ret;
@@ -21884,6 +25141,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelManagerReadArgs_1set_1l
        LDKChannelManagerReadArgs this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKLogger val_conv = *(LDKLogger*)(val_ptr);
@@ -21898,10 +25156,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManagerReadArgs_1get
        LDKChannelManagerReadArgs this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKUserConfig ret_var = ChannelManagerReadArgs_get_default_config(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -21913,9 +25173,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelManagerReadArgs_1set_1d
        LDKChannelManagerReadArgs this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKUserConfig val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = UserConfig_clone(&val_conv);
        ChannelManagerReadArgs_set_default_config(&this_ptr_conv, val_conv);
 }
@@ -21959,6 +25221,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManagerReadArgs_1new
        LDKUserConfig default_config_conv;
        default_config_conv.inner = (void*)(default_config & (~1));
        default_config_conv.is_owned = (default_config & 1) || (default_config == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(default_config_conv);
        default_config_conv = UserConfig_clone(&default_config_conv);
        LDKCVec_ChannelMonitorZ channel_monitors_constr;
        channel_monitors_constr.datalen = (*env)->GetArrayLength(env, channel_monitors);
@@ -21972,6 +25235,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManagerReadArgs_1new
                LDKChannelMonitor channel_monitors_conv_16_conv;
                channel_monitors_conv_16_conv.inner = (void*)(channel_monitors_conv_16 & (~1));
                channel_monitors_conv_16_conv.is_owned = (channel_monitors_conv_16 & 1) || (channel_monitors_conv_16 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_monitors_conv_16_conv);
                channel_monitors_constr.data[q] = channel_monitors_conv_16_conv;
        }
        (*env)->ReleaseLongArrayElements(env, channel_monitors, channel_monitors_vals, 0);
@@ -21979,6 +25243,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManagerReadArgs_1new
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -21993,6 +25258,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelMa
        LDKChannelManagerReadArgs arg_conv;
        arg_conv.inner = (void*)(arg & (~1));
        arg_conv.is_owned = (arg & 1) || (arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        // Warning: we need a move here but no clone is available for LDKChannelManagerReadArgs
        LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ), "LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ");
        *ret_conv = C2Tuple_BlockHashChannelManagerZ_read(ser_ref, arg_conv);
@@ -22004,17 +25270,41 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DecodeError_1free(JNIEnv *env,
        LDKDecodeError this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        DecodeError_free(this_obj_conv);
 }
 
+static inline uint64_t DecodeError_clone_ptr(LDKDecodeError *NONNULL_PTR arg) {
+       LDKDecodeError ret_var = DecodeError_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DecodeError_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKDecodeError arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = DecodeError_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DecodeError_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKDecodeError orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKDecodeError ret_var = DecodeError_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -22026,6 +25316,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Init_1free(JNIEnv *env, jclass
        LDKInit this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        Init_free(this_obj_conv);
 }
 
@@ -22033,10 +25324,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Init_1get_1features(JNIEnv
        LDKInit this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKInitFeatures ret_var = Init_get_features(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -22048,9 +25341,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Init_1set_1features(JNIEnv *en
        LDKInit this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKInitFeatures val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = InitFeatures_clone(&val_conv);
        Init_set_features(&this_ptr_conv, val_conv);
 }
@@ -22059,11 +25354,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Init_1new(JNIEnv *env, jcla
        LDKInitFeatures features_arg_conv;
        features_arg_conv.inner = (void*)(features_arg & (~1));
        features_arg_conv.is_owned = (features_arg & 1) || (features_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_arg_conv);
        features_arg_conv = InitFeatures_clone(&features_arg_conv);
        LDKInit ret_var = Init_new(features_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -22071,14 +25368,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Init_1new(JNIEnv *env, jcla
        return ret_ref;
 }
 
+static inline uint64_t Init_clone_ptr(LDKInit *NONNULL_PTR arg) {
+       LDKInit ret_var = Init_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Init_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKInit arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = Init_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Init_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKInit orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKInit ret_var = Init_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -22090,6 +25410,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ErrorMessage_1free(JNIEnv *env
        LDKErrorMessage this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ErrorMessage_free(this_obj_conv);
 }
 
@@ -22097,6 +25418,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ErrorMessage_1get_1chan
        LDKErrorMessage this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *ErrorMessage_get_channel_id(&this_ptr_conv));
        return ret_arr;
@@ -22106,6 +25428,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ErrorMessage_1set_1channel_1id
        LDKErrorMessage this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -22116,6 +25439,7 @@ JNIEXPORT jstring JNICALL Java_org_ldk_impl_bindings_ErrorMessage_1get_1data(JNI
        LDKErrorMessage this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKStr ret_str = ErrorMessage_get_data(&this_ptr_conv);
        jstring ret_conv = str_ref_to_java(env, ret_str.chars, ret_str.len);
        Str_free(ret_str);
@@ -22126,6 +25450,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ErrorMessage_1set_1data(JNIEnv
        LDKErrorMessage this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKStr val_conv = java_to_owned_str(env, val);
        ErrorMessage_set_data(&this_ptr_conv, val_conv);
 }
@@ -22139,6 +25464,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ErrorMessage_1new(JNIEnv *e
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -22146,14 +25472,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ErrorMessage_1new(JNIEnv *e
        return ret_ref;
 }
 
+static inline uint64_t ErrorMessage_clone_ptr(LDKErrorMessage *NONNULL_PTR arg) {
+       LDKErrorMessage ret_var = ErrorMessage_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ErrorMessage_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKErrorMessage arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ErrorMessage_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ErrorMessage_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKErrorMessage orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKErrorMessage ret_var = ErrorMessage_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -22165,6 +25514,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Ping_1free(JNIEnv *env, jclass
        LDKPing this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        Ping_free(this_obj_conv);
 }
 
@@ -22172,6 +25522,7 @@ JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_Ping_1get_1ponglen(JNIEnv *
        LDKPing this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = Ping_get_ponglen(&this_ptr_conv);
        return ret_val;
 }
@@ -22180,6 +25531,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Ping_1set_1ponglen(JNIEnv *env
        LDKPing this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        Ping_set_ponglen(&this_ptr_conv, val);
 }
 
@@ -22187,6 +25539,7 @@ JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_Ping_1get_1byteslen(JNIEnv
        LDKPing this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = Ping_get_byteslen(&this_ptr_conv);
        return ret_val;
 }
@@ -22195,6 +25548,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Ping_1set_1byteslen(JNIEnv *en
        LDKPing this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        Ping_set_byteslen(&this_ptr_conv, val);
 }
 
@@ -22203,6 +25557,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Ping_1new(JNIEnv *env, jcla
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -22210,14 +25565,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Ping_1new(JNIEnv *env, jcla
        return ret_ref;
 }
 
+static inline uint64_t Ping_clone_ptr(LDKPing *NONNULL_PTR arg) {
+       LDKPing ret_var = Ping_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Ping_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKPing arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = Ping_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Ping_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKPing orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKPing ret_var = Ping_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -22229,6 +25607,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Pong_1free(JNIEnv *env, jclass
        LDKPong this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        Pong_free(this_obj_conv);
 }
 
@@ -22236,6 +25615,7 @@ JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_Pong_1get_1byteslen(JNIEnv
        LDKPong this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = Pong_get_byteslen(&this_ptr_conv);
        return ret_val;
 }
@@ -22244,6 +25624,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Pong_1set_1byteslen(JNIEnv *en
        LDKPong this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        Pong_set_byteslen(&this_ptr_conv, val);
 }
 
@@ -22252,6 +25633,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Pong_1new(JNIEnv *env, jcla
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -22259,14 +25641,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Pong_1new(JNIEnv *env, jcla
        return ret_ref;
 }
 
+static inline uint64_t Pong_clone_ptr(LDKPong *NONNULL_PTR arg) {
+       LDKPong ret_var = Pong_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Pong_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKPong arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = Pong_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Pong_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKPong orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKPong ret_var = Pong_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -22278,6 +25683,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OpenChannel_1free(JNIEnv *env,
        LDKOpenChannel this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        OpenChannel_free(this_obj_conv);
 }
 
@@ -22285,6 +25691,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_OpenChannel_1get_1chain
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *OpenChannel_get_chain_hash(&this_ptr_conv));
        return ret_arr;
@@ -22294,6 +25701,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OpenChannel_1set_1chain_1hash(
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -22304,6 +25712,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_OpenChannel_1get_1tempo
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *OpenChannel_get_temporary_channel_id(&this_ptr_conv));
        return ret_arr;
@@ -22313,6 +25722,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OpenChannel_1set_1temporary_1c
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -22323,6 +25733,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OpenChannel_1get_1funding_1
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = OpenChannel_get_funding_satoshis(&this_ptr_conv);
        return ret_val;
 }
@@ -22331,6 +25742,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OpenChannel_1set_1funding_1sat
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        OpenChannel_set_funding_satoshis(&this_ptr_conv, val);
 }
 
@@ -22338,6 +25750,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OpenChannel_1get_1push_1msa
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = OpenChannel_get_push_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -22346,6 +25759,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OpenChannel_1set_1push_1msat(J
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        OpenChannel_set_push_msat(&this_ptr_conv, val);
 }
 
@@ -22353,6 +25767,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OpenChannel_1get_1dust_1lim
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = OpenChannel_get_dust_limit_satoshis(&this_ptr_conv);
        return ret_val;
 }
@@ -22361,6 +25776,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OpenChannel_1set_1dust_1limit_
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        OpenChannel_set_dust_limit_satoshis(&this_ptr_conv, val);
 }
 
@@ -22368,6 +25784,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OpenChannel_1get_1max_1htlc
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = OpenChannel_get_max_htlc_value_in_flight_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -22376,6 +25793,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OpenChannel_1set_1max_1htlc_1v
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        OpenChannel_set_max_htlc_value_in_flight_msat(&this_ptr_conv, val);
 }
 
@@ -22383,6 +25801,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OpenChannel_1get_1channel_1
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = OpenChannel_get_channel_reserve_satoshis(&this_ptr_conv);
        return ret_val;
 }
@@ -22391,6 +25810,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OpenChannel_1set_1channel_1res
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        OpenChannel_set_channel_reserve_satoshis(&this_ptr_conv, val);
 }
 
@@ -22398,6 +25818,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OpenChannel_1get_1htlc_1min
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = OpenChannel_get_htlc_minimum_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -22406,6 +25827,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OpenChannel_1set_1htlc_1minimu
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        OpenChannel_set_htlc_minimum_msat(&this_ptr_conv, val);
 }
 
@@ -22413,6 +25835,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_OpenChannel_1get_1feerate_1
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = OpenChannel_get_feerate_per_kw(&this_ptr_conv);
        return ret_val;
 }
@@ -22421,6 +25844,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OpenChannel_1set_1feerate_1per
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        OpenChannel_set_feerate_per_kw(&this_ptr_conv, val);
 }
 
@@ -22428,6 +25852,7 @@ JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_OpenChannel_1get_1to_1self_
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = OpenChannel_get_to_self_delay(&this_ptr_conv);
        return ret_val;
 }
@@ -22436,6 +25861,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OpenChannel_1set_1to_1self_1de
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        OpenChannel_set_to_self_delay(&this_ptr_conv, val);
 }
 
@@ -22443,6 +25869,7 @@ JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_OpenChannel_1get_1max_1acce
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = OpenChannel_get_max_accepted_htlcs(&this_ptr_conv);
        return ret_val;
 }
@@ -22451,6 +25878,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OpenChannel_1set_1max_1accepte
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        OpenChannel_set_max_accepted_htlcs(&this_ptr_conv, val);
 }
 
@@ -22458,6 +25886,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_OpenChannel_1get_1fundi
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, OpenChannel_get_funding_pubkey(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -22467,6 +25896,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OpenChannel_1set_1funding_1pub
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -22477,6 +25907,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_OpenChannel_1get_1revoc
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, OpenChannel_get_revocation_basepoint(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -22486,6 +25917,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OpenChannel_1set_1revocation_1
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -22496,6 +25928,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_OpenChannel_1get_1payme
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, OpenChannel_get_payment_point(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -22505,6 +25938,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OpenChannel_1set_1payment_1poi
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -22515,6 +25949,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_OpenChannel_1get_1delay
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, OpenChannel_get_delayed_payment_basepoint(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -22524,6 +25959,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OpenChannel_1set_1delayed_1pay
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -22534,6 +25970,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_OpenChannel_1get_1htlc_
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, OpenChannel_get_htlc_basepoint(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -22543,6 +25980,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OpenChannel_1set_1htlc_1basepo
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -22553,6 +25991,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_OpenChannel_1get_1first
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, OpenChannel_get_first_per_commitment_point(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -22562,6 +26001,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OpenChannel_1set_1first_1per_1
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -22572,6 +26012,7 @@ JNIEXPORT int8_t JNICALL Java_org_ldk_impl_bindings_OpenChannel_1get_1channel_1f
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_t ret_val = OpenChannel_get_channel_flags(&this_ptr_conv);
        return ret_val;
 }
@@ -22580,17 +26021,41 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OpenChannel_1set_1channel_1fla
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        OpenChannel_set_channel_flags(&this_ptr_conv, val);
 }
 
+static inline uint64_t OpenChannel_clone_ptr(LDKOpenChannel *NONNULL_PTR arg) {
+       LDKOpenChannel ret_var = OpenChannel_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OpenChannel_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKOpenChannel arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = OpenChannel_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OpenChannel_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKOpenChannel orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKOpenChannel ret_var = OpenChannel_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -22602,6 +26067,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1free(JNIEnv *en
        LDKAcceptChannel this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        AcceptChannel_free(this_obj_conv);
 }
 
@@ -22609,6 +26075,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1get_1tem
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *AcceptChannel_get_temporary_channel_id(&this_ptr_conv));
        return ret_arr;
@@ -22618,6 +26085,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1set_1temporary_
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -22628,6 +26096,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1get_1dust_1l
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = AcceptChannel_get_dust_limit_satoshis(&this_ptr_conv);
        return ret_val;
 }
@@ -22636,6 +26105,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1set_1dust_1limi
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        AcceptChannel_set_dust_limit_satoshis(&this_ptr_conv, val);
 }
 
@@ -22643,6 +26113,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1get_1max_1ht
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = AcceptChannel_get_max_htlc_value_in_flight_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -22651,6 +26122,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1set_1max_1htlc_
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        AcceptChannel_set_max_htlc_value_in_flight_msat(&this_ptr_conv, val);
 }
 
@@ -22658,6 +26130,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1get_1channel
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = AcceptChannel_get_channel_reserve_satoshis(&this_ptr_conv);
        return ret_val;
 }
@@ -22666,6 +26139,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1set_1channel_1r
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        AcceptChannel_set_channel_reserve_satoshis(&this_ptr_conv, val);
 }
 
@@ -22673,6 +26147,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1get_1htlc_1m
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = AcceptChannel_get_htlc_minimum_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -22681,6 +26156,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1set_1htlc_1mini
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        AcceptChannel_set_htlc_minimum_msat(&this_ptr_conv, val);
 }
 
@@ -22688,6 +26164,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1get_1minimum
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = AcceptChannel_get_minimum_depth(&this_ptr_conv);
        return ret_val;
 }
@@ -22696,6 +26173,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1set_1minimum_1d
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        AcceptChannel_set_minimum_depth(&this_ptr_conv, val);
 }
 
@@ -22703,6 +26181,7 @@ JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1get_1to_1sel
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = AcceptChannel_get_to_self_delay(&this_ptr_conv);
        return ret_val;
 }
@@ -22711,6 +26190,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1set_1to_1self_1
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        AcceptChannel_set_to_self_delay(&this_ptr_conv, val);
 }
 
@@ -22718,6 +26198,7 @@ JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1get_1max_1ac
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = AcceptChannel_get_max_accepted_htlcs(&this_ptr_conv);
        return ret_val;
 }
@@ -22726,6 +26207,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1set_1max_1accep
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        AcceptChannel_set_max_accepted_htlcs(&this_ptr_conv, val);
 }
 
@@ -22733,6 +26215,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1get_1fun
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, AcceptChannel_get_funding_pubkey(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -22742,6 +26225,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1set_1funding_1p
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -22752,6 +26236,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1get_1rev
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, AcceptChannel_get_revocation_basepoint(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -22761,6 +26246,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1set_1revocation
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -22771,6 +26257,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1get_1pay
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, AcceptChannel_get_payment_point(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -22780,6 +26267,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1set_1payment_1p
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -22790,6 +26278,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1get_1del
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, AcceptChannel_get_delayed_payment_basepoint(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -22799,6 +26288,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1set_1delayed_1p
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -22809,6 +26299,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1get_1htl
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, AcceptChannel_get_htlc_basepoint(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -22818,6 +26309,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1set_1htlc_1base
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -22828,6 +26320,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1get_1fir
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, AcceptChannel_get_first_per_commitment_point(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -22837,20 +26330,44 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1set_1first_1per
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
        AcceptChannel_set_first_per_commitment_point(&this_ptr_conv, val_ref);
 }
 
+static inline uint64_t AcceptChannel_clone_ptr(LDKAcceptChannel *NONNULL_PTR arg) {
+       LDKAcceptChannel ret_var = AcceptChannel_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKAcceptChannel arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = AcceptChannel_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKAcceptChannel orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKAcceptChannel ret_var = AcceptChannel_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -22862,6 +26379,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_FundingCreated_1free(JNIEnv *e
        LDKFundingCreated this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        FundingCreated_free(this_obj_conv);
 }
 
@@ -22869,6 +26387,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_FundingCreated_1get_1te
        LDKFundingCreated this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *FundingCreated_get_temporary_channel_id(&this_ptr_conv));
        return ret_arr;
@@ -22878,6 +26397,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_FundingCreated_1set_1temporary
        LDKFundingCreated this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -22888,6 +26408,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_FundingCreated_1get_1fu
        LDKFundingCreated this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *FundingCreated_get_funding_txid(&this_ptr_conv));
        return ret_arr;
@@ -22897,6 +26418,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_FundingCreated_1set_1funding_1
        LDKFundingCreated this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -22907,6 +26429,7 @@ JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_FundingCreated_1get_1fundin
        LDKFundingCreated this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = FundingCreated_get_funding_output_index(&this_ptr_conv);
        return ret_val;
 }
@@ -22915,6 +26438,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_FundingCreated_1set_1funding_1
        LDKFundingCreated this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        FundingCreated_set_funding_output_index(&this_ptr_conv, val);
 }
 
@@ -22922,6 +26446,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_FundingCreated_1get_1si
        LDKFundingCreated this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 64);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 64, FundingCreated_get_signature(&this_ptr_conv).compact_form);
        return ret_arr;
@@ -22931,6 +26456,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_FundingCreated_1set_1signature
        LDKFundingCreated this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSignature val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 64);
        (*env)->GetByteArrayRegion(env, val, 0, 64, val_ref.compact_form);
@@ -22951,6 +26477,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FundingCreated_1new(JNIEnv
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -22958,14 +26485,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FundingCreated_1new(JNIEnv
        return ret_ref;
 }
 
+static inline uint64_t FundingCreated_clone_ptr(LDKFundingCreated *NONNULL_PTR arg) {
+       LDKFundingCreated ret_var = FundingCreated_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FundingCreated_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKFundingCreated arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = FundingCreated_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FundingCreated_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKFundingCreated orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKFundingCreated ret_var = FundingCreated_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -22977,6 +26527,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_FundingSigned_1free(JNIEnv *en
        LDKFundingSigned this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        FundingSigned_free(this_obj_conv);
 }
 
@@ -22984,6 +26535,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_FundingSigned_1get_1cha
        LDKFundingSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *FundingSigned_get_channel_id(&this_ptr_conv));
        return ret_arr;
@@ -22993,6 +26545,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_FundingSigned_1set_1channel_1i
        LDKFundingSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -23003,6 +26556,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_FundingSigned_1get_1sig
        LDKFundingSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 64);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 64, FundingSigned_get_signature(&this_ptr_conv).compact_form);
        return ret_arr;
@@ -23012,6 +26566,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_FundingSigned_1set_1signature(
        LDKFundingSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSignature val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 64);
        (*env)->GetByteArrayRegion(env, val, 0, 64, val_ref.compact_form);
@@ -23029,6 +26584,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FundingSigned_1new(JNIEnv *
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -23036,14 +26592,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FundingSigned_1new(JNIEnv *
        return ret_ref;
 }
 
+static inline uint64_t FundingSigned_clone_ptr(LDKFundingSigned *NONNULL_PTR arg) {
+       LDKFundingSigned ret_var = FundingSigned_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FundingSigned_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKFundingSigned arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = FundingSigned_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FundingSigned_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKFundingSigned orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKFundingSigned ret_var = FundingSigned_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -23055,6 +26634,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_FundingLocked_1free(JNIEnv *en
        LDKFundingLocked this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        FundingLocked_free(this_obj_conv);
 }
 
@@ -23062,6 +26642,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_FundingLocked_1get_1cha
        LDKFundingLocked this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *FundingLocked_get_channel_id(&this_ptr_conv));
        return ret_arr;
@@ -23071,6 +26652,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_FundingLocked_1set_1channel_1i
        LDKFundingLocked this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -23081,6 +26663,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_FundingLocked_1get_1nex
        LDKFundingLocked this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, FundingLocked_get_next_per_commitment_point(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -23090,6 +26673,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_FundingLocked_1set_1next_1per_
        LDKFundingLocked this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -23107,6 +26691,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FundingLocked_1new(JNIEnv *
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -23114,14 +26699,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FundingLocked_1new(JNIEnv *
        return ret_ref;
 }
 
+static inline uint64_t FundingLocked_clone_ptr(LDKFundingLocked *NONNULL_PTR arg) {
+       LDKFundingLocked ret_var = FundingLocked_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FundingLocked_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKFundingLocked arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = FundingLocked_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FundingLocked_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKFundingLocked orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKFundingLocked ret_var = FundingLocked_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -23133,6 +26741,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Shutdown_1free(JNIEnv *env, jc
        LDKShutdown this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        Shutdown_free(this_obj_conv);
 }
 
@@ -23140,6 +26749,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Shutdown_1get_1channel_
        LDKShutdown this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *Shutdown_get_channel_id(&this_ptr_conv));
        return ret_arr;
@@ -23149,6 +26759,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Shutdown_1set_1channel_1id(JNI
        LDKShutdown this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -23159,6 +26770,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Shutdown_1get_1scriptpu
        LDKShutdown this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKu8slice ret_var = Shutdown_get_scriptpubkey(&this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -23169,6 +26781,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Shutdown_1set_1scriptpubkey(JN
        LDKShutdown this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_u8Z val_ref;
        val_ref.datalen = (*env)->GetArrayLength(env, val);
        val_ref.data = MALLOC(val_ref.datalen, "LDKCVec_u8Z Bytes");
@@ -23188,6 +26801,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Shutdown_1new(JNIEnv *env,
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -23195,14 +26809,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Shutdown_1new(JNIEnv *env,
        return ret_ref;
 }
 
+static inline uint64_t Shutdown_clone_ptr(LDKShutdown *NONNULL_PTR arg) {
+       LDKShutdown ret_var = Shutdown_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Shutdown_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKShutdown arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = Shutdown_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Shutdown_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKShutdown orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKShutdown ret_var = Shutdown_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -23214,6 +26851,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ClosingSignedFeeRange_1free(JN
        LDKClosingSignedFeeRange this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ClosingSignedFeeRange_free(this_obj_conv);
 }
 
@@ -23221,6 +26859,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClosingSignedFeeRange_1get_
        LDKClosingSignedFeeRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ClosingSignedFeeRange_get_min_fee_satoshis(&this_ptr_conv);
        return ret_val;
 }
@@ -23229,6 +26868,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ClosingSignedFeeRange_1set_1mi
        LDKClosingSignedFeeRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ClosingSignedFeeRange_set_min_fee_satoshis(&this_ptr_conv, val);
 }
 
@@ -23236,6 +26876,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClosingSignedFeeRange_1get_
        LDKClosingSignedFeeRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ClosingSignedFeeRange_get_max_fee_satoshis(&this_ptr_conv);
        return ret_val;
 }
@@ -23244,6 +26885,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ClosingSignedFeeRange_1set_1ma
        LDKClosingSignedFeeRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ClosingSignedFeeRange_set_max_fee_satoshis(&this_ptr_conv, val);
 }
 
@@ -23252,6 +26894,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClosingSignedFeeRange_1new(
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -23259,14 +26902,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClosingSignedFeeRange_1new(
        return ret_ref;
 }
 
+static inline uint64_t ClosingSignedFeeRange_clone_ptr(LDKClosingSignedFeeRange *NONNULL_PTR arg) {
+       LDKClosingSignedFeeRange ret_var = ClosingSignedFeeRange_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClosingSignedFeeRange_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKClosingSignedFeeRange arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ClosingSignedFeeRange_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClosingSignedFeeRange_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKClosingSignedFeeRange orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKClosingSignedFeeRange ret_var = ClosingSignedFeeRange_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -23278,6 +26944,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ClosingSigned_1free(JNIEnv *en
        LDKClosingSigned this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ClosingSigned_free(this_obj_conv);
 }
 
@@ -23285,6 +26952,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ClosingSigned_1get_1cha
        LDKClosingSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *ClosingSigned_get_channel_id(&this_ptr_conv));
        return ret_arr;
@@ -23294,6 +26962,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ClosingSigned_1set_1channel_1i
        LDKClosingSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -23304,6 +26973,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClosingSigned_1get_1fee_1sa
        LDKClosingSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ClosingSigned_get_fee_satoshis(&this_ptr_conv);
        return ret_val;
 }
@@ -23312,6 +26982,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ClosingSigned_1set_1fee_1satos
        LDKClosingSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ClosingSigned_set_fee_satoshis(&this_ptr_conv, val);
 }
 
@@ -23319,6 +26990,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ClosingSigned_1get_1sig
        LDKClosingSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 64);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 64, ClosingSigned_get_signature(&this_ptr_conv).compact_form);
        return ret_arr;
@@ -23328,6 +27000,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ClosingSigned_1set_1signature(
        LDKClosingSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSignature val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 64);
        (*env)->GetByteArrayRegion(env, val, 0, 64, val_ref.compact_form);
@@ -23338,11 +27011,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClosingSigned_1get_1fee_1ra
        LDKClosingSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKClosingSignedFeeRange ret_var = ClosingSigned_get_fee_range(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -23355,9 +27030,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ClosingSigned_1set_1fee_1range
        LDKClosingSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKClosingSignedFeeRange val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = ClosingSignedFeeRange_clone(&val_conv);
        ClosingSigned_set_fee_range(&this_ptr_conv, val_conv);
 }
@@ -23372,11 +27049,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClosingSigned_1new(JNIEnv *
        LDKClosingSignedFeeRange fee_range_arg_conv;
        fee_range_arg_conv.inner = (void*)(fee_range_arg & (~1));
        fee_range_arg_conv.is_owned = (fee_range_arg & 1) || (fee_range_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(fee_range_arg_conv);
        fee_range_arg_conv = ClosingSignedFeeRange_clone(&fee_range_arg_conv);
        LDKClosingSigned ret_var = ClosingSigned_new(channel_id_arg_ref, fee_satoshis_arg, signature_arg_ref, fee_range_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -23384,14 +27063,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClosingSigned_1new(JNIEnv *
        return ret_ref;
 }
 
+static inline uint64_t ClosingSigned_clone_ptr(LDKClosingSigned *NONNULL_PTR arg) {
+       LDKClosingSigned ret_var = ClosingSigned_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClosingSigned_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKClosingSigned arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ClosingSigned_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClosingSigned_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKClosingSigned orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKClosingSigned ret_var = ClosingSigned_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -23403,6 +27105,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UpdateAddHTLC_1free(JNIEnv *en
        LDKUpdateAddHTLC this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        UpdateAddHTLC_free(this_obj_conv);
 }
 
@@ -23410,6 +27113,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UpdateAddHTLC_1get_1cha
        LDKUpdateAddHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *UpdateAddHTLC_get_channel_id(&this_ptr_conv));
        return ret_arr;
@@ -23419,6 +27123,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UpdateAddHTLC_1set_1channel_1i
        LDKUpdateAddHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -23429,6 +27134,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UpdateAddHTLC_1get_1htlc_1i
        LDKUpdateAddHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = UpdateAddHTLC_get_htlc_id(&this_ptr_conv);
        return ret_val;
 }
@@ -23437,6 +27143,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UpdateAddHTLC_1set_1htlc_1id(J
        LDKUpdateAddHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UpdateAddHTLC_set_htlc_id(&this_ptr_conv, val);
 }
 
@@ -23444,6 +27151,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UpdateAddHTLC_1get_1amount_
        LDKUpdateAddHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = UpdateAddHTLC_get_amount_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -23452,6 +27160,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UpdateAddHTLC_1set_1amount_1ms
        LDKUpdateAddHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UpdateAddHTLC_set_amount_msat(&this_ptr_conv, val);
 }
 
@@ -23459,6 +27168,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UpdateAddHTLC_1get_1pay
        LDKUpdateAddHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *UpdateAddHTLC_get_payment_hash(&this_ptr_conv));
        return ret_arr;
@@ -23468,6 +27178,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UpdateAddHTLC_1set_1payment_1h
        LDKUpdateAddHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -23478,6 +27189,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_UpdateAddHTLC_1get_1cltv_1e
        LDKUpdateAddHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = UpdateAddHTLC_get_cltv_expiry(&this_ptr_conv);
        return ret_val;
 }
@@ -23486,17 +27198,41 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UpdateAddHTLC_1set_1cltv_1expi
        LDKUpdateAddHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UpdateAddHTLC_set_cltv_expiry(&this_ptr_conv, val);
 }
 
+static inline uint64_t UpdateAddHTLC_clone_ptr(LDKUpdateAddHTLC *NONNULL_PTR arg) {
+       LDKUpdateAddHTLC ret_var = UpdateAddHTLC_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UpdateAddHTLC_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKUpdateAddHTLC arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = UpdateAddHTLC_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UpdateAddHTLC_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKUpdateAddHTLC orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKUpdateAddHTLC ret_var = UpdateAddHTLC_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -23508,6 +27244,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UpdateFulfillHTLC_1free(JNIEnv
        LDKUpdateFulfillHTLC this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        UpdateFulfillHTLC_free(this_obj_conv);
 }
 
@@ -23515,6 +27252,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UpdateFulfillHTLC_1get_
        LDKUpdateFulfillHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *UpdateFulfillHTLC_get_channel_id(&this_ptr_conv));
        return ret_arr;
@@ -23524,6 +27262,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UpdateFulfillHTLC_1set_1channe
        LDKUpdateFulfillHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -23534,6 +27273,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UpdateFulfillHTLC_1get_1htl
        LDKUpdateFulfillHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = UpdateFulfillHTLC_get_htlc_id(&this_ptr_conv);
        return ret_val;
 }
@@ -23542,6 +27282,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UpdateFulfillHTLC_1set_1htlc_1
        LDKUpdateFulfillHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UpdateFulfillHTLC_set_htlc_id(&this_ptr_conv, val);
 }
 
@@ -23549,6 +27290,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UpdateFulfillHTLC_1get_
        LDKUpdateFulfillHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *UpdateFulfillHTLC_get_payment_preimage(&this_ptr_conv));
        return ret_arr;
@@ -23558,6 +27300,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UpdateFulfillHTLC_1set_1paymen
        LDKUpdateFulfillHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -23575,6 +27318,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UpdateFulfillHTLC_1new(JNIE
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -23582,14 +27326,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UpdateFulfillHTLC_1new(JNIE
        return ret_ref;
 }
 
+static inline uint64_t UpdateFulfillHTLC_clone_ptr(LDKUpdateFulfillHTLC *NONNULL_PTR arg) {
+       LDKUpdateFulfillHTLC ret_var = UpdateFulfillHTLC_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UpdateFulfillHTLC_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKUpdateFulfillHTLC arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = UpdateFulfillHTLC_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UpdateFulfillHTLC_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKUpdateFulfillHTLC orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKUpdateFulfillHTLC ret_var = UpdateFulfillHTLC_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -23601,6 +27368,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UpdateFailHTLC_1free(JNIEnv *e
        LDKUpdateFailHTLC this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        UpdateFailHTLC_free(this_obj_conv);
 }
 
@@ -23608,6 +27376,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UpdateFailHTLC_1get_1ch
        LDKUpdateFailHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *UpdateFailHTLC_get_channel_id(&this_ptr_conv));
        return ret_arr;
@@ -23617,6 +27386,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UpdateFailHTLC_1set_1channel_1
        LDKUpdateFailHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -23627,6 +27397,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UpdateFailHTLC_1get_1htlc_1
        LDKUpdateFailHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = UpdateFailHTLC_get_htlc_id(&this_ptr_conv);
        return ret_val;
 }
@@ -23635,17 +27406,41 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UpdateFailHTLC_1set_1htlc_1id(
        LDKUpdateFailHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UpdateFailHTLC_set_htlc_id(&this_ptr_conv, val);
 }
 
+static inline uint64_t UpdateFailHTLC_clone_ptr(LDKUpdateFailHTLC *NONNULL_PTR arg) {
+       LDKUpdateFailHTLC ret_var = UpdateFailHTLC_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UpdateFailHTLC_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKUpdateFailHTLC arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = UpdateFailHTLC_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UpdateFailHTLC_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKUpdateFailHTLC orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKUpdateFailHTLC ret_var = UpdateFailHTLC_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -23657,6 +27452,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UpdateFailMalformedHTLC_1free(
        LDKUpdateFailMalformedHTLC this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        UpdateFailMalformedHTLC_free(this_obj_conv);
 }
 
@@ -23664,6 +27460,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UpdateFailMalformedHTLC
        LDKUpdateFailMalformedHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *UpdateFailMalformedHTLC_get_channel_id(&this_ptr_conv));
        return ret_arr;
@@ -23673,6 +27470,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UpdateFailMalformedHTLC_1set_1
        LDKUpdateFailMalformedHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -23683,6 +27481,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UpdateFailMalformedHTLC_1ge
        LDKUpdateFailMalformedHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = UpdateFailMalformedHTLC_get_htlc_id(&this_ptr_conv);
        return ret_val;
 }
@@ -23691,6 +27490,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UpdateFailMalformedHTLC_1set_1
        LDKUpdateFailMalformedHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UpdateFailMalformedHTLC_set_htlc_id(&this_ptr_conv, val);
 }
 
@@ -23698,6 +27498,7 @@ JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_UpdateFailMalformedHTLC_1ge
        LDKUpdateFailMalformedHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = UpdateFailMalformedHTLC_get_failure_code(&this_ptr_conv);
        return ret_val;
 }
@@ -23706,17 +27507,41 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UpdateFailMalformedHTLC_1set_1
        LDKUpdateFailMalformedHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UpdateFailMalformedHTLC_set_failure_code(&this_ptr_conv, val);
 }
 
+static inline uint64_t UpdateFailMalformedHTLC_clone_ptr(LDKUpdateFailMalformedHTLC *NONNULL_PTR arg) {
+       LDKUpdateFailMalformedHTLC ret_var = UpdateFailMalformedHTLC_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UpdateFailMalformedHTLC_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKUpdateFailMalformedHTLC arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = UpdateFailMalformedHTLC_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UpdateFailMalformedHTLC_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKUpdateFailMalformedHTLC orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKUpdateFailMalformedHTLC ret_var = UpdateFailMalformedHTLC_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -23728,6 +27553,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CommitmentSigned_1free(JNIEnv
        LDKCommitmentSigned this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        CommitmentSigned_free(this_obj_conv);
 }
 
@@ -23735,6 +27561,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_CommitmentSigned_1get_1
        LDKCommitmentSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *CommitmentSigned_get_channel_id(&this_ptr_conv));
        return ret_arr;
@@ -23744,6 +27571,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CommitmentSigned_1set_1channel
        LDKCommitmentSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -23754,6 +27582,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_CommitmentSigned_1get_1
        LDKCommitmentSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 64);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 64, CommitmentSigned_get_signature(&this_ptr_conv).compact_form);
        return ret_arr;
@@ -23763,6 +27592,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CommitmentSigned_1set_1signatu
        LDKCommitmentSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSignature val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 64);
        (*env)->GetByteArrayRegion(env, val, 0, 64, val_ref.compact_form);
@@ -23773,6 +27603,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CommitmentSigned_1set_1htlc_1s
        LDKCommitmentSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_SignatureZ val_constr;
        val_constr.datalen = (*env)->GetArrayLength(env, val);
        if (val_constr.datalen > 0)
@@ -23813,6 +27644,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CommitmentSigned_1new(JNIEn
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -23820,14 +27652,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CommitmentSigned_1new(JNIEn
        return ret_ref;
 }
 
+static inline uint64_t CommitmentSigned_clone_ptr(LDKCommitmentSigned *NONNULL_PTR arg) {
+       LDKCommitmentSigned ret_var = CommitmentSigned_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CommitmentSigned_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCommitmentSigned arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = CommitmentSigned_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CommitmentSigned_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCommitmentSigned orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKCommitmentSigned ret_var = CommitmentSigned_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -23839,6 +27694,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RevokeAndACK_1free(JNIEnv *env
        LDKRevokeAndACK this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        RevokeAndACK_free(this_obj_conv);
 }
 
@@ -23846,6 +27702,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_RevokeAndACK_1get_1chan
        LDKRevokeAndACK this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *RevokeAndACK_get_channel_id(&this_ptr_conv));
        return ret_arr;
@@ -23855,6 +27712,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RevokeAndACK_1set_1channel_1id
        LDKRevokeAndACK this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -23865,6 +27723,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_RevokeAndACK_1get_1per_
        LDKRevokeAndACK this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *RevokeAndACK_get_per_commitment_secret(&this_ptr_conv));
        return ret_arr;
@@ -23874,6 +27733,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RevokeAndACK_1set_1per_1commit
        LDKRevokeAndACK this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -23884,6 +27744,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_RevokeAndACK_1get_1next
        LDKRevokeAndACK this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, RevokeAndACK_get_next_per_commitment_point(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -23893,6 +27754,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RevokeAndACK_1set_1next_1per_1
        LDKRevokeAndACK this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -23913,6 +27775,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RevokeAndACK_1new(JNIEnv *e
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -23920,14 +27783,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RevokeAndACK_1new(JNIEnv *e
        return ret_ref;
 }
 
+static inline uint64_t RevokeAndACK_clone_ptr(LDKRevokeAndACK *NONNULL_PTR arg) {
+       LDKRevokeAndACK ret_var = RevokeAndACK_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RevokeAndACK_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKRevokeAndACK arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = RevokeAndACK_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RevokeAndACK_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKRevokeAndACK orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKRevokeAndACK ret_var = RevokeAndACK_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -23939,6 +27825,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UpdateFee_1free(JNIEnv *env, j
        LDKUpdateFee this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        UpdateFee_free(this_obj_conv);
 }
 
@@ -23946,6 +27833,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UpdateFee_1get_1channel
        LDKUpdateFee this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *UpdateFee_get_channel_id(&this_ptr_conv));
        return ret_arr;
@@ -23955,6 +27843,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UpdateFee_1set_1channel_1id(JN
        LDKUpdateFee this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -23965,6 +27854,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_UpdateFee_1get_1feerate_1pe
        LDKUpdateFee this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = UpdateFee_get_feerate_per_kw(&this_ptr_conv);
        return ret_val;
 }
@@ -23973,6 +27863,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UpdateFee_1set_1feerate_1per_1
        LDKUpdateFee this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UpdateFee_set_feerate_per_kw(&this_ptr_conv, val);
 }
 
@@ -23984,6 +27875,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UpdateFee_1new(JNIEnv *env,
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -23991,14 +27883,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UpdateFee_1new(JNIEnv *env,
        return ret_ref;
 }
 
+static inline uint64_t UpdateFee_clone_ptr(LDKUpdateFee *NONNULL_PTR arg) {
+       LDKUpdateFee ret_var = UpdateFee_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UpdateFee_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKUpdateFee arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = UpdateFee_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UpdateFee_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKUpdateFee orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKUpdateFee ret_var = UpdateFee_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24010,6 +27925,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DataLossProtect_1free(JNIEnv *
        LDKDataLossProtect this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        DataLossProtect_free(this_obj_conv);
 }
 
@@ -24017,6 +27933,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_DataLossProtect_1get_1y
        LDKDataLossProtect this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *DataLossProtect_get_your_last_per_commitment_secret(&this_ptr_conv));
        return ret_arr;
@@ -24026,6 +27943,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DataLossProtect_1set_1your_1la
        LDKDataLossProtect this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -24036,6 +27954,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_DataLossProtect_1get_1m
        LDKDataLossProtect this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, DataLossProtect_get_my_current_per_commitment_point(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -24045,6 +27964,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DataLossProtect_1set_1my_1curr
        LDKDataLossProtect this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -24062,6 +27982,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DataLossProtect_1new(JNIEnv
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24069,14 +27990,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DataLossProtect_1new(JNIEnv
        return ret_ref;
 }
 
+static inline uint64_t DataLossProtect_clone_ptr(LDKDataLossProtect *NONNULL_PTR arg) {
+       LDKDataLossProtect ret_var = DataLossProtect_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DataLossProtect_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKDataLossProtect arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = DataLossProtect_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DataLossProtect_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKDataLossProtect orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKDataLossProtect ret_var = DataLossProtect_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24088,6 +28032,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelReestablish_1free(JNIEn
        LDKChannelReestablish this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelReestablish_free(this_obj_conv);
 }
 
@@ -24095,6 +28040,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelReestablish_1get
        LDKChannelReestablish this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *ChannelReestablish_get_channel_id(&this_ptr_conv));
        return ret_arr;
@@ -24104,6 +28050,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelReestablish_1set_1chann
        LDKChannelReestablish this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -24114,6 +28061,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelReestablish_1get_1ne
        LDKChannelReestablish this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelReestablish_get_next_local_commitment_number(&this_ptr_conv);
        return ret_val;
 }
@@ -24122,6 +28070,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelReestablish_1set_1next_
        LDKChannelReestablish this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelReestablish_set_next_local_commitment_number(&this_ptr_conv, val);
 }
 
@@ -24129,6 +28078,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelReestablish_1get_1ne
        LDKChannelReestablish this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelReestablish_get_next_remote_commitment_number(&this_ptr_conv);
        return ret_val;
 }
@@ -24137,17 +28087,41 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelReestablish_1set_1next_
        LDKChannelReestablish this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelReestablish_set_next_remote_commitment_number(&this_ptr_conv, val);
 }
 
+static inline uint64_t ChannelReestablish_clone_ptr(LDKChannelReestablish *NONNULL_PTR arg) {
+       LDKChannelReestablish ret_var = ChannelReestablish_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelReestablish_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKChannelReestablish arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChannelReestablish_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelReestablish_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKChannelReestablish orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChannelReestablish ret_var = ChannelReestablish_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24159,6 +28133,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_AnnouncementSignatures_1free(J
        LDKAnnouncementSignatures this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        AnnouncementSignatures_free(this_obj_conv);
 }
 
@@ -24166,6 +28141,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_AnnouncementSignatures_
        LDKAnnouncementSignatures this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *AnnouncementSignatures_get_channel_id(&this_ptr_conv));
        return ret_arr;
@@ -24175,6 +28151,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_AnnouncementSignatures_1set_1c
        LDKAnnouncementSignatures this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -24185,6 +28162,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_AnnouncementSignatures_1get
        LDKAnnouncementSignatures this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = AnnouncementSignatures_get_short_channel_id(&this_ptr_conv);
        return ret_val;
 }
@@ -24193,6 +28171,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_AnnouncementSignatures_1set_1s
        LDKAnnouncementSignatures this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        AnnouncementSignatures_set_short_channel_id(&this_ptr_conv, val);
 }
 
@@ -24200,6 +28179,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_AnnouncementSignatures_
        LDKAnnouncementSignatures this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 64);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 64, AnnouncementSignatures_get_node_signature(&this_ptr_conv).compact_form);
        return ret_arr;
@@ -24209,6 +28189,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_AnnouncementSignatures_1set_1n
        LDKAnnouncementSignatures this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSignature val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 64);
        (*env)->GetByteArrayRegion(env, val, 0, 64, val_ref.compact_form);
@@ -24219,6 +28200,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_AnnouncementSignatures_
        LDKAnnouncementSignatures this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 64);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 64, AnnouncementSignatures_get_bitcoin_signature(&this_ptr_conv).compact_form);
        return ret_arr;
@@ -24228,6 +28210,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_AnnouncementSignatures_1set_1b
        LDKAnnouncementSignatures this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSignature val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 64);
        (*env)->GetByteArrayRegion(env, val, 0, 64, val_ref.compact_form);
@@ -24248,6 +28231,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_AnnouncementSignatures_1new
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24255,14 +28239,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_AnnouncementSignatures_1new
        return ret_ref;
 }
 
+static inline uint64_t AnnouncementSignatures_clone_ptr(LDKAnnouncementSignatures *NONNULL_PTR arg) {
+       LDKAnnouncementSignatures ret_var = AnnouncementSignatures_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_AnnouncementSignatures_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKAnnouncementSignatures arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = AnnouncementSignatures_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_AnnouncementSignatures_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKAnnouncementSignatures orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKAnnouncementSignatures ret_var = AnnouncementSignatures_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24279,6 +28286,18 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NetAddress_1free(JNIEnv *env,
        NetAddress_free(this_ptr_conv);
 }
 
+static inline uint64_t NetAddress_clone_ptr(LDKNetAddress *NONNULL_PTR arg) {
+       LDKNetAddress *ret_copy = MALLOC(sizeof(LDKNetAddress), "LDKNetAddress");
+       *ret_copy = NetAddress_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetAddress_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKNetAddress* arg_conv = (LDKNetAddress*)arg;
+       int64_t ret_val = NetAddress_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetAddress_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKNetAddress* orig_conv = (LDKNetAddress*)orig;
        LDKNetAddress *ret_copy = MALLOC(sizeof(LDKNetAddress), "LDKNetAddress");
@@ -24350,6 +28369,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedNodeAnnouncement_1free
        LDKUnsignedNodeAnnouncement this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        UnsignedNodeAnnouncement_free(this_obj_conv);
 }
 
@@ -24357,10 +28377,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedNodeAnnouncement_1g
        LDKUnsignedNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNodeFeatures ret_var = UnsignedNodeAnnouncement_get_features(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24372,9 +28394,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedNodeAnnouncement_1set_
        LDKUnsignedNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNodeFeatures val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = NodeFeatures_clone(&val_conv);
        UnsignedNodeAnnouncement_set_features(&this_ptr_conv, val_conv);
 }
@@ -24383,6 +28407,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_UnsignedNodeAnnouncement_1g
        LDKUnsignedNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = UnsignedNodeAnnouncement_get_timestamp(&this_ptr_conv);
        return ret_val;
 }
@@ -24391,6 +28416,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedNodeAnnouncement_1set_
        LDKUnsignedNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UnsignedNodeAnnouncement_set_timestamp(&this_ptr_conv, val);
 }
 
@@ -24398,6 +28424,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedNodeAnnouncemen
        LDKUnsignedNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, UnsignedNodeAnnouncement_get_node_id(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -24407,6 +28434,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedNodeAnnouncement_1set_
        LDKUnsignedNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -24417,6 +28445,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedNodeAnnouncemen
        LDKUnsignedNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 3);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 3, *UnsignedNodeAnnouncement_get_rgb(&this_ptr_conv));
        return ret_arr;
@@ -24426,6 +28455,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedNodeAnnouncement_1set_
        LDKUnsignedNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThreeBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 3);
        (*env)->GetByteArrayRegion(env, val, 0, 3, val_ref.data);
@@ -24436,6 +28466,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedNodeAnnouncemen
        LDKUnsignedNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *UnsignedNodeAnnouncement_get_alias(&this_ptr_conv));
        return ret_arr;
@@ -24445,6 +28476,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedNodeAnnouncement_1set_
        LDKUnsignedNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -24455,6 +28487,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedNodeAnnouncement_1set_
        LDKUnsignedNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_NetAddressZ val_constr;
        val_constr.datalen = (*env)->GetArrayLength(env, val);
        if (val_constr.datalen > 0)
@@ -24474,14 +28507,37 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedNodeAnnouncement_1set_
        UnsignedNodeAnnouncement_set_addresses(&this_ptr_conv, val_constr);
 }
 
+static inline uint64_t UnsignedNodeAnnouncement_clone_ptr(LDKUnsignedNodeAnnouncement *NONNULL_PTR arg) {
+       LDKUnsignedNodeAnnouncement ret_var = UnsignedNodeAnnouncement_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedNodeAnnouncement_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKUnsignedNodeAnnouncement arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = UnsignedNodeAnnouncement_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedNodeAnnouncement_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKUnsignedNodeAnnouncement orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKUnsignedNodeAnnouncement ret_var = UnsignedNodeAnnouncement_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24493,6 +28549,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncement_1free(JNIEnv
        LDKNodeAnnouncement this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        NodeAnnouncement_free(this_obj_conv);
 }
 
@@ -24500,6 +28557,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NodeAnnouncement_1get_1
        LDKNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 64);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 64, NodeAnnouncement_get_signature(&this_ptr_conv).compact_form);
        return ret_arr;
@@ -24509,6 +28567,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncement_1set_1signatu
        LDKNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSignature val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 64);
        (*env)->GetByteArrayRegion(env, val, 0, 64, val_ref.compact_form);
@@ -24519,10 +28578,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncement_1get_1cont
        LDKNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKUnsignedNodeAnnouncement ret_var = NodeAnnouncement_get_contents(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24534,9 +28595,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncement_1set_1content
        LDKNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKUnsignedNodeAnnouncement val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = UnsignedNodeAnnouncement_clone(&val_conv);
        NodeAnnouncement_set_contents(&this_ptr_conv, val_conv);
 }
@@ -24548,11 +28611,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncement_1new(JNIEn
        LDKUnsignedNodeAnnouncement contents_arg_conv;
        contents_arg_conv.inner = (void*)(contents_arg & (~1));
        contents_arg_conv.is_owned = (contents_arg & 1) || (contents_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(contents_arg_conv);
        contents_arg_conv = UnsignedNodeAnnouncement_clone(&contents_arg_conv);
        LDKNodeAnnouncement ret_var = NodeAnnouncement_new(signature_arg_ref, contents_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24560,14 +28625,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncement_1new(JNIEn
        return ret_ref;
 }
 
+static inline uint64_t NodeAnnouncement_clone_ptr(LDKNodeAnnouncement *NONNULL_PTR arg) {
+       LDKNodeAnnouncement ret_var = NodeAnnouncement_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncement_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKNodeAnnouncement arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = NodeAnnouncement_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncement_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKNodeAnnouncement orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKNodeAnnouncement ret_var = NodeAnnouncement_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24579,6 +28667,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedChannelAnnouncement_1f
        LDKUnsignedChannelAnnouncement this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        UnsignedChannelAnnouncement_free(this_obj_conv);
 }
 
@@ -24586,10 +28675,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedChannelAnnouncement
        LDKUnsignedChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelFeatures ret_var = UnsignedChannelAnnouncement_get_features(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24601,9 +28692,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedChannelAnnouncement_1s
        LDKUnsignedChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelFeatures val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = ChannelFeatures_clone(&val_conv);
        UnsignedChannelAnnouncement_set_features(&this_ptr_conv, val_conv);
 }
@@ -24612,6 +28705,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedChannelAnnounce
        LDKUnsignedChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *UnsignedChannelAnnouncement_get_chain_hash(&this_ptr_conv));
        return ret_arr;
@@ -24621,6 +28715,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedChannelAnnouncement_1s
        LDKUnsignedChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -24631,6 +28726,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedChannelAnnouncement
        LDKUnsignedChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = UnsignedChannelAnnouncement_get_short_channel_id(&this_ptr_conv);
        return ret_val;
 }
@@ -24639,6 +28735,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedChannelAnnouncement_1s
        LDKUnsignedChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UnsignedChannelAnnouncement_set_short_channel_id(&this_ptr_conv, val);
 }
 
@@ -24646,6 +28743,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedChannelAnnounce
        LDKUnsignedChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, UnsignedChannelAnnouncement_get_node_id_1(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -24655,6 +28753,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedChannelAnnouncement_1s
        LDKUnsignedChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -24665,6 +28764,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedChannelAnnounce
        LDKUnsignedChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, UnsignedChannelAnnouncement_get_node_id_2(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -24674,6 +28774,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedChannelAnnouncement_1s
        LDKUnsignedChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -24684,6 +28785,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedChannelAnnounce
        LDKUnsignedChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, UnsignedChannelAnnouncement_get_bitcoin_key_1(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -24693,6 +28795,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedChannelAnnouncement_1s
        LDKUnsignedChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -24703,6 +28806,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedChannelAnnounce
        LDKUnsignedChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, UnsignedChannelAnnouncement_get_bitcoin_key_2(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -24712,20 +28816,44 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedChannelAnnouncement_1s
        LDKUnsignedChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
        UnsignedChannelAnnouncement_set_bitcoin_key_2(&this_ptr_conv, val_ref);
 }
 
+static inline uint64_t UnsignedChannelAnnouncement_clone_ptr(LDKUnsignedChannelAnnouncement *NONNULL_PTR arg) {
+       LDKUnsignedChannelAnnouncement ret_var = UnsignedChannelAnnouncement_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedChannelAnnouncement_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKUnsignedChannelAnnouncement arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = UnsignedChannelAnnouncement_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedChannelAnnouncement_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKUnsignedChannelAnnouncement orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKUnsignedChannelAnnouncement ret_var = UnsignedChannelAnnouncement_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24737,6 +28865,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelAnnouncement_1free(JNIE
        LDKChannelAnnouncement this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelAnnouncement_free(this_obj_conv);
 }
 
@@ -24744,6 +28873,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelAnnouncement_1ge
        LDKChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 64);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 64, ChannelAnnouncement_get_node_signature_1(&this_ptr_conv).compact_form);
        return ret_arr;
@@ -24753,6 +28883,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelAnnouncement_1set_1node
        LDKChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSignature val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 64);
        (*env)->GetByteArrayRegion(env, val, 0, 64, val_ref.compact_form);
@@ -24763,6 +28894,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelAnnouncement_1ge
        LDKChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 64);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 64, ChannelAnnouncement_get_node_signature_2(&this_ptr_conv).compact_form);
        return ret_arr;
@@ -24772,6 +28904,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelAnnouncement_1set_1node
        LDKChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSignature val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 64);
        (*env)->GetByteArrayRegion(env, val, 0, 64, val_ref.compact_form);
@@ -24782,6 +28915,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelAnnouncement_1ge
        LDKChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 64);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 64, ChannelAnnouncement_get_bitcoin_signature_1(&this_ptr_conv).compact_form);
        return ret_arr;
@@ -24791,6 +28925,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelAnnouncement_1set_1bitc
        LDKChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSignature val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 64);
        (*env)->GetByteArrayRegion(env, val, 0, 64, val_ref.compact_form);
@@ -24801,6 +28936,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelAnnouncement_1ge
        LDKChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 64);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 64, ChannelAnnouncement_get_bitcoin_signature_2(&this_ptr_conv).compact_form);
        return ret_arr;
@@ -24810,6 +28946,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelAnnouncement_1set_1bitc
        LDKChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSignature val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 64);
        (*env)->GetByteArrayRegion(env, val, 0, 64, val_ref.compact_form);
@@ -24820,10 +28957,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelAnnouncement_1get_1c
        LDKChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKUnsignedChannelAnnouncement ret_var = ChannelAnnouncement_get_contents(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24835,9 +28974,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelAnnouncement_1set_1cont
        LDKChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKUnsignedChannelAnnouncement val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = UnsignedChannelAnnouncement_clone(&val_conv);
        ChannelAnnouncement_set_contents(&this_ptr_conv, val_conv);
 }
@@ -24858,11 +28999,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelAnnouncement_1new(JN
        LDKUnsignedChannelAnnouncement contents_arg_conv;
        contents_arg_conv.inner = (void*)(contents_arg & (~1));
        contents_arg_conv.is_owned = (contents_arg & 1) || (contents_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(contents_arg_conv);
        contents_arg_conv = UnsignedChannelAnnouncement_clone(&contents_arg_conv);
        LDKChannelAnnouncement ret_var = ChannelAnnouncement_new(node_signature_1_arg_ref, node_signature_2_arg_ref, bitcoin_signature_1_arg_ref, bitcoin_signature_2_arg_ref, contents_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24870,14 +29013,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelAnnouncement_1new(JN
        return ret_ref;
 }
 
+static inline uint64_t ChannelAnnouncement_clone_ptr(LDKChannelAnnouncement *NONNULL_PTR arg) {
+       LDKChannelAnnouncement ret_var = ChannelAnnouncement_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelAnnouncement_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKChannelAnnouncement arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChannelAnnouncement_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelAnnouncement_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKChannelAnnouncement orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChannelAnnouncement ret_var = ChannelAnnouncement_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24889,6 +29055,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedChannelUpdate_1free(JN
        LDKUnsignedChannelUpdate this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        UnsignedChannelUpdate_free(this_obj_conv);
 }
 
@@ -24896,6 +29063,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedChannelUpdate_1
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *UnsignedChannelUpdate_get_chain_hash(&this_ptr_conv));
        return ret_arr;
@@ -24905,6 +29073,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedChannelUpdate_1set_1ch
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -24915,6 +29084,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedChannelUpdate_1get_
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = UnsignedChannelUpdate_get_short_channel_id(&this_ptr_conv);
        return ret_val;
 }
@@ -24923,6 +29093,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedChannelUpdate_1set_1sh
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UnsignedChannelUpdate_set_short_channel_id(&this_ptr_conv, val);
 }
 
@@ -24930,6 +29101,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_UnsignedChannelUpdate_1get_
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = UnsignedChannelUpdate_get_timestamp(&this_ptr_conv);
        return ret_val;
 }
@@ -24938,6 +29110,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedChannelUpdate_1set_1ti
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UnsignedChannelUpdate_set_timestamp(&this_ptr_conv, val);
 }
 
@@ -24945,6 +29118,7 @@ JNIEXPORT int8_t JNICALL Java_org_ldk_impl_bindings_UnsignedChannelUpdate_1get_1
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_t ret_val = UnsignedChannelUpdate_get_flags(&this_ptr_conv);
        return ret_val;
 }
@@ -24953,6 +29127,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedChannelUpdate_1set_1fl
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UnsignedChannelUpdate_set_flags(&this_ptr_conv, val);
 }
 
@@ -24960,6 +29135,7 @@ JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_UnsignedChannelUpdate_1get_
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = UnsignedChannelUpdate_get_cltv_expiry_delta(&this_ptr_conv);
        return ret_val;
 }
@@ -24968,6 +29144,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedChannelUpdate_1set_1cl
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UnsignedChannelUpdate_set_cltv_expiry_delta(&this_ptr_conv, val);
 }
 
@@ -24975,6 +29152,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedChannelUpdate_1get_
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = UnsignedChannelUpdate_get_htlc_minimum_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -24983,6 +29161,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedChannelUpdate_1set_1ht
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UnsignedChannelUpdate_set_htlc_minimum_msat(&this_ptr_conv, val);
 }
 
@@ -24990,6 +29169,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_UnsignedChannelUpdate_1get_
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = UnsignedChannelUpdate_get_fee_base_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -24998,6 +29178,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedChannelUpdate_1set_1fe
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UnsignedChannelUpdate_set_fee_base_msat(&this_ptr_conv, val);
 }
 
@@ -25005,6 +29186,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_UnsignedChannelUpdate_1get_
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = UnsignedChannelUpdate_get_fee_proportional_millionths(&this_ptr_conv);
        return ret_val;
 }
@@ -25013,17 +29195,41 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedChannelUpdate_1set_1fe
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UnsignedChannelUpdate_set_fee_proportional_millionths(&this_ptr_conv, val);
 }
 
+static inline uint64_t UnsignedChannelUpdate_clone_ptr(LDKUnsignedChannelUpdate *NONNULL_PTR arg) {
+       LDKUnsignedChannelUpdate ret_var = UnsignedChannelUpdate_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedChannelUpdate_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKUnsignedChannelUpdate arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = UnsignedChannelUpdate_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedChannelUpdate_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKUnsignedChannelUpdate orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKUnsignedChannelUpdate ret_var = UnsignedChannelUpdate_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25035,6 +29241,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelUpdate_1free(JNIEnv *en
        LDKChannelUpdate this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelUpdate_free(this_obj_conv);
 }
 
@@ -25042,6 +29249,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelUpdate_1get_1sig
        LDKChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 64);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 64, ChannelUpdate_get_signature(&this_ptr_conv).compact_form);
        return ret_arr;
@@ -25051,6 +29259,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelUpdate_1set_1signature(
        LDKChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSignature val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 64);
        (*env)->GetByteArrayRegion(env, val, 0, 64, val_ref.compact_form);
@@ -25061,10 +29270,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUpdate_1get_1content
        LDKChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKUnsignedChannelUpdate ret_var = ChannelUpdate_get_contents(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25076,9 +29287,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelUpdate_1set_1contents(J
        LDKChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKUnsignedChannelUpdate val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = UnsignedChannelUpdate_clone(&val_conv);
        ChannelUpdate_set_contents(&this_ptr_conv, val_conv);
 }
@@ -25090,11 +29303,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUpdate_1new(JNIEnv *
        LDKUnsignedChannelUpdate contents_arg_conv;
        contents_arg_conv.inner = (void*)(contents_arg & (~1));
        contents_arg_conv.is_owned = (contents_arg & 1) || (contents_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(contents_arg_conv);
        contents_arg_conv = UnsignedChannelUpdate_clone(&contents_arg_conv);
        LDKChannelUpdate ret_var = ChannelUpdate_new(signature_arg_ref, contents_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25102,14 +29317,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUpdate_1new(JNIEnv *
        return ret_ref;
 }
 
+static inline uint64_t ChannelUpdate_clone_ptr(LDKChannelUpdate *NONNULL_PTR arg) {
+       LDKChannelUpdate ret_var = ChannelUpdate_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUpdate_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKChannelUpdate arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChannelUpdate_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUpdate_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKChannelUpdate orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChannelUpdate ret_var = ChannelUpdate_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25121,6 +29359,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_QueryChannelRange_1free(JNIEnv
        LDKQueryChannelRange this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        QueryChannelRange_free(this_obj_conv);
 }
 
@@ -25128,6 +29367,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_QueryChannelRange_1get_
        LDKQueryChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *QueryChannelRange_get_chain_hash(&this_ptr_conv));
        return ret_arr;
@@ -25137,6 +29377,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_QueryChannelRange_1set_1chain_
        LDKQueryChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -25147,6 +29388,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_QueryChannelRange_1get_1fir
        LDKQueryChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = QueryChannelRange_get_first_blocknum(&this_ptr_conv);
        return ret_val;
 }
@@ -25155,6 +29397,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_QueryChannelRange_1set_1first_
        LDKQueryChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        QueryChannelRange_set_first_blocknum(&this_ptr_conv, val);
 }
 
@@ -25162,6 +29405,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_QueryChannelRange_1get_1num
        LDKQueryChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = QueryChannelRange_get_number_of_blocks(&this_ptr_conv);
        return ret_val;
 }
@@ -25170,6 +29414,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_QueryChannelRange_1set_1number
        LDKQueryChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        QueryChannelRange_set_number_of_blocks(&this_ptr_conv, val);
 }
 
@@ -25181,6 +29426,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_QueryChannelRange_1new(JNIE
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25188,14 +29434,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_QueryChannelRange_1new(JNIE
        return ret_ref;
 }
 
+static inline uint64_t QueryChannelRange_clone_ptr(LDKQueryChannelRange *NONNULL_PTR arg) {
+       LDKQueryChannelRange ret_var = QueryChannelRange_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_QueryChannelRange_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKQueryChannelRange arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = QueryChannelRange_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_QueryChannelRange_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKQueryChannelRange orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKQueryChannelRange ret_var = QueryChannelRange_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25207,6 +29476,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ReplyChannelRange_1free(JNIEnv
        LDKReplyChannelRange this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ReplyChannelRange_free(this_obj_conv);
 }
 
@@ -25214,6 +29484,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ReplyChannelRange_1get_
        LDKReplyChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *ReplyChannelRange_get_chain_hash(&this_ptr_conv));
        return ret_arr;
@@ -25223,6 +29494,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ReplyChannelRange_1set_1chain_
        LDKReplyChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -25233,6 +29505,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_ReplyChannelRange_1get_1fir
        LDKReplyChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = ReplyChannelRange_get_first_blocknum(&this_ptr_conv);
        return ret_val;
 }
@@ -25241,6 +29514,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ReplyChannelRange_1set_1first_
        LDKReplyChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ReplyChannelRange_set_first_blocknum(&this_ptr_conv, val);
 }
 
@@ -25248,6 +29522,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_ReplyChannelRange_1get_1num
        LDKReplyChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = ReplyChannelRange_get_number_of_blocks(&this_ptr_conv);
        return ret_val;
 }
@@ -25256,6 +29531,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ReplyChannelRange_1set_1number
        LDKReplyChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ReplyChannelRange_set_number_of_blocks(&this_ptr_conv, val);
 }
 
@@ -25263,6 +29539,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ReplyChannelRange_1get_1sy
        LDKReplyChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        jboolean ret_val = ReplyChannelRange_get_sync_complete(&this_ptr_conv);
        return ret_val;
 }
@@ -25271,6 +29548,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ReplyChannelRange_1set_1sync_1
        LDKReplyChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ReplyChannelRange_set_sync_complete(&this_ptr_conv, val);
 }
 
@@ -25278,6 +29556,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ReplyChannelRange_1set_1short_
        LDKReplyChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_u64Z val_constr;
        val_constr.datalen = (*env)->GetArrayLength(env, val);
        if (val_constr.datalen > 0)
@@ -25313,6 +29592,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ReplyChannelRange_1new(JNIE
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25320,14 +29600,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ReplyChannelRange_1new(JNIE
        return ret_ref;
 }
 
+static inline uint64_t ReplyChannelRange_clone_ptr(LDKReplyChannelRange *NONNULL_PTR arg) {
+       LDKReplyChannelRange ret_var = ReplyChannelRange_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ReplyChannelRange_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKReplyChannelRange arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ReplyChannelRange_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ReplyChannelRange_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKReplyChannelRange orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKReplyChannelRange ret_var = ReplyChannelRange_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25339,6 +29642,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_QueryShortChannelIds_1free(JNI
        LDKQueryShortChannelIds this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        QueryShortChannelIds_free(this_obj_conv);
 }
 
@@ -25346,6 +29650,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_QueryShortChannelIds_1g
        LDKQueryShortChannelIds this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *QueryShortChannelIds_get_chain_hash(&this_ptr_conv));
        return ret_arr;
@@ -25355,6 +29660,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_QueryShortChannelIds_1set_1cha
        LDKQueryShortChannelIds this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -25365,6 +29671,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_QueryShortChannelIds_1set_1sho
        LDKQueryShortChannelIds this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_u64Z val_constr;
        val_constr.datalen = (*env)->GetArrayLength(env, val);
        if (val_constr.datalen > 0)
@@ -25400,6 +29707,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_QueryShortChannelIds_1new(J
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25407,14 +29715,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_QueryShortChannelIds_1new(J
        return ret_ref;
 }
 
+static inline uint64_t QueryShortChannelIds_clone_ptr(LDKQueryShortChannelIds *NONNULL_PTR arg) {
+       LDKQueryShortChannelIds ret_var = QueryShortChannelIds_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_QueryShortChannelIds_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKQueryShortChannelIds arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = QueryShortChannelIds_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_QueryShortChannelIds_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKQueryShortChannelIds orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKQueryShortChannelIds ret_var = QueryShortChannelIds_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25426,6 +29757,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ReplyShortChannelIdsEnd_1free(
        LDKReplyShortChannelIdsEnd this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ReplyShortChannelIdsEnd_free(this_obj_conv);
 }
 
@@ -25433,6 +29765,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ReplyShortChannelIdsEnd
        LDKReplyShortChannelIdsEnd this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *ReplyShortChannelIdsEnd_get_chain_hash(&this_ptr_conv));
        return ret_arr;
@@ -25442,6 +29775,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ReplyShortChannelIdsEnd_1set_1
        LDKReplyShortChannelIdsEnd this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -25452,6 +29786,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ReplyShortChannelIdsEnd_1g
        LDKReplyShortChannelIdsEnd this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        jboolean ret_val = ReplyShortChannelIdsEnd_get_full_information(&this_ptr_conv);
        return ret_val;
 }
@@ -25460,6 +29795,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ReplyShortChannelIdsEnd_1set_1
        LDKReplyShortChannelIdsEnd this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ReplyShortChannelIdsEnd_set_full_information(&this_ptr_conv, val);
 }
 
@@ -25471,6 +29807,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ReplyShortChannelIdsEnd_1ne
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25478,14 +29815,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ReplyShortChannelIdsEnd_1ne
        return ret_ref;
 }
 
+static inline uint64_t ReplyShortChannelIdsEnd_clone_ptr(LDKReplyShortChannelIdsEnd *NONNULL_PTR arg) {
+       LDKReplyShortChannelIdsEnd ret_var = ReplyShortChannelIdsEnd_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ReplyShortChannelIdsEnd_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKReplyShortChannelIdsEnd arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ReplyShortChannelIdsEnd_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ReplyShortChannelIdsEnd_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKReplyShortChannelIdsEnd orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKReplyShortChannelIdsEnd ret_var = ReplyShortChannelIdsEnd_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25497,6 +29857,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_GossipTimestampFilter_1free(JN
        LDKGossipTimestampFilter this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        GossipTimestampFilter_free(this_obj_conv);
 }
 
@@ -25504,6 +29865,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_GossipTimestampFilter_1
        LDKGossipTimestampFilter this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *GossipTimestampFilter_get_chain_hash(&this_ptr_conv));
        return ret_arr;
@@ -25513,6 +29875,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_GossipTimestampFilter_1set_1ch
        LDKGossipTimestampFilter this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -25523,6 +29886,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_GossipTimestampFilter_1get_
        LDKGossipTimestampFilter this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = GossipTimestampFilter_get_first_timestamp(&this_ptr_conv);
        return ret_val;
 }
@@ -25531,6 +29895,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_GossipTimestampFilter_1set_1fi
        LDKGossipTimestampFilter this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        GossipTimestampFilter_set_first_timestamp(&this_ptr_conv, val);
 }
 
@@ -25538,6 +29903,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_GossipTimestampFilter_1get_
        LDKGossipTimestampFilter this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = GossipTimestampFilter_get_timestamp_range(&this_ptr_conv);
        return ret_val;
 }
@@ -25546,6 +29912,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_GossipTimestampFilter_1set_1ti
        LDKGossipTimestampFilter this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        GossipTimestampFilter_set_timestamp_range(&this_ptr_conv, val);
 }
 
@@ -25557,6 +29924,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_GossipTimestampFilter_1new(
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25564,14 +29932,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_GossipTimestampFilter_1new(
        return ret_ref;
 }
 
+static inline uint64_t GossipTimestampFilter_clone_ptr(LDKGossipTimestampFilter *NONNULL_PTR arg) {
+       LDKGossipTimestampFilter ret_var = GossipTimestampFilter_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_GossipTimestampFilter_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKGossipTimestampFilter arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = GossipTimestampFilter_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_GossipTimestampFilter_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKGossipTimestampFilter orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKGossipTimestampFilter ret_var = GossipTimestampFilter_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25588,6 +29979,18 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ErrorAction_1free(JNIEnv *env,
        ErrorAction_free(this_ptr_conv);
 }
 
+static inline uint64_t ErrorAction_clone_ptr(LDKErrorAction *NONNULL_PTR arg) {
+       LDKErrorAction *ret_copy = MALLOC(sizeof(LDKErrorAction), "LDKErrorAction");
+       *ret_copy = ErrorAction_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ErrorAction_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKErrorAction* arg_conv = (LDKErrorAction*)arg;
+       int64_t ret_val = ErrorAction_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ErrorAction_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKErrorAction* orig_conv = (LDKErrorAction*)orig;
        LDKErrorAction *ret_copy = MALLOC(sizeof(LDKErrorAction), "LDKErrorAction");
@@ -25600,6 +30003,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ErrorAction_1disconnect_1pe
        LDKErrorMessage msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = ErrorMessage_clone(&msg_conv);
        LDKErrorAction *ret_copy = MALLOC(sizeof(LDKErrorAction), "LDKErrorAction");
        *ret_copy = ErrorAction_disconnect_peer(msg_conv);
@@ -25626,6 +30030,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ErrorAction_1send_1error_1m
        LDKErrorMessage msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = ErrorMessage_clone(&msg_conv);
        LDKErrorAction *ret_copy = MALLOC(sizeof(LDKErrorAction), "LDKErrorAction");
        *ret_copy = ErrorAction_send_error_message(msg_conv);
@@ -25637,6 +30042,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LightningError_1free(JNIEnv *e
        LDKLightningError this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        LightningError_free(this_obj_conv);
 }
 
@@ -25644,6 +30050,7 @@ JNIEXPORT jstring JNICALL Java_org_ldk_impl_bindings_LightningError_1get_1err(JN
        LDKLightningError this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKStr ret_str = LightningError_get_err(&this_ptr_conv);
        jstring ret_conv = str_ref_to_java(env, ret_str.chars, ret_str.len);
        Str_free(ret_str);
@@ -25654,6 +30061,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LightningError_1set_1err(JNIEn
        LDKLightningError this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKStr val_conv = java_to_owned_str(env, val);
        LightningError_set_err(&this_ptr_conv, val_conv);
 }
@@ -25662,6 +30070,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LightningError_1get_1action
        LDKLightningError this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKErrorAction *ret_copy = MALLOC(sizeof(LDKErrorAction), "LDKErrorAction");
        *ret_copy = LightningError_get_action(&this_ptr_conv);
        uint64_t ret_ref = (uint64_t)ret_copy;
@@ -25672,6 +30081,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LightningError_1set_1action(JN
        LDKLightningError this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKErrorAction val_conv = *(LDKErrorAction*)(val_ptr);
@@ -25689,6 +30099,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LightningError_1new(JNIEnv
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25696,14 +30107,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LightningError_1new(JNIEnv
        return ret_ref;
 }
 
+static inline uint64_t LightningError_clone_ptr(LDKLightningError *NONNULL_PTR arg) {
+       LDKLightningError ret_var = LightningError_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LightningError_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKLightningError arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = LightningError_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LightningError_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKLightningError orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKLightningError ret_var = LightningError_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25715,6 +30149,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1free(JNIEnv
        LDKCommitmentUpdate this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        CommitmentUpdate_free(this_obj_conv);
 }
 
@@ -25722,6 +30157,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1get_
        LDKCommitmentUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_UpdateAddHTLCZ ret_var = CommitmentUpdate_get_update_add_htlcs(&this_ptr_conv);
        int64_tArray ret_arr = NULL;
        ret_arr = (*env)->NewLongArray(env, ret_var.datalen);
@@ -25731,6 +30167,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1get_
                uint64_t ret_conv_15_ref = 0;
                CHECK((((uint64_t)ret_conv_15_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_conv_15_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_15_var);
                ret_conv_15_ref = (uint64_t)ret_conv_15_var.inner;
                if (ret_conv_15_var.is_owned) {
                        ret_conv_15_ref |= 1;
@@ -25746,6 +30183,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1set_1update_
        LDKCommitmentUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_UpdateAddHTLCZ val_constr;
        val_constr.datalen = (*env)->GetArrayLength(env, val);
        if (val_constr.datalen > 0)
@@ -25758,6 +30196,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1set_1update_
                LDKUpdateAddHTLC val_conv_15_conv;
                val_conv_15_conv.inner = (void*)(val_conv_15 & (~1));
                val_conv_15_conv.is_owned = (val_conv_15 & 1) || (val_conv_15 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_15_conv);
                val_conv_15_conv = UpdateAddHTLC_clone(&val_conv_15_conv);
                val_constr.data[p] = val_conv_15_conv;
        }
@@ -25769,6 +30208,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1get_
        LDKCommitmentUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_UpdateFulfillHTLCZ ret_var = CommitmentUpdate_get_update_fulfill_htlcs(&this_ptr_conv);
        int64_tArray ret_arr = NULL;
        ret_arr = (*env)->NewLongArray(env, ret_var.datalen);
@@ -25778,6 +30218,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1get_
                uint64_t ret_conv_19_ref = 0;
                CHECK((((uint64_t)ret_conv_19_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_conv_19_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_19_var);
                ret_conv_19_ref = (uint64_t)ret_conv_19_var.inner;
                if (ret_conv_19_var.is_owned) {
                        ret_conv_19_ref |= 1;
@@ -25793,6 +30234,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1set_1update_
        LDKCommitmentUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_UpdateFulfillHTLCZ val_constr;
        val_constr.datalen = (*env)->GetArrayLength(env, val);
        if (val_constr.datalen > 0)
@@ -25805,6 +30247,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1set_1update_
                LDKUpdateFulfillHTLC val_conv_19_conv;
                val_conv_19_conv.inner = (void*)(val_conv_19 & (~1));
                val_conv_19_conv.is_owned = (val_conv_19 & 1) || (val_conv_19 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_19_conv);
                val_conv_19_conv = UpdateFulfillHTLC_clone(&val_conv_19_conv);
                val_constr.data[t] = val_conv_19_conv;
        }
@@ -25816,6 +30259,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1get_
        LDKCommitmentUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_UpdateFailHTLCZ ret_var = CommitmentUpdate_get_update_fail_htlcs(&this_ptr_conv);
        int64_tArray ret_arr = NULL;
        ret_arr = (*env)->NewLongArray(env, ret_var.datalen);
@@ -25825,6 +30269,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1get_
                uint64_t ret_conv_16_ref = 0;
                CHECK((((uint64_t)ret_conv_16_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_conv_16_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_16_var);
                ret_conv_16_ref = (uint64_t)ret_conv_16_var.inner;
                if (ret_conv_16_var.is_owned) {
                        ret_conv_16_ref |= 1;
@@ -25840,6 +30285,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1set_1update_
        LDKCommitmentUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_UpdateFailHTLCZ val_constr;
        val_constr.datalen = (*env)->GetArrayLength(env, val);
        if (val_constr.datalen > 0)
@@ -25852,6 +30298,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1set_1update_
                LDKUpdateFailHTLC val_conv_16_conv;
                val_conv_16_conv.inner = (void*)(val_conv_16 & (~1));
                val_conv_16_conv.is_owned = (val_conv_16 & 1) || (val_conv_16 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_16_conv);
                val_conv_16_conv = UpdateFailHTLC_clone(&val_conv_16_conv);
                val_constr.data[q] = val_conv_16_conv;
        }
@@ -25863,6 +30310,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1get_
        LDKCommitmentUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_UpdateFailMalformedHTLCZ ret_var = CommitmentUpdate_get_update_fail_malformed_htlcs(&this_ptr_conv);
        int64_tArray ret_arr = NULL;
        ret_arr = (*env)->NewLongArray(env, ret_var.datalen);
@@ -25872,6 +30320,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1get_
                uint64_t ret_conv_25_ref = 0;
                CHECK((((uint64_t)ret_conv_25_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_conv_25_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_25_var);
                ret_conv_25_ref = (uint64_t)ret_conv_25_var.inner;
                if (ret_conv_25_var.is_owned) {
                        ret_conv_25_ref |= 1;
@@ -25887,6 +30336,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1set_1update_
        LDKCommitmentUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_UpdateFailMalformedHTLCZ val_constr;
        val_constr.datalen = (*env)->GetArrayLength(env, val);
        if (val_constr.datalen > 0)
@@ -25899,6 +30349,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1set_1update_
                LDKUpdateFailMalformedHTLC val_conv_25_conv;
                val_conv_25_conv.inner = (void*)(val_conv_25 & (~1));
                val_conv_25_conv.is_owned = (val_conv_25 & 1) || (val_conv_25 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_25_conv);
                val_conv_25_conv = UpdateFailMalformedHTLC_clone(&val_conv_25_conv);
                val_constr.data[z] = val_conv_25_conv;
        }
@@ -25910,11 +30361,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1get_1upda
        LDKCommitmentUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKUpdateFee ret_var = CommitmentUpdate_get_update_fee(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -25927,9 +30380,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1set_1update_
        LDKCommitmentUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKUpdateFee val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = UpdateFee_clone(&val_conv);
        CommitmentUpdate_set_update_fee(&this_ptr_conv, val_conv);
 }
@@ -25938,10 +30393,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1get_1comm
        LDKCommitmentUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCommitmentSigned ret_var = CommitmentUpdate_get_commitment_signed(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25953,9 +30410,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1set_1commitm
        LDKCommitmentUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCommitmentSigned val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = CommitmentSigned_clone(&val_conv);
        CommitmentUpdate_set_commitment_signed(&this_ptr_conv, val_conv);
 }
@@ -25973,6 +30432,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1new(JNIEn
                LDKUpdateAddHTLC update_add_htlcs_arg_conv_15_conv;
                update_add_htlcs_arg_conv_15_conv.inner = (void*)(update_add_htlcs_arg_conv_15 & (~1));
                update_add_htlcs_arg_conv_15_conv.is_owned = (update_add_htlcs_arg_conv_15 & 1) || (update_add_htlcs_arg_conv_15 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(update_add_htlcs_arg_conv_15_conv);
                update_add_htlcs_arg_conv_15_conv = UpdateAddHTLC_clone(&update_add_htlcs_arg_conv_15_conv);
                update_add_htlcs_arg_constr.data[p] = update_add_htlcs_arg_conv_15_conv;
        }
@@ -25989,6 +30449,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1new(JNIEn
                LDKUpdateFulfillHTLC update_fulfill_htlcs_arg_conv_19_conv;
                update_fulfill_htlcs_arg_conv_19_conv.inner = (void*)(update_fulfill_htlcs_arg_conv_19 & (~1));
                update_fulfill_htlcs_arg_conv_19_conv.is_owned = (update_fulfill_htlcs_arg_conv_19 & 1) || (update_fulfill_htlcs_arg_conv_19 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(update_fulfill_htlcs_arg_conv_19_conv);
                update_fulfill_htlcs_arg_conv_19_conv = UpdateFulfillHTLC_clone(&update_fulfill_htlcs_arg_conv_19_conv);
                update_fulfill_htlcs_arg_constr.data[t] = update_fulfill_htlcs_arg_conv_19_conv;
        }
@@ -26005,6 +30466,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1new(JNIEn
                LDKUpdateFailHTLC update_fail_htlcs_arg_conv_16_conv;
                update_fail_htlcs_arg_conv_16_conv.inner = (void*)(update_fail_htlcs_arg_conv_16 & (~1));
                update_fail_htlcs_arg_conv_16_conv.is_owned = (update_fail_htlcs_arg_conv_16 & 1) || (update_fail_htlcs_arg_conv_16 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(update_fail_htlcs_arg_conv_16_conv);
                update_fail_htlcs_arg_conv_16_conv = UpdateFailHTLC_clone(&update_fail_htlcs_arg_conv_16_conv);
                update_fail_htlcs_arg_constr.data[q] = update_fail_htlcs_arg_conv_16_conv;
        }
@@ -26021,6 +30483,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1new(JNIEn
                LDKUpdateFailMalformedHTLC update_fail_malformed_htlcs_arg_conv_25_conv;
                update_fail_malformed_htlcs_arg_conv_25_conv.inner = (void*)(update_fail_malformed_htlcs_arg_conv_25 & (~1));
                update_fail_malformed_htlcs_arg_conv_25_conv.is_owned = (update_fail_malformed_htlcs_arg_conv_25 & 1) || (update_fail_malformed_htlcs_arg_conv_25 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(update_fail_malformed_htlcs_arg_conv_25_conv);
                update_fail_malformed_htlcs_arg_conv_25_conv = UpdateFailMalformedHTLC_clone(&update_fail_malformed_htlcs_arg_conv_25_conv);
                update_fail_malformed_htlcs_arg_constr.data[z] = update_fail_malformed_htlcs_arg_conv_25_conv;
        }
@@ -26028,15 +30491,18 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1new(JNIEn
        LDKUpdateFee update_fee_arg_conv;
        update_fee_arg_conv.inner = (void*)(update_fee_arg & (~1));
        update_fee_arg_conv.is_owned = (update_fee_arg & 1) || (update_fee_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_fee_arg_conv);
        update_fee_arg_conv = UpdateFee_clone(&update_fee_arg_conv);
        LDKCommitmentSigned commitment_signed_arg_conv;
        commitment_signed_arg_conv.inner = (void*)(commitment_signed_arg & (~1));
        commitment_signed_arg_conv.is_owned = (commitment_signed_arg & 1) || (commitment_signed_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(commitment_signed_arg_conv);
        commitment_signed_arg_conv = CommitmentSigned_clone(&commitment_signed_arg_conv);
        LDKCommitmentUpdate ret_var = CommitmentUpdate_new(update_add_htlcs_arg_constr, update_fulfill_htlcs_arg_constr, update_fail_htlcs_arg_constr, update_fail_malformed_htlcs_arg_constr, update_fee_arg_conv, commitment_signed_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -26044,14 +30510,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1new(JNIEn
        return ret_ref;
 }
 
+static inline uint64_t CommitmentUpdate_clone_ptr(LDKCommitmentUpdate *NONNULL_PTR arg) {
+       LDKCommitmentUpdate ret_var = CommitmentUpdate_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCommitmentUpdate arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = CommitmentUpdate_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCommitmentUpdate orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKCommitmentUpdate ret_var = CommitmentUpdate_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -26081,6 +30570,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1write(JN
        LDKAcceptChannel obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = AcceptChannel_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26102,6 +30592,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_AnnouncementSignatures_
        LDKAnnouncementSignatures obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = AnnouncementSignatures_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26123,6 +30614,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelReestablish_1wri
        LDKChannelReestablish obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ChannelReestablish_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26144,6 +30636,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ClosingSigned_1write(JN
        LDKClosingSigned obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ClosingSigned_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26165,6 +30658,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ClosingSignedFeeRange_1
        LDKClosingSignedFeeRange obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ClosingSignedFeeRange_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26186,6 +30680,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_CommitmentSigned_1write
        LDKCommitmentSigned obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = CommitmentSigned_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26207,6 +30702,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_FundingCreated_1write(J
        LDKFundingCreated obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = FundingCreated_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26228,6 +30724,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_FundingSigned_1write(JN
        LDKFundingSigned obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = FundingSigned_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26249,6 +30746,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_FundingLocked_1write(JN
        LDKFundingLocked obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = FundingLocked_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26270,6 +30768,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Init_1write(JNIEnv *env
        LDKInit obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = Init_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26291,6 +30790,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_OpenChannel_1write(JNIE
        LDKOpenChannel obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = OpenChannel_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26312,6 +30812,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_RevokeAndACK_1write(JNI
        LDKRevokeAndACK obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = RevokeAndACK_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26333,6 +30834,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Shutdown_1write(JNIEnv
        LDKShutdown obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = Shutdown_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26354,6 +30856,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UpdateFailHTLC_1write(J
        LDKUpdateFailHTLC obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = UpdateFailHTLC_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26375,6 +30878,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UpdateFailMalformedHTLC
        LDKUpdateFailMalformedHTLC obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = UpdateFailMalformedHTLC_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26396,6 +30900,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UpdateFee_1write(JNIEnv
        LDKUpdateFee obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = UpdateFee_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26417,6 +30922,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UpdateFulfillHTLC_1writ
        LDKUpdateFulfillHTLC obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = UpdateFulfillHTLC_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26438,6 +30944,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UpdateAddHTLC_1write(JN
        LDKUpdateAddHTLC obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = UpdateAddHTLC_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26459,6 +30966,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Ping_1write(JNIEnv *env
        LDKPing obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = Ping_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26480,6 +30988,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Pong_1write(JNIEnv *env
        LDKPong obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = Pong_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26501,6 +31010,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedChannelAnnounce
        LDKUnsignedChannelAnnouncement obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = UnsignedChannelAnnouncement_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26522,6 +31032,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelAnnouncement_1wr
        LDKChannelAnnouncement obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ChannelAnnouncement_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26543,6 +31054,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedChannelUpdate_1
        LDKUnsignedChannelUpdate obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = UnsignedChannelUpdate_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26564,6 +31076,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelUpdate_1write(JN
        LDKChannelUpdate obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ChannelUpdate_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26585,6 +31098,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ErrorMessage_1write(JNI
        LDKErrorMessage obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ErrorMessage_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26606,6 +31120,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedNodeAnnouncemen
        LDKUnsignedNodeAnnouncement obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = UnsignedNodeAnnouncement_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26627,6 +31142,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NodeAnnouncement_1write
        LDKNodeAnnouncement obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = NodeAnnouncement_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26658,6 +31174,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_QueryShortChannelIds_1w
        LDKQueryShortChannelIds obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = QueryShortChannelIds_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26669,6 +31186,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ReplyShortChannelIdsEnd
        LDKReplyShortChannelIdsEnd obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ReplyShortChannelIdsEnd_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26690,6 +31208,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_QueryChannelRange_1end_1blo
        LDKQueryChannelRange this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int32_t ret_val = QueryChannelRange_end_blocknum(&this_arg_conv);
        return ret_val;
 }
@@ -26698,6 +31217,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_QueryChannelRange_1writ
        LDKQueryChannelRange obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = QueryChannelRange_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26729,6 +31249,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ReplyChannelRange_1writ
        LDKReplyChannelRange obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ReplyChannelRange_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26740,6 +31261,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_GossipTimestampFilter_1
        LDKGossipTimestampFilter obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = GossipTimestampFilter_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26770,6 +31292,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_IgnoringMessageHandler_1free(J
        LDKIgnoringMessageHandler this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        IgnoringMessageHandler_free(this_obj_conv);
 }
 
@@ -26778,6 +31301,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_IgnoringMessageHandler_1new
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -26789,6 +31313,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_IgnoringMessageHandler_1as_
        LDKIgnoringMessageHandler this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKMessageSendEventsProvider* ret_ret = MALLOC(sizeof(LDKMessageSendEventsProvider), "LDKMessageSendEventsProvider");
        *ret_ret = IgnoringMessageHandler_as_MessageSendEventsProvider(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -26798,6 +31323,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_IgnoringMessageHandler_1as_
        LDKIgnoringMessageHandler this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKRoutingMessageHandler* ret_ret = MALLOC(sizeof(LDKRoutingMessageHandler), "LDKRoutingMessageHandler");
        *ret_ret = IgnoringMessageHandler_as_RoutingMessageHandler(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -26807,6 +31333,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_IgnoringMessageHandler_1as_
        LDKIgnoringMessageHandler this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCustomMessageReader* ret_ret = MALLOC(sizeof(LDKCustomMessageReader), "LDKCustomMessageReader");
        *ret_ret = IgnoringMessageHandler_as_CustomMessageReader(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -26816,6 +31343,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_IgnoringMessageHandler_1as_
        LDKIgnoringMessageHandler this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCustomMessageHandler* ret_ret = MALLOC(sizeof(LDKCustomMessageHandler), "LDKCustomMessageHandler");
        *ret_ret = IgnoringMessageHandler_as_CustomMessageHandler(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -26825,6 +31353,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ErroringMessageHandler_1free(J
        LDKErroringMessageHandler this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ErroringMessageHandler_free(this_obj_conv);
 }
 
@@ -26833,6 +31362,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ErroringMessageHandler_1new
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -26844,6 +31374,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ErroringMessageHandler_1as_
        LDKErroringMessageHandler this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKMessageSendEventsProvider* ret_ret = MALLOC(sizeof(LDKMessageSendEventsProvider), "LDKMessageSendEventsProvider");
        *ret_ret = ErroringMessageHandler_as_MessageSendEventsProvider(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -26853,6 +31384,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ErroringMessageHandler_1as_
        LDKErroringMessageHandler this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKChannelMessageHandler* ret_ret = MALLOC(sizeof(LDKChannelMessageHandler), "LDKChannelMessageHandler");
        *ret_ret = ErroringMessageHandler_as_ChannelMessageHandler(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -26862,6 +31394,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MessageHandler_1free(JNIEnv *e
        LDKMessageHandler this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        MessageHandler_free(this_obj_conv);
 }
 
@@ -26869,6 +31402,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MessageHandler_1get_1chan_1
        LDKMessageHandler this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        // WARNING: This object doesn't live past this scope, needs clone!
        uint64_t ret_ret = ((uint64_t)MessageHandler_get_chan_handler(&this_ptr_conv)) | 1;
        return ret_ret;
@@ -26878,6 +31412,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MessageHandler_1set_1chan_1han
        LDKMessageHandler this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKChannelMessageHandler val_conv = *(LDKChannelMessageHandler*)(val_ptr);
@@ -26892,6 +31427,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MessageHandler_1get_1route_
        LDKMessageHandler this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        // WARNING: This object doesn't live past this scope, needs clone!
        uint64_t ret_ret = ((uint64_t)MessageHandler_get_route_handler(&this_ptr_conv)) | 1;
        return ret_ret;
@@ -26901,6 +31437,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MessageHandler_1set_1route_1ha
        LDKMessageHandler this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKRoutingMessageHandler val_conv = *(LDKRoutingMessageHandler*)(val_ptr);
@@ -26930,6 +31467,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MessageHandler_1new(JNIEnv
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -26937,6 +31475,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MessageHandler_1new(JNIEnv
        return ret_ref;
 }
 
+static inline uint64_t SocketDescriptor_clone_ptr(LDKSocketDescriptor *NONNULL_PTR arg) {
+       LDKSocketDescriptor* ret_ret = MALLOC(sizeof(LDKSocketDescriptor), "LDKSocketDescriptor");
+       *ret_ret = SocketDescriptor_clone(arg);
+       return (uint64_t)ret_ret;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SocketDescriptor_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       void* arg_ptr = (void*)(((uint64_t)arg) & ~1);
+       if (!(arg & 1)) { CHECK_ACCESS(arg_ptr); }
+       LDKSocketDescriptor* arg_conv = (LDKSocketDescriptor*)arg_ptr;
+       int64_t ret_val = SocketDescriptor_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SocketDescriptor_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        void* orig_ptr = (void*)(((uint64_t)orig) & ~1);
        if (!(orig & 1)) { CHECK_ACCESS(orig_ptr); }
@@ -26959,6 +31510,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PeerHandleError_1free(JNIEnv *
        LDKPeerHandleError this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        PeerHandleError_free(this_obj_conv);
 }
 
@@ -26966,6 +31518,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_PeerHandleError_1get_1no_1
        LDKPeerHandleError this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        jboolean ret_val = PeerHandleError_get_no_connection_possible(&this_ptr_conv);
        return ret_val;
 }
@@ -26974,6 +31527,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PeerHandleError_1set_1no_1conn
        LDKPeerHandleError this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        PeerHandleError_set_no_connection_possible(&this_ptr_conv, val);
 }
 
@@ -26982,6 +31536,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PeerHandleError_1new(JNIEnv
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -26989,14 +31544,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PeerHandleError_1new(JNIEnv
        return ret_ref;
 }
 
+static inline uint64_t PeerHandleError_clone_ptr(LDKPeerHandleError *NONNULL_PTR arg) {
+       LDKPeerHandleError ret_var = PeerHandleError_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PeerHandleError_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKPeerHandleError arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = PeerHandleError_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PeerHandleError_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKPeerHandleError orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKPeerHandleError ret_var = PeerHandleError_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -27008,6 +31586,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PeerManager_1free(JNIEnv *env,
        LDKPeerManager this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        PeerManager_free(this_obj_conv);
 }
 
@@ -27015,6 +31594,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PeerManager_1new(JNIEnv *en
        LDKMessageHandler message_handler_conv;
        message_handler_conv.inner = (void*)(message_handler & (~1));
        message_handler_conv.is_owned = (message_handler & 1) || (message_handler == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(message_handler_conv);
        // Warning: we need a move here but no clone is available for LDKMessageHandler
        LDKSecretKey our_node_secret_ref;
        CHECK((*env)->GetArrayLength(env, our_node_secret) == 32);
@@ -27041,6 +31621,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PeerManager_1new(JNIEnv *en
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -27052,6 +31633,7 @@ JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_PeerManager_1get_1peer
        LDKPeerManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCVec_PublicKeyZ ret_var = PeerManager_get_peer_node_ids(&this_arg_conv);
        jobjectArray ret_arr = NULL;
        ret_arr = (*env)->NewObjectArray(env, ret_var.datalen, arr_of_B_clz, NULL);
@@ -27070,6 +31652,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PeerManager_1new_1outbound_
        LDKPeerManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKPublicKey their_node_id_ref;
        CHECK((*env)->GetArrayLength(env, their_node_id) == 33);
        (*env)->GetByteArrayRegion(env, their_node_id, 0, 33, their_node_id_ref.compressed_form);
@@ -27089,6 +31672,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PeerManager_1new_1inbound_1
        LDKPeerManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        void* descriptor_ptr = (void*)(((uint64_t)descriptor) & ~1);
        CHECK_ACCESS(descriptor_ptr);
        LDKSocketDescriptor descriptor_conv = *(LDKSocketDescriptor*)(descriptor_ptr);
@@ -27105,6 +31689,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PeerManager_1write_1buffer_
        LDKPeerManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        void* descriptor_ptr = (void*)(((uint64_t)descriptor) & ~1);
        if (!(descriptor & 1)) { CHECK_ACCESS(descriptor_ptr); }
        LDKSocketDescriptor* descriptor_conv = (LDKSocketDescriptor*)descriptor_ptr;
@@ -27117,6 +31702,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PeerManager_1read_1event(JN
        LDKPeerManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        void* peer_descriptor_ptr = (void*)(((uint64_t)peer_descriptor) & ~1);
        if (!(peer_descriptor & 1)) { CHECK_ACCESS(peer_descriptor_ptr); }
        LDKSocketDescriptor* peer_descriptor_conv = (LDKSocketDescriptor*)peer_descriptor_ptr;
@@ -27133,6 +31719,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PeerManager_1process_1events(J
        LDKPeerManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        PeerManager_process_events(&this_arg_conv);
 }
 
@@ -27140,6 +31727,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PeerManager_1socket_1disconnec
        LDKPeerManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        void* descriptor_ptr = (void*)(((uint64_t)descriptor) & ~1);
        if (!(descriptor & 1)) { CHECK_ACCESS(descriptor_ptr); }
        LDKSocketDescriptor* descriptor_conv = (LDKSocketDescriptor*)descriptor_ptr;
@@ -27150,6 +31738,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PeerManager_1disconnect_1by_1n
        LDKPeerManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKPublicKey node_id_ref;
        CHECK((*env)->GetArrayLength(env, node_id) == 33);
        (*env)->GetByteArrayRegion(env, node_id, 0, 33, node_id_ref.compressed_form);
@@ -27160,6 +31749,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PeerManager_1disconnect_1all_1
        LDKPeerManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        PeerManager_disconnect_all_peers(&this_arg_conv);
 }
 
@@ -27167,6 +31757,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PeerManager_1timer_1tick_1occu
        LDKPeerManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        PeerManager_timer_tick_occurred(&this_arg_conv);
 }
 
@@ -27192,6 +31783,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_build_1closing_1transac
        LDKOutPoint funding_outpoint_conv;
        funding_outpoint_conv.inner = (void*)(funding_outpoint & (~1));
        funding_outpoint_conv.is_owned = (funding_outpoint & 1) || (funding_outpoint == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_outpoint_conv);
        funding_outpoint_conv = OutPoint_clone(&funding_outpoint_conv);
        LDKTransaction ret_var = build_closing_transaction(to_holder_value_sat, to_counterparty_value_sat, to_holder_script_ref, to_counterparty_script_ref, funding_outpoint_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
@@ -27255,6 +31847,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_TxCreationKeys_1free(JNIEnv *e
        LDKTxCreationKeys this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        TxCreationKeys_free(this_obj_conv);
 }
 
@@ -27262,6 +31855,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_TxCreationKeys_1get_1pe
        LDKTxCreationKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, TxCreationKeys_get_per_commitment_point(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -27271,6 +31865,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_TxCreationKeys_1set_1per_1comm
        LDKTxCreationKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -27281,6 +31876,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_TxCreationKeys_1get_1re
        LDKTxCreationKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, TxCreationKeys_get_revocation_key(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -27290,6 +31886,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_TxCreationKeys_1set_1revocatio
        LDKTxCreationKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -27300,6 +31897,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_TxCreationKeys_1get_1br
        LDKTxCreationKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, TxCreationKeys_get_broadcaster_htlc_key(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -27309,6 +31907,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_TxCreationKeys_1set_1broadcast
        LDKTxCreationKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -27319,6 +31918,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_TxCreationKeys_1get_1co
        LDKTxCreationKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, TxCreationKeys_get_countersignatory_htlc_key(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -27328,6 +31928,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_TxCreationKeys_1set_1countersi
        LDKTxCreationKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -27338,6 +31939,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_TxCreationKeys_1get_1br
        LDKTxCreationKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, TxCreationKeys_get_broadcaster_delayed_payment_key(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -27347,6 +31949,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_TxCreationKeys_1set_1broadcast
        LDKTxCreationKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -27373,6 +31976,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_TxCreationKeys_1new(JNIEnv
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -27380,14 +31984,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_TxCreationKeys_1new(JNIEnv
        return ret_ref;
 }
 
+static inline uint64_t TxCreationKeys_clone_ptr(LDKTxCreationKeys *NONNULL_PTR arg) {
+       LDKTxCreationKeys ret_var = TxCreationKeys_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_TxCreationKeys_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKTxCreationKeys arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = TxCreationKeys_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_TxCreationKeys_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKTxCreationKeys orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKTxCreationKeys ret_var = TxCreationKeys_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -27399,6 +32026,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_TxCreationKeys_1write(J
        LDKTxCreationKeys obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = TxCreationKeys_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -27420,6 +32048,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelPublicKeys_1free(JNIEnv
        LDKChannelPublicKeys this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelPublicKeys_free(this_obj_conv);
 }
 
@@ -27427,6 +32056,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelPublicKeys_1get_
        LDKChannelPublicKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, ChannelPublicKeys_get_funding_pubkey(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -27436,6 +32066,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelPublicKeys_1set_1fundin
        LDKChannelPublicKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -27446,6 +32077,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelPublicKeys_1get_
        LDKChannelPublicKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, ChannelPublicKeys_get_revocation_basepoint(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -27455,6 +32087,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelPublicKeys_1set_1revoca
        LDKChannelPublicKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -27465,6 +32098,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelPublicKeys_1get_
        LDKChannelPublicKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, ChannelPublicKeys_get_payment_point(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -27474,6 +32108,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelPublicKeys_1set_1paymen
        LDKChannelPublicKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -27484,6 +32119,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelPublicKeys_1get_
        LDKChannelPublicKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, ChannelPublicKeys_get_delayed_payment_basepoint(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -27493,6 +32129,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelPublicKeys_1set_1delaye
        LDKChannelPublicKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -27503,6 +32140,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelPublicKeys_1get_
        LDKChannelPublicKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, ChannelPublicKeys_get_htlc_basepoint(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -27512,6 +32150,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelPublicKeys_1set_1htlc_1
        LDKChannelPublicKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -27538,6 +32177,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelPublicKeys_1new(JNIE
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -27545,14 +32185,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelPublicKeys_1new(JNIE
        return ret_ref;
 }
 
+static inline uint64_t ChannelPublicKeys_clone_ptr(LDKChannelPublicKeys *NONNULL_PTR arg) {
+       LDKChannelPublicKeys ret_var = ChannelPublicKeys_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelPublicKeys_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKChannelPublicKeys arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChannelPublicKeys_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelPublicKeys_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKChannelPublicKeys orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChannelPublicKeys ret_var = ChannelPublicKeys_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -27564,6 +32227,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelPublicKeys_1writ
        LDKChannelPublicKeys obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ChannelPublicKeys_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -27609,9 +32273,11 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_TxCreationKeys_1from_1chann
        LDKChannelPublicKeys broadcaster_keys_conv;
        broadcaster_keys_conv.inner = (void*)(broadcaster_keys & (~1));
        broadcaster_keys_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(broadcaster_keys_conv);
        LDKChannelPublicKeys countersignatory_keys_conv;
        countersignatory_keys_conv.inner = (void*)(countersignatory_keys & (~1));
        countersignatory_keys_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(countersignatory_keys_conv);
        LDKCResult_TxCreationKeysErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxCreationKeysErrorZ), "LDKCResult_TxCreationKeysErrorZ");
        *ret_conv = TxCreationKeys_from_channel_static_keys(per_commitment_point_ref, &broadcaster_keys_conv, &countersignatory_keys_conv);
        return (uint64_t)ret_conv;
@@ -27635,6 +32301,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_HTLCOutputInCommitment_1free(J
        LDKHTLCOutputInCommitment this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        HTLCOutputInCommitment_free(this_obj_conv);
 }
 
@@ -27642,6 +32309,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_HTLCOutputInCommitment_1ge
        LDKHTLCOutputInCommitment this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        jboolean ret_val = HTLCOutputInCommitment_get_offered(&this_ptr_conv);
        return ret_val;
 }
@@ -27650,6 +32318,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_HTLCOutputInCommitment_1set_1o
        LDKHTLCOutputInCommitment this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        HTLCOutputInCommitment_set_offered(&this_ptr_conv, val);
 }
 
@@ -27657,6 +32326,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_HTLCOutputInCommitment_1get
        LDKHTLCOutputInCommitment this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = HTLCOutputInCommitment_get_amount_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -27665,6 +32335,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_HTLCOutputInCommitment_1set_1a
        LDKHTLCOutputInCommitment this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        HTLCOutputInCommitment_set_amount_msat(&this_ptr_conv, val);
 }
 
@@ -27672,6 +32343,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_HTLCOutputInCommitment_1get
        LDKHTLCOutputInCommitment this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = HTLCOutputInCommitment_get_cltv_expiry(&this_ptr_conv);
        return ret_val;
 }
@@ -27680,6 +32352,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_HTLCOutputInCommitment_1set_1c
        LDKHTLCOutputInCommitment this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        HTLCOutputInCommitment_set_cltv_expiry(&this_ptr_conv, val);
 }
 
@@ -27687,6 +32360,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_HTLCOutputInCommitment_
        LDKHTLCOutputInCommitment this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *HTLCOutputInCommitment_get_payment_hash(&this_ptr_conv));
        return ret_arr;
@@ -27696,6 +32370,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_HTLCOutputInCommitment_1set_1p
        LDKHTLCOutputInCommitment this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -27706,6 +32381,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_HTLCOutputInCommitment_1get
        LDKHTLCOutputInCommitment this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCOption_u32Z *ret_copy = MALLOC(sizeof(LDKCOption_u32Z), "LDKCOption_u32Z");
        *ret_copy = HTLCOutputInCommitment_get_transaction_output_index(&this_ptr_conv);
        uint64_t ret_ref = (uint64_t)ret_copy;
@@ -27716,6 +32392,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_HTLCOutputInCommitment_1set_1t
        LDKHTLCOutputInCommitment this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKCOption_u32Z val_conv = *(LDKCOption_u32Z*)(val_ptr);
@@ -27735,6 +32412,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_HTLCOutputInCommitment_1new
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -27742,14 +32420,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_HTLCOutputInCommitment_1new
        return ret_ref;
 }
 
+static inline uint64_t HTLCOutputInCommitment_clone_ptr(LDKHTLCOutputInCommitment *NONNULL_PTR arg) {
+       LDKHTLCOutputInCommitment ret_var = HTLCOutputInCommitment_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_HTLCOutputInCommitment_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKHTLCOutputInCommitment arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = HTLCOutputInCommitment_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_HTLCOutputInCommitment_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKHTLCOutputInCommitment orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKHTLCOutputInCommitment ret_var = HTLCOutputInCommitment_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -27761,6 +32462,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_HTLCOutputInCommitment_
        LDKHTLCOutputInCommitment obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = HTLCOutputInCommitment_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -27782,9 +32484,11 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_get_1htlc_1redeemscript
        LDKHTLCOutputInCommitment htlc_conv;
        htlc_conv.inner = (void*)(htlc & (~1));
        htlc_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(htlc_conv);
        LDKTxCreationKeys keys_conv;
        keys_conv.inner = (void*)(keys & (~1));
        keys_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(keys_conv);
        LDKCVec_u8Z ret_var = get_htlc_redeemscript(&htlc_conv, &keys_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -27814,6 +32518,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_build_1htlc_1transactio
        LDKHTLCOutputInCommitment htlc_conv;
        htlc_conv.inner = (void*)(htlc & (~1));
        htlc_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(htlc_conv);
        LDKPublicKey broadcaster_delayed_payment_key_ref;
        CHECK((*env)->GetArrayLength(env, broadcaster_delayed_payment_key) == 33);
        (*env)->GetByteArrayRegion(env, broadcaster_delayed_payment_key, 0, 33, broadcaster_delayed_payment_key_ref.compressed_form);
@@ -27831,6 +32536,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelTransactionParameters_1
        LDKChannelTransactionParameters this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelTransactionParameters_free(this_obj_conv);
 }
 
@@ -27838,10 +32544,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelTransactionParameter
        LDKChannelTransactionParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelPublicKeys ret_var = ChannelTransactionParameters_get_holder_pubkeys(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -27853,9 +32561,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelTransactionParameters_1
        LDKChannelTransactionParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelPublicKeys val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = ChannelPublicKeys_clone(&val_conv);
        ChannelTransactionParameters_set_holder_pubkeys(&this_ptr_conv, val_conv);
 }
@@ -27864,6 +32574,7 @@ JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_ChannelTransactionParameter
        LDKChannelTransactionParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = ChannelTransactionParameters_get_holder_selected_contest_delay(&this_ptr_conv);
        return ret_val;
 }
@@ -27872,6 +32583,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelTransactionParameters_1
        LDKChannelTransactionParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelTransactionParameters_set_holder_selected_contest_delay(&this_ptr_conv, val);
 }
 
@@ -27879,6 +32591,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelTransactionParamete
        LDKChannelTransactionParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        jboolean ret_val = ChannelTransactionParameters_get_is_outbound_from_holder(&this_ptr_conv);
        return ret_val;
 }
@@ -27887,6 +32600,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelTransactionParameters_1
        LDKChannelTransactionParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelTransactionParameters_set_is_outbound_from_holder(&this_ptr_conv, val);
 }
 
@@ -27894,11 +32608,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelTransactionParameter
        LDKChannelTransactionParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCounterpartyChannelTransactionParameters ret_var = ChannelTransactionParameters_get_counterparty_parameters(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -27911,9 +32627,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelTransactionParameters_1
        LDKChannelTransactionParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCounterpartyChannelTransactionParameters val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = CounterpartyChannelTransactionParameters_clone(&val_conv);
        ChannelTransactionParameters_set_counterparty_parameters(&this_ptr_conv, val_conv);
 }
@@ -27922,11 +32640,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelTransactionParameter
        LDKChannelTransactionParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKOutPoint ret_var = ChannelTransactionParameters_get_funding_outpoint(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -27939,9 +32659,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelTransactionParameters_1
        LDKChannelTransactionParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKOutPoint val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = OutPoint_clone(&val_conv);
        ChannelTransactionParameters_set_funding_outpoint(&this_ptr_conv, val_conv);
 }
@@ -27950,19 +32672,23 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelTransactionParameter
        LDKChannelPublicKeys holder_pubkeys_arg_conv;
        holder_pubkeys_arg_conv.inner = (void*)(holder_pubkeys_arg & (~1));
        holder_pubkeys_arg_conv.is_owned = (holder_pubkeys_arg & 1) || (holder_pubkeys_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(holder_pubkeys_arg_conv);
        holder_pubkeys_arg_conv = ChannelPublicKeys_clone(&holder_pubkeys_arg_conv);
        LDKCounterpartyChannelTransactionParameters counterparty_parameters_arg_conv;
        counterparty_parameters_arg_conv.inner = (void*)(counterparty_parameters_arg & (~1));
        counterparty_parameters_arg_conv.is_owned = (counterparty_parameters_arg & 1) || (counterparty_parameters_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(counterparty_parameters_arg_conv);
        counterparty_parameters_arg_conv = CounterpartyChannelTransactionParameters_clone(&counterparty_parameters_arg_conv);
        LDKOutPoint funding_outpoint_arg_conv;
        funding_outpoint_arg_conv.inner = (void*)(funding_outpoint_arg & (~1));
        funding_outpoint_arg_conv.is_owned = (funding_outpoint_arg & 1) || (funding_outpoint_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_outpoint_arg_conv);
        funding_outpoint_arg_conv = OutPoint_clone(&funding_outpoint_arg_conv);
        LDKChannelTransactionParameters ret_var = ChannelTransactionParameters_new(holder_pubkeys_arg_conv, holder_selected_contest_delay_arg, is_outbound_from_holder_arg, counterparty_parameters_arg_conv, funding_outpoint_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -27970,14 +32696,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelTransactionParameter
        return ret_ref;
 }
 
+static inline uint64_t ChannelTransactionParameters_clone_ptr(LDKChannelTransactionParameters *NONNULL_PTR arg) {
+       LDKChannelTransactionParameters ret_var = ChannelTransactionParameters_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelTransactionParameters_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKChannelTransactionParameters arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChannelTransactionParameters_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelTransactionParameters_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKChannelTransactionParameters orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChannelTransactionParameters ret_var = ChannelTransactionParameters_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -27989,6 +32738,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CounterpartyChannelTransaction
        LDKCounterpartyChannelTransactionParameters this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        CounterpartyChannelTransactionParameters_free(this_obj_conv);
 }
 
@@ -27996,10 +32746,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CounterpartyChannelTransact
        LDKCounterpartyChannelTransactionParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelPublicKeys ret_var = CounterpartyChannelTransactionParameters_get_pubkeys(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28011,9 +32763,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CounterpartyChannelTransaction
        LDKCounterpartyChannelTransactionParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelPublicKeys val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = ChannelPublicKeys_clone(&val_conv);
        CounterpartyChannelTransactionParameters_set_pubkeys(&this_ptr_conv, val_conv);
 }
@@ -28022,6 +32776,7 @@ JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_CounterpartyChannelTransact
        LDKCounterpartyChannelTransactionParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = CounterpartyChannelTransactionParameters_get_selected_contest_delay(&this_ptr_conv);
        return ret_val;
 }
@@ -28030,6 +32785,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CounterpartyChannelTransaction
        LDKCounterpartyChannelTransactionParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        CounterpartyChannelTransactionParameters_set_selected_contest_delay(&this_ptr_conv, val);
 }
 
@@ -28037,11 +32793,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CounterpartyChannelTransact
        LDKChannelPublicKeys pubkeys_arg_conv;
        pubkeys_arg_conv.inner = (void*)(pubkeys_arg & (~1));
        pubkeys_arg_conv.is_owned = (pubkeys_arg & 1) || (pubkeys_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(pubkeys_arg_conv);
        pubkeys_arg_conv = ChannelPublicKeys_clone(&pubkeys_arg_conv);
        LDKCounterpartyChannelTransactionParameters ret_var = CounterpartyChannelTransactionParameters_new(pubkeys_arg_conv, selected_contest_delay_arg);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28049,14 +32807,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CounterpartyChannelTransact
        return ret_ref;
 }
 
+static inline uint64_t CounterpartyChannelTransactionParameters_clone_ptr(LDKCounterpartyChannelTransactionParameters *NONNULL_PTR arg) {
+       LDKCounterpartyChannelTransactionParameters ret_var = CounterpartyChannelTransactionParameters_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CounterpartyChannelTransactionParameters_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCounterpartyChannelTransactionParameters arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = CounterpartyChannelTransactionParameters_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CounterpartyChannelTransactionParameters_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCounterpartyChannelTransactionParameters orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKCounterpartyChannelTransactionParameters ret_var = CounterpartyChannelTransactionParameters_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28068,6 +32849,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelTransactionParamete
        LDKChannelTransactionParameters this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        jboolean ret_val = ChannelTransactionParameters_is_populated(&this_arg_conv);
        return ret_val;
 }
@@ -28076,10 +32858,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelTransactionParameter
        LDKChannelTransactionParameters this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKDirectedChannelTransactionParameters ret_var = ChannelTransactionParameters_as_holder_broadcastable(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28091,10 +32875,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelTransactionParameter
        LDKChannelTransactionParameters this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKDirectedChannelTransactionParameters ret_var = ChannelTransactionParameters_as_counterparty_broadcastable(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28106,6 +32892,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_CounterpartyChannelTran
        LDKCounterpartyChannelTransactionParameters obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = CounterpartyChannelTransactionParameters_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -28127,6 +32914,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelTransactionParam
        LDKChannelTransactionParameters obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ChannelTransactionParameters_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -28148,6 +32936,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DirectedChannelTransactionPara
        LDKDirectedChannelTransactionParameters this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        DirectedChannelTransactionParameters_free(this_obj_conv);
 }
 
@@ -28155,10 +32944,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DirectedChannelTransactionP
        LDKDirectedChannelTransactionParameters this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKChannelPublicKeys ret_var = DirectedChannelTransactionParameters_broadcaster_pubkeys(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28170,10 +32961,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DirectedChannelTransactionP
        LDKDirectedChannelTransactionParameters this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKChannelPublicKeys ret_var = DirectedChannelTransactionParameters_countersignatory_pubkeys(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28185,6 +32978,7 @@ JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_DirectedChannelTransactionP
        LDKDirectedChannelTransactionParameters this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int16_t ret_val = DirectedChannelTransactionParameters_contest_delay(&this_arg_conv);
        return ret_val;
 }
@@ -28193,6 +32987,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_DirectedChannelTransaction
        LDKDirectedChannelTransactionParameters this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        jboolean ret_val = DirectedChannelTransactionParameters_is_outbound(&this_arg_conv);
        return ret_val;
 }
@@ -28201,10 +32996,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DirectedChannelTransactionP
        LDKDirectedChannelTransactionParameters this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKOutPoint ret_var = DirectedChannelTransactionParameters_funding_outpoint(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28216,6 +33013,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_HolderCommitmentTransaction_1f
        LDKHolderCommitmentTransaction this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        HolderCommitmentTransaction_free(this_obj_conv);
 }
 
@@ -28223,6 +33021,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_HolderCommitmentTransac
        LDKHolderCommitmentTransaction this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 64);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 64, HolderCommitmentTransaction_get_counterparty_sig(&this_ptr_conv).compact_form);
        return ret_arr;
@@ -28232,6 +33031,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_HolderCommitmentTransaction_1s
        LDKHolderCommitmentTransaction this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSignature val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 64);
        (*env)->GetByteArrayRegion(env, val, 0, 64, val_ref.compact_form);
@@ -28242,6 +33042,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_HolderCommitmentTransaction_1s
        LDKHolderCommitmentTransaction this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_SignatureZ val_constr;
        val_constr.datalen = (*env)->GetArrayLength(env, val);
        if (val_constr.datalen > 0)
@@ -28258,14 +33059,37 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_HolderCommitmentTransaction_1s
        HolderCommitmentTransaction_set_counterparty_htlc_sigs(&this_ptr_conv, val_constr);
 }
 
+static inline uint64_t HolderCommitmentTransaction_clone_ptr(LDKHolderCommitmentTransaction *NONNULL_PTR arg) {
+       LDKHolderCommitmentTransaction ret_var = HolderCommitmentTransaction_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_HolderCommitmentTransaction_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKHolderCommitmentTransaction arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = HolderCommitmentTransaction_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_HolderCommitmentTransaction_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKHolderCommitmentTransaction orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKHolderCommitmentTransaction ret_var = HolderCommitmentTransaction_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28277,6 +33101,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_HolderCommitmentTransac
        LDKHolderCommitmentTransaction obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = HolderCommitmentTransaction_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -28298,6 +33123,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_HolderCommitmentTransaction
        LDKCommitmentTransaction commitment_tx_conv;
        commitment_tx_conv.inner = (void*)(commitment_tx & (~1));
        commitment_tx_conv.is_owned = (commitment_tx & 1) || (commitment_tx == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(commitment_tx_conv);
        commitment_tx_conv = CommitmentTransaction_clone(&commitment_tx_conv);
        LDKSignature counterparty_sig_ref;
        CHECK((*env)->GetArrayLength(env, counterparty_sig) == 64);
@@ -28325,6 +33151,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_HolderCommitmentTransaction
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28336,6 +33163,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BuiltCommitmentTransaction_1fr
        LDKBuiltCommitmentTransaction this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        BuiltCommitmentTransaction_free(this_obj_conv);
 }
 
@@ -28343,6 +33171,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_BuiltCommitmentTransact
        LDKBuiltCommitmentTransaction this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKTransaction ret_var = BuiltCommitmentTransaction_get_transaction(&this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -28354,6 +33183,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BuiltCommitmentTransaction_1se
        LDKBuiltCommitmentTransaction this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKTransaction val_ref;
        val_ref.datalen = (*env)->GetArrayLength(env, val);
        val_ref.data = MALLOC(val_ref.datalen, "LDKTransaction Bytes");
@@ -28366,6 +33196,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_BuiltCommitmentTransact
        LDKBuiltCommitmentTransaction this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *BuiltCommitmentTransaction_get_txid(&this_ptr_conv));
        return ret_arr;
@@ -28375,6 +33206,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BuiltCommitmentTransaction_1se
        LDKBuiltCommitmentTransaction this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -28394,6 +33226,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BuiltCommitmentTransaction_
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28401,14 +33234,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BuiltCommitmentTransaction_
        return ret_ref;
 }
 
+static inline uint64_t BuiltCommitmentTransaction_clone_ptr(LDKBuiltCommitmentTransaction *NONNULL_PTR arg) {
+       LDKBuiltCommitmentTransaction ret_var = BuiltCommitmentTransaction_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BuiltCommitmentTransaction_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKBuiltCommitmentTransaction arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = BuiltCommitmentTransaction_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BuiltCommitmentTransaction_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKBuiltCommitmentTransaction orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKBuiltCommitmentTransaction ret_var = BuiltCommitmentTransaction_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28420,6 +33276,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_BuiltCommitmentTransact
        LDKBuiltCommitmentTransaction obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = BuiltCommitmentTransaction_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -28441,6 +33298,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_BuiltCommitmentTransact
        LDKBuiltCommitmentTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKu8slice funding_redeemscript_ref;
        funding_redeemscript_ref.datalen = (*env)->GetArrayLength(env, funding_redeemscript);
        funding_redeemscript_ref.data = (*env)->GetByteArrayElements (env, funding_redeemscript, NULL);
@@ -28454,6 +33312,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_BuiltCommitmentTransact
        LDKBuiltCommitmentTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char funding_key_arr[32];
        CHECK((*env)->GetArrayLength(env, funding_key) == 32);
        (*env)->GetByteArrayRegion(env, funding_key, 0, 32, funding_key_arr);
@@ -28471,17 +33330,41 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ClosingTransaction_1free(JNIEn
        LDKClosingTransaction this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ClosingTransaction_free(this_obj_conv);
 }
 
+static inline uint64_t ClosingTransaction_clone_ptr(LDKClosingTransaction *NONNULL_PTR arg) {
+       LDKClosingTransaction ret_var = ClosingTransaction_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClosingTransaction_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKClosingTransaction arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ClosingTransaction_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClosingTransaction_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKClosingTransaction orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKClosingTransaction ret_var = ClosingTransaction_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28493,6 +33376,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClosingTransaction_1hash(JN
        LDKClosingTransaction o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = ClosingTransaction_hash(&o_conv);
        return ret_val;
 }
@@ -28509,11 +33393,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClosingTransaction_1new(JNI
        LDKOutPoint funding_outpoint_conv;
        funding_outpoint_conv.inner = (void*)(funding_outpoint & (~1));
        funding_outpoint_conv.is_owned = (funding_outpoint & 1) || (funding_outpoint == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_outpoint_conv);
        funding_outpoint_conv = OutPoint_clone(&funding_outpoint_conv);
        LDKClosingTransaction ret_var = ClosingTransaction_new(to_holder_value_sat, to_counterparty_value_sat, to_holder_script_ref, to_counterparty_script_ref, funding_outpoint_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28525,10 +33411,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClosingTransaction_1trust(J
        LDKClosingTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKTrustedClosingTransaction ret_var = ClosingTransaction_trust(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28540,9 +33428,11 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClosingTransaction_1verify(
        LDKClosingTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKOutPoint funding_outpoint_conv;
        funding_outpoint_conv.inner = (void*)(funding_outpoint & (~1));
        funding_outpoint_conv.is_owned = (funding_outpoint & 1) || (funding_outpoint == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_outpoint_conv);
        funding_outpoint_conv = OutPoint_clone(&funding_outpoint_conv);
        LDKCResult_TrustedClosingTransactionNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_TrustedClosingTransactionNoneZ), "LDKCResult_TrustedClosingTransactionNoneZ");
        *ret_conv = ClosingTransaction_verify(&this_arg_conv, funding_outpoint_conv);
@@ -28553,6 +33443,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClosingTransaction_1to_1hol
        LDKClosingTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = ClosingTransaction_to_holder_value_sat(&this_arg_conv);
        return ret_val;
 }
@@ -28561,6 +33452,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClosingTransaction_1to_1cou
        LDKClosingTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = ClosingTransaction_to_counterparty_value_sat(&this_arg_conv);
        return ret_val;
 }
@@ -28569,6 +33461,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ClosingTransaction_1to_
        LDKClosingTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKu8slice ret_var = ClosingTransaction_to_holder_script(&this_arg_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -28579,6 +33472,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ClosingTransaction_1to_
        LDKClosingTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKu8slice ret_var = ClosingTransaction_to_counterparty_script(&this_arg_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -28589,6 +33483,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_TrustedClosingTransaction_1fre
        LDKTrustedClosingTransaction this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        TrustedClosingTransaction_free(this_obj_conv);
 }
 
@@ -28596,6 +33491,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_TrustedClosingTransacti
        LDKTrustedClosingTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKTransaction ret_var = TrustedClosingTransaction_built_transaction(&this_arg_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -28607,6 +33503,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_TrustedClosingTransacti
        LDKTrustedClosingTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKu8slice funding_redeemscript_ref;
        funding_redeemscript_ref.datalen = (*env)->GetArrayLength(env, funding_redeemscript);
        funding_redeemscript_ref.data = (*env)->GetByteArrayElements (env, funding_redeemscript, NULL);
@@ -28620,6 +33517,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_TrustedClosingTransacti
        LDKTrustedClosingTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char funding_key_arr[32];
        CHECK((*env)->GetArrayLength(env, funding_key) == 32);
        (*env)->GetByteArrayRegion(env, funding_key, 0, 32, funding_key_arr);
@@ -28637,17 +33535,41 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CommitmentTransaction_1free(JN
        LDKCommitmentTransaction this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        CommitmentTransaction_free(this_obj_conv);
 }
 
+static inline uint64_t CommitmentTransaction_clone_ptr(LDKCommitmentTransaction *NONNULL_PTR arg) {
+       LDKCommitmentTransaction ret_var = CommitmentTransaction_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CommitmentTransaction_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCommitmentTransaction arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = CommitmentTransaction_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CommitmentTransaction_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCommitmentTransaction orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKCommitmentTransaction ret_var = CommitmentTransaction_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28659,6 +33581,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_CommitmentTransaction_1
        LDKCommitmentTransaction obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = CommitmentTransaction_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -28680,6 +33603,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CommitmentTransaction_1comm
        LDKCommitmentTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = CommitmentTransaction_commitment_number(&this_arg_conv);
        return ret_val;
 }
@@ -28688,6 +33612,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CommitmentTransaction_1to_1
        LDKCommitmentTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = CommitmentTransaction_to_broadcaster_value_sat(&this_arg_conv);
        return ret_val;
 }
@@ -28696,6 +33621,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CommitmentTransaction_1to_1
        LDKCommitmentTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = CommitmentTransaction_to_countersignatory_value_sat(&this_arg_conv);
        return ret_val;
 }
@@ -28704,6 +33630,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_CommitmentTransaction_1feer
        LDKCommitmentTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int32_t ret_val = CommitmentTransaction_feerate_per_kw(&this_arg_conv);
        return ret_val;
 }
@@ -28712,10 +33639,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CommitmentTransaction_1trus
        LDKCommitmentTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKTrustedCommitmentTransaction ret_var = CommitmentTransaction_trust(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28727,15 +33656,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CommitmentTransaction_1veri
        LDKCommitmentTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKDirectedChannelTransactionParameters channel_parameters_conv;
        channel_parameters_conv.inner = (void*)(channel_parameters & (~1));
        channel_parameters_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_parameters_conv);
        LDKChannelPublicKeys broadcaster_keys_conv;
        broadcaster_keys_conv.inner = (void*)(broadcaster_keys & (~1));
        broadcaster_keys_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(broadcaster_keys_conv);
        LDKChannelPublicKeys countersignatory_keys_conv;
        countersignatory_keys_conv.inner = (void*)(countersignatory_keys & (~1));
        countersignatory_keys_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(countersignatory_keys_conv);
        LDKCResult_TrustedCommitmentTransactionNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_TrustedCommitmentTransactionNoneZ), "LDKCResult_TrustedCommitmentTransactionNoneZ");
        *ret_conv = CommitmentTransaction_verify(&this_arg_conv, &channel_parameters_conv, &broadcaster_keys_conv, &countersignatory_keys_conv);
        return (uint64_t)ret_conv;
@@ -28745,6 +33678,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_TrustedCommitmentTransaction_1
        LDKTrustedCommitmentTransaction this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        TrustedCommitmentTransaction_free(this_obj_conv);
 }
 
@@ -28752,6 +33686,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_TrustedCommitmentTransa
        LDKTrustedCommitmentTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, TrustedCommitmentTransaction_txid(&this_arg_conv).data);
        return ret_arr;
@@ -28761,10 +33696,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_TrustedCommitmentTransactio
        LDKTrustedCommitmentTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKBuiltCommitmentTransaction ret_var = TrustedCommitmentTransaction_built_transaction(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28776,10 +33713,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_TrustedCommitmentTransactio
        LDKTrustedCommitmentTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKTxCreationKeys ret_var = TrustedCommitmentTransaction_keys(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28791,6 +33730,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_TrustedCommitmentTransactio
        LDKTrustedCommitmentTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char htlc_base_key_arr[32];
        CHECK((*env)->GetArrayLength(env, htlc_base_key) == 32);
        (*env)->GetByteArrayRegion(env, htlc_base_key, 0, 32, htlc_base_key_arr);
@@ -28798,6 +33738,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_TrustedCommitmentTransactio
        LDKDirectedChannelTransactionParameters channel_parameters_conv;
        channel_parameters_conv.inner = (void*)(channel_parameters & (~1));
        channel_parameters_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_parameters_conv);
        LDKCResult_CVec_SignatureZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_SignatureZNoneZ), "LDKCResult_CVec_SignatureZNoneZ");
        *ret_conv = TrustedCommitmentTransaction_get_htlc_sigs(&this_arg_conv, htlc_base_key_ref, &channel_parameters_conv);
        return (uint64_t)ret_conv;
@@ -28818,9 +33759,11 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_InitFeatures_1eq(JNIEnv *e
        LDKInitFeatures a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKInitFeatures b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = InitFeatures_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -28829,9 +33772,11 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_NodeFeatures_1eq(JNIEnv *e
        LDKNodeFeatures a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKNodeFeatures b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = NodeFeatures_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -28840,9 +33785,11 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelFeatures_1eq(JNIEnv
        LDKChannelFeatures a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKChannelFeatures b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = ChannelFeatures_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -28851,21 +33798,46 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_InvoiceFeatures_1eq(JNIEnv
        LDKInvoiceFeatures a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKInvoiceFeatures b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = InvoiceFeatures_eq(&a_conv, &b_conv);
        return ret_val;
 }
 
+static inline uint64_t InitFeatures_clone_ptr(LDKInitFeatures *NONNULL_PTR arg) {
+       LDKInitFeatures ret_var = InitFeatures_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InitFeatures_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKInitFeatures arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = InitFeatures_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InitFeatures_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKInitFeatures orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKInitFeatures ret_var = InitFeatures_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28873,14 +33845,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InitFeatures_1clone(JNIEnv
        return ret_ref;
 }
 
+static inline uint64_t NodeFeatures_clone_ptr(LDKNodeFeatures *NONNULL_PTR arg) {
+       LDKNodeFeatures ret_var = NodeFeatures_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeFeatures_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKNodeFeatures arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = NodeFeatures_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeFeatures_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKNodeFeatures orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKNodeFeatures ret_var = NodeFeatures_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28888,14 +33883,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeFeatures_1clone(JNIEnv
        return ret_ref;
 }
 
+static inline uint64_t ChannelFeatures_clone_ptr(LDKChannelFeatures *NONNULL_PTR arg) {
+       LDKChannelFeatures ret_var = ChannelFeatures_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelFeatures_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKChannelFeatures arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChannelFeatures_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelFeatures_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKChannelFeatures orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChannelFeatures ret_var = ChannelFeatures_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28903,14 +33921,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelFeatures_1clone(JNIE
        return ret_ref;
 }
 
+static inline uint64_t InvoiceFeatures_clone_ptr(LDKInvoiceFeatures *NONNULL_PTR arg) {
+       LDKInvoiceFeatures ret_var = InvoiceFeatures_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceFeatures_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKInvoiceFeatures arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = InvoiceFeatures_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceFeatures_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKInvoiceFeatures orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKInvoiceFeatures ret_var = InvoiceFeatures_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28922,6 +33963,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InitFeatures_1free(JNIEnv *env
        LDKInitFeatures this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        InitFeatures_free(this_obj_conv);
 }
 
@@ -28929,6 +33971,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeFeatures_1free(JNIEnv *env
        LDKNodeFeatures this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        NodeFeatures_free(this_obj_conv);
 }
 
@@ -28936,6 +33979,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelFeatures_1free(JNIEnv *
        LDKChannelFeatures this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelFeatures_free(this_obj_conv);
 }
 
@@ -28943,6 +33987,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InvoiceFeatures_1free(JNIEnv *
        LDKInvoiceFeatures this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        InvoiceFeatures_free(this_obj_conv);
 }
 
@@ -28951,6 +33996,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InitFeatures_1empty(JNIEnv
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28963,6 +34009,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InitFeatures_1known(JNIEnv
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28974,6 +34021,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_InitFeatures_1requires_1un
        LDKInitFeatures this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        jboolean ret_val = InitFeatures_requires_unknown_bits(&this_arg_conv);
        return ret_val;
 }
@@ -28983,6 +34031,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeFeatures_1empty(JNIEnv
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28995,6 +34044,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeFeatures_1known(JNIEnv
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29006,6 +34056,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_NodeFeatures_1requires_1un
        LDKNodeFeatures this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        jboolean ret_val = NodeFeatures_requires_unknown_bits(&this_arg_conv);
        return ret_val;
 }
@@ -29015,6 +34066,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelFeatures_1empty(JNIE
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29027,6 +34079,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelFeatures_1known(JNIE
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29038,6 +34091,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelFeatures_1requires_
        LDKChannelFeatures this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        jboolean ret_val = ChannelFeatures_requires_unknown_bits(&this_arg_conv);
        return ret_val;
 }
@@ -29047,6 +34101,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceFeatures_1empty(JNIE
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29059,6 +34114,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceFeatures_1known(JNIE
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29070,6 +34126,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_InvoiceFeatures_1requires_
        LDKInvoiceFeatures this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        jboolean ret_val = InvoiceFeatures_requires_unknown_bits(&this_arg_conv);
        return ret_val;
 }
@@ -29078,6 +34135,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_InitFeatures_1supports_1pa
        LDKInitFeatures this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        jboolean ret_val = InitFeatures_supports_payment_secret(&this_arg_conv);
        return ret_val;
 }
@@ -29086,6 +34144,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_NodeFeatures_1supports_1pa
        LDKNodeFeatures this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        jboolean ret_val = NodeFeatures_supports_payment_secret(&this_arg_conv);
        return ret_val;
 }
@@ -29094,6 +34153,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_InvoiceFeatures_1supports_
        LDKInvoiceFeatures this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        jboolean ret_val = InvoiceFeatures_supports_payment_secret(&this_arg_conv);
        return ret_val;
 }
@@ -29102,6 +34162,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InitFeatures_1write(JNI
        LDKInitFeatures obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = InitFeatures_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -29113,6 +34174,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NodeFeatures_1write(JNI
        LDKNodeFeatures obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = NodeFeatures_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -29124,6 +34186,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelFeatures_1write(
        LDKChannelFeatures obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ChannelFeatures_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -29135,6 +34198,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InvoiceFeatures_1write(
        LDKInvoiceFeatures obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = InvoiceFeatures_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -29186,17 +34250,41 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ShutdownScript_1free(JNIEnv *e
        LDKShutdownScript this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ShutdownScript_free(this_obj_conv);
 }
 
+static inline uint64_t ShutdownScript_clone_ptr(LDKShutdownScript *NONNULL_PTR arg) {
+       LDKShutdownScript ret_var = ShutdownScript_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ShutdownScript_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKShutdownScript arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ShutdownScript_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ShutdownScript_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKShutdownScript orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKShutdownScript ret_var = ShutdownScript_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29208,6 +34296,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InvalidShutdownScript_1free(JN
        LDKInvalidShutdownScript this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        InvalidShutdownScript_free(this_obj_conv);
 }
 
@@ -29215,6 +34304,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InvalidShutdownScript_1
        LDKInvalidShutdownScript this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKu8slice ret_var = InvalidShutdownScript_get_script(&this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -29225,6 +34315,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InvalidShutdownScript_1set_1sc
        LDKInvalidShutdownScript this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_u8Z val_ref;
        val_ref.datalen = (*env)->GetArrayLength(env, val);
        val_ref.data = MALLOC(val_ref.datalen, "LDKCVec_u8Z Bytes");
@@ -29241,6 +34332,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvalidShutdownScript_1new(
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29248,14 +34340,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvalidShutdownScript_1new(
        return ret_ref;
 }
 
+static inline uint64_t InvalidShutdownScript_clone_ptr(LDKInvalidShutdownScript *NONNULL_PTR arg) {
+       LDKInvalidShutdownScript ret_var = InvalidShutdownScript_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvalidShutdownScript_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKInvalidShutdownScript arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = InvalidShutdownScript_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvalidShutdownScript_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKInvalidShutdownScript orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKInvalidShutdownScript ret_var = InvalidShutdownScript_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29267,6 +34382,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ShutdownScript_1write(J
        LDKShutdownScript obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ShutdownScript_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -29293,6 +34409,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ShutdownScript_1new_1p2wpkh
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29309,6 +34426,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ShutdownScript_1new_1p2wsh(
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29330,6 +34448,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ShutdownScript_1into_1i
        LDKShutdownScript this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = (this_arg & 1) || (this_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv = ShutdownScript_clone(&this_arg_conv);
        LDKCVec_u8Z ret_var = ShutdownScript_into_inner(this_arg_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
@@ -29342,6 +34461,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ShutdownScript_1as_1leg
        LDKShutdownScript this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, ShutdownScript_as_legacy_pubkey(&this_arg_conv).compressed_form);
        return ret_arr;
@@ -29351,9 +34471,11 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ShutdownScript_1is_1compat
        LDKShutdownScript this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKInitFeatures features_conv;
        features_conv.inner = (void*)(features & (~1));
        features_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_conv);
        jboolean ret_val = ShutdownScript_is_compatible(&this_arg_conv, &features_conv);
        return ret_val;
 }
@@ -29367,6 +34489,19 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CustomMessageReader_1free(JNIE
        CustomMessageReader_free(this_ptr_conv);
 }
 
+static inline uint64_t Type_clone_ptr(LDKType *NONNULL_PTR arg) {
+       LDKType* ret_ret = MALLOC(sizeof(LDKType), "LDKType");
+       *ret_ret = Type_clone(arg);
+       return (uint64_t)ret_ret;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Type_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       void* arg_ptr = (void*)(((uint64_t)arg) & ~1);
+       if (!(arg & 1)) { CHECK_ACCESS(arg_ptr); }
+       LDKType* arg_conv = (LDKType*)arg_ptr;
+       int64_t ret_val = Type_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Type_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        void* orig_ptr = (void*)(((uint64_t)orig) & ~1);
        if (!(orig & 1)) { CHECK_ACCESS(orig_ptr); }
@@ -29398,6 +34533,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LockableScore_1free(JNIEnv *en
        LDKLockableScore this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        LockableScore_free(this_obj_conv);
 }
 
@@ -29413,6 +34549,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LockableScore_1new(JNIEnv *
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29424,6 +34561,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_LockableScore_1write(JN
        LDKLockableScore obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = LockableScore_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -29435,17 +34573,41 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeId_1free(JNIEnv *env, jcla
        LDKNodeId this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        NodeId_free(this_obj_conv);
 }
 
+static inline uint64_t NodeId_clone_ptr(LDKNodeId *NONNULL_PTR arg) {
+       LDKNodeId ret_var = NodeId_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeId_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKNodeId arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = NodeId_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeId_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKNodeId orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKNodeId ret_var = NodeId_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29461,6 +34623,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeId_1from_1pubkey(JNIEnv
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29472,6 +34635,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NodeId_1as_1slice(JNIEn
        LDKNodeId this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKu8slice ret_var = NodeId_as_slice(&this_arg_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -29482,6 +34646,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeId_1hash(JNIEnv *env, j
        LDKNodeId o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = NodeId_hash(&o_conv);
        return ret_val;
 }
@@ -29490,6 +34655,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NodeId_1write(JNIEnv *e
        LDKNodeId obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = NodeId_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -29511,17 +34677,41 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1free(JNIEnv *env
        LDKNetworkGraph this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        NetworkGraph_free(this_obj_conv);
 }
 
+static inline uint64_t NetworkGraph_clone_ptr(LDKNetworkGraph *NONNULL_PTR arg) {
+       LDKNetworkGraph ret_var = NetworkGraph_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKNetworkGraph arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = NetworkGraph_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKNetworkGraph orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKNetworkGraph ret_var = NetworkGraph_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29533,6 +34723,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ReadOnlyNetworkGraph_1free(JNI
        LDKReadOnlyNetworkGraph this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ReadOnlyNetworkGraph_free(this_obj_conv);
 }
 
@@ -29545,6 +34736,18 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NetworkUpdate_1free(JNIEnv *en
        NetworkUpdate_free(this_ptr_conv);
 }
 
+static inline uint64_t NetworkUpdate_clone_ptr(LDKNetworkUpdate *NONNULL_PTR arg) {
+       LDKNetworkUpdate *ret_copy = MALLOC(sizeof(LDKNetworkUpdate), "LDKNetworkUpdate");
+       *ret_copy = NetworkUpdate_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkUpdate_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKNetworkUpdate* arg_conv = (LDKNetworkUpdate*)arg;
+       int64_t ret_val = NetworkUpdate_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkUpdate_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKNetworkUpdate* orig_conv = (LDKNetworkUpdate*)orig;
        LDKNetworkUpdate *ret_copy = MALLOC(sizeof(LDKNetworkUpdate), "LDKNetworkUpdate");
@@ -29557,6 +34760,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkUpdate_1channel_1upd
        LDKChannelUpdate msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = ChannelUpdate_clone(&msg_conv);
        LDKNetworkUpdate *ret_copy = MALLOC(sizeof(LDKNetworkUpdate), "LDKNetworkUpdate");
        *ret_copy = NetworkUpdate_channel_update_message(msg_conv);
@@ -29590,10 +34794,21 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NetworkUpdate_1write(JN
        return ret_arr;
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkUpdate_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
+       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
+       LDKCResult_COption_NetworkUpdateZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_NetworkUpdateZDecodeErrorZ), "LDKCResult_COption_NetworkUpdateZDecodeErrorZ");
+       *ret_conv = NetworkUpdate_read(ser_ref);
+       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
+       return (uint64_t)ret_conv;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetGraphMsgHandler_1as_1EventHandler(JNIEnv *env, jclass clz, int64_t this_arg) {
        LDKNetGraphMsgHandler this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKEventHandler* ret_ret = MALLOC(sizeof(LDKEventHandler), "LDKEventHandler");
        *ret_ret = NetGraphMsgHandler_as_EventHandler(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -29603,6 +34818,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NetGraphMsgHandler_1free(JNIEn
        LDKNetGraphMsgHandler this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        NetGraphMsgHandler_free(this_obj_conv);
 }
 
@@ -29610,6 +34826,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetGraphMsgHandler_1new(JNI
        LDKNetworkGraph network_graph_conv;
        network_graph_conv.inner = (void*)(network_graph & (~1));
        network_graph_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
        void* chain_access_ptr = (void*)(((uint64_t)chain_access) & ~1);
        CHECK_ACCESS(chain_access_ptr);
        LDKCOption_AccessZ chain_access_conv = *(LDKCOption_AccessZ*)(chain_access_ptr);
@@ -29632,6 +34849,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetGraphMsgHandler_1new(JNI
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29643,6 +34861,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NetGraphMsgHandler_1add_1chain
        LDKNetGraphMsgHandler this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        void* chain_access_ptr = (void*)(((uint64_t)chain_access) & ~1);
        CHECK_ACCESS(chain_access_ptr);
        LDKCOption_AccessZ chain_access_conv = *(LDKCOption_AccessZ*)(chain_access_ptr);
@@ -29661,6 +34880,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetGraphMsgHandler_1as_1Rou
        LDKNetGraphMsgHandler this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKRoutingMessageHandler* ret_ret = MALLOC(sizeof(LDKRoutingMessageHandler), "LDKRoutingMessageHandler");
        *ret_ret = NetGraphMsgHandler_as_RoutingMessageHandler(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -29670,6 +34890,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetGraphMsgHandler_1as_1Mes
        LDKNetGraphMsgHandler this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKMessageSendEventsProvider* ret_ret = MALLOC(sizeof(LDKMessageSendEventsProvider), "LDKMessageSendEventsProvider");
        *ret_ret = NetGraphMsgHandler_as_MessageSendEventsProvider(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -29679,6 +34900,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DirectionalChannelInfo_1free(J
        LDKDirectionalChannelInfo this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        DirectionalChannelInfo_free(this_obj_conv);
 }
 
@@ -29686,6 +34908,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_DirectionalChannelInfo_1get
        LDKDirectionalChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = DirectionalChannelInfo_get_last_update(&this_ptr_conv);
        return ret_val;
 }
@@ -29694,6 +34917,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DirectionalChannelInfo_1set_1l
        LDKDirectionalChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        DirectionalChannelInfo_set_last_update(&this_ptr_conv, val);
 }
 
@@ -29701,6 +34925,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_DirectionalChannelInfo_1ge
        LDKDirectionalChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        jboolean ret_val = DirectionalChannelInfo_get_enabled(&this_ptr_conv);
        return ret_val;
 }
@@ -29709,6 +34934,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DirectionalChannelInfo_1set_1e
        LDKDirectionalChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        DirectionalChannelInfo_set_enabled(&this_ptr_conv, val);
 }
 
@@ -29716,6 +34942,7 @@ JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_DirectionalChannelInfo_1get
        LDKDirectionalChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = DirectionalChannelInfo_get_cltv_expiry_delta(&this_ptr_conv);
        return ret_val;
 }
@@ -29724,6 +34951,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DirectionalChannelInfo_1set_1c
        LDKDirectionalChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        DirectionalChannelInfo_set_cltv_expiry_delta(&this_ptr_conv, val);
 }
 
@@ -29731,6 +34959,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DirectionalChannelInfo_1get
        LDKDirectionalChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = DirectionalChannelInfo_get_htlc_minimum_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -29739,6 +34968,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DirectionalChannelInfo_1set_1h
        LDKDirectionalChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        DirectionalChannelInfo_set_htlc_minimum_msat(&this_ptr_conv, val);
 }
 
@@ -29746,6 +34976,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DirectionalChannelInfo_1get
        LDKDirectionalChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
        *ret_copy = DirectionalChannelInfo_get_htlc_maximum_msat(&this_ptr_conv);
        uint64_t ret_ref = (uint64_t)ret_copy;
@@ -29756,6 +34987,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DirectionalChannelInfo_1set_1h
        LDKDirectionalChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
@@ -29767,10 +34999,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DirectionalChannelInfo_1get
        LDKDirectionalChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKRoutingFees ret_var = DirectionalChannelInfo_get_fees(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29782,9 +35016,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DirectionalChannelInfo_1set_1f
        LDKDirectionalChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKRoutingFees val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = RoutingFees_clone(&val_conv);
        DirectionalChannelInfo_set_fees(&this_ptr_conv, val_conv);
 }
@@ -29793,11 +35029,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DirectionalChannelInfo_1get
        LDKDirectionalChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelUpdate ret_var = DirectionalChannelInfo_get_last_update_message(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -29810,9 +35048,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DirectionalChannelInfo_1set_1l
        LDKDirectionalChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelUpdate val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = ChannelUpdate_clone(&val_conv);
        DirectionalChannelInfo_set_last_update_message(&this_ptr_conv, val_conv);
 }
@@ -29825,15 +35065,18 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DirectionalChannelInfo_1new
        LDKRoutingFees fees_arg_conv;
        fees_arg_conv.inner = (void*)(fees_arg & (~1));
        fees_arg_conv.is_owned = (fees_arg & 1) || (fees_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(fees_arg_conv);
        fees_arg_conv = RoutingFees_clone(&fees_arg_conv);
        LDKChannelUpdate last_update_message_arg_conv;
        last_update_message_arg_conv.inner = (void*)(last_update_message_arg & (~1));
        last_update_message_arg_conv.is_owned = (last_update_message_arg & 1) || (last_update_message_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(last_update_message_arg_conv);
        last_update_message_arg_conv = ChannelUpdate_clone(&last_update_message_arg_conv);
        LDKDirectionalChannelInfo ret_var = DirectionalChannelInfo_new(last_update_arg, enabled_arg, cltv_expiry_delta_arg, htlc_minimum_msat_arg, htlc_maximum_msat_arg_conv, fees_arg_conv, last_update_message_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29841,14 +35084,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DirectionalChannelInfo_1new
        return ret_ref;
 }
 
+static inline uint64_t DirectionalChannelInfo_clone_ptr(LDKDirectionalChannelInfo *NONNULL_PTR arg) {
+       LDKDirectionalChannelInfo ret_var = DirectionalChannelInfo_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DirectionalChannelInfo_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKDirectionalChannelInfo arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = DirectionalChannelInfo_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DirectionalChannelInfo_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKDirectionalChannelInfo orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKDirectionalChannelInfo ret_var = DirectionalChannelInfo_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29860,6 +35126,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_DirectionalChannelInfo_
        LDKDirectionalChannelInfo obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = DirectionalChannelInfo_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -29881,6 +35148,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1free(JNIEnv *env,
        LDKChannelInfo this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelInfo_free(this_obj_conv);
 }
 
@@ -29888,10 +35156,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1get_1features(
        LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelFeatures ret_var = ChannelInfo_get_features(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29903,9 +35173,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1set_1features(JNI
        LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelFeatures val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = ChannelFeatures_clone(&val_conv);
        ChannelInfo_set_features(&this_ptr_conv, val_conv);
 }
@@ -29914,10 +35186,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1get_1node_1one
        LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNodeId ret_var = ChannelInfo_get_node_one(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29929,9 +35203,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1set_1node_1one(JN
        LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNodeId val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = NodeId_clone(&val_conv);
        ChannelInfo_set_node_one(&this_ptr_conv, val_conv);
 }
@@ -29940,11 +35216,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1get_1one_1to_1
        LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKDirectionalChannelInfo ret_var = ChannelInfo_get_one_to_two(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -29957,9 +35235,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1set_1one_1to_1two
        LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKDirectionalChannelInfo val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = DirectionalChannelInfo_clone(&val_conv);
        ChannelInfo_set_one_to_two(&this_ptr_conv, val_conv);
 }
@@ -29968,10 +35248,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1get_1node_1two
        LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNodeId ret_var = ChannelInfo_get_node_two(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29983,9 +35265,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1set_1node_1two(JN
        LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNodeId val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = NodeId_clone(&val_conv);
        ChannelInfo_set_node_two(&this_ptr_conv, val_conv);
 }
@@ -29994,11 +35278,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1get_1two_1to_1
        LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKDirectionalChannelInfo ret_var = ChannelInfo_get_two_to_one(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -30011,9 +35297,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1set_1two_1to_1one
        LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKDirectionalChannelInfo val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = DirectionalChannelInfo_clone(&val_conv);
        ChannelInfo_set_two_to_one(&this_ptr_conv, val_conv);
 }
@@ -30022,6 +35310,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1get_1capacity_
        LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
        *ret_copy = ChannelInfo_get_capacity_sats(&this_ptr_conv);
        uint64_t ret_ref = (uint64_t)ret_copy;
@@ -30032,6 +35321,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1set_1capacity_1sa
        LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
@@ -30043,11 +35333,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1get_1announcem
        LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelAnnouncement ret_var = ChannelInfo_get_announcement_message(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -30060,9 +35352,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1set_1announcement
        LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelAnnouncement val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = ChannelAnnouncement_clone(&val_conv);
        ChannelInfo_set_announcement_message(&this_ptr_conv, val_conv);
 }
@@ -30071,22 +35365,27 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1new(JNIEnv *en
        LDKChannelFeatures features_arg_conv;
        features_arg_conv.inner = (void*)(features_arg & (~1));
        features_arg_conv.is_owned = (features_arg & 1) || (features_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_arg_conv);
        features_arg_conv = ChannelFeatures_clone(&features_arg_conv);
        LDKNodeId node_one_arg_conv;
        node_one_arg_conv.inner = (void*)(node_one_arg & (~1));
        node_one_arg_conv.is_owned = (node_one_arg & 1) || (node_one_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_one_arg_conv);
        node_one_arg_conv = NodeId_clone(&node_one_arg_conv);
        LDKDirectionalChannelInfo one_to_two_arg_conv;
        one_to_two_arg_conv.inner = (void*)(one_to_two_arg & (~1));
        one_to_two_arg_conv.is_owned = (one_to_two_arg & 1) || (one_to_two_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(one_to_two_arg_conv);
        one_to_two_arg_conv = DirectionalChannelInfo_clone(&one_to_two_arg_conv);
        LDKNodeId node_two_arg_conv;
        node_two_arg_conv.inner = (void*)(node_two_arg & (~1));
        node_two_arg_conv.is_owned = (node_two_arg & 1) || (node_two_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_two_arg_conv);
        node_two_arg_conv = NodeId_clone(&node_two_arg_conv);
        LDKDirectionalChannelInfo two_to_one_arg_conv;
        two_to_one_arg_conv.inner = (void*)(two_to_one_arg & (~1));
        two_to_one_arg_conv.is_owned = (two_to_one_arg & 1) || (two_to_one_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(two_to_one_arg_conv);
        two_to_one_arg_conv = DirectionalChannelInfo_clone(&two_to_one_arg_conv);
        void* capacity_sats_arg_ptr = (void*)(((uint64_t)capacity_sats_arg) & ~1);
        CHECK_ACCESS(capacity_sats_arg_ptr);
@@ -30095,11 +35394,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1new(JNIEnv *en
        LDKChannelAnnouncement announcement_message_arg_conv;
        announcement_message_arg_conv.inner = (void*)(announcement_message_arg & (~1));
        announcement_message_arg_conv.is_owned = (announcement_message_arg & 1) || (announcement_message_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(announcement_message_arg_conv);
        announcement_message_arg_conv = ChannelAnnouncement_clone(&announcement_message_arg_conv);
        LDKChannelInfo ret_var = ChannelInfo_new(features_arg_conv, node_one_arg_conv, one_to_two_arg_conv, node_two_arg_conv, two_to_one_arg_conv, capacity_sats_arg_conv, announcement_message_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -30107,14 +35408,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1new(JNIEnv *en
        return ret_ref;
 }
 
+static inline uint64_t ChannelInfo_clone_ptr(LDKChannelInfo *NONNULL_PTR arg) {
+       LDKChannelInfo ret_var = ChannelInfo_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKChannelInfo arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChannelInfo_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKChannelInfo orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChannelInfo ret_var = ChannelInfo_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -30126,6 +35450,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1write(JNIE
        LDKChannelInfo obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ChannelInfo_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -30147,6 +35472,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RoutingFees_1free(JNIEnv *env,
        LDKRoutingFees this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        RoutingFees_free(this_obj_conv);
 }
 
@@ -30154,6 +35480,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_RoutingFees_1get_1base_1msa
        LDKRoutingFees this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = RoutingFees_get_base_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -30162,6 +35489,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RoutingFees_1set_1base_1msat(J
        LDKRoutingFees this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        RoutingFees_set_base_msat(&this_ptr_conv, val);
 }
 
@@ -30169,6 +35497,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_RoutingFees_1get_1proportio
        LDKRoutingFees this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = RoutingFees_get_proportional_millionths(&this_ptr_conv);
        return ret_val;
 }
@@ -30177,6 +35506,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RoutingFees_1set_1proportional
        LDKRoutingFees this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        RoutingFees_set_proportional_millionths(&this_ptr_conv, val);
 }
 
@@ -30185,6 +35515,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RoutingFees_1new(JNIEnv *en
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -30196,21 +35527,46 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_RoutingFees_1eq(JNIEnv *en
        LDKRoutingFees a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKRoutingFees b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = RoutingFees_eq(&a_conv, &b_conv);
        return ret_val;
 }
 
+static inline uint64_t RoutingFees_clone_ptr(LDKRoutingFees *NONNULL_PTR arg) {
+       LDKRoutingFees ret_var = RoutingFees_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RoutingFees_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKRoutingFees arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = RoutingFees_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RoutingFees_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKRoutingFees orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKRoutingFees ret_var = RoutingFees_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -30222,6 +35578,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RoutingFees_1hash(JNIEnv *e
        LDKRoutingFees o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = RoutingFees_hash(&o_conv);
        return ret_val;
 }
@@ -30230,6 +35587,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_RoutingFees_1write(JNIE
        LDKRoutingFees obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = RoutingFees_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -30251,6 +35609,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1free(JNI
        LDKNodeAnnouncementInfo this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        NodeAnnouncementInfo_free(this_obj_conv);
 }
 
@@ -30258,10 +35617,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1get_1
        LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNodeFeatures ret_var = NodeAnnouncementInfo_get_features(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -30273,9 +35634,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1set_1fea
        LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNodeFeatures val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = NodeFeatures_clone(&val_conv);
        NodeAnnouncementInfo_set_features(&this_ptr_conv, val_conv);
 }
@@ -30284,6 +35647,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1get_1
        LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = NodeAnnouncementInfo_get_last_update(&this_ptr_conv);
        return ret_val;
 }
@@ -30292,6 +35656,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1set_1las
        LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        NodeAnnouncementInfo_set_last_update(&this_ptr_conv, val);
 }
 
@@ -30299,6 +35664,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1g
        LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 3);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 3, *NodeAnnouncementInfo_get_rgb(&this_ptr_conv));
        return ret_arr;
@@ -30308,6 +35674,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1set_1rgb
        LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThreeBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 3);
        (*env)->GetByteArrayRegion(env, val, 0, 3, val_ref.data);
@@ -30318,6 +35685,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1g
        LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *NodeAnnouncementInfo_get_alias(&this_ptr_conv));
        return ret_arr;
@@ -30327,6 +35695,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1set_1ali
        LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -30337,6 +35706,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1set_1add
        LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_NetAddressZ val_constr;
        val_constr.datalen = (*env)->GetArrayLength(env, val);
        if (val_constr.datalen > 0)
@@ -30360,11 +35730,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1get_1
        LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNodeAnnouncement ret_var = NodeAnnouncementInfo_get_announcement_message(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -30377,9 +35749,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1set_1ann
        LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNodeAnnouncement val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = NodeAnnouncement_clone(&val_conv);
        NodeAnnouncementInfo_set_announcement_message(&this_ptr_conv, val_conv);
 }
@@ -30388,6 +35762,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1new(J
        LDKNodeFeatures features_arg_conv;
        features_arg_conv.inner = (void*)(features_arg & (~1));
        features_arg_conv.is_owned = (features_arg & 1) || (features_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_arg_conv);
        features_arg_conv = NodeFeatures_clone(&features_arg_conv);
        LDKThreeBytes rgb_arg_ref;
        CHECK((*env)->GetArrayLength(env, rgb_arg) == 3);
@@ -30413,11 +35788,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1new(J
        LDKNodeAnnouncement announcement_message_arg_conv;
        announcement_message_arg_conv.inner = (void*)(announcement_message_arg & (~1));
        announcement_message_arg_conv.is_owned = (announcement_message_arg & 1) || (announcement_message_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(announcement_message_arg_conv);
        announcement_message_arg_conv = NodeAnnouncement_clone(&announcement_message_arg_conv);
        LDKNodeAnnouncementInfo ret_var = NodeAnnouncementInfo_new(features_arg_conv, last_update_arg, rgb_arg_ref, alias_arg_ref, addresses_arg_constr, announcement_message_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -30425,14 +35802,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1new(J
        return ret_ref;
 }
 
+static inline uint64_t NodeAnnouncementInfo_clone_ptr(LDKNodeAnnouncementInfo *NONNULL_PTR arg) {
+       LDKNodeAnnouncementInfo ret_var = NodeAnnouncementInfo_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKNodeAnnouncementInfo arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = NodeAnnouncementInfo_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKNodeAnnouncementInfo orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKNodeAnnouncementInfo ret_var = NodeAnnouncementInfo_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -30444,6 +35844,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1w
        LDKNodeAnnouncementInfo obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = NodeAnnouncementInfo_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -30465,6 +35866,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeInfo_1free(JNIEnv *env, jc
        LDKNodeInfo this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        NodeInfo_free(this_obj_conv);
 }
 
@@ -30472,6 +35874,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeInfo_1set_1channels(JNIEnv
        LDKNodeInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_u64Z val_constr;
        val_constr.datalen = (*env)->GetArrayLength(env, val);
        if (val_constr.datalen > 0)
@@ -30491,11 +35894,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeInfo_1get_1lowest_1inbo
        LDKNodeInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKRoutingFees ret_var = NodeInfo_get_lowest_inbound_channel_fees(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -30508,9 +35913,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeInfo_1set_1lowest_1inbound
        LDKNodeInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKRoutingFees val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = RoutingFees_clone(&val_conv);
        NodeInfo_set_lowest_inbound_channel_fees(&this_ptr_conv, val_conv);
 }
@@ -30519,11 +35926,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeInfo_1get_1announcement
        LDKNodeInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNodeAnnouncementInfo ret_var = NodeInfo_get_announcement_info(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -30536,9 +35945,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeInfo_1set_1announcement_1i
        LDKNodeInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNodeAnnouncementInfo val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = NodeAnnouncementInfo_clone(&val_conv);
        NodeInfo_set_announcement_info(&this_ptr_conv, val_conv);
 }
@@ -30559,15 +35970,18 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeInfo_1new(JNIEnv *env,
        LDKRoutingFees lowest_inbound_channel_fees_arg_conv;
        lowest_inbound_channel_fees_arg_conv.inner = (void*)(lowest_inbound_channel_fees_arg & (~1));
        lowest_inbound_channel_fees_arg_conv.is_owned = (lowest_inbound_channel_fees_arg & 1) || (lowest_inbound_channel_fees_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(lowest_inbound_channel_fees_arg_conv);
        lowest_inbound_channel_fees_arg_conv = RoutingFees_clone(&lowest_inbound_channel_fees_arg_conv);
        LDKNodeAnnouncementInfo announcement_info_arg_conv;
        announcement_info_arg_conv.inner = (void*)(announcement_info_arg & (~1));
        announcement_info_arg_conv.is_owned = (announcement_info_arg & 1) || (announcement_info_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(announcement_info_arg_conv);
        announcement_info_arg_conv = NodeAnnouncementInfo_clone(&announcement_info_arg_conv);
        LDKNodeInfo ret_var = NodeInfo_new(channels_arg_constr, lowest_inbound_channel_fees_arg_conv, announcement_info_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -30575,14 +35989,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeInfo_1new(JNIEnv *env,
        return ret_ref;
 }
 
+static inline uint64_t NodeInfo_clone_ptr(LDKNodeInfo *NONNULL_PTR arg) {
+       LDKNodeInfo ret_var = NodeInfo_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeInfo_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKNodeInfo arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = NodeInfo_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeInfo_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKNodeInfo orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKNodeInfo ret_var = NodeInfo_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -30594,6 +36031,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NodeInfo_1write(JNIEnv
        LDKNodeInfo obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = NodeInfo_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -30615,6 +36053,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1write(JNI
        LDKNetworkGraph obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = NetworkGraph_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -30640,6 +36079,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1new(JNIEnv *e
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -30651,10 +36091,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1read_1only(JN
        LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKReadOnlyNetworkGraph ret_var = NetworkGraph_read_only(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -30666,9 +36108,11 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1update_1node_
        LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKNodeAnnouncement msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
        *ret_conv = NetworkGraph_update_node_from_announcement(&this_arg_conv, &msg_conv);
        return (uint64_t)ret_conv;
@@ -30678,9 +36122,11 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1update_1node_
        LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKUnsignedNodeAnnouncement msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
        *ret_conv = NetworkGraph_update_node_from_unsigned_announcement(&this_arg_conv, &msg_conv);
        return (uint64_t)ret_conv;
@@ -30690,9 +36136,11 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1update_1chann
        LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKChannelAnnouncement msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        void* chain_access_ptr = (void*)(((uint64_t)chain_access) & ~1);
        CHECK_ACCESS(chain_access_ptr);
        LDKCOption_AccessZ chain_access_conv = *(LDKCOption_AccessZ*)(chain_access_ptr);
@@ -30713,9 +36161,11 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1update_1chann
        LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKUnsignedChannelAnnouncement msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        void* chain_access_ptr = (void*)(((uint64_t)chain_access) & ~1);
        CHECK_ACCESS(chain_access_ptr);
        LDKCOption_AccessZ chain_access_conv = *(LDKCOption_AccessZ*)(chain_access_ptr);
@@ -30736,6 +36186,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1close_1channel_1
        LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        NetworkGraph_close_channel_from_update(&this_arg_conv, short_channel_id, is_permanent);
 }
 
@@ -30743,6 +36194,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1fail_1node(JNIEn
        LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKPublicKey _node_id_ref;
        CHECK((*env)->GetArrayLength(env, _node_id) == 33);
        (*env)->GetByteArrayRegion(env, _node_id, 0, 33, _node_id_ref.compressed_form);
@@ -30753,9 +36205,11 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1update_1chann
        LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKChannelUpdate msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
        *ret_conv = NetworkGraph_update_channel(&this_arg_conv, &msg_conv);
        return (uint64_t)ret_conv;
@@ -30765,9 +36219,11 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1update_1chann
        LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKUnsignedChannelUpdate msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
        *ret_conv = NetworkGraph_update_channel_unsigned(&this_arg_conv, &msg_conv);
        return (uint64_t)ret_conv;
@@ -30777,6 +36233,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ReadOnlyNetworkGraph_1get_1
        LDKReadOnlyNetworkGraph this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKPublicKey pubkey_ref;
        CHECK((*env)->GetArrayLength(env, pubkey) == 33);
        (*env)->GetByteArrayRegion(env, pubkey, 0, 33, pubkey_ref.compressed_form);
@@ -30790,6 +36247,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHop_1free(JNIEnv *env, jc
        LDKRouteHop this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        RouteHop_free(this_obj_conv);
 }
 
@@ -30797,6 +36255,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_RouteHop_1get_1pubkey(J
        LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, RouteHop_get_pubkey(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -30806,6 +36265,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHop_1set_1pubkey(JNIEnv *
        LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -30816,10 +36276,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1get_1node_1featur
        LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNodeFeatures ret_var = RouteHop_get_node_features(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -30831,9 +36293,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHop_1set_1node_1features(
        LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNodeFeatures val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = NodeFeatures_clone(&val_conv);
        RouteHop_set_node_features(&this_ptr_conv, val_conv);
 }
@@ -30842,6 +36306,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1get_1short_1chann
        LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = RouteHop_get_short_channel_id(&this_ptr_conv);
        return ret_val;
 }
@@ -30850,6 +36315,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHop_1set_1short_1channel_
        LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        RouteHop_set_short_channel_id(&this_ptr_conv, val);
 }
 
@@ -30857,10 +36323,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1get_1channel_1fea
        LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelFeatures ret_var = RouteHop_get_channel_features(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -30872,9 +36340,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHop_1set_1channel_1featur
        LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelFeatures val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = ChannelFeatures_clone(&val_conv);
        RouteHop_set_channel_features(&this_ptr_conv, val_conv);
 }
@@ -30883,6 +36353,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1get_1fee_1msat(JN
        LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = RouteHop_get_fee_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -30891,6 +36362,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHop_1set_1fee_1msat(JNIEn
        LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        RouteHop_set_fee_msat(&this_ptr_conv, val);
 }
 
@@ -30898,6 +36370,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1get_1cltv_1expiry
        LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = RouteHop_get_cltv_expiry_delta(&this_ptr_conv);
        return ret_val;
 }
@@ -30906,6 +36379,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHop_1set_1cltv_1expiry_1d
        LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        RouteHop_set_cltv_expiry_delta(&this_ptr_conv, val);
 }
 
@@ -30916,15 +36390,18 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1new(JNIEnv *env,
        LDKNodeFeatures node_features_arg_conv;
        node_features_arg_conv.inner = (void*)(node_features_arg & (~1));
        node_features_arg_conv.is_owned = (node_features_arg & 1) || (node_features_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_features_arg_conv);
        node_features_arg_conv = NodeFeatures_clone(&node_features_arg_conv);
        LDKChannelFeatures channel_features_arg_conv;
        channel_features_arg_conv.inner = (void*)(channel_features_arg & (~1));
        channel_features_arg_conv.is_owned = (channel_features_arg & 1) || (channel_features_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_features_arg_conv);
        channel_features_arg_conv = ChannelFeatures_clone(&channel_features_arg_conv);
        LDKRouteHop ret_var = RouteHop_new(pubkey_arg_ref, node_features_arg_conv, short_channel_id_arg, channel_features_arg_conv, fee_msat_arg, cltv_expiry_delta_arg);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -30932,14 +36409,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1new(JNIEnv *env,
        return ret_ref;
 }
 
+static inline uint64_t RouteHop_clone_ptr(LDKRouteHop *NONNULL_PTR arg) {
+       LDKRouteHop ret_var = RouteHop_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKRouteHop arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = RouteHop_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKRouteHop orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKRouteHop ret_var = RouteHop_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -30951,6 +36451,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1hash(JNIEnv *env,
        LDKRouteHop o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = RouteHop_hash(&o_conv);
        return ret_val;
 }
@@ -30959,9 +36460,11 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_RouteHop_1eq(JNIEnv *env,
        LDKRouteHop a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKRouteHop b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = RouteHop_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -30970,6 +36473,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_RouteHop_1write(JNIEnv
        LDKRouteHop obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = RouteHop_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -30991,6 +36495,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Route_1free(JNIEnv *env, jclas
        LDKRoute this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        Route_free(this_obj_conv);
 }
 
@@ -30998,6 +36503,7 @@ JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_Route_1get_1paths(JNIE
        LDKRoute this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_CVec_RouteHopZZ ret_var = Route_get_paths(&this_ptr_conv);
        jobjectArray ret_arr = NULL;
        ret_arr = (*env)->NewObjectArray(env, ret_var.datalen, arr_of_J_clz, NULL);
@@ -31012,6 +36518,7 @@ JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_Route_1get_1paths(JNIE
                        uint64_t ret_conv_12_conv_10_ref = 0;
                        CHECK((((uint64_t)ret_conv_12_conv_10_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&ret_conv_12_conv_10_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_12_conv_10_var);
                        ret_conv_12_conv_10_ref = (uint64_t)ret_conv_12_conv_10_var.inner;
                        if (ret_conv_12_conv_10_var.is_owned) {
                                ret_conv_12_conv_10_ref |= 1;
@@ -31031,6 +36538,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Route_1set_1paths(JNIEnv *env,
        LDKRoute this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_CVec_RouteHopZZ val_constr;
        val_constr.datalen = (*env)->GetArrayLength(env, val);
        if (val_constr.datalen > 0)
@@ -31051,6 +36559,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Route_1set_1paths(JNIEnv *env,
                        LDKRouteHop val_conv_12_conv_10_conv;
                        val_conv_12_conv_10_conv.inner = (void*)(val_conv_12_conv_10 & (~1));
                        val_conv_12_conv_10_conv.is_owned = (val_conv_12_conv_10 & 1) || (val_conv_12_conv_10 == 0);
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_12_conv_10_conv);
                        val_conv_12_conv_10_conv = RouteHop_clone(&val_conv_12_conv_10_conv);
                        val_conv_12_constr.data[k] = val_conv_12_conv_10_conv;
                }
@@ -31064,11 +36573,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Route_1get_1payee(JNIEnv *e
        LDKRoute this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPayee ret_var = Route_get_payee(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -31081,9 +36592,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Route_1set_1payee(JNIEnv *env,
        LDKRoute this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPayee val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = Payee_clone(&val_conv);
        Route_set_payee(&this_ptr_conv, val_conv);
 }
@@ -31109,6 +36622,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Route_1new(JNIEnv *env, jcl
                        LDKRouteHop paths_arg_conv_12_conv_10_conv;
                        paths_arg_conv_12_conv_10_conv.inner = (void*)(paths_arg_conv_12_conv_10 & (~1));
                        paths_arg_conv_12_conv_10_conv.is_owned = (paths_arg_conv_12_conv_10 & 1) || (paths_arg_conv_12_conv_10 == 0);
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(paths_arg_conv_12_conv_10_conv);
                        paths_arg_conv_12_conv_10_conv = RouteHop_clone(&paths_arg_conv_12_conv_10_conv);
                        paths_arg_conv_12_constr.data[k] = paths_arg_conv_12_conv_10_conv;
                }
@@ -31118,11 +36632,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Route_1new(JNIEnv *env, jcl
        LDKPayee payee_arg_conv;
        payee_arg_conv.inner = (void*)(payee_arg & (~1));
        payee_arg_conv.is_owned = (payee_arg & 1) || (payee_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(payee_arg_conv);
        payee_arg_conv = Payee_clone(&payee_arg_conv);
        LDKRoute ret_var = Route_new(paths_arg_constr, payee_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -31130,14 +36646,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Route_1new(JNIEnv *env, jcl
        return ret_ref;
 }
 
+static inline uint64_t Route_clone_ptr(LDKRoute *NONNULL_PTR arg) {
+       LDKRoute ret_var = Route_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Route_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKRoute arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = Route_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Route_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKRoute orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKRoute ret_var = Route_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -31149,6 +36688,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Route_1hash(JNIEnv *env, jc
        LDKRoute o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = Route_hash(&o_conv);
        return ret_val;
 }
@@ -31157,9 +36697,11 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Route_1eq(JNIEnv *env, jcl
        LDKRoute a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKRoute b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = Route_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -31168,6 +36710,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Route_1get_1total_1fees(JNI
        LDKRoute this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = Route_get_total_fees(&this_arg_conv);
        return ret_val;
 }
@@ -31176,6 +36719,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Route_1get_1total_1amount(J
        LDKRoute this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = Route_get_total_amount(&this_arg_conv);
        return ret_val;
 }
@@ -31184,6 +36728,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Route_1write(JNIEnv *en
        LDKRoute obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = Route_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -31205,6 +36750,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteParameters_1free(JNIEnv *
        LDKRouteParameters this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        RouteParameters_free(this_obj_conv);
 }
 
@@ -31212,10 +36758,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteParameters_1get_1payee
        LDKRouteParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPayee ret_var = RouteParameters_get_payee(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -31227,9 +36775,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteParameters_1set_1payee(JN
        LDKRouteParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPayee val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = Payee_clone(&val_conv);
        RouteParameters_set_payee(&this_ptr_conv, val_conv);
 }
@@ -31238,6 +36788,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteParameters_1get_1final
        LDKRouteParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = RouteParameters_get_final_value_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -31246,6 +36797,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteParameters_1set_1final_1v
        LDKRouteParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        RouteParameters_set_final_value_msat(&this_ptr_conv, val);
 }
 
@@ -31253,6 +36805,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_RouteParameters_1get_1final
        LDKRouteParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = RouteParameters_get_final_cltv_expiry_delta(&this_ptr_conv);
        return ret_val;
 }
@@ -31261,6 +36814,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteParameters_1set_1final_1c
        LDKRouteParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        RouteParameters_set_final_cltv_expiry_delta(&this_ptr_conv, val);
 }
 
@@ -31268,11 +36822,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteParameters_1new(JNIEnv
        LDKPayee payee_arg_conv;
        payee_arg_conv.inner = (void*)(payee_arg & (~1));
        payee_arg_conv.is_owned = (payee_arg & 1) || (payee_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(payee_arg_conv);
        payee_arg_conv = Payee_clone(&payee_arg_conv);
        LDKRouteParameters ret_var = RouteParameters_new(payee_arg_conv, final_value_msat_arg, final_cltv_expiry_delta_arg);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -31280,14 +36836,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteParameters_1new(JNIEnv
        return ret_ref;
 }
 
+static inline uint64_t RouteParameters_clone_ptr(LDKRouteParameters *NONNULL_PTR arg) {
+       LDKRouteParameters ret_var = RouteParameters_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteParameters_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKRouteParameters arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = RouteParameters_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteParameters_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKRouteParameters orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKRouteParameters ret_var = RouteParameters_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -31299,6 +36878,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_RouteParameters_1write(
        LDKRouteParameters obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = RouteParameters_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -31320,6 +36900,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Payee_1free(JNIEnv *env, jclas
        LDKPayee this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        Payee_free(this_obj_conv);
 }
 
@@ -31327,6 +36908,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Payee_1get_1pubkey(JNIE
        LDKPayee this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, Payee_get_pubkey(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -31336,6 +36918,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Payee_1set_1pubkey(JNIEnv *env
        LDKPayee this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -31346,11 +36929,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Payee_1get_1features(JNIEnv
        LDKPayee this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKInvoiceFeatures ret_var = Payee_get_features(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -31363,9 +36948,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Payee_1set_1features(JNIEnv *e
        LDKPayee this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKInvoiceFeatures val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = InvoiceFeatures_clone(&val_conv);
        Payee_set_features(&this_ptr_conv, val_conv);
 }
@@ -31374,6 +36961,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_Payee_1get_1route_1hin
        LDKPayee this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_RouteHintZ ret_var = Payee_get_route_hints(&this_ptr_conv);
        int64_tArray ret_arr = NULL;
        ret_arr = (*env)->NewLongArray(env, ret_var.datalen);
@@ -31383,6 +36971,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_Payee_1get_1route_1hin
                uint64_t ret_conv_11_ref = 0;
                CHECK((((uint64_t)ret_conv_11_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_conv_11_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_11_var);
                ret_conv_11_ref = (uint64_t)ret_conv_11_var.inner;
                if (ret_conv_11_var.is_owned) {
                        ret_conv_11_ref |= 1;
@@ -31398,6 +36987,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Payee_1set_1route_1hints(JNIEn
        LDKPayee this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_RouteHintZ val_constr;
        val_constr.datalen = (*env)->GetArrayLength(env, val);
        if (val_constr.datalen > 0)
@@ -31410,6 +37000,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Payee_1set_1route_1hints(JNIEn
                LDKRouteHint val_conv_11_conv;
                val_conv_11_conv.inner = (void*)(val_conv_11 & (~1));
                val_conv_11_conv.is_owned = (val_conv_11 & 1) || (val_conv_11 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_11_conv);
                val_conv_11_conv = RouteHint_clone(&val_conv_11_conv);
                val_constr.data[l] = val_conv_11_conv;
        }
@@ -31421,6 +37012,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Payee_1get_1expiry_1time(JN
        LDKPayee this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
        *ret_copy = Payee_get_expiry_time(&this_ptr_conv);
        uint64_t ret_ref = (uint64_t)ret_copy;
@@ -31431,6 +37023,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Payee_1set_1expiry_1time(JNIEn
        LDKPayee this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
@@ -31445,6 +37038,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Payee_1new(JNIEnv *env, jcl
        LDKInvoiceFeatures features_arg_conv;
        features_arg_conv.inner = (void*)(features_arg & (~1));
        features_arg_conv.is_owned = (features_arg & 1) || (features_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_arg_conv);
        features_arg_conv = InvoiceFeatures_clone(&features_arg_conv);
        LDKCVec_RouteHintZ route_hints_arg_constr;
        route_hints_arg_constr.datalen = (*env)->GetArrayLength(env, route_hints_arg);
@@ -31458,6 +37052,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Payee_1new(JNIEnv *env, jcl
                LDKRouteHint route_hints_arg_conv_11_conv;
                route_hints_arg_conv_11_conv.inner = (void*)(route_hints_arg_conv_11 & (~1));
                route_hints_arg_conv_11_conv.is_owned = (route_hints_arg_conv_11 & 1) || (route_hints_arg_conv_11 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(route_hints_arg_conv_11_conv);
                route_hints_arg_conv_11_conv = RouteHint_clone(&route_hints_arg_conv_11_conv);
                route_hints_arg_constr.data[l] = route_hints_arg_conv_11_conv;
        }
@@ -31470,6 +37065,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Payee_1new(JNIEnv *env, jcl
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -31477,14 +37073,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Payee_1new(JNIEnv *env, jcl
        return ret_ref;
 }
 
+static inline uint64_t Payee_clone_ptr(LDKPayee *NONNULL_PTR arg) {
+       LDKPayee ret_var = Payee_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Payee_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKPayee arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = Payee_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Payee_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKPayee orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKPayee ret_var = Payee_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -31496,6 +37115,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Payee_1hash(JNIEnv *env, jc
        LDKPayee o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = Payee_hash(&o_conv);
        return ret_val;
 }
@@ -31504,9 +37124,11 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Payee_1eq(JNIEnv *env, jcl
        LDKPayee a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKPayee b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = Payee_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -31515,6 +37137,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Payee_1write(JNIEnv *en
        LDKPayee obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = Payee_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -31540,6 +37163,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Payee_1from_1node_1id(JNIEn
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -31555,6 +37179,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Payee_1for_1keysend(JNIEnv
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -31566,6 +37191,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHint_1free(JNIEnv *env, j
        LDKRouteHint this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        RouteHint_free(this_obj_conv);
 }
 
@@ -31573,6 +37199,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_RouteHint_1get_1a(JNIE
        LDKRouteHint this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_RouteHintHopZ ret_var = RouteHint_get_a(&this_ptr_conv);
        int64_tArray ret_arr = NULL;
        ret_arr = (*env)->NewLongArray(env, ret_var.datalen);
@@ -31582,6 +37209,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_RouteHint_1get_1a(JNIE
                uint64_t ret_conv_14_ref = 0;
                CHECK((((uint64_t)ret_conv_14_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_conv_14_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_14_var);
                ret_conv_14_ref = (uint64_t)ret_conv_14_var.inner;
                if (ret_conv_14_var.is_owned) {
                        ret_conv_14_ref |= 1;
@@ -31597,6 +37225,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHint_1set_1a(JNIEnv *env,
        LDKRouteHint this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_RouteHintHopZ val_constr;
        val_constr.datalen = (*env)->GetArrayLength(env, val);
        if (val_constr.datalen > 0)
@@ -31609,6 +37238,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHint_1set_1a(JNIEnv *env,
                LDKRouteHintHop val_conv_14_conv;
                val_conv_14_conv.inner = (void*)(val_conv_14 & (~1));
                val_conv_14_conv.is_owned = (val_conv_14 & 1) || (val_conv_14 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_14_conv);
                val_conv_14_conv = RouteHintHop_clone(&val_conv_14_conv);
                val_constr.data[o] = val_conv_14_conv;
        }
@@ -31629,6 +37259,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHint_1new(JNIEnv *env,
                LDKRouteHintHop a_arg_conv_14_conv;
                a_arg_conv_14_conv.inner = (void*)(a_arg_conv_14 & (~1));
                a_arg_conv_14_conv.is_owned = (a_arg_conv_14 & 1) || (a_arg_conv_14 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(a_arg_conv_14_conv);
                a_arg_conv_14_conv = RouteHintHop_clone(&a_arg_conv_14_conv);
                a_arg_constr.data[o] = a_arg_conv_14_conv;
        }
@@ -31637,6 +37268,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHint_1new(JNIEnv *env,
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -31644,14 +37276,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHint_1new(JNIEnv *env,
        return ret_ref;
 }
 
+static inline uint64_t RouteHint_clone_ptr(LDKRouteHint *NONNULL_PTR arg) {
+       LDKRouteHint ret_var = RouteHint_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHint_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKRouteHint arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = RouteHint_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHint_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKRouteHint orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKRouteHint ret_var = RouteHint_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -31663,6 +37318,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHint_1hash(JNIEnv *env
        LDKRouteHint o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = RouteHint_hash(&o_conv);
        return ret_val;
 }
@@ -31671,9 +37327,11 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_RouteHint_1eq(JNIEnv *env,
        LDKRouteHint a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKRouteHint b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = RouteHint_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -31682,6 +37340,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_RouteHint_1write(JNIEnv
        LDKRouteHint obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = RouteHint_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -31703,6 +37362,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1free(JNIEnv *env
        LDKRouteHintHop this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        RouteHintHop_free(this_obj_conv);
 }
 
@@ -31710,6 +37370,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1get_1src_
        LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, RouteHintHop_get_src_node_id(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -31719,6 +37380,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1set_1src_1node_1
        LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -31729,6 +37391,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1get_1short_1c
        LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = RouteHintHop_get_short_channel_id(&this_ptr_conv);
        return ret_val;
 }
@@ -31737,6 +37400,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1set_1short_1chan
        LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        RouteHintHop_set_short_channel_id(&this_ptr_conv, val);
 }
 
@@ -31744,10 +37408,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1get_1fees(JNI
        LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKRoutingFees ret_var = RouteHintHop_get_fees(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -31759,9 +37425,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1set_1fees(JNIEnv
        LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKRoutingFees val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = RoutingFees_clone(&val_conv);
        RouteHintHop_set_fees(&this_ptr_conv, val_conv);
 }
@@ -31770,6 +37438,7 @@ JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1get_1cltv_1ex
        LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = RouteHintHop_get_cltv_expiry_delta(&this_ptr_conv);
        return ret_val;
 }
@@ -31778,6 +37447,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1set_1cltv_1expir
        LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        RouteHintHop_set_cltv_expiry_delta(&this_ptr_conv, val);
 }
 
@@ -31785,6 +37455,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1get_1htlc_1mi
        LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
        *ret_copy = RouteHintHop_get_htlc_minimum_msat(&this_ptr_conv);
        uint64_t ret_ref = (uint64_t)ret_copy;
@@ -31795,6 +37466,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1set_1htlc_1minim
        LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
@@ -31806,6 +37478,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1get_1htlc_1ma
        LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
        *ret_copy = RouteHintHop_get_htlc_maximum_msat(&this_ptr_conv);
        uint64_t ret_ref = (uint64_t)ret_copy;
@@ -31816,6 +37489,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1set_1htlc_1maxim
        LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
@@ -31830,6 +37504,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1new(JNIEnv *e
        LDKRoutingFees fees_arg_conv;
        fees_arg_conv.inner = (void*)(fees_arg & (~1));
        fees_arg_conv.is_owned = (fees_arg & 1) || (fees_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(fees_arg_conv);
        fees_arg_conv = RoutingFees_clone(&fees_arg_conv);
        void* htlc_minimum_msat_arg_ptr = (void*)(((uint64_t)htlc_minimum_msat_arg) & ~1);
        CHECK_ACCESS(htlc_minimum_msat_arg_ptr);
@@ -31843,6 +37518,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1new(JNIEnv *e
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -31850,14 +37526,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1new(JNIEnv *e
        return ret_ref;
 }
 
+static inline uint64_t RouteHintHop_clone_ptr(LDKRouteHintHop *NONNULL_PTR arg) {
+       LDKRouteHintHop ret_var = RouteHintHop_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKRouteHintHop arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = RouteHintHop_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKRouteHintHop orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKRouteHintHop ret_var = RouteHintHop_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -31869,6 +37568,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1hash(JNIEnv *
        LDKRouteHintHop o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = RouteHintHop_hash(&o_conv);
        return ret_val;
 }
@@ -31877,9 +37577,11 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1eq(JNIEnv *e
        LDKRouteHintHop a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKRouteHintHop b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = RouteHintHop_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -31888,6 +37590,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1write(JNI
        LDKRouteHintHop obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = RouteHintHop_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -31912,9 +37615,11 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_find_1route(JNIEnv *env, jc
        LDKRouteParameters params_conv;
        params_conv.inner = (void*)(params & (~1));
        params_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(params_conv);
        LDKNetworkGraph network_conv;
        network_conv.inner = (void*)(network & (~1));
        network_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_conv);
        LDKCVec_ChannelDetailsZ first_hops_constr;
        LDKCVec_ChannelDetailsZ *first_hops_ptr = NULL;
        if (first_hops != NULL) {
@@ -31929,6 +37634,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_find_1route(JNIEnv *env, jc
                        LDKChannelDetails first_hops_conv_16_conv;
                        first_hops_conv_16_conv.inner = (void*)(first_hops_conv_16 & (~1));
                        first_hops_conv_16_conv.is_owned = (first_hops_conv_16 & 1) || (first_hops_conv_16 == 0);
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(first_hops_conv_16_conv);
                        first_hops_constr.data[q] = first_hops_conv_16_conv;
                }
                (*env)->ReleaseLongArrayElements(env, first_hops, first_hops_vals, 0);
@@ -31954,6 +37660,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Scorer_1free(JNIEnv *env, jcla
        LDKScorer this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        Scorer_free(this_obj_conv);
 }
 
@@ -31961,6 +37668,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ScoringParameters_1free(JNIEnv
        LDKScoringParameters this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ScoringParameters_free(this_obj_conv);
 }
 
@@ -31968,6 +37676,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ScoringParameters_1get_1bas
        LDKScoringParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ScoringParameters_get_base_penalty_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -31976,6 +37685,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ScoringParameters_1set_1base_1
        LDKScoringParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ScoringParameters_set_base_penalty_msat(&this_ptr_conv, val);
 }
 
@@ -31983,6 +37693,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ScoringParameters_1get_1fai
        LDKScoringParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ScoringParameters_get_failure_penalty_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -31991,6 +37702,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ScoringParameters_1set_1failur
        LDKScoringParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ScoringParameters_set_failure_penalty_msat(&this_ptr_conv, val);
 }
 
@@ -31998,6 +37710,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ScoringParameters_1get_1fai
        LDKScoringParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ScoringParameters_get_failure_penalty_half_life(&this_ptr_conv);
        return ret_val;
 }
@@ -32006,6 +37719,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ScoringParameters_1set_1failur
        LDKScoringParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ScoringParameters_set_failure_penalty_half_life(&this_ptr_conv, val);
 }
 
@@ -32014,6 +37728,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ScoringParameters_1new(JNIE
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -32025,6 +37740,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ScoringParameters_1writ
        LDKScoringParameters obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ScoringParameters_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -32046,11 +37762,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Scorer_1new(JNIEnv *env, jc
        LDKScoringParameters params_conv;
        params_conv.inner = (void*)(params & (~1));
        params_conv.is_owned = (params & 1) || (params == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(params_conv);
        // Warning: we need a move here but no clone is available for LDKScoringParameters
        LDKScorer ret_var = Scorer_new(params_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -32063,6 +37781,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Scorer_1default(JNIEnv *env
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -32075,6 +37794,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ScoringParameters_1default(
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -32086,6 +37806,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Scorer_1as_1Score(JNIEnv *e
        LDKScorer this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKScore* ret_ret = MALLOC(sizeof(LDKScore), "LDKScore");
        *ret_ret = Scorer_as_Score(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -32095,6 +37816,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Scorer_1write(JNIEnv *e
        LDKScorer obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = Scorer_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -32116,6 +37838,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_FilesystemPersister_1free(JNIE
        LDKFilesystemPersister this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        FilesystemPersister_free(this_obj_conv);
 }
 
@@ -32125,6 +37848,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FilesystemPersister_1new(JN
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -32136,6 +37860,7 @@ JNIEXPORT jstring JNICALL Java_org_ldk_impl_bindings_FilesystemPersister_1get_1d
        LDKFilesystemPersister this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKStr ret_str = FilesystemPersister_get_data_dir(&this_arg_conv);
        jstring ret_conv = str_ref_to_java(env, ret_str.chars, ret_str.len);
        Str_free(ret_str);
@@ -32147,6 +37872,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FilesystemPersister_1persis
        LDKChannelManager manager_conv;
        manager_conv.inner = (void*)(manager & (~1));
        manager_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(manager_conv);
        LDKCResult_NoneErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneErrorZ), "LDKCResult_NoneErrorZ");
        *ret_conv = FilesystemPersister_persist_manager(data_dir_conv, &manager_conv);
        return (uint64_t)ret_conv;
@@ -32156,6 +37882,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FilesystemPersister_1read_1
        LDKFilesystemPersister this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        void* keys_manager_ptr = (void*)(((uint64_t)keys_manager) & ~1);
        CHECK_ACCESS(keys_manager_ptr);
        LDKKeysInterface keys_manager_conv = *(LDKKeysInterface*)(keys_manager_ptr);
@@ -32172,6 +37899,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FilesystemPersister_1as_1Pe
        LDKFilesystemPersister this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKPersist* ret_ret = MALLOC(sizeof(LDKPersist), "LDKPersist");
        *ret_ret = FilesystemPersister_as_Persist(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -32181,6 +37909,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BackgroundProcessor_1free(JNIE
        LDKBackgroundProcessor this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        BackgroundProcessor_free(this_obj_conv);
 }
 
@@ -32211,15 +37940,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BackgroundProcessor_1start(
        LDKChainMonitor chain_monitor_conv;
        chain_monitor_conv.inner = (void*)(chain_monitor & (~1));
        chain_monitor_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(chain_monitor_conv);
        LDKChannelManager channel_manager_conv;
        channel_manager_conv.inner = (void*)(channel_manager & (~1));
        channel_manager_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_manager_conv);
        LDKNetGraphMsgHandler net_graph_msg_handler_conv;
        net_graph_msg_handler_conv.inner = (void*)(net_graph_msg_handler & (~1));
        net_graph_msg_handler_conv.is_owned = (net_graph_msg_handler & 1) || (net_graph_msg_handler == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(net_graph_msg_handler_conv);
        LDKPeerManager peer_manager_conv;
        peer_manager_conv.inner = (void*)(peer_manager & (~1));
        peer_manager_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(peer_manager_conv);
        void* logger_ptr = (void*)(((uint64_t)logger) & ~1);
        CHECK_ACCESS(logger_ptr);
        LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
@@ -32231,6 +37964,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BackgroundProcessor_1start(
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -32242,6 +37976,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BackgroundProcessor_1join(J
        LDKBackgroundProcessor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = (this_arg & 1) || (this_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        // Warning: we need a move here but no clone is available for LDKBackgroundProcessor
        LDKCResult_NoneErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneErrorZ), "LDKCResult_NoneErrorZ");
        *ret_conv = BackgroundProcessor_join(this_arg_conv);
@@ -32252,6 +37987,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BackgroundProcessor_1stop(J
        LDKBackgroundProcessor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = (this_arg & 1) || (this_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        // Warning: we need a move here but no clone is available for LDKBackgroundProcessor
        LDKCResult_NoneErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneErrorZ), "LDKCResult_NoneErrorZ");
        *ret_conv = BackgroundProcessor_stop(this_arg_conv);
@@ -32266,6 +38002,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Invoice_1free(JNIEnv *env, jcl
        LDKInvoice this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        Invoice_free(this_obj_conv);
 }
 
@@ -32273,21 +38010,46 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Invoice_1eq(JNIEnv *env, j
        LDKInvoice a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKInvoice b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = Invoice_eq(&a_conv, &b_conv);
        return ret_val;
 }
 
+static inline uint64_t Invoice_clone_ptr(LDKInvoice *NONNULL_PTR arg) {
+       LDKInvoice ret_var = Invoice_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Invoice_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKInvoice arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = Invoice_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Invoice_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKInvoice orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKInvoice ret_var = Invoice_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -32299,6 +38061,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_SignedRawInvoice_1free(JNIEnv
        LDKSignedRawInvoice this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        SignedRawInvoice_free(this_obj_conv);
 }
 
@@ -32306,21 +38069,46 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_SignedRawInvoice_1eq(JNIEn
        LDKSignedRawInvoice a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKSignedRawInvoice b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = SignedRawInvoice_eq(&a_conv, &b_conv);
        return ret_val;
 }
 
+static inline uint64_t SignedRawInvoice_clone_ptr(LDKSignedRawInvoice *NONNULL_PTR arg) {
+       LDKSignedRawInvoice ret_var = SignedRawInvoice_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SignedRawInvoice_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKSignedRawInvoice arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = SignedRawInvoice_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SignedRawInvoice_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKSignedRawInvoice orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKSignedRawInvoice ret_var = SignedRawInvoice_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -32332,6 +38120,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RawInvoice_1free(JNIEnv *env,
        LDKRawInvoice this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        RawInvoice_free(this_obj_conv);
 }
 
@@ -32339,10 +38128,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RawInvoice_1get_1data(JNIEn
        LDKRawInvoice this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKRawDataPart ret_var = RawInvoice_get_data(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -32354,9 +38145,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RawInvoice_1set_1data(JNIEnv *
        LDKRawInvoice this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKRawDataPart val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = RawDataPart_clone(&val_conv);
        RawInvoice_set_data(&this_ptr_conv, val_conv);
 }
@@ -32365,21 +38158,46 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_RawInvoice_1eq(JNIEnv *env
        LDKRawInvoice a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKRawInvoice b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = RawInvoice_eq(&a_conv, &b_conv);
        return ret_val;
 }
 
+static inline uint64_t RawInvoice_clone_ptr(LDKRawInvoice *NONNULL_PTR arg) {
+       LDKRawInvoice ret_var = RawInvoice_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RawInvoice_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKRawInvoice arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = RawInvoice_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RawInvoice_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKRawInvoice orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKRawInvoice ret_var = RawInvoice_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -32391,6 +38209,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RawDataPart_1free(JNIEnv *env,
        LDKRawDataPart this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        RawDataPart_free(this_obj_conv);
 }
 
@@ -32398,10 +38217,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RawDataPart_1get_1timestamp
        LDKRawDataPart this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPositiveTimestamp ret_var = RawDataPart_get_timestamp(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -32413,9 +38234,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RawDataPart_1set_1timestamp(JN
        LDKRawDataPart this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPositiveTimestamp val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = PositiveTimestamp_clone(&val_conv);
        RawDataPart_set_timestamp(&this_ptr_conv, val_conv);
 }
@@ -32424,21 +38247,46 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_RawDataPart_1eq(JNIEnv *en
        LDKRawDataPart a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKRawDataPart b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = RawDataPart_eq(&a_conv, &b_conv);
        return ret_val;
 }
 
+static inline uint64_t RawDataPart_clone_ptr(LDKRawDataPart *NONNULL_PTR arg) {
+       LDKRawDataPart ret_var = RawDataPart_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RawDataPart_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKRawDataPart arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = RawDataPart_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RawDataPart_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKRawDataPart orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKRawDataPart ret_var = RawDataPart_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -32450,6 +38298,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PositiveTimestamp_1free(JNIEnv
        LDKPositiveTimestamp this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        PositiveTimestamp_free(this_obj_conv);
 }
 
@@ -32457,21 +38306,46 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_PositiveTimestamp_1eq(JNIE
        LDKPositiveTimestamp a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKPositiveTimestamp b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = PositiveTimestamp_eq(&a_conv, &b_conv);
        return ret_val;
 }
 
+static inline uint64_t PositiveTimestamp_clone_ptr(LDKPositiveTimestamp *NONNULL_PTR arg) {
+       LDKPositiveTimestamp ret_var = PositiveTimestamp_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PositiveTimestamp_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKPositiveTimestamp arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = PositiveTimestamp_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PositiveTimestamp_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKPositiveTimestamp orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKPositiveTimestamp ret_var = PositiveTimestamp_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -32566,17 +38440,41 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Sha256_1free(JNIEnv *env, jcla
        LDKSha256 this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        Sha256_free(this_obj_conv);
 }
 
+static inline uint64_t Sha256_clone_ptr(LDKSha256 *NONNULL_PTR arg) {
+       LDKSha256 ret_var = Sha256_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Sha256_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKSha256 arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = Sha256_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Sha256_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKSha256 orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKSha256 ret_var = Sha256_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -32588,6 +38486,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Sha256_1hash(JNIEnv *env, j
        LDKSha256 o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = Sha256_hash(&o_conv);
        return ret_val;
 }
@@ -32596,9 +38495,11 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Sha256_1eq(JNIEnv *env, jc
        LDKSha256 a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKSha256 b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = Sha256_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -32607,17 +38508,41 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Description_1free(JNIEnv *env,
        LDKDescription this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        Description_free(this_obj_conv);
 }
 
+static inline uint64_t Description_clone_ptr(LDKDescription *NONNULL_PTR arg) {
+       LDKDescription ret_var = Description_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Description_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKDescription arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = Description_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Description_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKDescription orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKDescription ret_var = Description_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -32629,6 +38554,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Description_1hash(JNIEnv *e
        LDKDescription o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = Description_hash(&o_conv);
        return ret_val;
 }
@@ -32637,9 +38563,11 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Description_1eq(JNIEnv *en
        LDKDescription a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKDescription b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = Description_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -32648,6 +38576,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PayeePubKey_1free(JNIEnv *env,
        LDKPayeePubKey this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        PayeePubKey_free(this_obj_conv);
 }
 
@@ -32655,6 +38584,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_PayeePubKey_1get_1a(JNI
        LDKPayeePubKey this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, PayeePubKey_get_a(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -32664,6 +38594,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PayeePubKey_1set_1a(JNIEnv *en
        LDKPayeePubKey this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -32678,6 +38609,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PayeePubKey_1new(JNIEnv *en
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -32685,14 +38617,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PayeePubKey_1new(JNIEnv *en
        return ret_ref;
 }
 
+static inline uint64_t PayeePubKey_clone_ptr(LDKPayeePubKey *NONNULL_PTR arg) {
+       LDKPayeePubKey ret_var = PayeePubKey_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PayeePubKey_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKPayeePubKey arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = PayeePubKey_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PayeePubKey_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKPayeePubKey orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKPayeePubKey ret_var = PayeePubKey_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -32704,6 +38659,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PayeePubKey_1hash(JNIEnv *e
        LDKPayeePubKey o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = PayeePubKey_hash(&o_conv);
        return ret_val;
 }
@@ -32712,9 +38668,11 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_PayeePubKey_1eq(JNIEnv *en
        LDKPayeePubKey a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKPayeePubKey b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = PayeePubKey_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -32723,17 +38681,41 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ExpiryTime_1free(JNIEnv *env,
        LDKExpiryTime this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ExpiryTime_free(this_obj_conv);
 }
 
+static inline uint64_t ExpiryTime_clone_ptr(LDKExpiryTime *NONNULL_PTR arg) {
+       LDKExpiryTime ret_var = ExpiryTime_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ExpiryTime_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKExpiryTime arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ExpiryTime_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ExpiryTime_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKExpiryTime orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKExpiryTime ret_var = ExpiryTime_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -32745,6 +38727,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ExpiryTime_1hash(JNIEnv *en
        LDKExpiryTime o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = ExpiryTime_hash(&o_conv);
        return ret_val;
 }
@@ -32753,9 +38736,11 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ExpiryTime_1eq(JNIEnv *env
        LDKExpiryTime a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKExpiryTime b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = ExpiryTime_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -32764,6 +38749,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MinFinalCltvExpiry_1free(JNIEn
        LDKMinFinalCltvExpiry this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        MinFinalCltvExpiry_free(this_obj_conv);
 }
 
@@ -32771,6 +38757,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MinFinalCltvExpiry_1get_1a(
        LDKMinFinalCltvExpiry this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = MinFinalCltvExpiry_get_a(&this_ptr_conv);
        return ret_val;
 }
@@ -32779,6 +38766,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MinFinalCltvExpiry_1set_1a(JNI
        LDKMinFinalCltvExpiry this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        MinFinalCltvExpiry_set_a(&this_ptr_conv, val);
 }
 
@@ -32787,6 +38775,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MinFinalCltvExpiry_1new(JNI
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -32794,14 +38783,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MinFinalCltvExpiry_1new(JNI
        return ret_ref;
 }
 
+static inline uint64_t MinFinalCltvExpiry_clone_ptr(LDKMinFinalCltvExpiry *NONNULL_PTR arg) {
+       LDKMinFinalCltvExpiry ret_var = MinFinalCltvExpiry_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MinFinalCltvExpiry_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKMinFinalCltvExpiry arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = MinFinalCltvExpiry_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MinFinalCltvExpiry_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKMinFinalCltvExpiry orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKMinFinalCltvExpiry ret_var = MinFinalCltvExpiry_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -32813,6 +38825,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MinFinalCltvExpiry_1hash(JN
        LDKMinFinalCltvExpiry o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = MinFinalCltvExpiry_hash(&o_conv);
        return ret_val;
 }
@@ -32821,9 +38834,11 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_MinFinalCltvExpiry_1eq(JNI
        LDKMinFinalCltvExpiry a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKMinFinalCltvExpiry b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = MinFinalCltvExpiry_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -32837,6 +38852,18 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Fallback_1free(JNIEnv *env, jc
        Fallback_free(this_ptr_conv);
 }
 
+static inline uint64_t Fallback_clone_ptr(LDKFallback *NONNULL_PTR arg) {
+       LDKFallback *ret_copy = MALLOC(sizeof(LDKFallback), "LDKFallback");
+       *ret_copy = Fallback_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Fallback_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKFallback* arg_conv = (LDKFallback*)arg;
+       int64_t ret_val = Fallback_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Fallback_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKFallback* orig_conv = (LDKFallback*)orig;
        LDKFallback *ret_copy = MALLOC(sizeof(LDKFallback), "LDKFallback");
@@ -32894,17 +38921,41 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InvoiceSignature_1free(JNIEnv
        LDKInvoiceSignature this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        InvoiceSignature_free(this_obj_conv);
 }
 
+static inline uint64_t InvoiceSignature_clone_ptr(LDKInvoiceSignature *NONNULL_PTR arg) {
+       LDKInvoiceSignature ret_var = InvoiceSignature_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceSignature_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKInvoiceSignature arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = InvoiceSignature_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceSignature_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKInvoiceSignature orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKInvoiceSignature ret_var = InvoiceSignature_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -32916,9 +38967,11 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_InvoiceSignature_1eq(JNIEn
        LDKInvoiceSignature a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKInvoiceSignature b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = InvoiceSignature_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -32927,17 +38980,41 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PrivateRoute_1free(JNIEnv *env
        LDKPrivateRoute this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        PrivateRoute_free(this_obj_conv);
 }
 
+static inline uint64_t PrivateRoute_clone_ptr(LDKPrivateRoute *NONNULL_PTR arg) {
+       LDKPrivateRoute ret_var = PrivateRoute_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PrivateRoute_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKPrivateRoute arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = PrivateRoute_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PrivateRoute_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKPrivateRoute orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKPrivateRoute ret_var = PrivateRoute_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -32949,6 +39026,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PrivateRoute_1hash(JNIEnv *
        LDKPrivateRoute o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = PrivateRoute_hash(&o_conv);
        return ret_val;
 }
@@ -32957,9 +39035,11 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_PrivateRoute_1eq(JNIEnv *e
        LDKPrivateRoute a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKPrivateRoute b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = PrivateRoute_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -32968,6 +39048,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SignedRawInvoice_1into_1par
        LDKSignedRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = (this_arg & 1) || (this_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv = SignedRawInvoice_clone(&this_arg_conv);
        LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ* ret_conv = MALLOC(sizeof(LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ), "LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ");
        *ret_conv = SignedRawInvoice_into_parts(this_arg_conv);
@@ -32978,10 +39059,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SignedRawInvoice_1raw_1invo
        LDKSignedRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKRawInvoice ret_var = SignedRawInvoice_raw_invoice(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -32993,6 +39076,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_SignedRawInvoice_1hash(
        LDKSignedRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *SignedRawInvoice_hash(&this_arg_conv));
        return ret_arr;
@@ -33002,10 +39086,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SignedRawInvoice_1signature
        LDKSignedRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKInvoiceSignature ret_var = SignedRawInvoice_signature(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -33017,6 +39103,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SignedRawInvoice_1recover_1
        LDKSignedRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCResult_PayeePubKeyErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PayeePubKeyErrorZ), "LDKCResult_PayeePubKeyErrorZ");
        *ret_conv = SignedRawInvoice_recover_payee_pub_key(&this_arg_conv);
        return (uint64_t)ret_conv;
@@ -33026,6 +39113,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_SignedRawInvoice_1check_1s
        LDKSignedRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        jboolean ret_val = SignedRawInvoice_check_signature(&this_arg_conv);
        return ret_val;
 }
@@ -33034,6 +39122,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_RawInvoice_1hash(JNIEnv
        LDKRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, RawInvoice_hash(&this_arg_conv).data);
        return ret_arr;
@@ -33043,11 +39132,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RawInvoice_1payment_1hash(J
        LDKRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKSha256 ret_var = RawInvoice_payment_hash(&this_arg_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -33060,11 +39151,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RawInvoice_1description(JNI
        LDKRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKDescription ret_var = RawInvoice_description(&this_arg_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -33077,11 +39170,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RawInvoice_1payee_1pub_1key
        LDKRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKPayeePubKey ret_var = RawInvoice_payee_pub_key(&this_arg_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -33094,11 +39189,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RawInvoice_1description_1ha
        LDKRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKSha256 ret_var = RawInvoice_description_hash(&this_arg_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -33111,11 +39208,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RawInvoice_1expiry_1time(JN
        LDKRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKExpiryTime ret_var = RawInvoice_expiry_time(&this_arg_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -33128,11 +39227,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RawInvoice_1min_1final_1clt
        LDKRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKMinFinalCltvExpiry ret_var = RawInvoice_min_final_cltv_expiry(&this_arg_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -33145,6 +39246,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_RawInvoice_1payment_1se
        LDKRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, RawInvoice_payment_secret(&this_arg_conv).data);
        return ret_arr;
@@ -33154,11 +39256,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RawInvoice_1features(JNIEnv
        LDKRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKInvoiceFeatures ret_var = RawInvoice_features(&this_arg_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -33171,6 +39275,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_RawInvoice_1private_1r
        LDKRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCVec_PrivateRouteZ ret_var = RawInvoice_private_routes(&this_arg_conv);
        int64_tArray ret_arr = NULL;
        ret_arr = (*env)->NewLongArray(env, ret_var.datalen);
@@ -33180,6 +39285,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_RawInvoice_1private_1r
                uint64_t ret_conv_14_ref = 0;
                CHECK((((uint64_t)ret_conv_14_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_conv_14_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_14_var);
                ret_conv_14_ref = (uint64_t)ret_conv_14_var.inner;
                if (ret_conv_14_var.is_owned) {
                        ret_conv_14_ref |= 1;
@@ -33195,6 +39301,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RawInvoice_1amount_1pico_1b
        LDKRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
        *ret_copy = RawInvoice_amount_pico_btc(&this_arg_conv);
        uint64_t ret_ref = (uint64_t)ret_copy;
@@ -33205,6 +39312,7 @@ JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_RawInvoice_1currency(JNIEnv
        LDKRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        jclass ret_conv = LDKCurrency_to_java(env, RawInvoice_currency(&this_arg_conv));
        return ret_conv;
 }
@@ -33225,6 +39333,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PositiveTimestamp_1as_1unix
        LDKPositiveTimestamp this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = PositiveTimestamp_as_unix_timestamp(&this_arg_conv);
        return ret_val;
 }
@@ -33233,6 +39342,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PositiveTimestamp_1as_1time
        LDKPositiveTimestamp this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = PositiveTimestamp_as_time(&this_arg_conv);
        return ret_val;
 }
@@ -33241,11 +39351,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Invoice_1into_1signed_1raw(
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = (this_arg & 1) || (this_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv = Invoice_clone(&this_arg_conv);
        LDKSignedRawInvoice ret_var = Invoice_into_signed_raw(this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -33257,6 +39369,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Invoice_1check_1signature(J
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCResult_NoneSemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneSemanticErrorZ), "LDKCResult_NoneSemanticErrorZ");
        *ret_conv = Invoice_check_signature(&this_arg_conv);
        return (uint64_t)ret_conv;
@@ -33266,6 +39379,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Invoice_1from_1signed(JNIEn
        LDKSignedRawInvoice signed_invoice_conv;
        signed_invoice_conv.inner = (void*)(signed_invoice & (~1));
        signed_invoice_conv.is_owned = (signed_invoice & 1) || (signed_invoice == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(signed_invoice_conv);
        signed_invoice_conv = SignedRawInvoice_clone(&signed_invoice_conv);
        LDKCResult_InvoiceSemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceSemanticErrorZ), "LDKCResult_InvoiceSemanticErrorZ");
        *ret_conv = Invoice_from_signed(signed_invoice_conv);
@@ -33276,6 +39390,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Invoice_1timestamp(JNIEnv *
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = Invoice_timestamp(&this_arg_conv);
        return ret_val;
 }
@@ -33284,6 +39399,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Invoice_1payment_1hash(
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *Invoice_payment_hash(&this_arg_conv));
        return ret_arr;
@@ -33293,6 +39409,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Invoice_1payee_1pub_1ke
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, Invoice_payee_pub_key(&this_arg_conv).compressed_form);
        return ret_arr;
@@ -33302,6 +39419,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Invoice_1payment_1secre
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *Invoice_payment_secret(&this_arg_conv));
        return ret_arr;
@@ -33311,11 +39429,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Invoice_1features(JNIEnv *e
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKInvoiceFeatures ret_var = Invoice_features(&this_arg_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -33328,6 +39448,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Invoice_1recover_1payee
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, Invoice_recover_payee_pub_key(&this_arg_conv).compressed_form);
        return ret_arr;
@@ -33337,6 +39458,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Invoice_1expiry_1time(JNIEn
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = Invoice_expiry_time(&this_arg_conv);
        return ret_val;
 }
@@ -33345,6 +39467,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Invoice_1is_1expired(JNIEn
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        jboolean ret_val = Invoice_is_expired(&this_arg_conv);
        return ret_val;
 }
@@ -33353,6 +39476,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Invoice_1min_1final_1cltv_1
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = Invoice_min_final_cltv_expiry(&this_arg_conv);
        return ret_val;
 }
@@ -33361,6 +39485,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_Invoice_1private_1rout
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCVec_PrivateRouteZ ret_var = Invoice_private_routes(&this_arg_conv);
        int64_tArray ret_arr = NULL;
        ret_arr = (*env)->NewLongArray(env, ret_var.datalen);
@@ -33370,6 +39495,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_Invoice_1private_1rout
                uint64_t ret_conv_14_ref = 0;
                CHECK((((uint64_t)ret_conv_14_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_conv_14_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_14_var);
                ret_conv_14_ref = (uint64_t)ret_conv_14_var.inner;
                if (ret_conv_14_var.is_owned) {
                        ret_conv_14_ref |= 1;
@@ -33385,6 +39511,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_Invoice_1route_1hints(
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCVec_RouteHintZ ret_var = Invoice_route_hints(&this_arg_conv);
        int64_tArray ret_arr = NULL;
        ret_arr = (*env)->NewLongArray(env, ret_var.datalen);
@@ -33394,6 +39521,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_Invoice_1route_1hints(
                uint64_t ret_conv_11_ref = 0;
                CHECK((((uint64_t)ret_conv_11_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_conv_11_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_11_var);
                ret_conv_11_ref = (uint64_t)ret_conv_11_var.inner;
                if (ret_conv_11_var.is_owned) {
                        ret_conv_11_ref |= 1;
@@ -33409,6 +39537,7 @@ JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Invoice_1currency(JNIEnv *en
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        jclass ret_conv = LDKCurrency_to_java(env, Invoice_currency(&this_arg_conv));
        return ret_conv;
 }
@@ -33417,6 +39546,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Invoice_1amount_1milli_1sat
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
        *ret_copy = Invoice_amount_milli_satoshis(&this_arg_conv);
        uint64_t ret_ref = (uint64_t)ret_copy;
@@ -33434,6 +39564,7 @@ JNIEXPORT jstring JNICALL Java_org_ldk_impl_bindings_Description_1into_1inner(JN
        LDKDescription this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = (this_arg & 1) || (this_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv = Description_clone(&this_arg_conv);
        LDKStr ret_str = Description_into_inner(this_arg_conv);
        jstring ret_conv = str_ref_to_java(env, ret_str.chars, ret_str.len);
@@ -33457,6 +39588,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ExpiryTime_1as_1seconds(JNI
        LDKExpiryTime this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = ExpiryTime_as_seconds(&this_arg_conv);
        return ret_val;
 }
@@ -33465,6 +39597,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ExpiryTime_1as_1duration(JN
        LDKExpiryTime this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = ExpiryTime_as_duration(&this_arg_conv);
        return ret_val;
 }
@@ -33473,6 +39606,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PrivateRoute_1new(JNIEnv *e
        LDKRouteHint hops_conv;
        hops_conv.inner = (void*)(hops & (~1));
        hops_conv.is_owned = (hops & 1) || (hops == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(hops_conv);
        hops_conv = RouteHint_clone(&hops_conv);
        LDKCResult_PrivateRouteCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PrivateRouteCreationErrorZ), "LDKCResult_PrivateRouteCreationErrorZ");
        *ret_conv = PrivateRoute_new(hops_conv);
@@ -33483,11 +39617,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PrivateRoute_1into_1inner(J
        LDKPrivateRoute this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = (this_arg & 1) || (this_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv = PrivateRoute_clone(&this_arg_conv);
        LDKRouteHint ret_var = PrivateRoute_into_inner(this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -33616,6 +39752,18 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_SignOrCreationError_1free(JNIE
        SignOrCreationError_free(this_ptr_conv);
 }
 
+static inline uint64_t SignOrCreationError_clone_ptr(LDKSignOrCreationError *NONNULL_PTR arg) {
+       LDKSignOrCreationError *ret_copy = MALLOC(sizeof(LDKSignOrCreationError), "LDKSignOrCreationError");
+       *ret_copy = SignOrCreationError_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SignOrCreationError_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKSignOrCreationError* arg_conv = (LDKSignOrCreationError*)arg;
+       int64_t ret_val = SignOrCreationError_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SignOrCreationError_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKSignOrCreationError* orig_conv = (LDKSignOrCreationError*)orig;
        LDKSignOrCreationError *ret_copy = MALLOC(sizeof(LDKSignOrCreationError), "LDKSignOrCreationError");
@@ -33658,6 +39806,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InvoicePayer_1free(JNIEnv *env
        LDKInvoicePayer this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        InvoicePayer_free(this_obj_conv);
 }
 
@@ -33683,6 +39832,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RetryAttempts_1free(JNIEnv *en
        LDKRetryAttempts this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        RetryAttempts_free(this_obj_conv);
 }
 
@@ -33690,6 +39840,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RetryAttempts_1get_1a(JNIEn
        LDKRetryAttempts this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = RetryAttempts_get_a(&this_ptr_conv);
        return ret_val;
 }
@@ -33698,6 +39849,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RetryAttempts_1set_1a(JNIEnv *
        LDKRetryAttempts this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        RetryAttempts_set_a(&this_ptr_conv, val);
 }
 
@@ -33706,6 +39858,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RetryAttempts_1new(JNIEnv *
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -33713,14 +39866,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RetryAttempts_1new(JNIEnv *
        return ret_ref;
 }
 
+static inline uint64_t RetryAttempts_clone_ptr(LDKRetryAttempts *NONNULL_PTR arg) {
+       LDKRetryAttempts ret_var = RetryAttempts_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RetryAttempts_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKRetryAttempts arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = RetryAttempts_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RetryAttempts_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKRetryAttempts orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKRetryAttempts ret_var = RetryAttempts_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -33732,9 +39908,11 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_RetryAttempts_1eq(JNIEnv *
        LDKRetryAttempts a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKRetryAttempts b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = RetryAttempts_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -33743,6 +39921,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RetryAttempts_1hash(JNIEnv
        LDKRetryAttempts o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = RetryAttempts_hash(&o_conv);
        return ret_val;
 }
@@ -33756,6 +39935,18 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentError_1free(JNIEnv *env
        PaymentError_free(this_ptr_conv);
 }
 
+static inline uint64_t PaymentError_clone_ptr(LDKPaymentError *NONNULL_PTR arg) {
+       LDKPaymentError *ret_copy = MALLOC(sizeof(LDKPaymentError), "LDKPaymentError");
+       *ret_copy = PaymentError_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentError_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKPaymentError* arg_conv = (LDKPaymentError*)arg;
+       int64_t ret_val = PaymentError_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentError_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKPaymentError* orig_conv = (LDKPaymentError*)orig;
        LDKPaymentError *ret_copy = MALLOC(sizeof(LDKPaymentError), "LDKPaymentError");
@@ -33776,6 +39967,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentError_1routing(JNIEn
        LDKLightningError a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = (a & 1) || (a == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv = LightningError_clone(&a_conv);
        LDKPaymentError *ret_copy = MALLOC(sizeof(LDKPaymentError), "LDKPaymentError");
        *ret_copy = PaymentError_routing(a_conv);
@@ -33812,6 +40004,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoicePayer_1new(JNIEnv *e
        LDKLockableScore scorer_conv;
        scorer_conv.inner = (void*)(scorer & (~1));
        scorer_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(scorer_conv);
        void* logger_ptr = (void*)(((uint64_t)logger) & ~1);
        CHECK_ACCESS(logger_ptr);
        LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
@@ -33829,11 +40022,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoicePayer_1new(JNIEnv *e
        LDKRetryAttempts retry_attempts_conv;
        retry_attempts_conv.inner = (void*)(retry_attempts & (~1));
        retry_attempts_conv.is_owned = (retry_attempts & 1) || (retry_attempts == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(retry_attempts_conv);
        retry_attempts_conv = RetryAttempts_clone(&retry_attempts_conv);
        LDKInvoicePayer ret_var = InvoicePayer_new(payer_conv, router_conv, &scorer_conv, logger_conv, event_handler_conv, retry_attempts_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -33845,9 +40040,11 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoicePayer_1pay_1invoice(
        LDKInvoicePayer this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKInvoice invoice_conv;
        invoice_conv.inner = (void*)(invoice & (~1));
        invoice_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(invoice_conv);
        LDKCResult_PaymentIdPaymentErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentIdPaymentErrorZ), "LDKCResult_PaymentIdPaymentErrorZ");
        *ret_conv = InvoicePayer_pay_invoice(&this_arg_conv, &invoice_conv);
        return (uint64_t)ret_conv;
@@ -33857,9 +40054,11 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoicePayer_1pay_1zero_1va
        LDKInvoicePayer this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKInvoice invoice_conv;
        invoice_conv.inner = (void*)(invoice & (~1));
        invoice_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(invoice_conv);
        LDKCResult_PaymentIdPaymentErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentIdPaymentErrorZ), "LDKCResult_PaymentIdPaymentErrorZ");
        *ret_conv = InvoicePayer_pay_zero_value_invoice(&this_arg_conv, &invoice_conv, amount_msats);
        return (uint64_t)ret_conv;
@@ -33869,6 +40068,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InvoicePayer_1remove_1cached_1
        LDKInvoicePayer this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char payment_hash_arr[32];
        CHECK((*env)->GetArrayLength(env, payment_hash) == 32);
        (*env)->GetByteArrayRegion(env, payment_hash, 0, 32, payment_hash_arr);
@@ -33880,6 +40080,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoicePayer_1as_1EventHand
        LDKInvoicePayer this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKEventHandler* ret_ret = MALLOC(sizeof(LDKEventHandler), "LDKEventHandler");
        *ret_ret = InvoicePayer_as_EventHandler(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -33889,6 +40090,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_create_1invoice_1from_1chan
        LDKChannelManager channelmanager_conv;
        channelmanager_conv.inner = (void*)(channelmanager & (~1));
        channelmanager_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channelmanager_conv);
        void* keys_manager_ptr = (void*)(((uint64_t)keys_manager) & ~1);
        CHECK_ACCESS(keys_manager_ptr);
        LDKKeysInterface keys_manager_conv = *(LDKKeysInterface*)(keys_manager_ptr);
@@ -33911,6 +40113,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DefaultRouter_1free(JNIEnv *en
        LDKDefaultRouter this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        DefaultRouter_free(this_obj_conv);
 }
 
@@ -33918,6 +40121,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DefaultRouter_1new(JNIEnv *
        LDKNetworkGraph network_graph_conv;
        network_graph_conv.inner = (void*)(network_graph & (~1));
        network_graph_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
        void* logger_ptr = (void*)(((uint64_t)logger) & ~1);
        CHECK_ACCESS(logger_ptr);
        LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
@@ -33929,6 +40133,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DefaultRouter_1new(JNIEnv *
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -33940,6 +40145,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DefaultRouter_1as_1Router(J
        LDKDefaultRouter this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKRouter* ret_ret = MALLOC(sizeof(LDKRouter), "LDKRouter");
        *ret_ret = DefaultRouter_as_Router(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -33949,6 +40155,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1as_1Payer(J
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKPayer* ret_ret = MALLOC(sizeof(LDKPayer), "LDKPayer");
        *ret_ret = ChannelManager_as_Payer(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -33979,6 +40186,7 @@ JNIEXPORT jstring JNICALL Java_org_ldk_impl_bindings_Invoice_1to_1str(JNIEnv *en
        LDKInvoice o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        LDKStr ret_str = Invoice_to_str(&o_conv);
        jstring ret_conv = str_ref_to_java(env, ret_str.chars, ret_str.len);
        Str_free(ret_str);
@@ -33989,6 +40197,7 @@ JNIEXPORT jstring JNICALL Java_org_ldk_impl_bindings_SignedRawInvoice_1to_1str(J
        LDKSignedRawInvoice o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        LDKStr ret_str = SignedRawInvoice_to_str(&o_conv);
        jstring ret_conv = str_ref_to_java(env, ret_str.chars, ret_str.len);
        Str_free(ret_str);
index 3b19333747edec288430e7ca49ccb86aff6705c4..869ef719420dedcab0c7fe1db16313edd9866cc1 100644 (file)
@@ -11,6 +11,7 @@
 #define MALLOC(a, _) malloc(a)
 #define FREE(p) if ((uint64_t)(p) > 4096) { free(p); }
 #define CHECK_ACCESS(p)
+#define CHECK_INNER_FIELD_ACCESS_OR_NULL(v)
 #define DO_ASSERT(a) (void)(a)
 #define CHECK(a)
 
@@ -721,21 +722,6 @@ static inline jclass LDKSiPrefix_to_java(JNIEnv *env, LDKSiPrefix val) {
        }
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1u8Z_1new(JNIEnv *env, jclass clz, int8_tArray elems) {
-       LDKCVec_u8Z *ret = MALLOC(sizeof(LDKCVec_u8Z), "LDKCVec_u8Z");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(uint8_t) * ret->datalen, "LDKCVec_u8Z Data");
-               int8_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       ret->data[i] = java_elems[i];
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_u8Z CVec_u8Z_clone(const LDKCVec_u8Z *orig) {
        LDKCVec_u8Z ret = { .data = MALLOC(sizeof(int8_t) * orig->datalen, "LDKCVec_u8Z clone bytes"), .datalen = orig->datalen };
        memcpy(ret.data, orig->data, sizeof(int8_t) * ret.datalen);
@@ -756,9 +742,6 @@ uint64_t TxOut_get_value (struct LDKTxOut* thing) { return thing->value;}JNIEXPO
        return ret_val;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SecretKeyErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_SecretKeyErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SecretKeyErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_SecretKeyErrorZ *val = (LDKCResult_SecretKeyErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -772,9 +755,6 @@ JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SecretKeyErrorZ_
        jclass err_conv = LDKSecp256k1Error_to_java(env, (*val->contents.err));
        return err_conv;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PublicKeyErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_PublicKeyErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PublicKeyErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_PublicKeyErrorZ *val = (LDKCResult_PublicKeyErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -788,9 +768,6 @@ JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PublicKeyErrorZ_
        jclass err_conv = LDKSecp256k1Error_to_java(env, (*val->contents.err));
        return err_conv;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TxCreationKeysDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_TxCreationKeysDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TxCreationKeysDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_TxCreationKeysDecodeErrorZ *val = (LDKCResult_TxCreationKeysDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -798,6 +775,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TxCreationKeysD
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -808,12 +786,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TxCreationKeysD
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelPublicKeysDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_ChannelPublicKeysDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelPublicKeysDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_ChannelPublicKeysDecodeErrorZ *val = (LDKCResult_ChannelPublicKeysDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -821,6 +797,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelPublicKe
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -831,12 +808,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelPublicKe
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TxCreationKeysErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_TxCreationKeysErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TxCreationKeysErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_TxCreationKeysErrorZ *val = (LDKCResult_TxCreationKeysErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -844,6 +819,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TxCreationKeysE
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -881,9 +857,6 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1u32Z_1ref_1from
                default: abort();
        }
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1HTLCOutputInCommitmentDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_HTLCOutputInCommitmentDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1HTLCOutputInCommitmentDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_HTLCOutputInCommitmentDecodeErrorZ *val = (LDKCResult_HTLCOutputInCommitmentDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -891,6 +864,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1HTLCOutputInCom
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -901,12 +875,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1HTLCOutputInCom
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CounterpartyChannelTransactionParametersDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CounterpartyChannelTransactionParametersDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ *val = (LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -914,6 +886,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CounterpartyCha
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -924,12 +897,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CounterpartyCha
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelTransactionParametersDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_ChannelTransactionParametersDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelTransactionParametersDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_ChannelTransactionParametersDecodeErrorZ *val = (LDKCResult_ChannelTransactionParametersDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -937,6 +908,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelTransact
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -947,12 +919,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelTransact
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1HolderCommitmentTransactionDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_HolderCommitmentTransactionDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1HolderCommitmentTransactionDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_HolderCommitmentTransactionDecodeErrorZ *val = (LDKCResult_HolderCommitmentTransactionDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -960,6 +930,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1HolderCommitmen
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -970,12 +941,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1HolderCommitmen
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1BuiltCommitmentTransactionDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_BuiltCommitmentTransactionDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1BuiltCommitmentTransactionDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_BuiltCommitmentTransactionDecodeErrorZ *val = (LDKCResult_BuiltCommitmentTransactionDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -983,6 +952,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1BuiltCommitment
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -993,12 +963,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1BuiltCommitment
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TrustedClosingTransactionNoneZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_TrustedClosingTransactionNoneZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TrustedClosingTransactionNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_TrustedClosingTransactionNoneZ *val = (LDKCResult_TrustedClosingTransactionNoneZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1006,6 +974,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TrustedClosingT
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -1014,9 +983,6 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TrustedClosingTran
        CHECK(!val->result_ok);
        return *val->contents.err;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CommitmentTransactionDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_CommitmentTransactionDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CommitmentTransactionDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_CommitmentTransactionDecodeErrorZ *val = (LDKCResult_CommitmentTransactionDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1024,6 +990,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CommitmentTrans
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -1034,12 +1001,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CommitmentTrans
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TrustedCommitmentTransactionNoneZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_TrustedCommitmentTransactionNoneZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TrustedCommitmentTransactionNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_TrustedCommitmentTransactionNoneZ *val = (LDKCResult_TrustedCommitmentTransactionNoneZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1047,6 +1012,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TrustedCommitme
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -1055,9 +1021,6 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TrustedCommitmentT
        CHECK(!val->result_ok);
        return *val->contents.err;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CVec_1SignatureZNoneZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_CVec_SignatureZNoneZ*)arg)->result_ok;
-}
 JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CVec_1SignatureZNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_CVec_SignatureZNoneZ *val = (LDKCResult_CVec_SignatureZNoneZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1078,9 +1041,6 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CVec_1SignatureZNo
        CHECK(!val->result_ok);
        return *val->contents.err;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ShutdownScriptDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_ShutdownScriptDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ShutdownScriptDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_ShutdownScriptDecodeErrorZ *val = (LDKCResult_ShutdownScriptDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1088,6 +1048,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ShutdownScriptD
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -1098,12 +1059,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ShutdownScriptD
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ShutdownScriptInvalidShutdownScriptZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_ShutdownScriptInvalidShutdownScriptZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ShutdownScriptInvalidShutdownScriptZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_ShutdownScriptInvalidShutdownScriptZ *val = (LDKCResult_ShutdownScriptInvalidShutdownScriptZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1111,6 +1070,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ShutdownScriptI
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -1121,12 +1081,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ShutdownScriptI
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_NoneErrorZ*)arg)->result_ok;
-}
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_NoneErrorZ *val = (LDKCResult_NoneErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1138,9 +1096,6 @@ JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneErrorZ_1get_
        jclass err_conv = LDKIOError_to_java(env, (*val->contents.err));
        return err_conv;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteHopDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_RouteHopDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteHopDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_RouteHopDecodeErrorZ *val = (LDKCResult_RouteHopDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1148,6 +1103,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteHopDecodeE
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -1158,29 +1114,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteHopDecodeE
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1RouteHopZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_RouteHopZ *ret = MALLOC(sizeof(LDKCVec_RouteHopZ), "LDKCVec_RouteHopZ");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKRouteHop) * ret->datalen, "LDKCVec_RouteHopZ Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       int64_t arr_elem = java_elems[i];
-                       LDKRouteHop arr_elem_conv;
-                       arr_elem_conv.inner = (void*)(arr_elem & (~1));
-                       arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0);
-                       arr_elem_conv = RouteHop_clone(&arr_elem_conv);
-                       ret->data[i] = arr_elem_conv;
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_RouteHopZ CVec_RouteHopZ_clone(const LDKCVec_RouteHopZ *orig) {
        LDKCVec_RouteHopZ ret = { .data = MALLOC(sizeof(LDKRouteHop) * orig->datalen, "LDKCVec_RouteHopZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -1195,9 +1132,6 @@ static inline LDKCVec_CVec_RouteHopZZ CVec_CVec_RouteHopZZ_clone(const LDKCVec_C
        }
        return ret;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_RouteDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_RouteDecodeErrorZ *val = (LDKCResult_RouteDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1205,6 +1139,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteDecodeErro
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -1215,12 +1150,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteDecodeErro
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteParametersDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_RouteParametersDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteParametersDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_RouteParametersDecodeErrorZ *val = (LDKCResult_RouteParametersDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1228,6 +1161,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteParameters
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -1238,29 +1172,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteParameters
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1RouteHintZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_RouteHintZ *ret = MALLOC(sizeof(LDKCVec_RouteHintZ), "LDKCVec_RouteHintZ");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKRouteHint) * ret->datalen, "LDKCVec_RouteHintZ Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       int64_t arr_elem = java_elems[i];
-                       LDKRouteHint arr_elem_conv;
-                       arr_elem_conv.inner = (void*)(arr_elem & (~1));
-                       arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0);
-                       arr_elem_conv = RouteHint_clone(&arr_elem_conv);
-                       ret->data[i] = arr_elem_conv;
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_RouteHintZ CVec_RouteHintZ_clone(const LDKCVec_RouteHintZ *orig) {
        LDKCVec_RouteHintZ ret = { .data = MALLOC(sizeof(LDKRouteHint) * orig->datalen, "LDKCVec_RouteHintZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -1296,9 +1211,6 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1u64Z_1ref_1from
                default: abort();
        }
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PayeeDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_PayeeDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PayeeDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_PayeeDecodeErrorZ *val = (LDKCResult_PayeeDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1306,6 +1218,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PayeeDecodeErro
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -1316,29 +1229,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PayeeDecodeErro
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1RouteHintHopZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_RouteHintHopZ *ret = MALLOC(sizeof(LDKCVec_RouteHintHopZ), "LDKCVec_RouteHintHopZ");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKRouteHintHop) * ret->datalen, "LDKCVec_RouteHintHopZ Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       int64_t arr_elem = java_elems[i];
-                       LDKRouteHintHop arr_elem_conv;
-                       arr_elem_conv.inner = (void*)(arr_elem & (~1));
-                       arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0);
-                       arr_elem_conv = RouteHintHop_clone(&arr_elem_conv);
-                       ret->data[i] = arr_elem_conv;
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_RouteHintHopZ CVec_RouteHintHopZ_clone(const LDKCVec_RouteHintHopZ *orig) {
        LDKCVec_RouteHintHopZ ret = { .data = MALLOC(sizeof(LDKRouteHintHop) * orig->datalen, "LDKCVec_RouteHintHopZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -1346,9 +1240,6 @@ static inline LDKCVec_RouteHintHopZ CVec_RouteHintHopZ_clone(const LDKCVec_Route
        }
        return ret;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteHintDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_RouteHintDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteHintDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_RouteHintDecodeErrorZ *val = (LDKCResult_RouteHintDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1356,6 +1247,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteHintDecode
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -1366,12 +1258,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteHintDecode
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteHintHopDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_RouteHintHopDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteHintHopDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_RouteHintHopDecodeErrorZ *val = (LDKCResult_RouteHintHopDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1379,6 +1269,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteHintHopDec
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -1389,29 +1280,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteHintHopDec
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1ChannelDetailsZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_ChannelDetailsZ *ret = MALLOC(sizeof(LDKCVec_ChannelDetailsZ), "LDKCVec_ChannelDetailsZ");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKChannelDetails) * ret->datalen, "LDKCVec_ChannelDetailsZ Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       int64_t arr_elem = java_elems[i];
-                       LDKChannelDetails arr_elem_conv;
-                       arr_elem_conv.inner = (void*)(arr_elem & (~1));
-                       arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0);
-                       arr_elem_conv = ChannelDetails_clone(&arr_elem_conv);
-                       ret->data[i] = arr_elem_conv;
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_ChannelDetailsZ CVec_ChannelDetailsZ_clone(const LDKCVec_ChannelDetailsZ *orig) {
        LDKCVec_ChannelDetailsZ ret = { .data = MALLOC(sizeof(LDKChannelDetails) * orig->datalen, "LDKCVec_ChannelDetailsZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -1419,9 +1291,6 @@ static inline LDKCVec_ChannelDetailsZ CVec_ChannelDetailsZ_clone(const LDKCVec_C
        }
        return ret;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteLightningErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_RouteLightningErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteLightningErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_RouteLightningErrorZ *val = (LDKCResult_RouteLightningErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1429,6 +1298,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteLightningE
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -1439,12 +1309,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteLightningE
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TxOutAccessErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_TxOutAccessErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TxOutAccessErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_TxOutAccessErrorZ *val = (LDKCResult_TxOutAccessErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1478,26 +1346,6 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1usizeTransacti
        return ret_arr;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1C2Tuple_1usizeTransactionZZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_C2Tuple_usizeTransactionZZ *ret = MALLOC(sizeof(LDKCVec_C2Tuple_usizeTransactionZZ), "LDKCVec_C2Tuple_usizeTransactionZZ");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKC2Tuple_usizeTransactionZ) * ret->datalen, "LDKCVec_C2Tuple_usizeTransactionZZ Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       int64_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKC2Tuple_usizeTransactionZ arr_elem_conv = *(LDKC2Tuple_usizeTransactionZ*)(arr_elem_ptr);
-                       arr_elem_conv = C2Tuple_usizeTransactionZ_clone((LDKC2Tuple_usizeTransactionZ*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_C2Tuple_usizeTransactionZZ CVec_C2Tuple_usizeTransactionZZ_clone(const LDKCVec_C2Tuple_usizeTransactionZZ *orig) {
        LDKCVec_C2Tuple_usizeTransactionZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_usizeTransactionZ) * orig->datalen, "LDKCVec_C2Tuple_usizeTransactionZZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -1512,9 +1360,6 @@ static inline LDKCVec_TxidZ CVec_ThirtyTwoBytesZ_clone(const LDKCVec_TxidZ *orig
        }
        return ret;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneChannelMonitorUpdateErrZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_NoneChannelMonitorUpdateErrZ*)arg)->result_ok;
-}
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneChannelMonitorUpdateErrZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_NoneChannelMonitorUpdateErrZ *val = (LDKCResult_NoneChannelMonitorUpdateErrZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1564,6 +1409,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMonitorEvent_1ref_1from_
                        uint64_t htlc_event_ref = 0;
                        CHECK((((uint64_t)htlc_event_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&htlc_event_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(htlc_event_var);
                        htlc_event_ref = (uint64_t)htlc_event_var.inner & ~1;
                        return (*env)->NewObject(env, LDKMonitorEvent_HTLCEvent_class, LDKMonitorEvent_HTLCEvent_meth, htlc_event_ref);
                }
@@ -1572,6 +1418,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMonitorEvent_1ref_1from_
                        uint64_t commitment_tx_confirmed_ref = 0;
                        CHECK((((uint64_t)commitment_tx_confirmed_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&commitment_tx_confirmed_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(commitment_tx_confirmed_var);
                        commitment_tx_confirmed_ref = (uint64_t)commitment_tx_confirmed_var.inner & ~1;
                        return (*env)->NewObject(env, LDKMonitorEvent_CommitmentTxConfirmed_class, LDKMonitorEvent_CommitmentTxConfirmed_meth, commitment_tx_confirmed_ref);
                }
@@ -1580,6 +1427,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMonitorEvent_1ref_1from_
                        uint64_t funding_txo_ref = 0;
                        CHECK((((uint64_t)funding_txo_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&funding_txo_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_txo_var);
                        funding_txo_ref = (uint64_t)funding_txo_var.inner & ~1;
                        return (*env)->NewObject(env, LDKMonitorEvent_UpdateCompleted_class, LDKMonitorEvent_UpdateCompleted_meth, funding_txo_ref, obj->update_completed.monitor_update_id);
                }
@@ -1588,32 +1436,13 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMonitorEvent_1ref_1from_
                        uint64_t update_failed_ref = 0;
                        CHECK((((uint64_t)update_failed_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&update_failed_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_failed_var);
                        update_failed_ref = (uint64_t)update_failed_var.inner & ~1;
                        return (*env)->NewObject(env, LDKMonitorEvent_UpdateFailed_class, LDKMonitorEvent_UpdateFailed_meth, update_failed_ref);
                }
                default: abort();
        }
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1MonitorEventZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_MonitorEventZ *ret = MALLOC(sizeof(LDKCVec_MonitorEventZ), "LDKCVec_MonitorEventZ");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKMonitorEvent) * ret->datalen, "LDKCVec_MonitorEventZ Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       int64_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKMonitorEvent arr_elem_conv = *(LDKMonitorEvent*)(arr_elem_ptr);
-                       arr_elem_conv = MonitorEvent_clone((LDKMonitorEvent*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_MonitorEventZ CVec_MonitorEventZ_clone(const LDKCVec_MonitorEventZ *orig) {
        LDKCVec_MonitorEventZ ret = { .data = MALLOC(sizeof(LDKMonitorEvent) * orig->datalen, "LDKCVec_MonitorEventZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -1652,6 +1481,134 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1C2Tuple_1usizeT
                default: abort();
        }
 }
+static jclass LDKClosureReason_CounterpartyForceClosed_class = NULL;
+static jmethodID LDKClosureReason_CounterpartyForceClosed_meth = NULL;
+static jclass LDKClosureReason_HolderForceClosed_class = NULL;
+static jmethodID LDKClosureReason_HolderForceClosed_meth = NULL;
+static jclass LDKClosureReason_CooperativeClosure_class = NULL;
+static jmethodID LDKClosureReason_CooperativeClosure_meth = NULL;
+static jclass LDKClosureReason_CommitmentTxConfirmed_class = NULL;
+static jmethodID LDKClosureReason_CommitmentTxConfirmed_meth = NULL;
+static jclass LDKClosureReason_ProcessingError_class = NULL;
+static jmethodID LDKClosureReason_ProcessingError_meth = NULL;
+static jclass LDKClosureReason_DisconnectedPeer_class = NULL;
+static jmethodID LDKClosureReason_DisconnectedPeer_meth = NULL;
+static jclass LDKClosureReason_OutdatedChannelManager_class = NULL;
+static jmethodID LDKClosureReason_OutdatedChannelManager_meth = NULL;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKClosureReason_init (JNIEnv *env, jclass clz) {
+       LDKClosureReason_CounterpartyForceClosed_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKClosureReason$CounterpartyForceClosed;"));
+       CHECK(LDKClosureReason_CounterpartyForceClosed_class != NULL);
+       LDKClosureReason_CounterpartyForceClosed_meth = (*env)->GetMethodID(env, LDKClosureReason_CounterpartyForceClosed_class, "<init>", "(Ljava/lang/String;)V");
+       CHECK(LDKClosureReason_CounterpartyForceClosed_meth != NULL);
+       LDKClosureReason_HolderForceClosed_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKClosureReason$HolderForceClosed;"));
+       CHECK(LDKClosureReason_HolderForceClosed_class != NULL);
+       LDKClosureReason_HolderForceClosed_meth = (*env)->GetMethodID(env, LDKClosureReason_HolderForceClosed_class, "<init>", "()V");
+       CHECK(LDKClosureReason_HolderForceClosed_meth != NULL);
+       LDKClosureReason_CooperativeClosure_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKClosureReason$CooperativeClosure;"));
+       CHECK(LDKClosureReason_CooperativeClosure_class != NULL);
+       LDKClosureReason_CooperativeClosure_meth = (*env)->GetMethodID(env, LDKClosureReason_CooperativeClosure_class, "<init>", "()V");
+       CHECK(LDKClosureReason_CooperativeClosure_meth != NULL);
+       LDKClosureReason_CommitmentTxConfirmed_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKClosureReason$CommitmentTxConfirmed;"));
+       CHECK(LDKClosureReason_CommitmentTxConfirmed_class != NULL);
+       LDKClosureReason_CommitmentTxConfirmed_meth = (*env)->GetMethodID(env, LDKClosureReason_CommitmentTxConfirmed_class, "<init>", "()V");
+       CHECK(LDKClosureReason_CommitmentTxConfirmed_meth != NULL);
+       LDKClosureReason_ProcessingError_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKClosureReason$ProcessingError;"));
+       CHECK(LDKClosureReason_ProcessingError_class != NULL);
+       LDKClosureReason_ProcessingError_meth = (*env)->GetMethodID(env, LDKClosureReason_ProcessingError_class, "<init>", "(Ljava/lang/String;)V");
+       CHECK(LDKClosureReason_ProcessingError_meth != NULL);
+       LDKClosureReason_DisconnectedPeer_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKClosureReason$DisconnectedPeer;"));
+       CHECK(LDKClosureReason_DisconnectedPeer_class != NULL);
+       LDKClosureReason_DisconnectedPeer_meth = (*env)->GetMethodID(env, LDKClosureReason_DisconnectedPeer_class, "<init>", "()V");
+       CHECK(LDKClosureReason_DisconnectedPeer_meth != NULL);
+       LDKClosureReason_OutdatedChannelManager_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKClosureReason$OutdatedChannelManager;"));
+       CHECK(LDKClosureReason_OutdatedChannelManager_class != NULL);
+       LDKClosureReason_OutdatedChannelManager_meth = (*env)->GetMethodID(env, LDKClosureReason_OutdatedChannelManager_class, "<init>", "()V");
+       CHECK(LDKClosureReason_OutdatedChannelManager_meth != NULL);
+}
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKClosureReason_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
+       LDKClosureReason *obj = (LDKClosureReason*)(ptr & ~1);
+       switch(obj->tag) {
+               case LDKClosureReason_CounterpartyForceClosed: {
+                       LDKStr peer_msg_str = obj->counterparty_force_closed.peer_msg;
+                       jstring peer_msg_conv = str_ref_to_java(env, peer_msg_str.chars, peer_msg_str.len);
+                       return (*env)->NewObject(env, LDKClosureReason_CounterpartyForceClosed_class, LDKClosureReason_CounterpartyForceClosed_meth, peer_msg_conv);
+               }
+               case LDKClosureReason_HolderForceClosed: {
+                       return (*env)->NewObject(env, LDKClosureReason_HolderForceClosed_class, LDKClosureReason_HolderForceClosed_meth);
+               }
+               case LDKClosureReason_CooperativeClosure: {
+                       return (*env)->NewObject(env, LDKClosureReason_CooperativeClosure_class, LDKClosureReason_CooperativeClosure_meth);
+               }
+               case LDKClosureReason_CommitmentTxConfirmed: {
+                       return (*env)->NewObject(env, LDKClosureReason_CommitmentTxConfirmed_class, LDKClosureReason_CommitmentTxConfirmed_meth);
+               }
+               case LDKClosureReason_ProcessingError: {
+                       LDKStr err_str = obj->processing_error.err;
+                       jstring err_conv = str_ref_to_java(env, err_str.chars, err_str.len);
+                       return (*env)->NewObject(env, LDKClosureReason_ProcessingError_class, LDKClosureReason_ProcessingError_meth, err_conv);
+               }
+               case LDKClosureReason_DisconnectedPeer: {
+                       return (*env)->NewObject(env, LDKClosureReason_DisconnectedPeer_class, LDKClosureReason_DisconnectedPeer_meth);
+               }
+               case LDKClosureReason_OutdatedChannelManager: {
+                       return (*env)->NewObject(env, LDKClosureReason_OutdatedChannelManager_class, LDKClosureReason_OutdatedChannelManager_meth);
+               }
+               default: abort();
+       }
+}
+static jclass LDKCOption_ClosureReasonZ_Some_class = NULL;
+static jmethodID LDKCOption_ClosureReasonZ_Some_meth = NULL;
+static jclass LDKCOption_ClosureReasonZ_None_class = NULL;
+static jmethodID LDKCOption_ClosureReasonZ_None_meth = NULL;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1ClosureReasonZ_init (JNIEnv *env, jclass clz) {
+       LDKCOption_ClosureReasonZ_Some_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKCOption_ClosureReasonZ$Some;"));
+       CHECK(LDKCOption_ClosureReasonZ_Some_class != NULL);
+       LDKCOption_ClosureReasonZ_Some_meth = (*env)->GetMethodID(env, LDKCOption_ClosureReasonZ_Some_class, "<init>", "(J)V");
+       CHECK(LDKCOption_ClosureReasonZ_Some_meth != NULL);
+       LDKCOption_ClosureReasonZ_None_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKCOption_ClosureReasonZ$None;"));
+       CHECK(LDKCOption_ClosureReasonZ_None_class != NULL);
+       LDKCOption_ClosureReasonZ_None_meth = (*env)->GetMethodID(env, LDKCOption_ClosureReasonZ_None_class, "<init>", "()V");
+       CHECK(LDKCOption_ClosureReasonZ_None_meth != NULL);
+}
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1ClosureReasonZ_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
+       LDKCOption_ClosureReasonZ *obj = (LDKCOption_ClosureReasonZ*)(ptr & ~1);
+       switch(obj->tag) {
+               case LDKCOption_ClosureReasonZ_Some: {
+                       uint64_t some_ref = ((uint64_t)&obj->some) | 1;
+                       return (*env)->NewObject(env, LDKCOption_ClosureReasonZ_Some_class, LDKCOption_ClosureReasonZ_Some_meth, some_ref);
+               }
+               case LDKCOption_ClosureReasonZ_None: {
+                       return (*env)->NewObject(env, LDKCOption_ClosureReasonZ_None_class, LDKCOption_ClosureReasonZ_None_meth);
+               }
+               default: abort();
+       }
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1COption_1ClosureReasonZDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_COption_ClosureReasonZDecodeErrorZ *val = (LDKCResult_COption_ClosureReasonZDecodeErrorZ*)(arg & ~1);
+       CHECK(val->result_ok);
+       uint64_t res_ref = ((uint64_t)&(*val->contents.result)) | 1;
+       return res_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1COption_1ClosureReasonZDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_COption_ClosureReasonZDecodeErrorZ *val = (LDKCResult_COption_ClosureReasonZDecodeErrorZ*)(arg & ~1);
+       CHECK(!val->result_ok);
+       LDKDecodeError err_var = (*val->contents.err);
+       uint64_t err_ref = 0;
+       CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+       CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
+       err_ref = (uint64_t)err_var.inner & ~1;
+       return err_ref;
+}
 static jclass LDKNetworkUpdate_ChannelUpdateMessage_class = NULL;
 static jmethodID LDKNetworkUpdate_ChannelUpdateMessage_meth = NULL;
 static jclass LDKNetworkUpdate_ChannelClosed_class = NULL;
@@ -1683,6 +1640,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKNetworkUpdate_1ref_1from
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return (*env)->NewObject(env, LDKNetworkUpdate_ChannelUpdateMessage_class, LDKNetworkUpdate_ChannelUpdateMessage_meth, msg_ref);
                }
@@ -1757,6 +1715,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKSpendableOutputDescripto
                        uint64_t outpoint_ref = 0;
                        CHECK((((uint64_t)outpoint_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&outpoint_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_var);
                        outpoint_ref = (uint64_t)outpoint_var.inner & ~1;
                        uint64_t output_ref = ((uint64_t)&obj->static_output.output) | 1;
                        return (*env)->NewObject(env, LDKSpendableOutputDescriptor_StaticOutput_class, LDKSpendableOutputDescriptor_StaticOutput_meth, outpoint_ref, (uint64_t)output_ref);
@@ -1766,6 +1725,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKSpendableOutputDescripto
                        uint64_t delayed_payment_output_ref = 0;
                        CHECK((((uint64_t)delayed_payment_output_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&delayed_payment_output_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(delayed_payment_output_var);
                        delayed_payment_output_ref = (uint64_t)delayed_payment_output_var.inner & ~1;
                        return (*env)->NewObject(env, LDKSpendableOutputDescriptor_DelayedPaymentOutput_class, LDKSpendableOutputDescriptor_DelayedPaymentOutput_meth, delayed_payment_output_ref);
                }
@@ -1774,32 +1734,13 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKSpendableOutputDescripto
                        uint64_t static_payment_output_ref = 0;
                        CHECK((((uint64_t)static_payment_output_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&static_payment_output_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(static_payment_output_var);
                        static_payment_output_ref = (uint64_t)static_payment_output_var.inner & ~1;
                        return (*env)->NewObject(env, LDKSpendableOutputDescriptor_StaticPaymentOutput_class, LDKSpendableOutputDescriptor_StaticPaymentOutput_meth, static_payment_output_ref);
                }
                default: abort();
        }
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1SpendableOutputDescriptorZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_SpendableOutputDescriptorZ *ret = MALLOC(sizeof(LDKCVec_SpendableOutputDescriptorZ), "LDKCVec_SpendableOutputDescriptorZ");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKSpendableOutputDescriptor) * ret->datalen, "LDKCVec_SpendableOutputDescriptorZ Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       int64_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKSpendableOutputDescriptor arr_elem_conv = *(LDKSpendableOutputDescriptor*)(arr_elem_ptr);
-                       arr_elem_conv = SpendableOutputDescriptor_clone((LDKSpendableOutputDescriptor*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_SpendableOutputDescriptorZ CVec_SpendableOutputDescriptorZ_clone(const LDKCVec_SpendableOutputDescriptorZ *orig) {
        LDKCVec_SpendableOutputDescriptorZ ret = { .data = MALLOC(sizeof(LDKSpendableOutputDescriptor) * orig->datalen, "LDKCVec_SpendableOutputDescriptorZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -1807,6 +1748,245 @@ static inline LDKCVec_SpendableOutputDescriptorZ CVec_SpendableOutputDescriptorZ
        }
        return ret;
 }
+static jclass LDKPaymentPurpose_InvoicePayment_class = NULL;
+static jmethodID LDKPaymentPurpose_InvoicePayment_meth = NULL;
+static jclass LDKPaymentPurpose_SpontaneousPayment_class = NULL;
+static jmethodID LDKPaymentPurpose_SpontaneousPayment_meth = NULL;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKPaymentPurpose_init (JNIEnv *env, jclass clz) {
+       LDKPaymentPurpose_InvoicePayment_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKPaymentPurpose$InvoicePayment;"));
+       CHECK(LDKPaymentPurpose_InvoicePayment_class != NULL);
+       LDKPaymentPurpose_InvoicePayment_meth = (*env)->GetMethodID(env, LDKPaymentPurpose_InvoicePayment_class, "<init>", "([B[BJ)V");
+       CHECK(LDKPaymentPurpose_InvoicePayment_meth != NULL);
+       LDKPaymentPurpose_SpontaneousPayment_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKPaymentPurpose$SpontaneousPayment;"));
+       CHECK(LDKPaymentPurpose_SpontaneousPayment_class != NULL);
+       LDKPaymentPurpose_SpontaneousPayment_meth = (*env)->GetMethodID(env, LDKPaymentPurpose_SpontaneousPayment_class, "<init>", "([B)V");
+       CHECK(LDKPaymentPurpose_SpontaneousPayment_meth != NULL);
+}
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKPaymentPurpose_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
+       LDKPaymentPurpose *obj = (LDKPaymentPurpose*)(ptr & ~1);
+       switch(obj->tag) {
+               case LDKPaymentPurpose_InvoicePayment: {
+                       int8_tArray payment_preimage_arr = (*env)->NewByteArray(env, 32);
+                       (*env)->SetByteArrayRegion(env, payment_preimage_arr, 0, 32, obj->invoice_payment.payment_preimage.data);
+                       int8_tArray payment_secret_arr = (*env)->NewByteArray(env, 32);
+                       (*env)->SetByteArrayRegion(env, payment_secret_arr, 0, 32, obj->invoice_payment.payment_secret.data);
+                       return (*env)->NewObject(env, LDKPaymentPurpose_InvoicePayment_class, LDKPaymentPurpose_InvoicePayment_meth, payment_preimage_arr, payment_secret_arr, obj->invoice_payment.user_payment_id);
+               }
+               case LDKPaymentPurpose_SpontaneousPayment: {
+                       int8_tArray spontaneous_payment_arr = (*env)->NewByteArray(env, 32);
+                       (*env)->SetByteArrayRegion(env, spontaneous_payment_arr, 0, 32, obj->spontaneous_payment.data);
+                       return (*env)->NewObject(env, LDKPaymentPurpose_SpontaneousPayment_class, LDKPaymentPurpose_SpontaneousPayment_meth, spontaneous_payment_arr);
+               }
+               default: abort();
+       }
+}
+static jclass LDKEvent_FundingGenerationReady_class = NULL;
+static jmethodID LDKEvent_FundingGenerationReady_meth = NULL;
+static jclass LDKEvent_PaymentReceived_class = NULL;
+static jmethodID LDKEvent_PaymentReceived_meth = NULL;
+static jclass LDKEvent_PaymentSent_class = NULL;
+static jmethodID LDKEvent_PaymentSent_meth = NULL;
+static jclass LDKEvent_PaymentPathFailed_class = NULL;
+static jmethodID LDKEvent_PaymentPathFailed_meth = NULL;
+static jclass LDKEvent_PendingHTLCsForwardable_class = NULL;
+static jmethodID LDKEvent_PendingHTLCsForwardable_meth = NULL;
+static jclass LDKEvent_SpendableOutputs_class = NULL;
+static jmethodID LDKEvent_SpendableOutputs_meth = NULL;
+static jclass LDKEvent_PaymentForwarded_class = NULL;
+static jmethodID LDKEvent_PaymentForwarded_meth = NULL;
+static jclass LDKEvent_ChannelClosed_class = NULL;
+static jmethodID LDKEvent_ChannelClosed_meth = NULL;
+static jclass LDKEvent_DiscardFunding_class = NULL;
+static jmethodID LDKEvent_DiscardFunding_meth = NULL;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKEvent_init (JNIEnv *env, jclass clz) {
+       LDKEvent_FundingGenerationReady_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKEvent$FundingGenerationReady;"));
+       CHECK(LDKEvent_FundingGenerationReady_class != NULL);
+       LDKEvent_FundingGenerationReady_meth = (*env)->GetMethodID(env, LDKEvent_FundingGenerationReady_class, "<init>", "([BJ[BJ)V");
+       CHECK(LDKEvent_FundingGenerationReady_meth != NULL);
+       LDKEvent_PaymentReceived_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKEvent$PaymentReceived;"));
+       CHECK(LDKEvent_PaymentReceived_class != NULL);
+       LDKEvent_PaymentReceived_meth = (*env)->GetMethodID(env, LDKEvent_PaymentReceived_class, "<init>", "([BJJ)V");
+       CHECK(LDKEvent_PaymentReceived_meth != NULL);
+       LDKEvent_PaymentSent_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKEvent$PaymentSent;"));
+       CHECK(LDKEvent_PaymentSent_class != NULL);
+       LDKEvent_PaymentSent_meth = (*env)->GetMethodID(env, LDKEvent_PaymentSent_class, "<init>", "([B[B[BJ)V");
+       CHECK(LDKEvent_PaymentSent_meth != NULL);
+       LDKEvent_PaymentPathFailed_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKEvent$PaymentPathFailed;"));
+       CHECK(LDKEvent_PaymentPathFailed_class != NULL);
+       LDKEvent_PaymentPathFailed_meth = (*env)->GetMethodID(env, LDKEvent_PaymentPathFailed_class, "<init>", "([B[BZJZ[JJJ)V");
+       CHECK(LDKEvent_PaymentPathFailed_meth != NULL);
+       LDKEvent_PendingHTLCsForwardable_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKEvent$PendingHTLCsForwardable;"));
+       CHECK(LDKEvent_PendingHTLCsForwardable_class != NULL);
+       LDKEvent_PendingHTLCsForwardable_meth = (*env)->GetMethodID(env, LDKEvent_PendingHTLCsForwardable_class, "<init>", "(J)V");
+       CHECK(LDKEvent_PendingHTLCsForwardable_meth != NULL);
+       LDKEvent_SpendableOutputs_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKEvent$SpendableOutputs;"));
+       CHECK(LDKEvent_SpendableOutputs_class != NULL);
+       LDKEvent_SpendableOutputs_meth = (*env)->GetMethodID(env, LDKEvent_SpendableOutputs_class, "<init>", "([J)V");
+       CHECK(LDKEvent_SpendableOutputs_meth != NULL);
+       LDKEvent_PaymentForwarded_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKEvent$PaymentForwarded;"));
+       CHECK(LDKEvent_PaymentForwarded_class != NULL);
+       LDKEvent_PaymentForwarded_meth = (*env)->GetMethodID(env, LDKEvent_PaymentForwarded_class, "<init>", "(JZ)V");
+       CHECK(LDKEvent_PaymentForwarded_meth != NULL);
+       LDKEvent_ChannelClosed_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKEvent$ChannelClosed;"));
+       CHECK(LDKEvent_ChannelClosed_class != NULL);
+       LDKEvent_ChannelClosed_meth = (*env)->GetMethodID(env, LDKEvent_ChannelClosed_class, "<init>", "([BJJ)V");
+       CHECK(LDKEvent_ChannelClosed_meth != NULL);
+       LDKEvent_DiscardFunding_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKEvent$DiscardFunding;"));
+       CHECK(LDKEvent_DiscardFunding_class != NULL);
+       LDKEvent_DiscardFunding_meth = (*env)->GetMethodID(env, LDKEvent_DiscardFunding_class, "<init>", "([B[B)V");
+       CHECK(LDKEvent_DiscardFunding_meth != NULL);
+}
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKEvent_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
+       LDKEvent *obj = (LDKEvent*)(ptr & ~1);
+       switch(obj->tag) {
+               case LDKEvent_FundingGenerationReady: {
+                       int8_tArray temporary_channel_id_arr = (*env)->NewByteArray(env, 32);
+                       (*env)->SetByteArrayRegion(env, temporary_channel_id_arr, 0, 32, obj->funding_generation_ready.temporary_channel_id.data);
+                       LDKCVec_u8Z output_script_var = obj->funding_generation_ready.output_script;
+                       int8_tArray output_script_arr = (*env)->NewByteArray(env, output_script_var.datalen);
+                       (*env)->SetByteArrayRegion(env, output_script_arr, 0, output_script_var.datalen, output_script_var.data);
+                       return (*env)->NewObject(env, LDKEvent_FundingGenerationReady_class, LDKEvent_FundingGenerationReady_meth, temporary_channel_id_arr, obj->funding_generation_ready.channel_value_satoshis, output_script_arr, obj->funding_generation_ready.user_channel_id);
+               }
+               case LDKEvent_PaymentReceived: {
+                       int8_tArray payment_hash_arr = (*env)->NewByteArray(env, 32);
+                       (*env)->SetByteArrayRegion(env, payment_hash_arr, 0, 32, obj->payment_received.payment_hash.data);
+                       uint64_t purpose_ref = ((uint64_t)&obj->payment_received.purpose) | 1;
+                       return (*env)->NewObject(env, LDKEvent_PaymentReceived_class, LDKEvent_PaymentReceived_meth, payment_hash_arr, obj->payment_received.amt, purpose_ref);
+               }
+               case LDKEvent_PaymentSent: {
+                       int8_tArray payment_id_arr = (*env)->NewByteArray(env, 32);
+                       (*env)->SetByteArrayRegion(env, payment_id_arr, 0, 32, obj->payment_sent.payment_id.data);
+                       int8_tArray payment_preimage_arr = (*env)->NewByteArray(env, 32);
+                       (*env)->SetByteArrayRegion(env, payment_preimage_arr, 0, 32, obj->payment_sent.payment_preimage.data);
+                       int8_tArray payment_hash_arr = (*env)->NewByteArray(env, 32);
+                       (*env)->SetByteArrayRegion(env, payment_hash_arr, 0, 32, obj->payment_sent.payment_hash.data);
+                       uint64_t fee_paid_msat_ref = ((uint64_t)&obj->payment_sent.fee_paid_msat) | 1;
+                       return (*env)->NewObject(env, LDKEvent_PaymentSent_class, LDKEvent_PaymentSent_meth, payment_id_arr, payment_preimage_arr, payment_hash_arr, fee_paid_msat_ref);
+               }
+               case LDKEvent_PaymentPathFailed: {
+                       int8_tArray payment_id_arr = (*env)->NewByteArray(env, 32);
+                       (*env)->SetByteArrayRegion(env, payment_id_arr, 0, 32, obj->payment_path_failed.payment_id.data);
+                       int8_tArray payment_hash_arr = (*env)->NewByteArray(env, 32);
+                       (*env)->SetByteArrayRegion(env, payment_hash_arr, 0, 32, obj->payment_path_failed.payment_hash.data);
+                       uint64_t network_update_ref = ((uint64_t)&obj->payment_path_failed.network_update) | 1;
+                       LDKCVec_RouteHopZ path_var = obj->payment_path_failed.path;
+                       int64_tArray path_arr = NULL;
+                       path_arr = (*env)->NewLongArray(env, path_var.datalen);
+                       int64_t *path_arr_ptr = (*env)->GetPrimitiveArrayCritical(env, path_arr, NULL);
+                       for (size_t k = 0; k < path_var.datalen; k++) {
+                               LDKRouteHop path_conv_10_var = path_var.data[k];
+                               uint64_t path_conv_10_ref = 0;
+                               CHECK((((uint64_t)path_conv_10_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+                               CHECK((((uint64_t)&path_conv_10_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                               CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv_10_var);
+                               path_conv_10_ref = (uint64_t)path_conv_10_var.inner & ~1;
+                               path_arr_ptr[k] = path_conv_10_ref;
+                       }
+                       (*env)->ReleasePrimitiveArrayCritical(env, path_arr, path_arr_ptr, 0);
+                       uint64_t short_channel_id_ref = ((uint64_t)&obj->payment_path_failed.short_channel_id) | 1;
+                       LDKRouteParameters retry_var = obj->payment_path_failed.retry;
+                       uint64_t retry_ref = 0;
+                       if ((uint64_t)retry_var.inner > 4096) {
+                               CHECK((((uint64_t)retry_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+                               CHECK((((uint64_t)&retry_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(retry_var);
+                               retry_ref = (uint64_t)retry_var.inner & ~1;
+                       }
+                       return (*env)->NewObject(env, LDKEvent_PaymentPathFailed_class, LDKEvent_PaymentPathFailed_meth, payment_id_arr, payment_hash_arr, obj->payment_path_failed.rejected_by_dest, network_update_ref, obj->payment_path_failed.all_paths_failed, path_arr, short_channel_id_ref, retry_ref);
+               }
+               case LDKEvent_PendingHTLCsForwardable: {
+                       return (*env)->NewObject(env, LDKEvent_PendingHTLCsForwardable_class, LDKEvent_PendingHTLCsForwardable_meth, obj->pending_htl_cs_forwardable.time_forwardable);
+               }
+               case LDKEvent_SpendableOutputs: {
+                       LDKCVec_SpendableOutputDescriptorZ outputs_var = obj->spendable_outputs.outputs;
+                       int64_tArray outputs_arr = NULL;
+                       outputs_arr = (*env)->NewLongArray(env, outputs_var.datalen);
+                       int64_t *outputs_arr_ptr = (*env)->GetPrimitiveArrayCritical(env, outputs_arr, NULL);
+                       for (size_t b = 0; b < outputs_var.datalen; b++) {
+                               uint64_t outputs_conv_27_ref = ((uint64_t)&outputs_var.data[b]) | 1;
+                               outputs_arr_ptr[b] = outputs_conv_27_ref;
+                       }
+                       (*env)->ReleasePrimitiveArrayCritical(env, outputs_arr, outputs_arr_ptr, 0);
+                       return (*env)->NewObject(env, LDKEvent_SpendableOutputs_class, LDKEvent_SpendableOutputs_meth, outputs_arr);
+               }
+               case LDKEvent_PaymentForwarded: {
+                       uint64_t fee_earned_msat_ref = ((uint64_t)&obj->payment_forwarded.fee_earned_msat) | 1;
+                       return (*env)->NewObject(env, LDKEvent_PaymentForwarded_class, LDKEvent_PaymentForwarded_meth, fee_earned_msat_ref, obj->payment_forwarded.claim_from_onchain_tx);
+               }
+               case LDKEvent_ChannelClosed: {
+                       int8_tArray channel_id_arr = (*env)->NewByteArray(env, 32);
+                       (*env)->SetByteArrayRegion(env, channel_id_arr, 0, 32, obj->channel_closed.channel_id.data);
+                       uint64_t reason_ref = ((uint64_t)&obj->channel_closed.reason) | 1;
+                       return (*env)->NewObject(env, LDKEvent_ChannelClosed_class, LDKEvent_ChannelClosed_meth, channel_id_arr, obj->channel_closed.user_channel_id, reason_ref);
+               }
+               case LDKEvent_DiscardFunding: {
+                       int8_tArray channel_id_arr = (*env)->NewByteArray(env, 32);
+                       (*env)->SetByteArrayRegion(env, channel_id_arr, 0, 32, obj->discard_funding.channel_id.data);
+                       LDKTransaction transaction_var = obj->discard_funding.transaction;
+                       int8_tArray transaction_arr = (*env)->NewByteArray(env, transaction_var.datalen);
+                       (*env)->SetByteArrayRegion(env, transaction_arr, 0, transaction_var.datalen, transaction_var.data);
+                       return (*env)->NewObject(env, LDKEvent_DiscardFunding_class, LDKEvent_DiscardFunding_meth, channel_id_arr, transaction_arr);
+               }
+               default: abort();
+       }
+}
+static jclass LDKCOption_EventZ_Some_class = NULL;
+static jmethodID LDKCOption_EventZ_Some_meth = NULL;
+static jclass LDKCOption_EventZ_None_class = NULL;
+static jmethodID LDKCOption_EventZ_None_meth = NULL;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1EventZ_init (JNIEnv *env, jclass clz) {
+       LDKCOption_EventZ_Some_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKCOption_EventZ$Some;"));
+       CHECK(LDKCOption_EventZ_Some_class != NULL);
+       LDKCOption_EventZ_Some_meth = (*env)->GetMethodID(env, LDKCOption_EventZ_Some_class, "<init>", "(J)V");
+       CHECK(LDKCOption_EventZ_Some_meth != NULL);
+       LDKCOption_EventZ_None_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKCOption_EventZ$None;"));
+       CHECK(LDKCOption_EventZ_None_class != NULL);
+       LDKCOption_EventZ_None_meth = (*env)->GetMethodID(env, LDKCOption_EventZ_None_class, "<init>", "()V");
+       CHECK(LDKCOption_EventZ_None_meth != NULL);
+}
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1EventZ_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
+       LDKCOption_EventZ *obj = (LDKCOption_EventZ*)(ptr & ~1);
+       switch(obj->tag) {
+               case LDKCOption_EventZ_Some: {
+                       uint64_t some_ref = ((uint64_t)&obj->some) | 1;
+                       return (*env)->NewObject(env, LDKCOption_EventZ_Some_class, LDKCOption_EventZ_Some_meth, some_ref);
+               }
+               case LDKCOption_EventZ_None: {
+                       return (*env)->NewObject(env, LDKCOption_EventZ_None_class, LDKCOption_EventZ_None_meth);
+               }
+               default: abort();
+       }
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1COption_1EventZDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_COption_EventZDecodeErrorZ *val = (LDKCResult_COption_EventZDecodeErrorZ*)(arg & ~1);
+       CHECK(val->result_ok);
+       uint64_t res_ref = ((uint64_t)&(*val->contents.result)) | 1;
+       return res_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1COption_1EventZDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_COption_EventZDecodeErrorZ *val = (LDKCResult_COption_EventZDecodeErrorZ*)(arg & ~1);
+       CHECK(!val->result_ok);
+       LDKDecodeError err_var = (*val->contents.err);
+       uint64_t err_ref = 0;
+       CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+       CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
+       err_ref = (uint64_t)err_var.inner & ~1;
+       return err_ref;
+}
 static jclass LDKErrorAction_DisconnectPeer_class = NULL;
 static jmethodID LDKErrorAction_DisconnectPeer_meth = NULL;
 static jclass LDKErrorAction_IgnoreError_class = NULL;
@@ -1846,6 +2026,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKErrorAction_1ref_1from_1
                        if ((uint64_t)msg_var.inner > 4096) {
                                CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                                CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                                msg_ref = (uint64_t)msg_var.inner & ~1;
                        }
                        return (*env)->NewObject(env, LDKErrorAction_DisconnectPeer_class, LDKErrorAction_DisconnectPeer_meth, msg_ref);
@@ -1862,6 +2043,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKErrorAction_1ref_1from_1
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return (*env)->NewObject(env, LDKErrorAction_SendErrorMessage_class, LDKErrorAction_SendErrorMessage_meth, msg_ref);
                }
@@ -2013,6 +2195,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMessageSendEvent_1ref_1f
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return (*env)->NewObject(env, LDKMessageSendEvent_SendAcceptChannel_class, LDKMessageSendEvent_SendAcceptChannel_meth, node_id_arr, msg_ref);
                }
@@ -2023,6 +2206,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMessageSendEvent_1ref_1f
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return (*env)->NewObject(env, LDKMessageSendEvent_SendOpenChannel_class, LDKMessageSendEvent_SendOpenChannel_meth, node_id_arr, msg_ref);
                }
@@ -2033,6 +2217,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMessageSendEvent_1ref_1f
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return (*env)->NewObject(env, LDKMessageSendEvent_SendFundingCreated_class, LDKMessageSendEvent_SendFundingCreated_meth, node_id_arr, msg_ref);
                }
@@ -2043,6 +2228,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMessageSendEvent_1ref_1f
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return (*env)->NewObject(env, LDKMessageSendEvent_SendFundingSigned_class, LDKMessageSendEvent_SendFundingSigned_meth, node_id_arr, msg_ref);
                }
@@ -2053,6 +2239,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMessageSendEvent_1ref_1f
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return (*env)->NewObject(env, LDKMessageSendEvent_SendFundingLocked_class, LDKMessageSendEvent_SendFundingLocked_meth, node_id_arr, msg_ref);
                }
@@ -2063,6 +2250,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMessageSendEvent_1ref_1f
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return (*env)->NewObject(env, LDKMessageSendEvent_SendAnnouncementSignatures_class, LDKMessageSendEvent_SendAnnouncementSignatures_meth, node_id_arr, msg_ref);
                }
@@ -2073,6 +2261,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMessageSendEvent_1ref_1f
                        uint64_t updates_ref = 0;
                        CHECK((((uint64_t)updates_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&updates_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(updates_var);
                        updates_ref = (uint64_t)updates_var.inner & ~1;
                        return (*env)->NewObject(env, LDKMessageSendEvent_UpdateHTLCs_class, LDKMessageSendEvent_UpdateHTLCs_meth, node_id_arr, updates_ref);
                }
@@ -2083,6 +2272,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMessageSendEvent_1ref_1f
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return (*env)->NewObject(env, LDKMessageSendEvent_SendRevokeAndACK_class, LDKMessageSendEvent_SendRevokeAndACK_meth, node_id_arr, msg_ref);
                }
@@ -2093,6 +2283,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMessageSendEvent_1ref_1f
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return (*env)->NewObject(env, LDKMessageSendEvent_SendClosingSigned_class, LDKMessageSendEvent_SendClosingSigned_meth, node_id_arr, msg_ref);
                }
@@ -2103,6 +2294,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMessageSendEvent_1ref_1f
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return (*env)->NewObject(env, LDKMessageSendEvent_SendShutdown_class, LDKMessageSendEvent_SendShutdown_meth, node_id_arr, msg_ref);
                }
@@ -2113,6 +2305,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMessageSendEvent_1ref_1f
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return (*env)->NewObject(env, LDKMessageSendEvent_SendChannelReestablish_class, LDKMessageSendEvent_SendChannelReestablish_meth, node_id_arr, msg_ref);
                }
@@ -2121,11 +2314,13 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMessageSendEvent_1ref_1f
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        LDKChannelUpdate update_msg_var = obj->broadcast_channel_announcement.update_msg;
                        uint64_t update_msg_ref = 0;
                        CHECK((((uint64_t)update_msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&update_msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_msg_var);
                        update_msg_ref = (uint64_t)update_msg_var.inner & ~1;
                        return (*env)->NewObject(env, LDKMessageSendEvent_BroadcastChannelAnnouncement_class, LDKMessageSendEvent_BroadcastChannelAnnouncement_meth, msg_ref, update_msg_ref);
                }
@@ -2134,6 +2329,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMessageSendEvent_1ref_1f
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return (*env)->NewObject(env, LDKMessageSendEvent_BroadcastNodeAnnouncement_class, LDKMessageSendEvent_BroadcastNodeAnnouncement_meth, msg_ref);
                }
@@ -2142,6 +2338,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMessageSendEvent_1ref_1f
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return (*env)->NewObject(env, LDKMessageSendEvent_BroadcastChannelUpdate_class, LDKMessageSendEvent_BroadcastChannelUpdate_meth, msg_ref);
                }
@@ -2152,6 +2349,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMessageSendEvent_1ref_1f
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return (*env)->NewObject(env, LDKMessageSendEvent_SendChannelUpdate_class, LDKMessageSendEvent_SendChannelUpdate_meth, node_id_arr, msg_ref);
                }
@@ -2168,6 +2366,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMessageSendEvent_1ref_1f
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return (*env)->NewObject(env, LDKMessageSendEvent_SendChannelRangeQuery_class, LDKMessageSendEvent_SendChannelRangeQuery_meth, node_id_arr, msg_ref);
                }
@@ -2178,6 +2377,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMessageSendEvent_1ref_1f
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return (*env)->NewObject(env, LDKMessageSendEvent_SendShortIdsQuery_class, LDKMessageSendEvent_SendShortIdsQuery_meth, node_id_arr, msg_ref);
                }
@@ -2188,32 +2388,13 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMessageSendEvent_1ref_1f
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return (*env)->NewObject(env, LDKMessageSendEvent_SendReplyChannelRange_class, LDKMessageSendEvent_SendReplyChannelRange_meth, node_id_arr, msg_ref);
                }
                default: abort();
        }
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1MessageSendEventZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_MessageSendEventZ *ret = MALLOC(sizeof(LDKCVec_MessageSendEventZ), "LDKCVec_MessageSendEventZ");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKMessageSendEvent) * ret->datalen, "LDKCVec_MessageSendEventZ Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       int64_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKMessageSendEvent arr_elem_conv = *(LDKMessageSendEvent*)(arr_elem_ptr);
-                       arr_elem_conv = MessageSendEvent_clone((LDKMessageSendEvent*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_MessageSendEventZ CVec_MessageSendEventZ_clone(const LDKCVec_MessageSendEventZ *orig) {
        LDKCVec_MessageSendEventZ ret = { .data = MALLOC(sizeof(LDKMessageSendEvent) * orig->datalen, "LDKCVec_MessageSendEventZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -2221,9 +2402,6 @@ static inline LDKCVec_MessageSendEventZ CVec_MessageSendEventZ_clone(const LDKCV
        }
        return ret;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InitFeaturesDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_InitFeaturesDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InitFeaturesDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_InitFeaturesDecodeErrorZ *val = (LDKCResult_InitFeaturesDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -2231,6 +2409,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InitFeaturesDec
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -2241,12 +2420,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InitFeaturesDec
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeFeaturesDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_NodeFeaturesDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeFeaturesDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_NodeFeaturesDecodeErrorZ *val = (LDKCResult_NodeFeaturesDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -2254,6 +2431,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeFeaturesDec
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -2264,12 +2442,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeFeaturesDec
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelFeaturesDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_ChannelFeaturesDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelFeaturesDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_ChannelFeaturesDecodeErrorZ *val = (LDKCResult_ChannelFeaturesDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -2277,6 +2453,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelFeatures
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -2287,12 +2464,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelFeatures
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InvoiceFeaturesDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_InvoiceFeaturesDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InvoiceFeaturesDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_InvoiceFeaturesDecodeErrorZ *val = (LDKCResult_InvoiceFeaturesDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -2300,6 +2475,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InvoiceFeatures
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -2310,12 +2486,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InvoiceFeatures
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ScoringParametersDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_ScoringParametersDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ScoringParametersDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_ScoringParametersDecodeErrorZ *val = (LDKCResult_ScoringParametersDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -2323,6 +2497,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ScoringParamete
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -2333,12 +2508,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ScoringParamete
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ScorerDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_ScorerDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ScorerDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_ScorerDecodeErrorZ *val = (LDKCResult_ScorerDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -2346,6 +2519,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ScorerDecodeErr
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -2356,12 +2530,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ScorerDecodeErr
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1DelayedPaymentOutputDescriptorDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1DelayedPaymentOutputDescriptorDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ *val = (LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -2369,6 +2541,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1DelayedPaymentO
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -2379,12 +2552,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1DelayedPaymentO
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1StaticPaymentOutputDescriptorDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1StaticPaymentOutputDescriptorDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ *val = (LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -2392,6 +2563,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1StaticPaymentOu
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -2402,12 +2574,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1StaticPaymentOu
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SpendableOutputDescriptorDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_SpendableOutputDescriptorDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SpendableOutputDescriptorDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_SpendableOutputDescriptorDecodeErrorZ *val = (LDKCResult_SpendableOutputDescriptorDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -2421,12 +2591,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SpendableOutput
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneNoneZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_NoneNoneZ*)arg)->result_ok;
-}
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_NoneNoneZ *val = (LDKCResult_NoneNoneZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -2466,9 +2634,6 @@ JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1SignatureCVec
        return ret_arr;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1C2Tuple_1SignatureCVec_1SignatureZZNoneZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1C2Tuple_1SignatureCVec_1SignatureZZNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ *val = (LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -2482,9 +2647,6 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1C2Tuple_1Signature
        CHECK(!val->result_ok);
        return *val->contents.err;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SignatureNoneZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_SignatureNoneZ*)arg)->result_ok;
-}
 JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SignatureNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_SignatureNoneZ *val = (LDKCResult_SignatureNoneZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -2594,6 +2756,7 @@ LDKCResult_NoneNoneZ validate_holder_commitment_LDKBaseSign_jcall(const void* th
        holder_tx_var = HolderCommitmentTransaction_clone(holder_tx);
        CHECK((((uint64_t)holder_tx_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&holder_tx_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(holder_tx_var);
        holder_tx_ref = (uint64_t)holder_tx_var.inner;
        if (holder_tx_var.is_owned) {
                holder_tx_ref |= 1;
@@ -2608,7 +2771,7 @@ LDKCResult_NoneNoneZ validate_holder_commitment_LDKBaseSign_jcall(const void* th
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneNoneZ ret_conv = *(LDKCResult_NoneNoneZ*)(ret_ptr);
-       ret_conv = CResult_NoneNoneZ_clone((LDKCResult_NoneNoneZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -2652,6 +2815,7 @@ LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ sign_counterparty_commitment_L
        commitment_tx_var = CommitmentTransaction_clone(commitment_tx);
        CHECK((((uint64_t)commitment_tx_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&commitment_tx_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(commitment_tx_var);
        commitment_tx_ref = (uint64_t)commitment_tx_var.inner;
        if (commitment_tx_var.is_owned) {
                commitment_tx_ref |= 1;
@@ -2666,7 +2830,7 @@ LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ sign_counterparty_commitment_L
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ ret_conv = *(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)(ret_ptr);
-       ret_conv = CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone((LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -2693,7 +2857,7 @@ LDKCResult_NoneNoneZ validate_counterparty_revocation_LDKBaseSign_jcall(const vo
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneNoneZ ret_conv = *(LDKCResult_NoneNoneZ*)(ret_ptr);
-       ret_conv = CResult_NoneNoneZ_clone((LDKCResult_NoneNoneZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -2713,6 +2877,7 @@ LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ sign_holder_commitment_and_htl
        commitment_tx_var = HolderCommitmentTransaction_clone(commitment_tx);
        CHECK((((uint64_t)commitment_tx_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&commitment_tx_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(commitment_tx_var);
        commitment_tx_ref = (uint64_t)commitment_tx_var.inner;
        if (commitment_tx_var.is_owned) {
                commitment_tx_ref |= 1;
@@ -2727,7 +2892,7 @@ LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ sign_holder_commitment_and_htl
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ ret_conv = *(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)(ret_ptr);
-       ret_conv = CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone((LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -2758,7 +2923,7 @@ LDKCResult_SignatureNoneZ sign_justice_revoked_output_LDKBaseSign_jcall(const vo
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)(ret_ptr);
-       ret_conv = CResult_SignatureNoneZ_clone((LDKCResult_SignatureNoneZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -2784,6 +2949,7 @@ LDKCResult_SignatureNoneZ sign_justice_revoked_htlc_LDKBaseSign_jcall(const void
        htlc_var = HTLCOutputInCommitment_clone(htlc);
        CHECK((((uint64_t)htlc_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&htlc_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(htlc_var);
        htlc_ref = (uint64_t)htlc_var.inner;
        if (htlc_var.is_owned) {
                htlc_ref |= 1;
@@ -2798,7 +2964,7 @@ LDKCResult_SignatureNoneZ sign_justice_revoked_htlc_LDKBaseSign_jcall(const void
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)(ret_ptr);
-       ret_conv = CResult_SignatureNoneZ_clone((LDKCResult_SignatureNoneZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -2824,6 +2990,7 @@ LDKCResult_SignatureNoneZ sign_counterparty_htlc_transaction_LDKBaseSign_jcall(c
        htlc_var = HTLCOutputInCommitment_clone(htlc);
        CHECK((((uint64_t)htlc_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&htlc_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(htlc_var);
        htlc_ref = (uint64_t)htlc_var.inner;
        if (htlc_var.is_owned) {
                htlc_ref |= 1;
@@ -2838,7 +3005,7 @@ LDKCResult_SignatureNoneZ sign_counterparty_htlc_transaction_LDKBaseSign_jcall(c
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)(ret_ptr);
-       ret_conv = CResult_SignatureNoneZ_clone((LDKCResult_SignatureNoneZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -2858,6 +3025,7 @@ LDKCResult_SignatureNoneZ sign_closing_transaction_LDKBaseSign_jcall(const void*
        closing_tx_var = ClosingTransaction_clone(closing_tx);
        CHECK((((uint64_t)closing_tx_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&closing_tx_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(closing_tx_var);
        closing_tx_ref = (uint64_t)closing_tx_var.inner;
        if (closing_tx_var.is_owned) {
                closing_tx_ref |= 1;
@@ -2872,7 +3040,7 @@ LDKCResult_SignatureNoneZ sign_closing_transaction_LDKBaseSign_jcall(const void*
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)(ret_ptr);
-       ret_conv = CResult_SignatureNoneZ_clone((LDKCResult_SignatureNoneZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -2892,6 +3060,7 @@ LDKCResult_SignatureNoneZ sign_channel_announcement_LDKBaseSign_jcall(const void
        msg_var = UnsignedChannelAnnouncement_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -2906,7 +3075,7 @@ LDKCResult_SignatureNoneZ sign_channel_announcement_LDKBaseSign_jcall(const void
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)(ret_ptr);
-       ret_conv = CResult_SignatureNoneZ_clone((LDKCResult_SignatureNoneZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -2926,6 +3095,7 @@ void ready_channel_LDKBaseSign_jcall(void* this_arg, const LDKChannelTransaction
        channel_parameters_var = ChannelTransactionParameters_clone(channel_parameters);
        CHECK((((uint64_t)channel_parameters_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&channel_parameters_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_parameters_var);
        channel_parameters_ref = (uint64_t)channel_parameters_var.inner;
        if (channel_parameters_var.is_owned) {
                channel_parameters_ref |= 1;
@@ -2978,7 +3148,7 @@ static inline LDKBaseSign LDKBaseSign_init (JNIEnv *env, jclass clz, jobject o,
        LDKChannelPublicKeys pubkeys_conv;
        pubkeys_conv.inner = (void*)(pubkeys & (~1));
        pubkeys_conv.is_owned = (pubkeys & 1) || (pubkeys == 0);
-       pubkeys_conv = ChannelPublicKeys_clone(&pubkeys_conv);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(pubkeys_conv);
 
        LDKBaseSign ret = {
                .this_arg = (void*) calls,
@@ -3031,6 +3201,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BaseSign_1validate_1holder_
        LDKHolderCommitmentTransaction holder_tx_conv;
        holder_tx_conv.inner = (void*)(holder_tx & (~1));
        holder_tx_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(holder_tx_conv);
        LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
        *ret_conv = (this_arg_conv->validate_holder_commitment)(this_arg_conv->this_arg, &holder_tx_conv);
        return (uint64_t)ret_conv;
@@ -3052,6 +3223,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BaseSign_1sign_1counterpart
        LDKCommitmentTransaction commitment_tx_conv;
        commitment_tx_conv.inner = (void*)(commitment_tx & (~1));
        commitment_tx_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(commitment_tx_conv);
        LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ), "LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ");
        *ret_conv = (this_arg_conv->sign_counterparty_commitment)(this_arg_conv->this_arg, &commitment_tx_conv);
        return (uint64_t)ret_conv;
@@ -3077,6 +3249,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BaseSign_1sign_1holder_1com
        LDKHolderCommitmentTransaction commitment_tx_conv;
        commitment_tx_conv.inner = (void*)(commitment_tx & (~1));
        commitment_tx_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(commitment_tx_conv);
        LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ), "LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ");
        *ret_conv = (this_arg_conv->sign_holder_commitment_and_htlcs)(this_arg_conv->this_arg, &commitment_tx_conv);
        return (uint64_t)ret_conv;
@@ -3116,6 +3289,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BaseSign_1sign_1justice_1re
        LDKHTLCOutputInCommitment htlc_conv;
        htlc_conv.inner = (void*)(htlc & (~1));
        htlc_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(htlc_conv);
        LDKCResult_SignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignatureNoneZ), "LDKCResult_SignatureNoneZ");
        *ret_conv = (this_arg_conv->sign_justice_revoked_htlc)(this_arg_conv->this_arg, justice_tx_ref, input, amount, per_commitment_key_ref, &htlc_conv);
        return (uint64_t)ret_conv;
@@ -3136,6 +3310,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BaseSign_1sign_1counterpart
        LDKHTLCOutputInCommitment htlc_conv;
        htlc_conv.inner = (void*)(htlc & (~1));
        htlc_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(htlc_conv);
        LDKCResult_SignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignatureNoneZ), "LDKCResult_SignatureNoneZ");
        *ret_conv = (this_arg_conv->sign_counterparty_htlc_transaction)(this_arg_conv->this_arg, htlc_tx_ref, input, amount, per_commitment_point_ref, &htlc_conv);
        return (uint64_t)ret_conv;
@@ -3148,6 +3323,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BaseSign_1sign_1closing_1tr
        LDKClosingTransaction closing_tx_conv;
        closing_tx_conv.inner = (void*)(closing_tx & (~1));
        closing_tx_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(closing_tx_conv);
        LDKCResult_SignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignatureNoneZ), "LDKCResult_SignatureNoneZ");
        *ret_conv = (this_arg_conv->sign_closing_transaction)(this_arg_conv->this_arg, &closing_tx_conv);
        return (uint64_t)ret_conv;
@@ -3160,6 +3336,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BaseSign_1sign_1channel_1an
        LDKUnsignedChannelAnnouncement msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        LDKCResult_SignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignatureNoneZ), "LDKCResult_SignatureNoneZ");
        *ret_conv = (this_arg_conv->sign_channel_announcement)(this_arg_conv->this_arg, &msg_conv);
        return (uint64_t)ret_conv;
@@ -3172,6 +3349,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BaseSign_1ready_1channel(JNIEn
        LDKChannelTransactionParameters channel_parameters_conv;
        channel_parameters_conv.inner = (void*)(channel_parameters & (~1));
        channel_parameters_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_parameters_conv);
        (this_arg_conv->ready_channel)(this_arg_conv->this_arg, &channel_parameters_conv);
 }
 
@@ -3188,6 +3366,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BaseSign_1get_1pubkeys(JNIE
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -3262,7 +3441,7 @@ static inline LDKSign LDKSign_init (JNIEnv *env, jclass clz, jobject o, jobject
        LDKChannelPublicKeys pubkeys_conv;
        pubkeys_conv.inner = (void*)(pubkeys & (~1));
        pubkeys_conv.is_owned = (pubkeys & 1) || (pubkeys == 0);
-       pubkeys_conv = ChannelPublicKeys_clone(&pubkeys_conv);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(pubkeys_conv);
 
        LDKSign ret = {
                .this_arg = (void*) calls,
@@ -3296,9 +3475,6 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Sign_1write(JNIEnv *env
        return ret_arr;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SignDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_SignDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SignDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_SignDecodeErrorZ *val = (LDKCResult_SignDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3313,12 +3489,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SignDecodeError
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RecoverableSignatureNoneZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_RecoverableSignatureNoneZ*)arg)->result_ok;
-}
 JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RecoverableSignatureNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_RecoverableSignatureNoneZ *val = (LDKCResult_RecoverableSignatureNoneZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3338,9 +3512,6 @@ static inline LDKCVec_CVec_u8ZZ CVec_CVec_u8ZZ_clone(const LDKCVec_CVec_u8ZZ *or
        }
        return ret;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CVec_1CVec_1u8ZZNoneZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_CVec_CVec_u8ZZNoneZ*)arg)->result_ok;
-}
 JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CVec_1CVec_1u8ZZNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_CVec_CVec_u8ZZNoneZ *val = (LDKCResult_CVec_CVec_u8ZZNoneZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3362,9 +3533,6 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CVec_1CVec_1u8ZZNo
        CHECK(!val->result_ok);
        return *val->contents.err;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InMemorySignerDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_InMemorySignerDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InMemorySignerDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_InMemorySignerDecodeErrorZ *val = (LDKCResult_InMemorySignerDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3372,6 +3540,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InMemorySignerD
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -3382,29 +3551,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InMemorySignerD
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1TxOutZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_TxOutZ *ret = MALLOC(sizeof(LDKCVec_TxOutZ), "LDKCVec_TxOutZ");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKTxOut) * ret->datalen, "LDKCVec_TxOutZ Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       int64_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKTxOut arr_elem_conv = *(LDKTxOut*)(arr_elem_ptr);
-                       arr_elem_conv = TxOut_clone((LDKTxOut*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_TxOutZ CVec_TxOutZ_clone(const LDKCVec_TxOutZ *orig) {
        LDKCVec_TxOutZ ret = { .data = MALLOC(sizeof(LDKTxOut) * orig->datalen, "LDKCVec_TxOutZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -3412,9 +3562,6 @@ static inline LDKCVec_TxOutZ CVec_TxOutZ_clone(const LDKCVec_TxOutZ *orig) {
        }
        return ret;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TransactionNoneZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_TransactionNoneZ*)arg)->result_ok;
-}
 JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TransactionNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_TransactionNoneZ *val = (LDKCResult_TransactionNoneZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3447,6 +3594,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelMo
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -3454,26 +3602,6 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelMo
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1C2Tuple_1BlockHashChannelMonitorZZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_C2Tuple_BlockHashChannelMonitorZZ *ret = MALLOC(sizeof(LDKCVec_C2Tuple_BlockHashChannelMonitorZZ), "LDKCVec_C2Tuple_BlockHashChannelMonitorZZ");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKC2Tuple_BlockHashChannelMonitorZ) * ret->datalen, "LDKCVec_C2Tuple_BlockHashChannelMonitorZZ Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       int64_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKC2Tuple_BlockHashChannelMonitorZ arr_elem_conv = *(LDKC2Tuple_BlockHashChannelMonitorZ*)(arr_elem_ptr);
-                       arr_elem_conv = C2Tuple_BlockHashChannelMonitorZ_clone((LDKC2Tuple_BlockHashChannelMonitorZ*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_C2Tuple_BlockHashChannelMonitorZZ CVec_C2Tuple_BlockHashChannelMonitorZZ_clone(const LDKCVec_C2Tuple_BlockHashChannelMonitorZZ *orig) {
        LDKCVec_C2Tuple_BlockHashChannelMonitorZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_BlockHashChannelMonitorZ) * orig->datalen, "LDKCVec_C2Tuple_BlockHashChannelMonitorZZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -3481,9 +3609,6 @@ static inline LDKCVec_C2Tuple_BlockHashChannelMonitorZZ CVec_C2Tuple_BlockHashCh
        }
        return ret;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CVec_1C2Tuple_1BlockHashChannelMonitorZZErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CVec_1C2Tuple_1BlockHashChannelMonitorZZErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ *val = (LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3609,15 +3734,13 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKAPIError_1ref_1from_1ptr
                        uint64_t script_ref = 0;
                        CHECK((((uint64_t)script_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&script_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(script_var);
                        script_ref = (uint64_t)script_var.inner & ~1;
                        return (*env)->NewObject(env, LDKAPIError_IncompatibleShutdownScript_class, LDKAPIError_IncompatibleShutdownScript_meth, script_ref);
                }
                default: abort();
        }
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneAPIErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_NoneAPIErrorZ*)arg)->result_ok;
-}
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneAPIErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_NoneAPIErrorZ *val = (LDKCResult_NoneAPIErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3629,26 +3752,6 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneAPIErrorZ_1
        uint64_t err_ref = ((uint64_t)&(*val->contents.err)) | 1;
        return err_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1CResult_1NoneAPIErrorZZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_CResult_NoneAPIErrorZZ *ret = MALLOC(sizeof(LDKCVec_CResult_NoneAPIErrorZZ), "LDKCVec_CResult_NoneAPIErrorZZ");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKCResult_NoneAPIErrorZ) * ret->datalen, "LDKCVec_CResult_NoneAPIErrorZZ Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       int64_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKCResult_NoneAPIErrorZ arr_elem_conv = *(LDKCResult_NoneAPIErrorZ*)(arr_elem_ptr);
-                       arr_elem_conv = CResult_NoneAPIErrorZ_clone((LDKCResult_NoneAPIErrorZ*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_CResult_NoneAPIErrorZZ CVec_CResult_NoneAPIErrorZZ_clone(const LDKCVec_CResult_NoneAPIErrorZZ *orig) {
        LDKCVec_CResult_NoneAPIErrorZZ ret = { .data = MALLOC(sizeof(LDKCResult_NoneAPIErrorZ) * orig->datalen, "LDKCVec_CResult_NoneAPIErrorZZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -3656,26 +3759,6 @@ static inline LDKCVec_CResult_NoneAPIErrorZZ CVec_CResult_NoneAPIErrorZZ_clone(c
        }
        return ret;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1APIErrorZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_APIErrorZ *ret = MALLOC(sizeof(LDKCVec_APIErrorZ), "LDKCVec_APIErrorZ");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKAPIError) * ret->datalen, "LDKCVec_APIErrorZ Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       int64_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKAPIError arr_elem_conv = *(LDKAPIError*)(arr_elem_ptr);
-                       arr_elem_conv = APIError_clone((LDKAPIError*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_APIErrorZ CVec_APIErrorZ_clone(const LDKCVec_APIErrorZ *orig) {
        LDKCVec_APIErrorZ ret = { .data = MALLOC(sizeof(LDKAPIError) * orig->datalen, "LDKCVec_APIErrorZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -3683,9 +3766,6 @@ static inline LDKCVec_APIErrorZ CVec_APIErrorZ_clone(const LDKCVec_APIErrorZ *or
        }
        return ret;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1_1u832APIErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult__u832APIErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_LDKCResult_1_1u832APIErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult__u832APIErrorZ *val = (LDKCResult__u832APIErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3779,6 +3859,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKPaymentSendFailure_1ref_
                        if ((uint64_t)failed_paths_retry_var.inner > 4096) {
                                CHECK((((uint64_t)failed_paths_retry_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                                CHECK((((uint64_t)&failed_paths_retry_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(failed_paths_retry_var);
                                failed_paths_retry_ref = (uint64_t)failed_paths_retry_var.inner & ~1;
                        }
                        int8_tArray payment_id_arr = (*env)->NewByteArray(env, 32);
@@ -3788,9 +3869,6 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKPaymentSendFailure_1ref_
                default: abort();
        }
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PaymentIdPaymentSendFailureZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_PaymentIdPaymentSendFailureZ*)arg)->result_ok;
-}
 JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PaymentIdPaymentSendFailureZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_PaymentIdPaymentSendFailureZ *val = (LDKCResult_PaymentIdPaymentSendFailureZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3804,9 +3882,6 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PaymentIdPaymen
        uint64_t err_ref = ((uint64_t)&(*val->contents.err)) | 1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NonePaymentSendFailureZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_NonePaymentSendFailureZ*)arg)->result_ok;
-}
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NonePaymentSendFailureZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_NonePaymentSendFailureZ *val = (LDKCResult_NonePaymentSendFailureZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3838,9 +3913,6 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PaymentHashPay
        return ret_arr;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1C2Tuple_1PaymentHashPaymentIdZPaymentSendFailureZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1C2Tuple_1PaymentHashPaymentIdZPaymentSendFailureZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ *val = (LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3911,26 +3983,6 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKNetAddress_1ref_1from_1p
                default: abort();
        }
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1NetAddressZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_NetAddressZ *ret = MALLOC(sizeof(LDKCVec_NetAddressZ), "LDKCVec_NetAddressZ");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKNetAddress) * ret->datalen, "LDKCVec_NetAddressZ Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       int64_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKNetAddress arr_elem_conv = *(LDKNetAddress*)(arr_elem_ptr);
-                       arr_elem_conv = NetAddress_clone((LDKNetAddress*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_NetAddressZ CVec_NetAddressZ_clone(const LDKCVec_NetAddressZ *orig) {
        LDKCVec_NetAddressZ ret = { .data = MALLOC(sizeof(LDKNetAddress) * orig->datalen, "LDKCVec_NetAddressZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -3958,9 +4010,6 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PaymentHashPay
        return ret_arr;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PaymentSecretAPIErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_PaymentSecretAPIErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PaymentSecretAPIErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_PaymentSecretAPIErrorZ *val = (LDKCResult_PaymentSecretAPIErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3974,26 +4023,6 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PaymentSecretAP
        uint64_t err_ref = ((uint64_t)&(*val->contents.err)) | 1;
        return err_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1ChannelMonitorZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_ChannelMonitorZ *ret = MALLOC(sizeof(LDKCVec_ChannelMonitorZ), "LDKCVec_ChannelMonitorZ");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKChannelMonitor) * ret->datalen, "LDKCVec_ChannelMonitorZ Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       int64_t arr_elem = java_elems[i];
-                       LDKChannelMonitor arr_elem_conv;
-                       arr_elem_conv.inner = (void*)(arr_elem & (~1));
-                       arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0);
-                       arr_elem_conv = ChannelMonitor_clone(&arr_elem_conv);
-                       ret->data[i] = arr_elem_conv;
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_ChannelMonitorZ CVec_ChannelMonitorZ_clone(const LDKCVec_ChannelMonitorZ *orig) {
        LDKCVec_ChannelMonitorZ ret = { .data = MALLOC(sizeof(LDKChannelMonitor) * orig->datalen, "LDKCVec_ChannelMonitorZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -4039,6 +4068,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ watch_channel_LDKWatch_jcall(const void*
        uint64_t funding_txo_ref = 0;
        CHECK((((uint64_t)funding_txo_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&funding_txo_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_txo_var);
        funding_txo_ref = (uint64_t)funding_txo_var.inner;
        if (funding_txo_var.is_owned) {
                funding_txo_ref |= 1;
@@ -4047,6 +4077,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ watch_channel_LDKWatch_jcall(const void*
        uint64_t monitor_ref = 0;
        CHECK((((uint64_t)monitor_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&monitor_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(monitor_var);
        monitor_ref = (uint64_t)monitor_var.inner;
        if (monitor_var.is_owned) {
                monitor_ref |= 1;
@@ -4061,7 +4092,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ watch_channel_LDKWatch_jcall(const void*
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneChannelMonitorUpdateErrZ ret_conv = *(LDKCResult_NoneChannelMonitorUpdateErrZ*)(ret_ptr);
-       ret_conv = CResult_NoneChannelMonitorUpdateErrZ_clone((LDKCResult_NoneChannelMonitorUpdateErrZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -4080,6 +4111,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ update_channel_LDKWatch_jcall(const void
        uint64_t funding_txo_ref = 0;
        CHECK((((uint64_t)funding_txo_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&funding_txo_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_txo_var);
        funding_txo_ref = (uint64_t)funding_txo_var.inner;
        if (funding_txo_var.is_owned) {
                funding_txo_ref |= 1;
@@ -4088,6 +4120,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ update_channel_LDKWatch_jcall(const void
        uint64_t update_ref = 0;
        CHECK((((uint64_t)update_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&update_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_var);
        update_ref = (uint64_t)update_var.inner;
        if (update_var.is_owned) {
                update_ref |= 1;
@@ -4102,7 +4135,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ update_channel_LDKWatch_jcall(const void
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneChannelMonitorUpdateErrZ ret_conv = *(LDKCResult_NoneChannelMonitorUpdateErrZ*)(ret_ptr);
-       ret_conv = CResult_NoneChannelMonitorUpdateErrZ_clone((LDKCResult_NoneChannelMonitorUpdateErrZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -4136,7 +4169,7 @@ LDKCVec_MonitorEventZ release_pending_monitor_events_LDKWatch_jcall(const void*
                void* ret_conv_14_ptr = (void*)(((uint64_t)ret_conv_14) & ~1);
                CHECK_ACCESS(ret_conv_14_ptr);
                LDKMonitorEvent ret_conv_14_conv = *(LDKMonitorEvent*)(ret_conv_14_ptr);
-               ret_conv_14_conv = MonitorEvent_clone((LDKMonitorEvent*)(((uint64_t)ret_conv_14) & ~1));
+               FREE((void*)ret_conv_14);
                ret_constr.data[o] = ret_conv_14_conv;
        }
        (*env)->ReleaseLongArrayElements(env, ret, ret_vals, 0);
@@ -4184,10 +4217,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Watch_1watch_1channel(JNIEn
        LDKOutPoint funding_txo_conv;
        funding_txo_conv.inner = (void*)(funding_txo & (~1));
        funding_txo_conv.is_owned = (funding_txo & 1) || (funding_txo == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_txo_conv);
        funding_txo_conv = OutPoint_clone(&funding_txo_conv);
        LDKChannelMonitor monitor_conv;
        monitor_conv.inner = (void*)(monitor & (~1));
        monitor_conv.is_owned = (monitor & 1) || (monitor == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(monitor_conv);
        monitor_conv = ChannelMonitor_clone(&monitor_conv);
        LDKCResult_NoneChannelMonitorUpdateErrZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneChannelMonitorUpdateErrZ), "LDKCResult_NoneChannelMonitorUpdateErrZ");
        *ret_conv = (this_arg_conv->watch_channel)(this_arg_conv->this_arg, funding_txo_conv, monitor_conv);
@@ -4201,10 +4236,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Watch_1update_1channel(JNIE
        LDKOutPoint funding_txo_conv;
        funding_txo_conv.inner = (void*)(funding_txo & (~1));
        funding_txo_conv.is_owned = (funding_txo & 1) || (funding_txo == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_txo_conv);
        funding_txo_conv = OutPoint_clone(&funding_txo_conv);
        LDKChannelMonitorUpdate update_conv;
        update_conv.inner = (void*)(update & (~1));
        update_conv.is_owned = (update & 1) || (update == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_conv);
        update_conv = ChannelMonitorUpdate_clone(&update_conv);
        LDKCResult_NoneChannelMonitorUpdateErrZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneChannelMonitorUpdateErrZ), "LDKCResult_NoneChannelMonitorUpdateErrZ");
        *ret_conv = (this_arg_conv->update_channel)(this_arg_conv->this_arg, funding_txo_conv, update_conv);
@@ -4412,7 +4449,7 @@ LDKShutdownScript get_shutdown_scriptpubkey_LDKKeysInterface_jcall(const void* t
        LDKShutdownScript ret_conv;
        ret_conv.inner = (void*)(ret & (~1));
        ret_conv.is_owned = (ret & 1) || (ret == 0);
-       ret_conv = ShutdownScript_clone(&ret_conv);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -4437,7 +4474,7 @@ LDKSign get_channel_signer_LDKKeysInterface_jcall(const void* this_arg, bool inb
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKSign ret_conv = *(LDKSign*)(ret_ptr);
-       ret_conv = Sign_clone(&ret_conv);
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -4489,7 +4526,7 @@ LDKCResult_SignDecodeErrorZ read_chan_signer_LDKKeysInterface_jcall(const void*
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_SignDecodeErrorZ ret_conv = *(LDKCResult_SignDecodeErrorZ*)(ret_ptr);
-       ret_conv = CResult_SignDecodeErrorZ_clone((LDKCResult_SignDecodeErrorZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -4518,7 +4555,7 @@ LDKCResult_RecoverableSignatureNoneZ sign_invoice_LDKKeysInterface_jcall(const v
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_RecoverableSignatureNoneZ ret_conv = *(LDKCResult_RecoverableSignatureNoneZ*)(ret_ptr);
-       ret_conv = CResult_RecoverableSignatureNoneZ_clone((LDKCResult_RecoverableSignatureNoneZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -4596,6 +4633,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_KeysInterface_1get_1shutdow
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -4750,7 +4788,7 @@ static void LDKLogger_JCalls_free(void* this_arg) {
                FREE(j_calls);
        }
 }
-void log_LDKLogger_jcall(const void* this_arg, const char* record) {
+void log_LDKLogger_jcall(const void* this_arg, const LDKRecord * record) {
        LDKLogger_JCalls *j_calls = (LDKLogger_JCalls*) this_arg;
        JNIEnv *env;
        jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);
@@ -4759,11 +4797,19 @@ void log_LDKLogger_jcall(const void* this_arg, const char* record) {
        } else {
                DO_ASSERT(get_jenv_res == JNI_OK);
        }
-       const char* record_str = record;
-       jstring record_conv = str_ref_to_java(env, record_str, strlen(record_str));
+       LDKRecord record_var = *record;
+       uint64_t record_ref = 0;
+       record_var = Record_clone(record);
+       CHECK((((uint64_t)record_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+       CHECK((((uint64_t)&record_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(record_var);
+       record_ref = (uint64_t)record_var.inner;
+       if (record_var.is_owned) {
+               record_ref |= 1;
+       }
        jobject obj = (*env)->NewLocalRef(env, j_calls->o);
        CHECK(obj != NULL);
-       (*env)->CallVoidMethod(env, obj, j_calls->log_meth, record_conv);
+       (*env)->CallVoidMethod(env, obj, j_calls->log_meth, record_ref);
        if ((*env)->ExceptionCheck(env)) {
                (*env)->ExceptionDescribe(env);
                (*env)->FatalError(env, "A call to log in LDKLogger from rust threw an exception.");
@@ -4783,7 +4829,7 @@ static inline LDKLogger LDKLogger_init (JNIEnv *env, jclass clz, jobject o) {
        atomic_init(&calls->refcnt, 1);
        DO_ASSERT((*env)->GetJavaVM(env, &calls->vm) == 0);
        calls->o = (*env)->NewWeakGlobalRef(env, o);
-       calls->log_meth = (*env)->GetMethodID(env, c, "log", "(Ljava/lang/String;)V");
+       calls->log_meth = (*env)->GetMethodID(env, c, "log", "(J)V");
        CHECK(calls->log_meth != NULL);
 
        LDKLogger ret = {
@@ -4817,13 +4863,11 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelMa
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner & ~1;
        return ret_ref;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1C2Tuple_1BlockHashChannelManagerZDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1C2Tuple_1BlockHashChannelManagerZDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ *val = (LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -4838,12 +4882,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1C2Tuple_1BlockH
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelConfigDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_ChannelConfigDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelConfigDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_ChannelConfigDecodeErrorZ *val = (LDKCResult_ChannelConfigDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -4851,6 +4893,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelConfigDe
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -4861,12 +4904,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelConfigDe
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1OutPointDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_OutPointDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1OutPointDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_OutPointDecodeErrorZ *val = (LDKCResult_OutPointDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -4874,6 +4915,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1OutPointDecodeE
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -4884,6 +4926,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1OutPointDecodeE
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
@@ -5072,9 +5115,6 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1TypeZ_1ref_1fro
                default: abort();
        }
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1COption_1TypeZDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_COption_TypeZDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1COption_1TypeZDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_COption_TypeZDecodeErrorZ *val = (LDKCResult_COption_TypeZDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5088,6 +5128,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1COption_1TypeZD
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
@@ -5127,6 +5168,7 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKPaymentError_1ref_1from_
                        uint64_t routing_ref = 0;
                        CHECK((((uint64_t)routing_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&routing_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(routing_var);
                        routing_ref = (uint64_t)routing_var.inner & ~1;
                        return (*env)->NewObject(env, LDKPaymentError_Routing_class, LDKPaymentError_Routing_meth, routing_ref);
                }
@@ -5137,9 +5179,6 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKPaymentError_1ref_1from_
                default: abort();
        }
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PaymentIdPaymentErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_PaymentIdPaymentErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PaymentIdPaymentErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_PaymentIdPaymentErrorZ *val = (LDKCResult_PaymentIdPaymentErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5153,9 +5192,6 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PaymentIdPaymen
        uint64_t err_ref = ((uint64_t)&(*val->contents.err)) | 1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SiPrefixNoneZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_SiPrefixNoneZ*)arg)->result_ok;
-}
 JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SiPrefixNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_SiPrefixNoneZ *val = (LDKCResult_SiPrefixNoneZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5167,9 +5203,6 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SiPrefixNoneZ_1get
        CHECK(!val->result_ok);
        return *val->contents.err;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InvoiceNoneZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_InvoiceNoneZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InvoiceNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_InvoiceNoneZ *val = (LDKCResult_InvoiceNoneZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5177,6 +5210,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InvoiceNoneZ_1g
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5185,9 +5219,6 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InvoiceNoneZ_1get_
        CHECK(!val->result_ok);
        return *val->contents.err;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SignedRawInvoiceNoneZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_SignedRawInvoiceNoneZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SignedRawInvoiceNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_SignedRawInvoiceNoneZ *val = (LDKCResult_SignedRawInvoiceNoneZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5195,6 +5226,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SignedRawInvoic
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5212,6 +5244,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C3Tuple_1RawInvoice_1u832In
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -5238,6 +5271,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C3Tuple_1RawInvoice_1u832In
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -5245,9 +5279,6 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C3Tuple_1RawInvoice_1u832In
        return ret_ref;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PayeePubKeyErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_PayeePubKeyErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PayeePubKeyErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_PayeePubKeyErrorZ *val = (LDKCResult_PayeePubKeyErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5255,6 +5286,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PayeePubKeyErro
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5264,26 +5296,6 @@ JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PayeePubKeyError
        jclass err_conv = LDKSecp256k1Error_to_java(env, (*val->contents.err));
        return err_conv;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1PrivateRouteZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_PrivateRouteZ *ret = MALLOC(sizeof(LDKCVec_PrivateRouteZ), "LDKCVec_PrivateRouteZ");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKPrivateRoute) * ret->datalen, "LDKCVec_PrivateRouteZ Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       int64_t arr_elem = java_elems[i];
-                       LDKPrivateRoute arr_elem_conv;
-                       arr_elem_conv.inner = (void*)(arr_elem & (~1));
-                       arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0);
-                       arr_elem_conv = PrivateRoute_clone(&arr_elem_conv);
-                       ret->data[i] = arr_elem_conv;
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_PrivateRouteZ CVec_PrivateRouteZ_clone(const LDKCVec_PrivateRouteZ *orig) {
        LDKCVec_PrivateRouteZ ret = { .data = MALLOC(sizeof(LDKPrivateRoute) * orig->datalen, "LDKCVec_PrivateRouteZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -5291,9 +5303,6 @@ static inline LDKCVec_PrivateRouteZ CVec_PrivateRouteZ_clone(const LDKCVec_Priva
        }
        return ret;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PositiveTimestampCreationErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_PositiveTimestampCreationErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PositiveTimestampCreationErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_PositiveTimestampCreationErrorZ *val = (LDKCResult_PositiveTimestampCreationErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5301,6 +5310,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PositiveTimesta
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5310,9 +5320,6 @@ JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PositiveTimestam
        jclass err_conv = LDKCreationError_to_java(env, (*val->contents.err));
        return err_conv;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneSemanticErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_NoneSemanticErrorZ*)arg)->result_ok;
-}
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneSemanticErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_NoneSemanticErrorZ *val = (LDKCResult_NoneSemanticErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5324,9 +5331,6 @@ JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneSemanticErro
        jclass err_conv = LDKSemanticError_to_java(env, (*val->contents.err));
        return err_conv;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InvoiceSemanticErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_InvoiceSemanticErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InvoiceSemanticErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_InvoiceSemanticErrorZ *val = (LDKCResult_InvoiceSemanticErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5334,6 +5338,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InvoiceSemantic
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5343,9 +5348,6 @@ JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InvoiceSemanticE
        jclass err_conv = LDKSemanticError_to_java(env, (*val->contents.err));
        return err_conv;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1DescriptionCreationErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_DescriptionCreationErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1DescriptionCreationErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_DescriptionCreationErrorZ *val = (LDKCResult_DescriptionCreationErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5353,6 +5355,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1DescriptionCrea
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5362,9 +5365,6 @@ JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_LDKCResult_1DescriptionCreat
        jclass err_conv = LDKCreationError_to_java(env, (*val->contents.err));
        return err_conv;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ExpiryTimeCreationErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_ExpiryTimeCreationErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ExpiryTimeCreationErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_ExpiryTimeCreationErrorZ *val = (LDKCResult_ExpiryTimeCreationErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5372,6 +5372,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ExpiryTimeCreat
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5381,9 +5382,6 @@ JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ExpiryTimeCreati
        jclass err_conv = LDKCreationError_to_java(env, (*val->contents.err));
        return err_conv;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PrivateRouteCreationErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_PrivateRouteCreationErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PrivateRouteCreationErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_PrivateRouteCreationErrorZ *val = (LDKCResult_PrivateRouteCreationErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5391,6 +5389,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PrivateRouteCre
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5400,9 +5399,6 @@ JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PrivateRouteCrea
        jclass err_conv = LDKCreationError_to_java(env, (*val->contents.err));
        return err_conv;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1StringErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_StringErrorZ*)arg)->result_ok;
-}
 JNIEXPORT jstring JNICALL Java_org_ldk_impl_bindings_LDKCResult_1StringErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_StringErrorZ *val = (LDKCResult_StringErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5416,9 +5412,6 @@ JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_LDKCResult_1StringErrorZ_1ge
        jclass err_conv = LDKSecp256k1Error_to_java(env, (*val->contents.err));
        return err_conv;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelMonitorUpdateDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_ChannelMonitorUpdateDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelMonitorUpdateDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_ChannelMonitorUpdateDecodeErrorZ *val = (LDKCResult_ChannelMonitorUpdateDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5426,6 +5419,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelMonitorU
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5436,11 +5430,55 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelMonitorU
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1HTLCUpdateDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_HTLCUpdateDecodeErrorZ*)arg)->result_ok;
+static jclass LDKCOption_MonitorEventZ_Some_class = NULL;
+static jmethodID LDKCOption_MonitorEventZ_Some_meth = NULL;
+static jclass LDKCOption_MonitorEventZ_None_class = NULL;
+static jmethodID LDKCOption_MonitorEventZ_None_meth = NULL;
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKCOption_1MonitorEventZ_init (JNIEnv *env, jclass clz) {
+       LDKCOption_MonitorEventZ_Some_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKCOption_MonitorEventZ$Some;"));
+       CHECK(LDKCOption_MonitorEventZ_Some_class != NULL);
+       LDKCOption_MonitorEventZ_Some_meth = (*env)->GetMethodID(env, LDKCOption_MonitorEventZ_Some_class, "<init>", "(J)V");
+       CHECK(LDKCOption_MonitorEventZ_Some_meth != NULL);
+       LDKCOption_MonitorEventZ_None_class =
+               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKCOption_MonitorEventZ$None;"));
+       CHECK(LDKCOption_MonitorEventZ_None_class != NULL);
+       LDKCOption_MonitorEventZ_None_meth = (*env)->GetMethodID(env, LDKCOption_MonitorEventZ_None_class, "<init>", "()V");
+       CHECK(LDKCOption_MonitorEventZ_None_meth != NULL);
+}
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1MonitorEventZ_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
+       LDKCOption_MonitorEventZ *obj = (LDKCOption_MonitorEventZ*)(ptr & ~1);
+       switch(obj->tag) {
+               case LDKCOption_MonitorEventZ_Some: {
+                       uint64_t some_ref = ((uint64_t)&obj->some) | 1;
+                       return (*env)->NewObject(env, LDKCOption_MonitorEventZ_Some_class, LDKCOption_MonitorEventZ_Some_meth, some_ref);
+               }
+               case LDKCOption_MonitorEventZ_None: {
+                       return (*env)->NewObject(env, LDKCOption_MonitorEventZ_None_class, LDKCOption_MonitorEventZ_None_meth);
+               }
+               default: abort();
+       }
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1COption_1MonitorEventZDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_COption_MonitorEventZDecodeErrorZ *val = (LDKCResult_COption_MonitorEventZDecodeErrorZ*)(arg & ~1);
+       CHECK(val->result_ok);
+       uint64_t res_ref = ((uint64_t)&(*val->contents.result)) | 1;
+       return res_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1COption_1MonitorEventZDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_COption_MonitorEventZDecodeErrorZ *val = (LDKCResult_COption_MonitorEventZDecodeErrorZ*)(arg & ~1);
+       CHECK(!val->result_ok);
+       LDKDecodeError err_var = (*val->contents.err);
+       uint64_t err_ref = 0;
+       CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+       CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
+       err_ref = (uint64_t)err_var.inner & ~1;
+       return err_ref;
 }
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1HTLCUpdateDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_HTLCUpdateDecodeErrorZ *val = (LDKCResult_HTLCUpdateDecodeErrorZ*)(arg & ~1);
@@ -5449,6 +5487,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1HTLCUpdateDecod
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5459,12 +5498,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1HTLCUpdateDecod
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneMonitorUpdateErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_NoneMonitorUpdateErrorZ*)arg)->result_ok;
-}
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneMonitorUpdateErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_NoneMonitorUpdateErrorZ *val = (LDKCResult_NoneMonitorUpdateErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5477,6 +5514,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneMonitorUpda
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
@@ -5489,6 +5527,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1OutPointScriptZ_1g
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -5529,26 +5568,6 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32ScriptZ_1ge
        return ret_arr;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1C2Tuple_1u32ScriptZZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_C2Tuple_u32ScriptZZ *ret = MALLOC(sizeof(LDKCVec_C2Tuple_u32ScriptZZ), "LDKCVec_C2Tuple_u32ScriptZZ");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKC2Tuple_u32ScriptZ) * ret->datalen, "LDKCVec_C2Tuple_u32ScriptZZ Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       int64_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKC2Tuple_u32ScriptZ arr_elem_conv = *(LDKC2Tuple_u32ScriptZ*)(arr_elem_ptr);
-                       arr_elem_conv = C2Tuple_u32ScriptZ_clone((LDKC2Tuple_u32ScriptZ*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_C2Tuple_u32ScriptZZ CVec_C2Tuple_u32ScriptZZ_clone(const LDKCVec_C2Tuple_u32ScriptZZ *orig) {
        LDKCVec_C2Tuple_u32ScriptZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_u32ScriptZ) * orig->datalen, "LDKCVec_C2Tuple_u32ScriptZZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -5585,26 +5604,6 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2T
        return ret_arr;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1C2Tuple_1TxidCVec_1C2Tuple_1u32ScriptZZZZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ *ret = MALLOC(sizeof(LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ), "LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ) * ret->datalen, "LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       int64_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ arr_elem_conv = *(LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ*)(arr_elem_ptr);
-                       arr_elem_conv = C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_clone((LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ CVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ_clone(const LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ *orig) {
        LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ) * orig->datalen, "LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -5612,299 +5611,6 @@ static inline LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ CVec_C2Tuple_TxidCV
        }
        return ret;
 }
-static jclass LDKPaymentPurpose_InvoicePayment_class = NULL;
-static jmethodID LDKPaymentPurpose_InvoicePayment_meth = NULL;
-static jclass LDKPaymentPurpose_SpontaneousPayment_class = NULL;
-static jmethodID LDKPaymentPurpose_SpontaneousPayment_meth = NULL;
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKPaymentPurpose_init (JNIEnv *env, jclass clz) {
-       LDKPaymentPurpose_InvoicePayment_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKPaymentPurpose$InvoicePayment;"));
-       CHECK(LDKPaymentPurpose_InvoicePayment_class != NULL);
-       LDKPaymentPurpose_InvoicePayment_meth = (*env)->GetMethodID(env, LDKPaymentPurpose_InvoicePayment_class, "<init>", "([B[BJ)V");
-       CHECK(LDKPaymentPurpose_InvoicePayment_meth != NULL);
-       LDKPaymentPurpose_SpontaneousPayment_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKPaymentPurpose$SpontaneousPayment;"));
-       CHECK(LDKPaymentPurpose_SpontaneousPayment_class != NULL);
-       LDKPaymentPurpose_SpontaneousPayment_meth = (*env)->GetMethodID(env, LDKPaymentPurpose_SpontaneousPayment_class, "<init>", "([B)V");
-       CHECK(LDKPaymentPurpose_SpontaneousPayment_meth != NULL);
-}
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKPaymentPurpose_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
-       LDKPaymentPurpose *obj = (LDKPaymentPurpose*)(ptr & ~1);
-       switch(obj->tag) {
-               case LDKPaymentPurpose_InvoicePayment: {
-                       int8_tArray payment_preimage_arr = (*env)->NewByteArray(env, 32);
-                       (*env)->SetByteArrayRegion(env, payment_preimage_arr, 0, 32, obj->invoice_payment.payment_preimage.data);
-                       int8_tArray payment_secret_arr = (*env)->NewByteArray(env, 32);
-                       (*env)->SetByteArrayRegion(env, payment_secret_arr, 0, 32, obj->invoice_payment.payment_secret.data);
-                       return (*env)->NewObject(env, LDKPaymentPurpose_InvoicePayment_class, LDKPaymentPurpose_InvoicePayment_meth, payment_preimage_arr, payment_secret_arr, obj->invoice_payment.user_payment_id);
-               }
-               case LDKPaymentPurpose_SpontaneousPayment: {
-                       int8_tArray spontaneous_payment_arr = (*env)->NewByteArray(env, 32);
-                       (*env)->SetByteArrayRegion(env, spontaneous_payment_arr, 0, 32, obj->spontaneous_payment.data);
-                       return (*env)->NewObject(env, LDKPaymentPurpose_SpontaneousPayment_class, LDKPaymentPurpose_SpontaneousPayment_meth, spontaneous_payment_arr);
-               }
-               default: abort();
-       }
-}
-static jclass LDKClosureReason_CounterpartyForceClosed_class = NULL;
-static jmethodID LDKClosureReason_CounterpartyForceClosed_meth = NULL;
-static jclass LDKClosureReason_HolderForceClosed_class = NULL;
-static jmethodID LDKClosureReason_HolderForceClosed_meth = NULL;
-static jclass LDKClosureReason_CooperativeClosure_class = NULL;
-static jmethodID LDKClosureReason_CooperativeClosure_meth = NULL;
-static jclass LDKClosureReason_CommitmentTxConfirmed_class = NULL;
-static jmethodID LDKClosureReason_CommitmentTxConfirmed_meth = NULL;
-static jclass LDKClosureReason_ProcessingError_class = NULL;
-static jmethodID LDKClosureReason_ProcessingError_meth = NULL;
-static jclass LDKClosureReason_DisconnectedPeer_class = NULL;
-static jmethodID LDKClosureReason_DisconnectedPeer_meth = NULL;
-static jclass LDKClosureReason_OutdatedChannelManager_class = NULL;
-static jmethodID LDKClosureReason_OutdatedChannelManager_meth = NULL;
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKClosureReason_init (JNIEnv *env, jclass clz) {
-       LDKClosureReason_CounterpartyForceClosed_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKClosureReason$CounterpartyForceClosed;"));
-       CHECK(LDKClosureReason_CounterpartyForceClosed_class != NULL);
-       LDKClosureReason_CounterpartyForceClosed_meth = (*env)->GetMethodID(env, LDKClosureReason_CounterpartyForceClosed_class, "<init>", "(Ljava/lang/String;)V");
-       CHECK(LDKClosureReason_CounterpartyForceClosed_meth != NULL);
-       LDKClosureReason_HolderForceClosed_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKClosureReason$HolderForceClosed;"));
-       CHECK(LDKClosureReason_HolderForceClosed_class != NULL);
-       LDKClosureReason_HolderForceClosed_meth = (*env)->GetMethodID(env, LDKClosureReason_HolderForceClosed_class, "<init>", "()V");
-       CHECK(LDKClosureReason_HolderForceClosed_meth != NULL);
-       LDKClosureReason_CooperativeClosure_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKClosureReason$CooperativeClosure;"));
-       CHECK(LDKClosureReason_CooperativeClosure_class != NULL);
-       LDKClosureReason_CooperativeClosure_meth = (*env)->GetMethodID(env, LDKClosureReason_CooperativeClosure_class, "<init>", "()V");
-       CHECK(LDKClosureReason_CooperativeClosure_meth != NULL);
-       LDKClosureReason_CommitmentTxConfirmed_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKClosureReason$CommitmentTxConfirmed;"));
-       CHECK(LDKClosureReason_CommitmentTxConfirmed_class != NULL);
-       LDKClosureReason_CommitmentTxConfirmed_meth = (*env)->GetMethodID(env, LDKClosureReason_CommitmentTxConfirmed_class, "<init>", "()V");
-       CHECK(LDKClosureReason_CommitmentTxConfirmed_meth != NULL);
-       LDKClosureReason_ProcessingError_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKClosureReason$ProcessingError;"));
-       CHECK(LDKClosureReason_ProcessingError_class != NULL);
-       LDKClosureReason_ProcessingError_meth = (*env)->GetMethodID(env, LDKClosureReason_ProcessingError_class, "<init>", "(Ljava/lang/String;)V");
-       CHECK(LDKClosureReason_ProcessingError_meth != NULL);
-       LDKClosureReason_DisconnectedPeer_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKClosureReason$DisconnectedPeer;"));
-       CHECK(LDKClosureReason_DisconnectedPeer_class != NULL);
-       LDKClosureReason_DisconnectedPeer_meth = (*env)->GetMethodID(env, LDKClosureReason_DisconnectedPeer_class, "<init>", "()V");
-       CHECK(LDKClosureReason_DisconnectedPeer_meth != NULL);
-       LDKClosureReason_OutdatedChannelManager_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKClosureReason$OutdatedChannelManager;"));
-       CHECK(LDKClosureReason_OutdatedChannelManager_class != NULL);
-       LDKClosureReason_OutdatedChannelManager_meth = (*env)->GetMethodID(env, LDKClosureReason_OutdatedChannelManager_class, "<init>", "()V");
-       CHECK(LDKClosureReason_OutdatedChannelManager_meth != NULL);
-}
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKClosureReason_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
-       LDKClosureReason *obj = (LDKClosureReason*)(ptr & ~1);
-       switch(obj->tag) {
-               case LDKClosureReason_CounterpartyForceClosed: {
-                       LDKStr peer_msg_str = obj->counterparty_force_closed.peer_msg;
-                       jstring peer_msg_conv = str_ref_to_java(env, peer_msg_str.chars, peer_msg_str.len);
-                       return (*env)->NewObject(env, LDKClosureReason_CounterpartyForceClosed_class, LDKClosureReason_CounterpartyForceClosed_meth, peer_msg_conv);
-               }
-               case LDKClosureReason_HolderForceClosed: {
-                       return (*env)->NewObject(env, LDKClosureReason_HolderForceClosed_class, LDKClosureReason_HolderForceClosed_meth);
-               }
-               case LDKClosureReason_CooperativeClosure: {
-                       return (*env)->NewObject(env, LDKClosureReason_CooperativeClosure_class, LDKClosureReason_CooperativeClosure_meth);
-               }
-               case LDKClosureReason_CommitmentTxConfirmed: {
-                       return (*env)->NewObject(env, LDKClosureReason_CommitmentTxConfirmed_class, LDKClosureReason_CommitmentTxConfirmed_meth);
-               }
-               case LDKClosureReason_ProcessingError: {
-                       LDKStr err_str = obj->processing_error.err;
-                       jstring err_conv = str_ref_to_java(env, err_str.chars, err_str.len);
-                       return (*env)->NewObject(env, LDKClosureReason_ProcessingError_class, LDKClosureReason_ProcessingError_meth, err_conv);
-               }
-               case LDKClosureReason_DisconnectedPeer: {
-                       return (*env)->NewObject(env, LDKClosureReason_DisconnectedPeer_class, LDKClosureReason_DisconnectedPeer_meth);
-               }
-               case LDKClosureReason_OutdatedChannelManager: {
-                       return (*env)->NewObject(env, LDKClosureReason_OutdatedChannelManager_class, LDKClosureReason_OutdatedChannelManager_meth);
-               }
-               default: abort();
-       }
-}
-static jclass LDKEvent_FundingGenerationReady_class = NULL;
-static jmethodID LDKEvent_FundingGenerationReady_meth = NULL;
-static jclass LDKEvent_PaymentReceived_class = NULL;
-static jmethodID LDKEvent_PaymentReceived_meth = NULL;
-static jclass LDKEvent_PaymentSent_class = NULL;
-static jmethodID LDKEvent_PaymentSent_meth = NULL;
-static jclass LDKEvent_PaymentPathFailed_class = NULL;
-static jmethodID LDKEvent_PaymentPathFailed_meth = NULL;
-static jclass LDKEvent_PendingHTLCsForwardable_class = NULL;
-static jmethodID LDKEvent_PendingHTLCsForwardable_meth = NULL;
-static jclass LDKEvent_SpendableOutputs_class = NULL;
-static jmethodID LDKEvent_SpendableOutputs_meth = NULL;
-static jclass LDKEvent_PaymentForwarded_class = NULL;
-static jmethodID LDKEvent_PaymentForwarded_meth = NULL;
-static jclass LDKEvent_ChannelClosed_class = NULL;
-static jmethodID LDKEvent_ChannelClosed_meth = NULL;
-static jclass LDKEvent_DiscardFunding_class = NULL;
-static jmethodID LDKEvent_DiscardFunding_meth = NULL;
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_00024LDKEvent_init (JNIEnv *env, jclass clz) {
-       LDKEvent_FundingGenerationReady_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKEvent$FundingGenerationReady;"));
-       CHECK(LDKEvent_FundingGenerationReady_class != NULL);
-       LDKEvent_FundingGenerationReady_meth = (*env)->GetMethodID(env, LDKEvent_FundingGenerationReady_class, "<init>", "([BJ[BJ)V");
-       CHECK(LDKEvent_FundingGenerationReady_meth != NULL);
-       LDKEvent_PaymentReceived_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKEvent$PaymentReceived;"));
-       CHECK(LDKEvent_PaymentReceived_class != NULL);
-       LDKEvent_PaymentReceived_meth = (*env)->GetMethodID(env, LDKEvent_PaymentReceived_class, "<init>", "([BJJ)V");
-       CHECK(LDKEvent_PaymentReceived_meth != NULL);
-       LDKEvent_PaymentSent_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKEvent$PaymentSent;"));
-       CHECK(LDKEvent_PaymentSent_class != NULL);
-       LDKEvent_PaymentSent_meth = (*env)->GetMethodID(env, LDKEvent_PaymentSent_class, "<init>", "([B[B[BJ)V");
-       CHECK(LDKEvent_PaymentSent_meth != NULL);
-       LDKEvent_PaymentPathFailed_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKEvent$PaymentPathFailed;"));
-       CHECK(LDKEvent_PaymentPathFailed_class != NULL);
-       LDKEvent_PaymentPathFailed_meth = (*env)->GetMethodID(env, LDKEvent_PaymentPathFailed_class, "<init>", "([B[BZJZ[JJJ)V");
-       CHECK(LDKEvent_PaymentPathFailed_meth != NULL);
-       LDKEvent_PendingHTLCsForwardable_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKEvent$PendingHTLCsForwardable;"));
-       CHECK(LDKEvent_PendingHTLCsForwardable_class != NULL);
-       LDKEvent_PendingHTLCsForwardable_meth = (*env)->GetMethodID(env, LDKEvent_PendingHTLCsForwardable_class, "<init>", "(J)V");
-       CHECK(LDKEvent_PendingHTLCsForwardable_meth != NULL);
-       LDKEvent_SpendableOutputs_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKEvent$SpendableOutputs;"));
-       CHECK(LDKEvent_SpendableOutputs_class != NULL);
-       LDKEvent_SpendableOutputs_meth = (*env)->GetMethodID(env, LDKEvent_SpendableOutputs_class, "<init>", "([J)V");
-       CHECK(LDKEvent_SpendableOutputs_meth != NULL);
-       LDKEvent_PaymentForwarded_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKEvent$PaymentForwarded;"));
-       CHECK(LDKEvent_PaymentForwarded_class != NULL);
-       LDKEvent_PaymentForwarded_meth = (*env)->GetMethodID(env, LDKEvent_PaymentForwarded_class, "<init>", "(JZ)V");
-       CHECK(LDKEvent_PaymentForwarded_meth != NULL);
-       LDKEvent_ChannelClosed_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKEvent$ChannelClosed;"));
-       CHECK(LDKEvent_ChannelClosed_class != NULL);
-       LDKEvent_ChannelClosed_meth = (*env)->GetMethodID(env, LDKEvent_ChannelClosed_class, "<init>", "([BJJ)V");
-       CHECK(LDKEvent_ChannelClosed_meth != NULL);
-       LDKEvent_DiscardFunding_class =
-               (*env)->NewGlobalRef(env, (*env)->FindClass(env, "Lorg/ldk/impl/bindings$LDKEvent$DiscardFunding;"));
-       CHECK(LDKEvent_DiscardFunding_class != NULL);
-       LDKEvent_DiscardFunding_meth = (*env)->GetMethodID(env, LDKEvent_DiscardFunding_class, "<init>", "([B[B)V");
-       CHECK(LDKEvent_DiscardFunding_meth != NULL);
-}
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKEvent_1ref_1from_1ptr(JNIEnv *env, jclass clz, int64_t ptr) {
-       LDKEvent *obj = (LDKEvent*)(ptr & ~1);
-       switch(obj->tag) {
-               case LDKEvent_FundingGenerationReady: {
-                       int8_tArray temporary_channel_id_arr = (*env)->NewByteArray(env, 32);
-                       (*env)->SetByteArrayRegion(env, temporary_channel_id_arr, 0, 32, obj->funding_generation_ready.temporary_channel_id.data);
-                       LDKCVec_u8Z output_script_var = obj->funding_generation_ready.output_script;
-                       int8_tArray output_script_arr = (*env)->NewByteArray(env, output_script_var.datalen);
-                       (*env)->SetByteArrayRegion(env, output_script_arr, 0, output_script_var.datalen, output_script_var.data);
-                       return (*env)->NewObject(env, LDKEvent_FundingGenerationReady_class, LDKEvent_FundingGenerationReady_meth, temporary_channel_id_arr, obj->funding_generation_ready.channel_value_satoshis, output_script_arr, obj->funding_generation_ready.user_channel_id);
-               }
-               case LDKEvent_PaymentReceived: {
-                       int8_tArray payment_hash_arr = (*env)->NewByteArray(env, 32);
-                       (*env)->SetByteArrayRegion(env, payment_hash_arr, 0, 32, obj->payment_received.payment_hash.data);
-                       uint64_t purpose_ref = ((uint64_t)&obj->payment_received.purpose) | 1;
-                       return (*env)->NewObject(env, LDKEvent_PaymentReceived_class, LDKEvent_PaymentReceived_meth, payment_hash_arr, obj->payment_received.amt, purpose_ref);
-               }
-               case LDKEvent_PaymentSent: {
-                       int8_tArray payment_id_arr = (*env)->NewByteArray(env, 32);
-                       (*env)->SetByteArrayRegion(env, payment_id_arr, 0, 32, obj->payment_sent.payment_id.data);
-                       int8_tArray payment_preimage_arr = (*env)->NewByteArray(env, 32);
-                       (*env)->SetByteArrayRegion(env, payment_preimage_arr, 0, 32, obj->payment_sent.payment_preimage.data);
-                       int8_tArray payment_hash_arr = (*env)->NewByteArray(env, 32);
-                       (*env)->SetByteArrayRegion(env, payment_hash_arr, 0, 32, obj->payment_sent.payment_hash.data);
-                       uint64_t fee_paid_msat_ref = ((uint64_t)&obj->payment_sent.fee_paid_msat) | 1;
-                       return (*env)->NewObject(env, LDKEvent_PaymentSent_class, LDKEvent_PaymentSent_meth, payment_id_arr, payment_preimage_arr, payment_hash_arr, fee_paid_msat_ref);
-               }
-               case LDKEvent_PaymentPathFailed: {
-                       int8_tArray payment_id_arr = (*env)->NewByteArray(env, 32);
-                       (*env)->SetByteArrayRegion(env, payment_id_arr, 0, 32, obj->payment_path_failed.payment_id.data);
-                       int8_tArray payment_hash_arr = (*env)->NewByteArray(env, 32);
-                       (*env)->SetByteArrayRegion(env, payment_hash_arr, 0, 32, obj->payment_path_failed.payment_hash.data);
-                       uint64_t network_update_ref = ((uint64_t)&obj->payment_path_failed.network_update) | 1;
-                       LDKCVec_RouteHopZ path_var = obj->payment_path_failed.path;
-                       int64_tArray path_arr = NULL;
-                       path_arr = (*env)->NewLongArray(env, path_var.datalen);
-                       int64_t *path_arr_ptr = (*env)->GetPrimitiveArrayCritical(env, path_arr, NULL);
-                       for (size_t k = 0; k < path_var.datalen; k++) {
-                               LDKRouteHop path_conv_10_var = path_var.data[k];
-                               uint64_t path_conv_10_ref = 0;
-                               CHECK((((uint64_t)path_conv_10_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
-                               CHECK((((uint64_t)&path_conv_10_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
-                               path_conv_10_ref = (uint64_t)path_conv_10_var.inner & ~1;
-                               path_arr_ptr[k] = path_conv_10_ref;
-                       }
-                       (*env)->ReleasePrimitiveArrayCritical(env, path_arr, path_arr_ptr, 0);
-                       uint64_t short_channel_id_ref = ((uint64_t)&obj->payment_path_failed.short_channel_id) | 1;
-                       LDKRouteParameters retry_var = obj->payment_path_failed.retry;
-                       uint64_t retry_ref = 0;
-                       if ((uint64_t)retry_var.inner > 4096) {
-                               CHECK((((uint64_t)retry_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
-                               CHECK((((uint64_t)&retry_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
-                               retry_ref = (uint64_t)retry_var.inner & ~1;
-                       }
-                       return (*env)->NewObject(env, LDKEvent_PaymentPathFailed_class, LDKEvent_PaymentPathFailed_meth, payment_id_arr, payment_hash_arr, obj->payment_path_failed.rejected_by_dest, network_update_ref, obj->payment_path_failed.all_paths_failed, path_arr, short_channel_id_ref, retry_ref);
-               }
-               case LDKEvent_PendingHTLCsForwardable: {
-                       return (*env)->NewObject(env, LDKEvent_PendingHTLCsForwardable_class, LDKEvent_PendingHTLCsForwardable_meth, obj->pending_htl_cs_forwardable.time_forwardable);
-               }
-               case LDKEvent_SpendableOutputs: {
-                       LDKCVec_SpendableOutputDescriptorZ outputs_var = obj->spendable_outputs.outputs;
-                       int64_tArray outputs_arr = NULL;
-                       outputs_arr = (*env)->NewLongArray(env, outputs_var.datalen);
-                       int64_t *outputs_arr_ptr = (*env)->GetPrimitiveArrayCritical(env, outputs_arr, NULL);
-                       for (size_t b = 0; b < outputs_var.datalen; b++) {
-                               uint64_t outputs_conv_27_ref = ((uint64_t)&outputs_var.data[b]) | 1;
-                               outputs_arr_ptr[b] = outputs_conv_27_ref;
-                       }
-                       (*env)->ReleasePrimitiveArrayCritical(env, outputs_arr, outputs_arr_ptr, 0);
-                       return (*env)->NewObject(env, LDKEvent_SpendableOutputs_class, LDKEvent_SpendableOutputs_meth, outputs_arr);
-               }
-               case LDKEvent_PaymentForwarded: {
-                       uint64_t fee_earned_msat_ref = ((uint64_t)&obj->payment_forwarded.fee_earned_msat) | 1;
-                       return (*env)->NewObject(env, LDKEvent_PaymentForwarded_class, LDKEvent_PaymentForwarded_meth, fee_earned_msat_ref, obj->payment_forwarded.claim_from_onchain_tx);
-               }
-               case LDKEvent_ChannelClosed: {
-                       int8_tArray channel_id_arr = (*env)->NewByteArray(env, 32);
-                       (*env)->SetByteArrayRegion(env, channel_id_arr, 0, 32, obj->channel_closed.channel_id.data);
-                       uint64_t reason_ref = ((uint64_t)&obj->channel_closed.reason) | 1;
-                       return (*env)->NewObject(env, LDKEvent_ChannelClosed_class, LDKEvent_ChannelClosed_meth, channel_id_arr, obj->channel_closed.user_channel_id, reason_ref);
-               }
-               case LDKEvent_DiscardFunding: {
-                       int8_tArray channel_id_arr = (*env)->NewByteArray(env, 32);
-                       (*env)->SetByteArrayRegion(env, channel_id_arr, 0, 32, obj->discard_funding.channel_id.data);
-                       LDKTransaction transaction_var = obj->discard_funding.transaction;
-                       int8_tArray transaction_arr = (*env)->NewByteArray(env, transaction_var.datalen);
-                       (*env)->SetByteArrayRegion(env, transaction_arr, 0, transaction_var.datalen, transaction_var.data);
-                       return (*env)->NewObject(env, LDKEvent_DiscardFunding_class, LDKEvent_DiscardFunding_meth, channel_id_arr, transaction_arr);
-               }
-               default: abort();
-       }
-}
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1EventZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_EventZ *ret = MALLOC(sizeof(LDKCVec_EventZ), "LDKCVec_EventZ");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKEvent) * ret->datalen, "LDKCVec_EventZ Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       int64_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKEvent arr_elem_conv = *(LDKEvent*)(arr_elem_ptr);
-                       arr_elem_conv = Event_clone((LDKEvent*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_EventZ CVec_EventZ_clone(const LDKCVec_EventZ *orig) {
        LDKCVec_EventZ ret = { .data = MALLOC(sizeof(LDKEvent) * orig->datalen, "LDKCVec_EventZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -5931,26 +5637,6 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32TxOutZ_1get_1b(
        return (uint64_t)ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1C2Tuple_1u32TxOutZZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_C2Tuple_u32TxOutZZ *ret = MALLOC(sizeof(LDKCVec_C2Tuple_u32TxOutZZ), "LDKCVec_C2Tuple_u32TxOutZZ");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKC2Tuple_u32TxOutZ) * ret->datalen, "LDKCVec_C2Tuple_u32TxOutZZ Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       int64_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKC2Tuple_u32TxOutZ arr_elem_conv = *(LDKC2Tuple_u32TxOutZ*)(arr_elem_ptr);
-                       arr_elem_conv = C2Tuple_u32TxOutZ_clone((LDKC2Tuple_u32TxOutZ*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_C2Tuple_u32TxOutZZ CVec_C2Tuple_u32TxOutZZ_clone(const LDKCVec_C2Tuple_u32TxOutZZ *orig) {
        LDKCVec_C2Tuple_u32TxOutZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_u32TxOutZ) * orig->datalen, "LDKCVec_C2Tuple_u32TxOutZZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -5987,26 +5673,6 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2T
        return ret_arr;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1C2Tuple_1TxidCVec_1C2Tuple_1u32TxOutZZZZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ *ret = MALLOC(sizeof(LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ), "LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ) * ret->datalen, "LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       int64_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ arr_elem_conv = *(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ*)(arr_elem_ptr);
-                       arr_elem_conv = C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_clone((LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ CVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ_clone(const LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ *orig) {
        LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ) * orig->datalen, "LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -6062,26 +5728,6 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKBalance_1ref_1from_1ptr(
                default: abort();
        }
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1BalanceZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_BalanceZ *ret = MALLOC(sizeof(LDKCVec_BalanceZ), "LDKCVec_BalanceZ");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKBalance) * ret->datalen, "LDKCVec_BalanceZ Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       int64_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKBalance arr_elem_conv = *(LDKBalance*)(arr_elem_ptr);
-                       arr_elem_conv = Balance_clone((LDKBalance*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_BalanceZ CVec_BalanceZ_clone(const LDKCVec_BalanceZ *orig) {
        LDKCVec_BalanceZ ret = { .data = MALLOC(sizeof(LDKBalance) * orig->datalen, "LDKCVec_BalanceZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -6089,9 +5735,6 @@ static inline LDKCVec_BalanceZ CVec_BalanceZ_clone(const LDKCVec_BalanceZ *orig)
        }
        return ret;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1C2Tuple_1BlockHashChannelMonitorZDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1C2Tuple_1BlockHashChannelMonitorZDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ *val = (LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -6107,12 +5750,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1C2Tuple_1BlockH
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneLightningErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_NoneLightningErrorZ*)arg)->result_ok;
-}
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneLightningErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_NoneLightningErrorZ *val = (LDKCResult_NoneLightningErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -6125,6 +5766,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneLightningEr
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
@@ -6148,26 +5790,6 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyTypeZ_1ge
        return (uint64_t)ret_ret;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1C2Tuple_1PublicKeyTypeZZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_C2Tuple_PublicKeyTypeZZ *ret = MALLOC(sizeof(LDKCVec_C2Tuple_PublicKeyTypeZZ), "LDKCVec_C2Tuple_PublicKeyTypeZZ");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKC2Tuple_PublicKeyTypeZ) * ret->datalen, "LDKCVec_C2Tuple_PublicKeyTypeZZ Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       int64_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKC2Tuple_PublicKeyTypeZ arr_elem_conv = *(LDKC2Tuple_PublicKeyTypeZ*)(arr_elem_ptr);
-                       arr_elem_conv = C2Tuple_PublicKeyTypeZ_clone((LDKC2Tuple_PublicKeyTypeZ*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_C2Tuple_PublicKeyTypeZZ CVec_C2Tuple_PublicKeyTypeZZ_clone(const LDKCVec_C2Tuple_PublicKeyTypeZZ *orig) {
        LDKCVec_C2Tuple_PublicKeyTypeZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_PublicKeyTypeZ) * orig->datalen, "LDKCVec_C2Tuple_PublicKeyTypeZZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -6175,9 +5797,6 @@ static inline LDKCVec_C2Tuple_PublicKeyTypeZZ CVec_C2Tuple_PublicKeyTypeZZ_clone
        }
        return ret;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1boolLightningErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_boolLightningErrorZ*)arg)->result_ok;
-}
 JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1boolLightningErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_boolLightningErrorZ *val = (LDKCResult_boolLightningErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -6190,6 +5809,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1boolLightningEr
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
@@ -6202,6 +5822,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C3Tuple_1ChannelAnnouncemen
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -6218,6 +5839,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C3Tuple_1ChannelAnnouncemen
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -6234,6 +5856,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C3Tuple_1ChannelAnnouncemen
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -6241,26 +5864,6 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C3Tuple_1ChannelAnnouncemen
        return ret_ref;
 }
 
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1C3Tuple_1ChannelAnnouncementChannelUpdateChannelUpdateZZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ *ret = MALLOC(sizeof(LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ), "LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ) * ret->datalen, "LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       int64_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ arr_elem_conv = *(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ*)(arr_elem_ptr);
-                       arr_elem_conv = C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_clone((LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ CVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ_clone(const LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ *orig) {
        LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ ret = { .data = MALLOC(sizeof(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ) * orig->datalen, "LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -6268,26 +5871,6 @@ static inline LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ CV
        }
        return ret;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1NodeAnnouncementZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_NodeAnnouncementZ *ret = MALLOC(sizeof(LDKCVec_NodeAnnouncementZ), "LDKCVec_NodeAnnouncementZ");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKNodeAnnouncement) * ret->datalen, "LDKCVec_NodeAnnouncementZ Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       int64_t arr_elem = java_elems[i];
-                       LDKNodeAnnouncement arr_elem_conv;
-                       arr_elem_conv.inner = (void*)(arr_elem & (~1));
-                       arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0);
-                       arr_elem_conv = NodeAnnouncement_clone(&arr_elem_conv);
-                       ret->data[i] = arr_elem_conv;
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_NodeAnnouncementZ CVec_NodeAnnouncementZ_clone(const LDKCVec_NodeAnnouncementZ *orig) {
        LDKCVec_NodeAnnouncementZ ret = { .data = MALLOC(sizeof(LDKNodeAnnouncement) * orig->datalen, "LDKCVec_NodeAnnouncementZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -6295,9 +5878,6 @@ static inline LDKCVec_NodeAnnouncementZ CVec_NodeAnnouncementZ_clone(const LDKCV
        }
        return ret;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CVec_1u8ZPeerHandleErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_CVec_u8ZPeerHandleErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CVec_1u8ZPeerHandleErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_CVec_u8ZPeerHandleErrorZ *val = (LDKCResult_CVec_u8ZPeerHandleErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -6313,12 +5893,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CVec_1u8ZPeerHa
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NonePeerHandleErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_NonePeerHandleErrorZ*)arg)->result_ok;
-}
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NonePeerHandleErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_NonePeerHandleErrorZ *val = (LDKCResult_NonePeerHandleErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -6331,12 +5909,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NonePeerHandleE
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1boolPeerHandleErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_boolPeerHandleErrorZ*)arg)->result_ok;
-}
 JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1boolPeerHandleErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_boolPeerHandleErrorZ *val = (LDKCResult_boolPeerHandleErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -6349,12 +5925,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1boolPeerHandleE
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeIdDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_NodeIdDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeIdDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_NodeIdDecodeErrorZ *val = (LDKCResult_NodeIdDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -6362,6 +5936,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeIdDecodeErr
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -6372,6 +5947,24 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeIdDecodeErr
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
+       err_ref = (uint64_t)err_var.inner & ~1;
+       return err_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1COption_1NetworkUpdateZDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_COption_NetworkUpdateZDecodeErrorZ *val = (LDKCResult_COption_NetworkUpdateZDecodeErrorZ*)(arg & ~1);
+       CHECK(val->result_ok);
+       uint64_t res_ref = ((uint64_t)&(*val->contents.result)) | 1;
+       return res_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1COption_1NetworkUpdateZDecodeErrorZ_1get_1err(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_COption_NetworkUpdateZDecodeErrorZ *val = (LDKCResult_COption_NetworkUpdateZDecodeErrorZ*)(arg & ~1);
+       CHECK(!val->result_ok);
+       LDKDecodeError err_var = (*val->contents.err);
+       uint64_t err_ref = 0;
+       CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+       CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
@@ -6419,7 +6012,7 @@ LDKCResult_TxOutAccessErrorZ get_utxo_LDKAccess_jcall(const void* this_arg, cons
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_TxOutAccessErrorZ ret_conv = *(LDKCResult_TxOutAccessErrorZ*)(ret_ptr);
-       ret_conv = CResult_TxOutAccessErrorZ_clone((LDKCResult_TxOutAccessErrorZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -6499,9 +6092,6 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1AccessZ_1ref_1f
                default: abort();
        }
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1DirectionalChannelInfoDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_DirectionalChannelInfoDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1DirectionalChannelInfoDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_DirectionalChannelInfoDecodeErrorZ *val = (LDKCResult_DirectionalChannelInfoDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -6509,6 +6099,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1DirectionalChan
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -6519,12 +6110,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1DirectionalChan
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelInfoDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_ChannelInfoDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelInfoDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_ChannelInfoDecodeErrorZ *val = (LDKCResult_ChannelInfoDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -6532,6 +6121,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelInfoDeco
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -6542,12 +6132,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelInfoDeco
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RoutingFeesDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_RoutingFeesDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RoutingFeesDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_RoutingFeesDecodeErrorZ *val = (LDKCResult_RoutingFeesDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -6555,6 +6143,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RoutingFeesDeco
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -6565,12 +6154,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RoutingFeesDeco
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeAnnouncementInfoDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_NodeAnnouncementInfoDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeAnnouncementInfoDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_NodeAnnouncementInfoDecodeErrorZ *val = (LDKCResult_NodeAnnouncementInfoDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -6578,6 +6165,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeAnnouncemen
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -6588,32 +6176,15 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeAnnouncemen
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1u64Z_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_u64Z *ret = MALLOC(sizeof(LDKCVec_u64Z), "LDKCVec_u64Z");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(uint64_t) * ret->datalen, "LDKCVec_u64Z Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       ret->data[i] = java_elems[i];
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_u64Z CVec_u64Z_clone(const LDKCVec_u64Z *orig) {
        LDKCVec_u64Z ret = { .data = MALLOC(sizeof(int64_t) * orig->datalen, "LDKCVec_u64Z clone bytes"), .datalen = orig->datalen };
        memcpy(ret.data, orig->data, sizeof(int64_t) * ret.datalen);
        return ret;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeInfoDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_NodeInfoDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeInfoDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_NodeInfoDecodeErrorZ *val = (LDKCResult_NodeInfoDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -6621,6 +6192,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeInfoDecodeE
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -6631,12 +6203,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeInfoDecodeE
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NetworkGraphDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_NetworkGraphDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NetworkGraphDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_NetworkGraphDecodeErrorZ *val = (LDKCResult_NetworkGraphDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -6644,6 +6214,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NetworkGraphDec
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -6654,6 +6225,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NetworkGraphDec
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
@@ -6694,9 +6266,6 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1CVec_1NetAddres
                default: abort();
        }
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NetAddressDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_NetAddressDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NetAddressDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_NetAddressDecodeErrorZ *val = (LDKCResult_NetAddressDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -6710,29 +6279,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NetAddressDecod
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1UpdateAddHTLCZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_UpdateAddHTLCZ *ret = MALLOC(sizeof(LDKCVec_UpdateAddHTLCZ), "LDKCVec_UpdateAddHTLCZ");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKUpdateAddHTLC) * ret->datalen, "LDKCVec_UpdateAddHTLCZ Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       int64_t arr_elem = java_elems[i];
-                       LDKUpdateAddHTLC arr_elem_conv;
-                       arr_elem_conv.inner = (void*)(arr_elem & (~1));
-                       arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0);
-                       arr_elem_conv = UpdateAddHTLC_clone(&arr_elem_conv);
-                       ret->data[i] = arr_elem_conv;
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_UpdateAddHTLCZ CVec_UpdateAddHTLCZ_clone(const LDKCVec_UpdateAddHTLCZ *orig) {
        LDKCVec_UpdateAddHTLCZ ret = { .data = MALLOC(sizeof(LDKUpdateAddHTLC) * orig->datalen, "LDKCVec_UpdateAddHTLCZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -6740,26 +6290,6 @@ static inline LDKCVec_UpdateAddHTLCZ CVec_UpdateAddHTLCZ_clone(const LDKCVec_Upd
        }
        return ret;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1UpdateFulfillHTLCZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_UpdateFulfillHTLCZ *ret = MALLOC(sizeof(LDKCVec_UpdateFulfillHTLCZ), "LDKCVec_UpdateFulfillHTLCZ");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKUpdateFulfillHTLC) * ret->datalen, "LDKCVec_UpdateFulfillHTLCZ Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       int64_t arr_elem = java_elems[i];
-                       LDKUpdateFulfillHTLC arr_elem_conv;
-                       arr_elem_conv.inner = (void*)(arr_elem & (~1));
-                       arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0);
-                       arr_elem_conv = UpdateFulfillHTLC_clone(&arr_elem_conv);
-                       ret->data[i] = arr_elem_conv;
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_UpdateFulfillHTLCZ CVec_UpdateFulfillHTLCZ_clone(const LDKCVec_UpdateFulfillHTLCZ *orig) {
        LDKCVec_UpdateFulfillHTLCZ ret = { .data = MALLOC(sizeof(LDKUpdateFulfillHTLC) * orig->datalen, "LDKCVec_UpdateFulfillHTLCZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -6767,26 +6297,6 @@ static inline LDKCVec_UpdateFulfillHTLCZ CVec_UpdateFulfillHTLCZ_clone(const LDK
        }
        return ret;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1UpdateFailHTLCZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_UpdateFailHTLCZ *ret = MALLOC(sizeof(LDKCVec_UpdateFailHTLCZ), "LDKCVec_UpdateFailHTLCZ");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKUpdateFailHTLC) * ret->datalen, "LDKCVec_UpdateFailHTLCZ Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       int64_t arr_elem = java_elems[i];
-                       LDKUpdateFailHTLC arr_elem_conv;
-                       arr_elem_conv.inner = (void*)(arr_elem & (~1));
-                       arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0);
-                       arr_elem_conv = UpdateFailHTLC_clone(&arr_elem_conv);
-                       ret->data[i] = arr_elem_conv;
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_UpdateFailHTLCZ CVec_UpdateFailHTLCZ_clone(const LDKCVec_UpdateFailHTLCZ *orig) {
        LDKCVec_UpdateFailHTLCZ ret = { .data = MALLOC(sizeof(LDKUpdateFailHTLC) * orig->datalen, "LDKCVec_UpdateFailHTLCZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -6794,26 +6304,6 @@ static inline LDKCVec_UpdateFailHTLCZ CVec_UpdateFailHTLCZ_clone(const LDKCVec_U
        }
        return ret;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1UpdateFailMalformedHTLCZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_UpdateFailMalformedHTLCZ *ret = MALLOC(sizeof(LDKCVec_UpdateFailMalformedHTLCZ), "LDKCVec_UpdateFailMalformedHTLCZ");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKUpdateFailMalformedHTLC) * ret->datalen, "LDKCVec_UpdateFailMalformedHTLCZ Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       int64_t arr_elem = java_elems[i];
-                       LDKUpdateFailMalformedHTLC arr_elem_conv;
-                       arr_elem_conv.inner = (void*)(arr_elem & (~1));
-                       arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0);
-                       arr_elem_conv = UpdateFailMalformedHTLC_clone(&arr_elem_conv);
-                       ret->data[i] = arr_elem_conv;
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_UpdateFailMalformedHTLCZ CVec_UpdateFailMalformedHTLCZ_clone(const LDKCVec_UpdateFailMalformedHTLCZ *orig) {
        LDKCVec_UpdateFailMalformedHTLCZ ret = { .data = MALLOC(sizeof(LDKUpdateFailMalformedHTLC) * orig->datalen, "LDKCVec_UpdateFailMalformedHTLCZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -6821,9 +6311,6 @@ static inline LDKCVec_UpdateFailMalformedHTLCZ CVec_UpdateFailMalformedHTLCZ_clo
        }
        return ret;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1AcceptChannelDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_AcceptChannelDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1AcceptChannelDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_AcceptChannelDecodeErrorZ *val = (LDKCResult_AcceptChannelDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -6831,6 +6318,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1AcceptChannelDe
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -6841,12 +6329,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1AcceptChannelDe
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1AnnouncementSignaturesDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_AnnouncementSignaturesDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1AnnouncementSignaturesDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_AnnouncementSignaturesDecodeErrorZ *val = (LDKCResult_AnnouncementSignaturesDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -6854,6 +6340,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1AnnouncementSig
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -6864,12 +6351,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1AnnouncementSig
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelReestablishDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_ChannelReestablishDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelReestablishDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_ChannelReestablishDecodeErrorZ *val = (LDKCResult_ChannelReestablishDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -6877,6 +6362,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelReestabl
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -6887,12 +6373,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelReestabl
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ClosingSignedDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_ClosingSignedDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ClosingSignedDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_ClosingSignedDecodeErrorZ *val = (LDKCResult_ClosingSignedDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -6900,6 +6384,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ClosingSignedDe
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -6910,12 +6395,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ClosingSignedDe
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ClosingSignedFeeRangeDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_ClosingSignedFeeRangeDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ClosingSignedFeeRangeDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_ClosingSignedFeeRangeDecodeErrorZ *val = (LDKCResult_ClosingSignedFeeRangeDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -6923,6 +6406,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ClosingSignedFe
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -6933,12 +6417,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ClosingSignedFe
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CommitmentSignedDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_CommitmentSignedDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CommitmentSignedDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_CommitmentSignedDecodeErrorZ *val = (LDKCResult_CommitmentSignedDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -6946,6 +6428,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CommitmentSigne
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -6956,12 +6439,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CommitmentSigne
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1FundingCreatedDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_FundingCreatedDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1FundingCreatedDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_FundingCreatedDecodeErrorZ *val = (LDKCResult_FundingCreatedDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -6969,6 +6450,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1FundingCreatedD
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -6979,12 +6461,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1FundingCreatedD
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1FundingSignedDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_FundingSignedDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1FundingSignedDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_FundingSignedDecodeErrorZ *val = (LDKCResult_FundingSignedDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -6992,6 +6472,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1FundingSignedDe
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -7002,12 +6483,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1FundingSignedDe
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1FundingLockedDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_FundingLockedDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1FundingLockedDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_FundingLockedDecodeErrorZ *val = (LDKCResult_FundingLockedDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -7015,6 +6494,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1FundingLockedDe
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -7025,12 +6505,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1FundingLockedDe
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InitDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_InitDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InitDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_InitDecodeErrorZ *val = (LDKCResult_InitDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -7038,6 +6516,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InitDecodeError
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -7048,12 +6527,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InitDecodeError
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1OpenChannelDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_OpenChannelDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1OpenChannelDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_OpenChannelDecodeErrorZ *val = (LDKCResult_OpenChannelDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -7061,6 +6538,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1OpenChannelDeco
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -7071,12 +6549,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1OpenChannelDeco
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RevokeAndACKDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_RevokeAndACKDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RevokeAndACKDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_RevokeAndACKDecodeErrorZ *val = (LDKCResult_RevokeAndACKDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -7084,6 +6560,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RevokeAndACKDec
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -7094,12 +6571,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RevokeAndACKDec
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ShutdownDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_ShutdownDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ShutdownDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_ShutdownDecodeErrorZ *val = (LDKCResult_ShutdownDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -7107,6 +6582,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ShutdownDecodeE
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -7117,12 +6593,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ShutdownDecodeE
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UpdateFailHTLCDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_UpdateFailHTLCDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UpdateFailHTLCDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_UpdateFailHTLCDecodeErrorZ *val = (LDKCResult_UpdateFailHTLCDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -7130,6 +6604,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UpdateFailHTLCD
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -7140,12 +6615,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UpdateFailHTLCD
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UpdateFailMalformedHTLCDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UpdateFailMalformedHTLCDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ *val = (LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -7153,6 +6626,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UpdateFailMalfo
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -7163,12 +6637,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UpdateFailMalfo
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UpdateFeeDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_UpdateFeeDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UpdateFeeDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_UpdateFeeDecodeErrorZ *val = (LDKCResult_UpdateFeeDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -7176,6 +6648,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UpdateFeeDecode
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -7186,12 +6659,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UpdateFeeDecode
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UpdateFulfillHTLCDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_UpdateFulfillHTLCDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UpdateFulfillHTLCDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_UpdateFulfillHTLCDecodeErrorZ *val = (LDKCResult_UpdateFulfillHTLCDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -7199,6 +6670,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UpdateFulfillHT
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -7209,12 +6681,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UpdateFulfillHT
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UpdateAddHTLCDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_UpdateAddHTLCDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UpdateAddHTLCDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_UpdateAddHTLCDecodeErrorZ *val = (LDKCResult_UpdateAddHTLCDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -7222,6 +6692,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UpdateAddHTLCDe
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -7232,12 +6703,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UpdateAddHTLCDe
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PingDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_PingDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PingDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_PingDecodeErrorZ *val = (LDKCResult_PingDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -7245,6 +6714,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PingDecodeError
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -7255,12 +6725,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PingDecodeError
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PongDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_PongDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PongDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_PongDecodeErrorZ *val = (LDKCResult_PongDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -7268,6 +6736,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PongDecodeError
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -7278,12 +6747,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PongDecodeError
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UnsignedChannelAnnouncementDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UnsignedChannelAnnouncementDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ *val = (LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -7291,6 +6758,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UnsignedChannel
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -7301,12 +6769,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UnsignedChannel
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelAnnouncementDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_ChannelAnnouncementDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelAnnouncementDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_ChannelAnnouncementDecodeErrorZ *val = (LDKCResult_ChannelAnnouncementDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -7314,6 +6780,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelAnnounce
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -7324,12 +6791,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelAnnounce
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UnsignedChannelUpdateDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_UnsignedChannelUpdateDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UnsignedChannelUpdateDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_UnsignedChannelUpdateDecodeErrorZ *val = (LDKCResult_UnsignedChannelUpdateDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -7337,6 +6802,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UnsignedChannel
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -7347,12 +6813,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UnsignedChannel
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelUpdateDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_ChannelUpdateDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelUpdateDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_ChannelUpdateDecodeErrorZ *val = (LDKCResult_ChannelUpdateDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -7360,6 +6824,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelUpdateDe
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -7370,12 +6835,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelUpdateDe
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ErrorMessageDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_ErrorMessageDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ErrorMessageDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_ErrorMessageDecodeErrorZ *val = (LDKCResult_ErrorMessageDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -7383,6 +6846,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ErrorMessageDec
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -7393,12 +6857,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ErrorMessageDec
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UnsignedNodeAnnouncementDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UnsignedNodeAnnouncementDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ *val = (LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -7406,6 +6868,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UnsignedNodeAnn
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -7416,12 +6879,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UnsignedNodeAnn
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeAnnouncementDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_NodeAnnouncementDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeAnnouncementDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_NodeAnnouncementDecodeErrorZ *val = (LDKCResult_NodeAnnouncementDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -7429,6 +6890,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeAnnouncemen
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -7439,12 +6901,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeAnnouncemen
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1QueryShortChannelIdsDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_QueryShortChannelIdsDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1QueryShortChannelIdsDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_QueryShortChannelIdsDecodeErrorZ *val = (LDKCResult_QueryShortChannelIdsDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -7452,6 +6912,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1QueryShortChann
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -7462,12 +6923,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1QueryShortChann
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ReplyShortChannelIdsEndDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ReplyShortChannelIdsEndDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ *val = (LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -7475,6 +6934,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ReplyShortChann
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -7485,12 +6945,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ReplyShortChann
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1QueryChannelRangeDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_QueryChannelRangeDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1QueryChannelRangeDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_QueryChannelRangeDecodeErrorZ *val = (LDKCResult_QueryChannelRangeDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -7498,6 +6956,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1QueryChannelRan
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -7508,12 +6967,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1QueryChannelRan
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ReplyChannelRangeDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_ReplyChannelRangeDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ReplyChannelRangeDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_ReplyChannelRangeDecodeErrorZ *val = (LDKCResult_ReplyChannelRangeDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -7521,6 +6978,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ReplyChannelRan
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -7531,12 +6989,10 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ReplyChannelRan
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1GossipTimestampFilterDecodeErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_GossipTimestampFilterDecodeErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1GossipTimestampFilterDecodeErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_GossipTimestampFilterDecodeErrorZ *val = (LDKCResult_GossipTimestampFilterDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -7544,6 +7000,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1GossipTimestamp
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -7554,6 +7011,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1GossipTimestamp
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
@@ -7586,9 +7044,6 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKSignOrCreationError_1ref
                default: abort();
        }
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InvoiceSignOrCreationErrorZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_InvoiceSignOrCreationErrorZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InvoiceSignOrCreationErrorZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_InvoiceSignOrCreationErrorZ *val = (LDKCResult_InvoiceSignOrCreationErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -7596,6 +7051,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InvoiceSignOrCr
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -7667,6 +7123,7 @@ LDKCOption_C2Tuple_usizeTransactionZZ register_output_LDKFilter_jcall(const void
        uint64_t output_ref = 0;
        CHECK((((uint64_t)output_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&output_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(output_var);
        output_ref = (uint64_t)output_var.inner;
        if (output_var.is_owned) {
                output_ref |= 1;
@@ -7681,7 +7138,7 @@ LDKCOption_C2Tuple_usizeTransactionZZ register_output_LDKFilter_jcall(const void
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCOption_C2Tuple_usizeTransactionZZ ret_conv = *(LDKCOption_C2Tuple_usizeTransactionZZ*)(ret_ptr);
-       ret_conv = COption_C2Tuple_usizeTransactionZZ_clone((LDKCOption_C2Tuple_usizeTransactionZZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -7738,6 +7195,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Filter_1register_1output(JN
        LDKWatchedOutput output_conv;
        output_conv.inner = (void*)(output & (~1));
        output_conv.is_owned = (output & 1) || (output == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(output_conv);
        output_conv = WatchedOutput_clone(&output_conv);
        LDKCOption_C2Tuple_usizeTransactionZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_usizeTransactionZZ), "LDKCOption_C2Tuple_usizeTransactionZZ");
        *ret_copy = (this_arg_conv->register_output)(this_arg_conv->this_arg, output_conv);
@@ -7780,9 +7238,6 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1FilterZ_1ref_1f
                default: abort();
        }
 }
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1LockedChannelMonitorNoneZ_1result_1ok(JNIEnv *env, jclass clz, int64_t arg) {
-       return ((LDKCResult_LockedChannelMonitorNoneZ*)arg)->result_ok;
-}
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1LockedChannelMonitorNoneZ_1get_1ok(JNIEnv *env, jclass clz, int64_t arg) {
        LDKCResult_LockedChannelMonitorNoneZ *val = (LDKCResult_LockedChannelMonitorNoneZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -7790,6 +7245,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCResult_1LockedChannelMo
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -7798,26 +7254,6 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1LockedChannelMonit
        CHECK(!val->result_ok);
        return *val->contents.err;
 }
-JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LDKCVec_1OutPointZ_1new(JNIEnv *env, jclass clz, int64_tArray elems) {
-       LDKCVec_OutPointZ *ret = MALLOC(sizeof(LDKCVec_OutPointZ), "LDKCVec_OutPointZ");
-       ret->datalen = (*env)->GetArrayLength(env, elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKOutPoint) * ret->datalen, "LDKCVec_OutPointZ Data");
-               int64_t *java_elems = (*env)->GetPrimitiveArrayCritical(env, elems, NULL);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       int64_t arr_elem = java_elems[i];
-                       LDKOutPoint arr_elem_conv;
-                       arr_elem_conv.inner = (void*)(arr_elem & (~1));
-                       arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0);
-                       arr_elem_conv = OutPoint_clone(&arr_elem_conv);
-                       ret->data[i] = arr_elem_conv;
-               }
-               (*env)->ReleasePrimitiveArrayCritical(env, elems, java_elems, 0);
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_OutPointZ CVec_OutPointZ_clone(const LDKCVec_OutPointZ *orig) {
        LDKCVec_OutPointZ ret = { .data = MALLOC(sizeof(LDKOutPoint) * orig->datalen, "LDKCVec_OutPointZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -7876,7 +7312,7 @@ LDKCVec_MessageSendEventZ get_and_clear_pending_msg_events_LDKMessageSendEventsP
                void* ret_conv_18_ptr = (void*)(((uint64_t)ret_conv_18) & ~1);
                CHECK_ACCESS(ret_conv_18_ptr);
                LDKMessageSendEvent ret_conv_18_conv = *(LDKMessageSendEvent*)(ret_conv_18_ptr);
-               ret_conv_18_conv = MessageSendEvent_clone((LDKMessageSendEvent*)(((uint64_t)ret_conv_18) & ~1));
+               FREE((void*)ret_conv_18);
                ret_constr.data[s] = ret_conv_18_conv;
        }
        (*env)->ReleaseLongArrayElements(env, ret, ret_vals, 0);
@@ -8490,6 +7926,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ persist_new_channel_LDKPersist_jcall(con
        uint64_t channel_id_ref = 0;
        CHECK((((uint64_t)channel_id_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&channel_id_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_var);
        channel_id_ref = (uint64_t)channel_id_var.inner;
        if (channel_id_var.is_owned) {
                channel_id_ref |= 1;
@@ -8499,6 +7936,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ persist_new_channel_LDKPersist_jcall(con
        data_var = ChannelMonitor_clone(data);
        CHECK((((uint64_t)data_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&data_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(data_var);
        data_ref = (uint64_t)data_var.inner;
        if (data_var.is_owned) {
                data_ref |= 1;
@@ -8507,6 +7945,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ persist_new_channel_LDKPersist_jcall(con
        uint64_t update_id_ref = 0;
        CHECK((((uint64_t)update_id_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&update_id_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_id_var);
        update_id_ref = (uint64_t)update_id_var.inner;
        if (update_id_var.is_owned) {
                update_id_ref |= 1;
@@ -8521,7 +7960,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ persist_new_channel_LDKPersist_jcall(con
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneChannelMonitorUpdateErrZ ret_conv = *(LDKCResult_NoneChannelMonitorUpdateErrZ*)(ret_ptr);
-       ret_conv = CResult_NoneChannelMonitorUpdateErrZ_clone((LDKCResult_NoneChannelMonitorUpdateErrZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -8540,6 +7979,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ update_persisted_channel_LDKPersist_jcal
        uint64_t channel_id_ref = 0;
        CHECK((((uint64_t)channel_id_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&channel_id_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_var);
        channel_id_ref = (uint64_t)channel_id_var.inner;
        if (channel_id_var.is_owned) {
                channel_id_ref |= 1;
@@ -8550,6 +7990,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ update_persisted_channel_LDKPersist_jcal
                update_var = ChannelMonitorUpdate_clone(update);
                CHECK((((uint64_t)update_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&update_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_var);
                update_ref = (uint64_t)update_var.inner;
                if (update_var.is_owned) {
                        update_ref |= 1;
@@ -8560,6 +8001,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ update_persisted_channel_LDKPersist_jcal
        data_var = ChannelMonitor_clone(data);
        CHECK((((uint64_t)data_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&data_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(data_var);
        data_ref = (uint64_t)data_var.inner;
        if (data_var.is_owned) {
                data_ref |= 1;
@@ -8568,6 +8010,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ update_persisted_channel_LDKPersist_jcal
        uint64_t update_id_ref = 0;
        CHECK((((uint64_t)update_id_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&update_id_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_id_var);
        update_id_ref = (uint64_t)update_id_var.inner;
        if (update_id_var.is_owned) {
                update_id_ref |= 1;
@@ -8582,7 +8025,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ update_persisted_channel_LDKPersist_jcal
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneChannelMonitorUpdateErrZ ret_conv = *(LDKCResult_NoneChannelMonitorUpdateErrZ*)(ret_ptr);
-       ret_conv = CResult_NoneChannelMonitorUpdateErrZ_clone((LDKCResult_NoneChannelMonitorUpdateErrZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -8624,13 +8067,16 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Persist_1persist_1new_1chan
        LDKOutPoint channel_id_conv;
        channel_id_conv.inner = (void*)(channel_id & (~1));
        channel_id_conv.is_owned = (channel_id & 1) || (channel_id == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_conv);
        channel_id_conv = OutPoint_clone(&channel_id_conv);
        LDKChannelMonitor data_conv;
        data_conv.inner = (void*)(data & (~1));
        data_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(data_conv);
        LDKMonitorUpdateId update_id_conv;
        update_id_conv.inner = (void*)(update_id & (~1));
        update_id_conv.is_owned = (update_id & 1) || (update_id == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_id_conv);
        update_id_conv = MonitorUpdateId_clone(&update_id_conv);
        LDKCResult_NoneChannelMonitorUpdateErrZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneChannelMonitorUpdateErrZ), "LDKCResult_NoneChannelMonitorUpdateErrZ");
        *ret_conv = (this_arg_conv->persist_new_channel)(this_arg_conv->this_arg, channel_id_conv, &data_conv, update_id_conv);
@@ -8644,16 +8090,20 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Persist_1update_1persisted_
        LDKOutPoint channel_id_conv;
        channel_id_conv.inner = (void*)(channel_id & (~1));
        channel_id_conv.is_owned = (channel_id & 1) || (channel_id == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_conv);
        channel_id_conv = OutPoint_clone(&channel_id_conv);
        LDKChannelMonitorUpdate update_conv;
        update_conv.inner = (void*)(update & (~1));
        update_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_conv);
        LDKChannelMonitor data_conv;
        data_conv.inner = (void*)(data & (~1));
        data_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(data_conv);
        LDKMonitorUpdateId update_id_conv;
        update_id_conv.inner = (void*)(update_id & (~1));
        update_id_conv.is_owned = (update_id & 1) || (update_id == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_id_conv);
        update_id_conv = MonitorUpdateId_clone(&update_id_conv);
        LDKCResult_NoneChannelMonitorUpdateErrZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneChannelMonitorUpdateErrZ), "LDKCResult_NoneChannelMonitorUpdateErrZ");
        *ret_conv = (this_arg_conv->update_persisted_channel)(this_arg_conv->this_arg, channel_id_conv, &update_conv, &data_conv, update_id_conv);
@@ -8718,6 +8168,7 @@ void handle_open_channel_LDKChannelMessageHandler_jcall(const void* this_arg, LD
        uint64_t their_features_ref = 0;
        CHECK((((uint64_t)their_features_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&their_features_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(their_features_var);
        their_features_ref = (uint64_t)their_features_var.inner;
        if (their_features_var.is_owned) {
                their_features_ref |= 1;
@@ -8727,6 +8178,7 @@ void handle_open_channel_LDKChannelMessageHandler_jcall(const void* this_arg, LD
        msg_var = OpenChannel_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -8757,6 +8209,7 @@ void handle_accept_channel_LDKChannelMessageHandler_jcall(const void* this_arg,
        uint64_t their_features_ref = 0;
        CHECK((((uint64_t)their_features_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&their_features_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(their_features_var);
        their_features_ref = (uint64_t)their_features_var.inner;
        if (their_features_var.is_owned) {
                their_features_ref |= 1;
@@ -8766,6 +8219,7 @@ void handle_accept_channel_LDKChannelMessageHandler_jcall(const void* this_arg,
        msg_var = AcceptChannel_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -8797,6 +8251,7 @@ void handle_funding_created_LDKChannelMessageHandler_jcall(const void* this_arg,
        msg_var = FundingCreated_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -8828,6 +8283,7 @@ void handle_funding_signed_LDKChannelMessageHandler_jcall(const void* this_arg,
        msg_var = FundingSigned_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -8859,6 +8315,7 @@ void handle_funding_locked_LDKChannelMessageHandler_jcall(const void* this_arg,
        msg_var = FundingLocked_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -8890,6 +8347,7 @@ void handle_shutdown_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPub
        their_features_var = InitFeatures_clone(their_features);
        CHECK((((uint64_t)their_features_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&their_features_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(their_features_var);
        their_features_ref = (uint64_t)their_features_var.inner;
        if (their_features_var.is_owned) {
                their_features_ref |= 1;
@@ -8899,6 +8357,7 @@ void handle_shutdown_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPub
        msg_var = Shutdown_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -8930,6 +8389,7 @@ void handle_closing_signed_LDKChannelMessageHandler_jcall(const void* this_arg,
        msg_var = ClosingSigned_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -8961,6 +8421,7 @@ void handle_update_add_htlc_LDKChannelMessageHandler_jcall(const void* this_arg,
        msg_var = UpdateAddHTLC_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -8992,6 +8453,7 @@ void handle_update_fulfill_htlc_LDKChannelMessageHandler_jcall(const void* this_
        msg_var = UpdateFulfillHTLC_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -9023,6 +8485,7 @@ void handle_update_fail_htlc_LDKChannelMessageHandler_jcall(const void* this_arg
        msg_var = UpdateFailHTLC_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -9054,6 +8517,7 @@ void handle_update_fail_malformed_htlc_LDKChannelMessageHandler_jcall(const void
        msg_var = UpdateFailMalformedHTLC_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -9085,6 +8549,7 @@ void handle_commitment_signed_LDKChannelMessageHandler_jcall(const void* this_ar
        msg_var = CommitmentSigned_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -9116,6 +8581,7 @@ void handle_revoke_and_ack_LDKChannelMessageHandler_jcall(const void* this_arg,
        msg_var = RevokeAndACK_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -9147,6 +8613,7 @@ void handle_update_fee_LDKChannelMessageHandler_jcall(const void* this_arg, LDKP
        msg_var = UpdateFee_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -9178,6 +8645,7 @@ void handle_announcement_signatures_LDKChannelMessageHandler_jcall(const void* t
        msg_var = AnnouncementSignatures_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -9231,6 +8699,7 @@ void peer_connected_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPubl
        msg_var = Init_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -9262,6 +8731,7 @@ void handle_channel_reestablish_LDKChannelMessageHandler_jcall(const void* this_
        msg_var = ChannelReestablish_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -9293,6 +8763,7 @@ void handle_channel_update_LDKChannelMessageHandler_jcall(const void* this_arg,
        msg_var = ChannelUpdate_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -9324,6 +8795,7 @@ void handle_error_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublic
        msg_var = ErrorMessage_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -9441,10 +8913,12 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMessageHandler_1handle_
        LDKInitFeatures their_features_conv;
        their_features_conv.inner = (void*)(their_features & (~1));
        their_features_conv.is_owned = (their_features & 1) || (their_features == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(their_features_conv);
        their_features_conv = InitFeatures_clone(&their_features_conv);
        LDKOpenChannel msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_open_channel)(this_arg_conv->this_arg, their_node_id_ref, their_features_conv, &msg_conv);
 }
 
@@ -9458,10 +8932,12 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMessageHandler_1handle_
        LDKInitFeatures their_features_conv;
        their_features_conv.inner = (void*)(their_features & (~1));
        their_features_conv.is_owned = (their_features & 1) || (their_features == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(their_features_conv);
        their_features_conv = InitFeatures_clone(&their_features_conv);
        LDKAcceptChannel msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_accept_channel)(this_arg_conv->this_arg, their_node_id_ref, their_features_conv, &msg_conv);
 }
 
@@ -9475,6 +8951,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMessageHandler_1handle_
        LDKFundingCreated msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_funding_created)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -9488,6 +8965,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMessageHandler_1handle_
        LDKFundingSigned msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_funding_signed)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -9501,6 +8979,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMessageHandler_1handle_
        LDKFundingLocked msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_funding_locked)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -9514,9 +8993,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMessageHandler_1handle_
        LDKInitFeatures their_features_conv;
        their_features_conv.inner = (void*)(their_features & (~1));
        their_features_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(their_features_conv);
        LDKShutdown msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_shutdown)(this_arg_conv->this_arg, their_node_id_ref, &their_features_conv, &msg_conv);
 }
 
@@ -9530,6 +9011,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMessageHandler_1handle_
        LDKClosingSigned msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_closing_signed)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -9543,6 +9025,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMessageHandler_1handle_
        LDKUpdateAddHTLC msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_update_add_htlc)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -9556,6 +9039,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMessageHandler_1handle_
        LDKUpdateFulfillHTLC msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_update_fulfill_htlc)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -9569,6 +9053,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMessageHandler_1handle_
        LDKUpdateFailHTLC msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_update_fail_htlc)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -9582,6 +9067,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMessageHandler_1handle_
        LDKUpdateFailMalformedHTLC msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_update_fail_malformed_htlc)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -9595,6 +9081,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMessageHandler_1handle_
        LDKCommitmentSigned msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_commitment_signed)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -9608,6 +9095,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMessageHandler_1handle_
        LDKRevokeAndACK msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_revoke_and_ack)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -9621,6 +9109,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMessageHandler_1handle_
        LDKUpdateFee msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_update_fee)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -9634,6 +9123,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMessageHandler_1handle_
        LDKAnnouncementSignatures msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_announcement_signatures)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -9657,6 +9147,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMessageHandler_1peer_1c
        LDKInit msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->peer_connected)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -9670,6 +9161,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMessageHandler_1handle_
        LDKChannelReestablish msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_channel_reestablish)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -9683,6 +9175,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMessageHandler_1handle_
        LDKChannelUpdate msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_channel_update)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -9696,6 +9189,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMessageHandler_1handle_
        LDKErrorMessage msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_error)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -9746,6 +9240,7 @@ LDKCResult_boolLightningErrorZ handle_node_announcement_LDKRoutingMessageHandler
        msg_var = NodeAnnouncement_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -9760,7 +9255,7 @@ LDKCResult_boolLightningErrorZ handle_node_announcement_LDKRoutingMessageHandler
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_boolLightningErrorZ ret_conv = *(LDKCResult_boolLightningErrorZ*)(ret_ptr);
-       ret_conv = CResult_boolLightningErrorZ_clone((LDKCResult_boolLightningErrorZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -9780,6 +9275,7 @@ LDKCResult_boolLightningErrorZ handle_channel_announcement_LDKRoutingMessageHand
        msg_var = ChannelAnnouncement_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -9794,7 +9290,7 @@ LDKCResult_boolLightningErrorZ handle_channel_announcement_LDKRoutingMessageHand
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_boolLightningErrorZ ret_conv = *(LDKCResult_boolLightningErrorZ*)(ret_ptr);
-       ret_conv = CResult_boolLightningErrorZ_clone((LDKCResult_boolLightningErrorZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -9814,6 +9310,7 @@ LDKCResult_boolLightningErrorZ handle_channel_update_LDKRoutingMessageHandler_jc
        msg_var = ChannelUpdate_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -9828,7 +9325,7 @@ LDKCResult_boolLightningErrorZ handle_channel_update_LDKRoutingMessageHandler_jc
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_boolLightningErrorZ ret_conv = *(LDKCResult_boolLightningErrorZ*)(ret_ptr);
-       ret_conv = CResult_boolLightningErrorZ_clone((LDKCResult_boolLightningErrorZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -9862,7 +9359,7 @@ LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ get_next_channel
                void* ret_conv_59_ptr = (void*)(((uint64_t)ret_conv_59) & ~1);
                CHECK_ACCESS(ret_conv_59_ptr);
                LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ ret_conv_59_conv = *(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ*)(ret_conv_59_ptr);
-               ret_conv_59_conv = C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_clone((LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ*)(((uint64_t)ret_conv_59) & ~1));
+               FREE((void*)ret_conv_59);
                ret_constr.data[h] = ret_conv_59_conv;
        }
        (*env)->ReleaseLongArrayElements(env, ret, ret_vals, 0);
@@ -9901,7 +9398,7 @@ LDKCVec_NodeAnnouncementZ get_next_node_announcements_LDKRoutingMessageHandler_j
                LDKNodeAnnouncement ret_conv_18_conv;
                ret_conv_18_conv.inner = (void*)(ret_conv_18 & (~1));
                ret_conv_18_conv.is_owned = (ret_conv_18 & 1) || (ret_conv_18 == 0);
-               ret_conv_18_conv = NodeAnnouncement_clone(&ret_conv_18_conv);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_18_conv);
                ret_constr.data[s] = ret_conv_18_conv;
        }
        (*env)->ReleaseLongArrayElements(env, ret, ret_vals, 0);
@@ -9926,6 +9423,7 @@ void sync_routing_table_LDKRoutingMessageHandler_jcall(const void* this_arg, LDK
        init_var = Init_clone(init);
        CHECK((((uint64_t)init_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&init_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(init_var);
        init_ref = (uint64_t)init_var.inner;
        if (init_var.is_owned) {
                init_ref |= 1;
@@ -9956,6 +9454,7 @@ LDKCResult_NoneLightningErrorZ handle_reply_channel_range_LDKRoutingMessageHandl
        uint64_t msg_ref = 0;
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -9970,7 +9469,7 @@ LDKCResult_NoneLightningErrorZ handle_reply_channel_range_LDKRoutingMessageHandl
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneLightningErrorZ ret_conv = *(LDKCResult_NoneLightningErrorZ*)(ret_ptr);
-       ret_conv = CResult_NoneLightningErrorZ_clone((LDKCResult_NoneLightningErrorZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -9991,6 +9490,7 @@ LDKCResult_NoneLightningErrorZ handle_reply_short_channel_ids_end_LDKRoutingMess
        uint64_t msg_ref = 0;
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -10005,7 +9505,7 @@ LDKCResult_NoneLightningErrorZ handle_reply_short_channel_ids_end_LDKRoutingMess
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneLightningErrorZ ret_conv = *(LDKCResult_NoneLightningErrorZ*)(ret_ptr);
-       ret_conv = CResult_NoneLightningErrorZ_clone((LDKCResult_NoneLightningErrorZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -10026,6 +9526,7 @@ LDKCResult_NoneLightningErrorZ handle_query_channel_range_LDKRoutingMessageHandl
        uint64_t msg_ref = 0;
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -10040,7 +9541,7 @@ LDKCResult_NoneLightningErrorZ handle_query_channel_range_LDKRoutingMessageHandl
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneLightningErrorZ ret_conv = *(LDKCResult_NoneLightningErrorZ*)(ret_ptr);
-       ret_conv = CResult_NoneLightningErrorZ_clone((LDKCResult_NoneLightningErrorZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -10061,6 +9562,7 @@ LDKCResult_NoneLightningErrorZ handle_query_short_channel_ids_LDKRoutingMessageH
        uint64_t msg_ref = 0;
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -10075,7 +9577,7 @@ LDKCResult_NoneLightningErrorZ handle_query_short_channel_ids_LDKRoutingMessageH
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneLightningErrorZ ret_conv = *(LDKCResult_NoneLightningErrorZ*)(ret_ptr);
-       ret_conv = CResult_NoneLightningErrorZ_clone((LDKCResult_NoneLightningErrorZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -10150,6 +9652,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RoutingMessageHandler_1hand
        LDKNodeAnnouncement msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        LDKCResult_boolLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_boolLightningErrorZ), "LDKCResult_boolLightningErrorZ");
        *ret_conv = (this_arg_conv->handle_node_announcement)(this_arg_conv->this_arg, &msg_conv);
        return (uint64_t)ret_conv;
@@ -10162,6 +9665,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RoutingMessageHandler_1hand
        LDKChannelAnnouncement msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        LDKCResult_boolLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_boolLightningErrorZ), "LDKCResult_boolLightningErrorZ");
        *ret_conv = (this_arg_conv->handle_channel_announcement)(this_arg_conv->this_arg, &msg_conv);
        return (uint64_t)ret_conv;
@@ -10174,6 +9678,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RoutingMessageHandler_1hand
        LDKChannelUpdate msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        LDKCResult_boolLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_boolLightningErrorZ), "LDKCResult_boolLightningErrorZ");
        *ret_conv = (this_arg_conv->handle_channel_update)(this_arg_conv->this_arg, &msg_conv);
        return (uint64_t)ret_conv;
@@ -10213,6 +9718,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_RoutingMessageHandler_
                uint64_t ret_conv_18_ref = 0;
                CHECK((((uint64_t)ret_conv_18_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_conv_18_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_18_var);
                ret_conv_18_ref = (uint64_t)ret_conv_18_var.inner;
                if (ret_conv_18_var.is_owned) {
                        ret_conv_18_ref |= 1;
@@ -10234,6 +9740,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RoutingMessageHandler_1sync_1r
        LDKInit init_conv;
        init_conv.inner = (void*)(init & (~1));
        init_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(init_conv);
        (this_arg_conv->sync_routing_table)(this_arg_conv->this_arg, their_node_id_ref, &init_conv);
 }
 
@@ -10247,6 +9754,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RoutingMessageHandler_1hand
        LDKReplyChannelRange msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = ReplyChannelRange_clone(&msg_conv);
        LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
        *ret_conv = (this_arg_conv->handle_reply_channel_range)(this_arg_conv->this_arg, their_node_id_ref, msg_conv);
@@ -10263,6 +9771,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RoutingMessageHandler_1hand
        LDKReplyShortChannelIdsEnd msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = ReplyShortChannelIdsEnd_clone(&msg_conv);
        LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
        *ret_conv = (this_arg_conv->handle_reply_short_channel_ids_end)(this_arg_conv->this_arg, their_node_id_ref, msg_conv);
@@ -10279,6 +9788,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RoutingMessageHandler_1hand
        LDKQueryChannelRange msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = QueryChannelRange_clone(&msg_conv);
        LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
        *ret_conv = (this_arg_conv->handle_query_channel_range)(this_arg_conv->this_arg, their_node_id_ref, msg_conv);
@@ -10295,6 +9805,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RoutingMessageHandler_1hand
        LDKQueryShortChannelIds msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = QueryShortChannelIds_clone(&msg_conv);
        LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
        *ret_conv = (this_arg_conv->handle_query_short_channel_ids)(this_arg_conv->this_arg, their_node_id_ref, msg_conv);
@@ -10346,7 +9857,7 @@ LDKCResult_COption_TypeZDecodeErrorZ read_LDKCustomMessageReader_jcall(const voi
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_COption_TypeZDecodeErrorZ ret_conv = *(LDKCResult_COption_TypeZDecodeErrorZ*)(ret_ptr);
-       ret_conv = CResult_COption_TypeZDecodeErrorZ_clone((LDKCResult_COption_TypeZDecodeErrorZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -10439,7 +9950,7 @@ LDKCResult_NoneLightningErrorZ handle_custom_message_LDKCustomMessageHandler_jca
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneLightningErrorZ ret_conv = *(LDKCResult_NoneLightningErrorZ*)(ret_ptr);
-       ret_conv = CResult_NoneLightningErrorZ_clone((LDKCResult_NoneLightningErrorZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -10473,7 +9984,7 @@ LDKCVec_C2Tuple_PublicKeyTypeZZ get_and_clear_pending_msg_LDKCustomMessageHandle
                void* ret_conv_25_ptr = (void*)(((uint64_t)ret_conv_25) & ~1);
                CHECK_ACCESS(ret_conv_25_ptr);
                LDKC2Tuple_PublicKeyTypeZ ret_conv_25_conv = *(LDKC2Tuple_PublicKeyTypeZ*)(ret_conv_25_ptr);
-               ret_conv_25_conv = C2Tuple_PublicKeyTypeZ_clone((LDKC2Tuple_PublicKeyTypeZ*)(((uint64_t)ret_conv_25) & ~1));
+               FREE((void*)ret_conv_25);
                ret_constr.data[z] = ret_conv_25_conv;
        }
        (*env)->ReleaseLongArrayElements(env, ret, ret_vals, 0);
@@ -10773,6 +10284,7 @@ uint64_t channel_penalty_msat_LDKScore_jcall(const void* this_arg, uint64_t shor
        source_var = NodeId_clone(source);
        CHECK((((uint64_t)source_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&source_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(source_var);
        source_ref = (uint64_t)source_var.inner;
        if (source_var.is_owned) {
                source_ref |= 1;
@@ -10782,6 +10294,7 @@ uint64_t channel_penalty_msat_LDKScore_jcall(const void* this_arg, uint64_t shor
        target_var = NodeId_clone(target);
        CHECK((((uint64_t)target_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&target_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(target_var);
        target_ref = (uint64_t)target_var.inner;
        if (target_var.is_owned) {
                target_ref |= 1;
@@ -10816,6 +10329,7 @@ void payment_path_failed_LDKScore_jcall(void* this_arg, LDKCVec_RouteHopZ path,
                uint64_t path_conv_10_ref = 0;
                CHECK((((uint64_t)path_conv_10_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&path_conv_10_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv_10_var);
                path_conv_10_ref = (uint64_t)path_conv_10_var.inner;
                if (path_conv_10_var.is_owned) {
                        path_conv_10_ref |= 1;
@@ -10899,9 +10413,11 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Score_1channel_1penalty_1ms
        LDKNodeId source_conv;
        source_conv.inner = (void*)(source & (~1));
        source_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(source_conv);
        LDKNodeId target_conv;
        target_conv.inner = (void*)(target & (~1));
        target_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(target_conv);
        int64_t ret_val = (this_arg_conv->channel_penalty_msat)(this_arg_conv->this_arg, short_channel_id, &source_conv, &target_conv);
        return ret_val;
 }
@@ -10922,6 +10438,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Score_1payment_1path_1failed(J
                LDKRouteHop path_conv_10_conv;
                path_conv_10_conv.inner = (void*)(path_conv_10 & (~1));
                path_conv_10_conv.is_owned = (path_conv_10 & 1) || (path_conv_10 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv_10_conv);
                path_conv_10_conv = RouteHop_clone(&path_conv_10_conv);
                path_constr.data[k] = path_conv_10_conv;
        }
@@ -10977,6 +10494,7 @@ LDKCResult_NoneErrorZ persist_manager_LDKChannelManagerPersister_jcall(const voi
        // Warning: we may need a move here but no clone is available for LDKChannelManager
        CHECK((((uint64_t)channel_manager_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&channel_manager_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_manager_var);
        channel_manager_ref = (uint64_t)channel_manager_var.inner;
        if (channel_manager_var.is_owned) {
                channel_manager_ref |= 1;
@@ -10991,7 +10509,7 @@ LDKCResult_NoneErrorZ persist_manager_LDKChannelManagerPersister_jcall(const voi
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneErrorZ ret_conv = *(LDKCResult_NoneErrorZ*)(ret_ptr);
-       ret_conv = CResult_NoneErrorZ_clone((LDKCResult_NoneErrorZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -11030,6 +10548,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManagerPersister_1pe
        LDKChannelManager channel_manager_conv;
        channel_manager_conv.inner = (void*)(channel_manager & (~1));
        channel_manager_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_manager_conv);
        LDKCResult_NoneErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneErrorZ), "LDKCResult_NoneErrorZ");
        *ret_conv = (this_arg_conv->persist_manager)(this_arg_conv->this_arg, &channel_manager_conv);
        return (uint64_t)ret_conv;
@@ -11159,7 +10678,7 @@ LDKCVec_ChannelDetailsZ first_hops_LDKPayer_jcall(const void* this_arg) {
                LDKChannelDetails ret_conv_16_conv;
                ret_conv_16_conv.inner = (void*)(ret_conv_16 & (~1));
                ret_conv_16_conv.is_owned = (ret_conv_16 & 1) || (ret_conv_16 == 0);
-               ret_conv_16_conv = ChannelDetails_clone(&ret_conv_16_conv);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_16_conv);
                ret_constr.data[q] = ret_conv_16_conv;
        }
        (*env)->ReleaseLongArrayElements(env, ret, ret_vals, 0);
@@ -11182,6 +10701,7 @@ LDKCResult_PaymentIdPaymentSendFailureZ send_payment_LDKPayer_jcall(const void*
        route_var = Route_clone(route);
        CHECK((((uint64_t)route_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&route_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(route_var);
        route_ref = (uint64_t)route_var.inner;
        if (route_var.is_owned) {
                route_ref |= 1;
@@ -11200,7 +10720,7 @@ LDKCResult_PaymentIdPaymentSendFailureZ send_payment_LDKPayer_jcall(const void*
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_PaymentIdPaymentSendFailureZ ret_conv = *(LDKCResult_PaymentIdPaymentSendFailureZ*)(ret_ptr);
-       ret_conv = CResult_PaymentIdPaymentSendFailureZ_clone((LDKCResult_PaymentIdPaymentSendFailureZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -11220,6 +10740,7 @@ LDKCResult_NonePaymentSendFailureZ retry_payment_LDKPayer_jcall(const void* this
        route_var = Route_clone(route);
        CHECK((((uint64_t)route_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&route_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(route_var);
        route_ref = (uint64_t)route_var.inner;
        if (route_var.is_owned) {
                route_ref |= 1;
@@ -11236,7 +10757,7 @@ LDKCResult_NonePaymentSendFailureZ retry_payment_LDKPayer_jcall(const void* this
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NonePaymentSendFailureZ ret_conv = *(LDKCResult_NonePaymentSendFailureZ*)(ret_ptr);
-       ret_conv = CResult_NonePaymentSendFailureZ_clone((LDKCResult_NonePaymentSendFailureZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -11299,6 +10820,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_Payer_1first_1hops(JNI
                uint64_t ret_conv_16_ref = 0;
                CHECK((((uint64_t)ret_conv_16_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_conv_16_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_16_var);
                ret_conv_16_ref = (uint64_t)ret_conv_16_var.inner;
                if (ret_conv_16_var.is_owned) {
                        ret_conv_16_ref |= 1;
@@ -11317,6 +10839,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Payer_1send_1payment(JNIEnv
        LDKRoute route_conv;
        route_conv.inner = (void*)(route & (~1));
        route_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(route_conv);
        LDKThirtyTwoBytes payment_hash_ref;
        CHECK((*env)->GetArrayLength(env, payment_hash) == 32);
        (*env)->GetByteArrayRegion(env, payment_hash, 0, 32, payment_hash_ref.data);
@@ -11335,6 +10858,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Payer_1retry_1payment(JNIEn
        LDKRoute route_conv;
        route_conv.inner = (void*)(route & (~1));
        route_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(route_conv);
        LDKThirtyTwoBytes payment_id_ref;
        CHECK((*env)->GetArrayLength(env, payment_id) == 32);
        (*env)->GetByteArrayRegion(env, payment_id, 0, 32, payment_id_ref.data);
@@ -11382,6 +10906,7 @@ LDKCResult_RouteLightningErrorZ find_route_LDKRouter_jcall(const void* this_arg,
        params_var = RouteParameters_clone(params);
        CHECK((((uint64_t)params_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&params_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(params_var);
        params_ref = (uint64_t)params_var.inner;
        if (params_var.is_owned) {
                params_ref |= 1;
@@ -11397,6 +10922,7 @@ LDKCResult_RouteLightningErrorZ find_route_LDKRouter_jcall(const void* this_arg,
                        uint64_t first_hops_conv_16_ref = 0;
                        CHECK((((uint64_t)first_hops_conv_16_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&first_hops_conv_16_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(first_hops_conv_16_var);
                        first_hops_conv_16_ref = (uint64_t)first_hops_conv_16_var.inner;
                        if (first_hops_conv_16_var.is_owned) {
                                first_hops_conv_16_ref |= 1;
@@ -11417,7 +10943,7 @@ LDKCResult_RouteLightningErrorZ find_route_LDKRouter_jcall(const void* this_arg,
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_RouteLightningErrorZ ret_conv = *(LDKCResult_RouteLightningErrorZ*)(ret_ptr);
-       ret_conv = CResult_RouteLightningErrorZ_clone((LDKCResult_RouteLightningErrorZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        if (get_jenv_res == JNI_EDETACHED) {
                DO_ASSERT((*j_calls->vm)->DetachCurrentThread(j_calls->vm) == JNI_OK);
        }
@@ -11459,6 +10985,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Router_1find_1route(JNIEnv
        LDKRouteParameters params_conv;
        params_conv.inner = (void*)(params & (~1));
        params_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(params_conv);
        LDKCVec_ChannelDetailsZ first_hops_constr;
        LDKCVec_ChannelDetailsZ *first_hops_ptr = NULL;
        if (first_hops != NULL) {
@@ -11473,6 +11000,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Router_1find_1route(JNIEnv
                        LDKChannelDetails first_hops_conv_16_conv;
                        first_hops_conv_16_conv.inner = (void*)(first_hops_conv_16 & (~1));
                        first_hops_conv_16_conv.is_owned = (first_hops_conv_16 & 1) || (first_hops_conv_16 == 0);
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(first_hops_conv_16_conv);
                        first_hops_constr.data[q] = first_hops_conv_16_conv;
                }
                (*env)->ReleaseLongArrayElements(env, first_hops, first_hops_vals, 0);
@@ -11529,6 +11057,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_TxOut_1free(JNIEnv *env, jclas
        TxOut_free(_res_conv);
 }
 
+static inline uint64_t TxOut_clone_ptr(LDKTxOut *NONNULL_PTR arg) {
+       LDKTxOut* ret_ref = MALLOC(sizeof(LDKTxOut), "LDKTxOut");
+       *ret_ref = TxOut_clone(arg);
+       return (uint64_t)ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_TxOut_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKTxOut* arg_conv = (LDKTxOut*)(arg & ~1);
+       int64_t ret_val = TxOut_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_TxOut_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKTxOut* orig_conv = (LDKTxOut*)(orig & ~1);
        LDKTxOut* ret_ref = MALLOC(sizeof(LDKTxOut), "LDKTxOut");
@@ -11557,6 +11096,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SecretKeyErrorZ_1e
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1SecretKeyErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_SecretKeyErrorZ* o_conv = (LDKCResult_SecretKeyErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_SecretKeyErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SecretKeyErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -11582,6 +11127,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeyErrorZ_1e
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeyErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_PublicKeyErrorZ* o_conv = (LDKCResult_PublicKeyErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_PublicKeyErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeyErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -11591,6 +11142,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeyErrorZ_1free
        CResult_PublicKeyErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_PublicKeyErrorZ_clone_ptr(LDKCResult_PublicKeyErrorZ *NONNULL_PTR arg) {
+       LDKCResult_PublicKeyErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PublicKeyErrorZ), "LDKCResult_PublicKeyErrorZ");
+       *ret_conv = CResult_PublicKeyErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeyErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_PublicKeyErrorZ* arg_conv = (LDKCResult_PublicKeyErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_PublicKeyErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeyErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_PublicKeyErrorZ* orig_conv = (LDKCResult_PublicKeyErrorZ*)(orig & ~1);
        LDKCResult_PublicKeyErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PublicKeyErrorZ), "LDKCResult_PublicKeyErrorZ");
@@ -11602,6 +11164,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1TxCreationKeysDeco
        LDKTxCreationKeys o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = TxCreationKeys_clone(&o_conv);
        LDKCResult_TxCreationKeysDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxCreationKeysDecodeErrorZ), "LDKCResult_TxCreationKeysDecodeErrorZ");
        *ret_conv = CResult_TxCreationKeysDecodeErrorZ_ok(o_conv);
@@ -11612,12 +11175,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1TxCreationKeysDeco
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_TxCreationKeysDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxCreationKeysDecodeErrorZ), "LDKCResult_TxCreationKeysDecodeErrorZ");
        *ret_conv = CResult_TxCreationKeysDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1TxCreationKeysDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_TxCreationKeysDecodeErrorZ* o_conv = (LDKCResult_TxCreationKeysDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_TxCreationKeysDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1TxCreationKeysDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -11627,6 +11197,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1TxCreationKeysDecodeE
        CResult_TxCreationKeysDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_TxCreationKeysDecodeErrorZ_clone_ptr(LDKCResult_TxCreationKeysDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_TxCreationKeysDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxCreationKeysDecodeErrorZ), "LDKCResult_TxCreationKeysDecodeErrorZ");
+       *ret_conv = CResult_TxCreationKeysDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1TxCreationKeysDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_TxCreationKeysDecodeErrorZ* arg_conv = (LDKCResult_TxCreationKeysDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_TxCreationKeysDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1TxCreationKeysDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_TxCreationKeysDecodeErrorZ* orig_conv = (LDKCResult_TxCreationKeysDecodeErrorZ*)(orig & ~1);
        LDKCResult_TxCreationKeysDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxCreationKeysDecodeErrorZ), "LDKCResult_TxCreationKeysDecodeErrorZ");
@@ -11638,6 +11219,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelPublicKeysD
        LDKChannelPublicKeys o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ChannelPublicKeys_clone(&o_conv);
        LDKCResult_ChannelPublicKeysDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelPublicKeysDecodeErrorZ), "LDKCResult_ChannelPublicKeysDecodeErrorZ");
        *ret_conv = CResult_ChannelPublicKeysDecodeErrorZ_ok(o_conv);
@@ -11648,12 +11230,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelPublicKeysD
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ChannelPublicKeysDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelPublicKeysDecodeErrorZ), "LDKCResult_ChannelPublicKeysDecodeErrorZ");
        *ret_conv = CResult_ChannelPublicKeysDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelPublicKeysDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ChannelPublicKeysDecodeErrorZ* o_conv = (LDKCResult_ChannelPublicKeysDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ChannelPublicKeysDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelPublicKeysDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -11663,6 +11252,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelPublicKeysDeco
        CResult_ChannelPublicKeysDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ChannelPublicKeysDecodeErrorZ_clone_ptr(LDKCResult_ChannelPublicKeysDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ChannelPublicKeysDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelPublicKeysDecodeErrorZ), "LDKCResult_ChannelPublicKeysDecodeErrorZ");
+       *ret_conv = CResult_ChannelPublicKeysDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelPublicKeysDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_ChannelPublicKeysDecodeErrorZ* arg_conv = (LDKCResult_ChannelPublicKeysDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ChannelPublicKeysDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelPublicKeysDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_ChannelPublicKeysDecodeErrorZ* orig_conv = (LDKCResult_ChannelPublicKeysDecodeErrorZ*)(orig & ~1);
        LDKCResult_ChannelPublicKeysDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelPublicKeysDecodeErrorZ), "LDKCResult_ChannelPublicKeysDecodeErrorZ");
@@ -11674,6 +11274,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1TxCreationKeysErro
        LDKTxCreationKeys o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = TxCreationKeys_clone(&o_conv);
        LDKCResult_TxCreationKeysErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxCreationKeysErrorZ), "LDKCResult_TxCreationKeysErrorZ");
        *ret_conv = CResult_TxCreationKeysErrorZ_ok(o_conv);
@@ -11687,6 +11288,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1TxCreationKeysErro
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1TxCreationKeysErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_TxCreationKeysErrorZ* o_conv = (LDKCResult_TxCreationKeysErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_TxCreationKeysErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1TxCreationKeysErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -11696,6 +11303,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1TxCreationKeysErrorZ_
        CResult_TxCreationKeysErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_TxCreationKeysErrorZ_clone_ptr(LDKCResult_TxCreationKeysErrorZ *NONNULL_PTR arg) {
+       LDKCResult_TxCreationKeysErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxCreationKeysErrorZ), "LDKCResult_TxCreationKeysErrorZ");
+       *ret_conv = CResult_TxCreationKeysErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1TxCreationKeysErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_TxCreationKeysErrorZ* arg_conv = (LDKCResult_TxCreationKeysErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_TxCreationKeysErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1TxCreationKeysErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_TxCreationKeysErrorZ* orig_conv = (LDKCResult_TxCreationKeysErrorZ*)(orig & ~1);
        LDKCResult_TxCreationKeysErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxCreationKeysErrorZ), "LDKCResult_TxCreationKeysErrorZ");
@@ -11726,6 +11344,18 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1u32Z_1free(JNIEnv *en
        COption_u32Z_free(_res_conv);
 }
 
+static inline uint64_t COption_u32Z_clone_ptr(LDKCOption_u32Z *NONNULL_PTR arg) {
+       LDKCOption_u32Z *ret_copy = MALLOC(sizeof(LDKCOption_u32Z), "LDKCOption_u32Z");
+       *ret_copy = COption_u32Z_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u32Z_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCOption_u32Z* arg_conv = (LDKCOption_u32Z*)arg;
+       int64_t ret_val = COption_u32Z_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u32Z_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCOption_u32Z* orig_conv = (LDKCOption_u32Z*)orig;
        LDKCOption_u32Z *ret_copy = MALLOC(sizeof(LDKCOption_u32Z), "LDKCOption_u32Z");
@@ -11738,6 +11368,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCOutputInCommit
        LDKHTLCOutputInCommitment o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = HTLCOutputInCommitment_clone(&o_conv);
        LDKCResult_HTLCOutputInCommitmentDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HTLCOutputInCommitmentDecodeErrorZ), "LDKCResult_HTLCOutputInCommitmentDecodeErrorZ");
        *ret_conv = CResult_HTLCOutputInCommitmentDecodeErrorZ_ok(o_conv);
@@ -11748,12 +11379,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCOutputInCommit
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_HTLCOutputInCommitmentDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HTLCOutputInCommitmentDecodeErrorZ), "LDKCResult_HTLCOutputInCommitmentDecodeErrorZ");
        *ret_conv = CResult_HTLCOutputInCommitmentDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCOutputInCommitmentDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_HTLCOutputInCommitmentDecodeErrorZ* o_conv = (LDKCResult_HTLCOutputInCommitmentDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_HTLCOutputInCommitmentDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCOutputInCommitmentDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -11763,6 +11401,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCOutputInCommitmen
        CResult_HTLCOutputInCommitmentDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_HTLCOutputInCommitmentDecodeErrorZ_clone_ptr(LDKCResult_HTLCOutputInCommitmentDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_HTLCOutputInCommitmentDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HTLCOutputInCommitmentDecodeErrorZ), "LDKCResult_HTLCOutputInCommitmentDecodeErrorZ");
+       *ret_conv = CResult_HTLCOutputInCommitmentDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCOutputInCommitmentDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_HTLCOutputInCommitmentDecodeErrorZ* arg_conv = (LDKCResult_HTLCOutputInCommitmentDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_HTLCOutputInCommitmentDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCOutputInCommitmentDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_HTLCOutputInCommitmentDecodeErrorZ* orig_conv = (LDKCResult_HTLCOutputInCommitmentDecodeErrorZ*)(orig & ~1);
        LDKCResult_HTLCOutputInCommitmentDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HTLCOutputInCommitmentDecodeErrorZ), "LDKCResult_HTLCOutputInCommitmentDecodeErrorZ");
@@ -11774,6 +11423,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CounterpartyChanne
        LDKCounterpartyChannelTransactionParameters o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = CounterpartyChannelTransactionParameters_clone(&o_conv);
        LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ), "LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ");
        *ret_conv = CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_ok(o_conv);
@@ -11784,12 +11434,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CounterpartyChanne
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ), "LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ");
        *ret_conv = CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1CounterpartyChannelTransactionParametersDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ* o_conv = (LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CounterpartyChannelTransactionParametersDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -11799,6 +11456,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CounterpartyChannelTr
        CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_clone_ptr(LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ), "LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ");
+       *ret_conv = CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CounterpartyChannelTransactionParametersDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ* arg_conv = (LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CounterpartyChannelTransactionParametersDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ* orig_conv = (LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ*)(orig & ~1);
        LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ), "LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ");
@@ -11810,6 +11478,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelTransaction
        LDKChannelTransactionParameters o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ChannelTransactionParameters_clone(&o_conv);
        LDKCResult_ChannelTransactionParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelTransactionParametersDecodeErrorZ), "LDKCResult_ChannelTransactionParametersDecodeErrorZ");
        *ret_conv = CResult_ChannelTransactionParametersDecodeErrorZ_ok(o_conv);
@@ -11820,12 +11489,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelTransaction
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ChannelTransactionParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelTransactionParametersDecodeErrorZ), "LDKCResult_ChannelTransactionParametersDecodeErrorZ");
        *ret_conv = CResult_ChannelTransactionParametersDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelTransactionParametersDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ChannelTransactionParametersDecodeErrorZ* o_conv = (LDKCResult_ChannelTransactionParametersDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ChannelTransactionParametersDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelTransactionParametersDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -11835,6 +11511,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelTransactionPar
        CResult_ChannelTransactionParametersDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ChannelTransactionParametersDecodeErrorZ_clone_ptr(LDKCResult_ChannelTransactionParametersDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ChannelTransactionParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelTransactionParametersDecodeErrorZ), "LDKCResult_ChannelTransactionParametersDecodeErrorZ");
+       *ret_conv = CResult_ChannelTransactionParametersDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelTransactionParametersDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_ChannelTransactionParametersDecodeErrorZ* arg_conv = (LDKCResult_ChannelTransactionParametersDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ChannelTransactionParametersDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelTransactionParametersDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_ChannelTransactionParametersDecodeErrorZ* orig_conv = (LDKCResult_ChannelTransactionParametersDecodeErrorZ*)(orig & ~1);
        LDKCResult_ChannelTransactionParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelTransactionParametersDecodeErrorZ), "LDKCResult_ChannelTransactionParametersDecodeErrorZ");
@@ -11863,6 +11550,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1HolderCommitmentTr
        LDKHolderCommitmentTransaction o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = HolderCommitmentTransaction_clone(&o_conv);
        LDKCResult_HolderCommitmentTransactionDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HolderCommitmentTransactionDecodeErrorZ), "LDKCResult_HolderCommitmentTransactionDecodeErrorZ");
        *ret_conv = CResult_HolderCommitmentTransactionDecodeErrorZ_ok(o_conv);
@@ -11873,12 +11561,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1HolderCommitmentTr
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_HolderCommitmentTransactionDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HolderCommitmentTransactionDecodeErrorZ), "LDKCResult_HolderCommitmentTransactionDecodeErrorZ");
        *ret_conv = CResult_HolderCommitmentTransactionDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1HolderCommitmentTransactionDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_HolderCommitmentTransactionDecodeErrorZ* o_conv = (LDKCResult_HolderCommitmentTransactionDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_HolderCommitmentTransactionDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1HolderCommitmentTransactionDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -11888,6 +11583,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1HolderCommitmentTrans
        CResult_HolderCommitmentTransactionDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_HolderCommitmentTransactionDecodeErrorZ_clone_ptr(LDKCResult_HolderCommitmentTransactionDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_HolderCommitmentTransactionDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HolderCommitmentTransactionDecodeErrorZ), "LDKCResult_HolderCommitmentTransactionDecodeErrorZ");
+       *ret_conv = CResult_HolderCommitmentTransactionDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1HolderCommitmentTransactionDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_HolderCommitmentTransactionDecodeErrorZ* arg_conv = (LDKCResult_HolderCommitmentTransactionDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_HolderCommitmentTransactionDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1HolderCommitmentTransactionDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_HolderCommitmentTransactionDecodeErrorZ* orig_conv = (LDKCResult_HolderCommitmentTransactionDecodeErrorZ*)(orig & ~1);
        LDKCResult_HolderCommitmentTransactionDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HolderCommitmentTransactionDecodeErrorZ), "LDKCResult_HolderCommitmentTransactionDecodeErrorZ");
@@ -11899,6 +11605,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1BuiltCommitmentTra
        LDKBuiltCommitmentTransaction o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = BuiltCommitmentTransaction_clone(&o_conv);
        LDKCResult_BuiltCommitmentTransactionDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BuiltCommitmentTransactionDecodeErrorZ), "LDKCResult_BuiltCommitmentTransactionDecodeErrorZ");
        *ret_conv = CResult_BuiltCommitmentTransactionDecodeErrorZ_ok(o_conv);
@@ -11909,12 +11616,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1BuiltCommitmentTra
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_BuiltCommitmentTransactionDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BuiltCommitmentTransactionDecodeErrorZ), "LDKCResult_BuiltCommitmentTransactionDecodeErrorZ");
        *ret_conv = CResult_BuiltCommitmentTransactionDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1BuiltCommitmentTransactionDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_BuiltCommitmentTransactionDecodeErrorZ* o_conv = (LDKCResult_BuiltCommitmentTransactionDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_BuiltCommitmentTransactionDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1BuiltCommitmentTransactionDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -11924,6 +11638,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1BuiltCommitmentTransa
        CResult_BuiltCommitmentTransactionDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_BuiltCommitmentTransactionDecodeErrorZ_clone_ptr(LDKCResult_BuiltCommitmentTransactionDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_BuiltCommitmentTransactionDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BuiltCommitmentTransactionDecodeErrorZ), "LDKCResult_BuiltCommitmentTransactionDecodeErrorZ");
+       *ret_conv = CResult_BuiltCommitmentTransactionDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1BuiltCommitmentTransactionDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_BuiltCommitmentTransactionDecodeErrorZ* arg_conv = (LDKCResult_BuiltCommitmentTransactionDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_BuiltCommitmentTransactionDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1BuiltCommitmentTransactionDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_BuiltCommitmentTransactionDecodeErrorZ* orig_conv = (LDKCResult_BuiltCommitmentTransactionDecodeErrorZ*)(orig & ~1);
        LDKCResult_BuiltCommitmentTransactionDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BuiltCommitmentTransactionDecodeErrorZ), "LDKCResult_BuiltCommitmentTransactionDecodeErrorZ");
@@ -11935,6 +11660,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1TrustedClosingTran
        LDKTrustedClosingTransaction o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        // Warning: we need a move here but no clone is available for LDKTrustedClosingTransaction
        LDKCResult_TrustedClosingTransactionNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_TrustedClosingTransactionNoneZ), "LDKCResult_TrustedClosingTransactionNoneZ");
        *ret_conv = CResult_TrustedClosingTransactionNoneZ_ok(o_conv);
@@ -11947,6 +11673,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1TrustedClosingTran
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1TrustedClosingTransactionNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_TrustedClosingTransactionNoneZ* o_conv = (LDKCResult_TrustedClosingTransactionNoneZ*)(o & ~1);
+       jboolean ret_val = CResult_TrustedClosingTransactionNoneZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1TrustedClosingTransactionNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -11960,6 +11692,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CommitmentTransact
        LDKCommitmentTransaction o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = CommitmentTransaction_clone(&o_conv);
        LDKCResult_CommitmentTransactionDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CommitmentTransactionDecodeErrorZ), "LDKCResult_CommitmentTransactionDecodeErrorZ");
        *ret_conv = CResult_CommitmentTransactionDecodeErrorZ_ok(o_conv);
@@ -11970,12 +11703,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CommitmentTransact
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_CommitmentTransactionDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CommitmentTransactionDecodeErrorZ), "LDKCResult_CommitmentTransactionDecodeErrorZ");
        *ret_conv = CResult_CommitmentTransactionDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1CommitmentTransactionDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_CommitmentTransactionDecodeErrorZ* o_conv = (LDKCResult_CommitmentTransactionDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_CommitmentTransactionDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CommitmentTransactionDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -11985,6 +11725,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CommitmentTransaction
        CResult_CommitmentTransactionDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_CommitmentTransactionDecodeErrorZ_clone_ptr(LDKCResult_CommitmentTransactionDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_CommitmentTransactionDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CommitmentTransactionDecodeErrorZ), "LDKCResult_CommitmentTransactionDecodeErrorZ");
+       *ret_conv = CResult_CommitmentTransactionDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CommitmentTransactionDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_CommitmentTransactionDecodeErrorZ* arg_conv = (LDKCResult_CommitmentTransactionDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_CommitmentTransactionDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CommitmentTransactionDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_CommitmentTransactionDecodeErrorZ* orig_conv = (LDKCResult_CommitmentTransactionDecodeErrorZ*)(orig & ~1);
        LDKCResult_CommitmentTransactionDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CommitmentTransactionDecodeErrorZ), "LDKCResult_CommitmentTransactionDecodeErrorZ");
@@ -11996,6 +11747,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1TrustedCommitmentT
        LDKTrustedCommitmentTransaction o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        // Warning: we need a move here but no clone is available for LDKTrustedCommitmentTransaction
        LDKCResult_TrustedCommitmentTransactionNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_TrustedCommitmentTransactionNoneZ), "LDKCResult_TrustedCommitmentTransactionNoneZ");
        *ret_conv = CResult_TrustedCommitmentTransactionNoneZ_ok(o_conv);
@@ -12008,6 +11760,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1TrustedCommitmentT
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1TrustedCommitmentTransactionNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_TrustedCommitmentTransactionNoneZ* o_conv = (LDKCResult_TrustedCommitmentTransactionNoneZ*)(o & ~1);
+       jboolean ret_val = CResult_TrustedCommitmentTransactionNoneZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1TrustedCommitmentTransactionNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12042,6 +11800,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1SignatureZNo
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1SignatureZNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_CVec_SignatureZNoneZ* o_conv = (LDKCResult_CVec_SignatureZNoneZ*)(o & ~1);
+       jboolean ret_val = CResult_CVec_SignatureZNoneZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1SignatureZNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12051,6 +11815,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1SignatureZNoneZ
        CResult_CVec_SignatureZNoneZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_CVec_SignatureZNoneZ_clone_ptr(LDKCResult_CVec_SignatureZNoneZ *NONNULL_PTR arg) {
+       LDKCResult_CVec_SignatureZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_SignatureZNoneZ), "LDKCResult_CVec_SignatureZNoneZ");
+       *ret_conv = CResult_CVec_SignatureZNoneZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1SignatureZNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_CVec_SignatureZNoneZ* arg_conv = (LDKCResult_CVec_SignatureZNoneZ*)(arg & ~1);
+       int64_t ret_val = CResult_CVec_SignatureZNoneZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1SignatureZNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_CVec_SignatureZNoneZ* orig_conv = (LDKCResult_CVec_SignatureZNoneZ*)(orig & ~1);
        LDKCResult_CVec_SignatureZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_SignatureZNoneZ), "LDKCResult_CVec_SignatureZNoneZ");
@@ -12062,6 +11837,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownScriptDeco
        LDKShutdownScript o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ShutdownScript_clone(&o_conv);
        LDKCResult_ShutdownScriptDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ShutdownScriptDecodeErrorZ), "LDKCResult_ShutdownScriptDecodeErrorZ");
        *ret_conv = CResult_ShutdownScriptDecodeErrorZ_ok(o_conv);
@@ -12072,12 +11848,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownScriptDeco
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ShutdownScriptDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ShutdownScriptDecodeErrorZ), "LDKCResult_ShutdownScriptDecodeErrorZ");
        *ret_conv = CResult_ShutdownScriptDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownScriptDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ShutdownScriptDecodeErrorZ* o_conv = (LDKCResult_ShutdownScriptDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ShutdownScriptDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownScriptDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12087,6 +11870,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownScriptDecodeE
        CResult_ShutdownScriptDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ShutdownScriptDecodeErrorZ_clone_ptr(LDKCResult_ShutdownScriptDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ShutdownScriptDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ShutdownScriptDecodeErrorZ), "LDKCResult_ShutdownScriptDecodeErrorZ");
+       *ret_conv = CResult_ShutdownScriptDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownScriptDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_ShutdownScriptDecodeErrorZ* arg_conv = (LDKCResult_ShutdownScriptDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ShutdownScriptDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownScriptDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_ShutdownScriptDecodeErrorZ* orig_conv = (LDKCResult_ShutdownScriptDecodeErrorZ*)(orig & ~1);
        LDKCResult_ShutdownScriptDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ShutdownScriptDecodeErrorZ), "LDKCResult_ShutdownScriptDecodeErrorZ");
@@ -12098,6 +11892,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownScriptInva
        LDKShutdownScript o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ShutdownScript_clone(&o_conv);
        LDKCResult_ShutdownScriptInvalidShutdownScriptZ* ret_conv = MALLOC(sizeof(LDKCResult_ShutdownScriptInvalidShutdownScriptZ), "LDKCResult_ShutdownScriptInvalidShutdownScriptZ");
        *ret_conv = CResult_ShutdownScriptInvalidShutdownScriptZ_ok(o_conv);
@@ -12108,12 +11903,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownScriptInva
        LDKInvalidShutdownScript e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = InvalidShutdownScript_clone(&e_conv);
        LDKCResult_ShutdownScriptInvalidShutdownScriptZ* ret_conv = MALLOC(sizeof(LDKCResult_ShutdownScriptInvalidShutdownScriptZ), "LDKCResult_ShutdownScriptInvalidShutdownScriptZ");
        *ret_conv = CResult_ShutdownScriptInvalidShutdownScriptZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownScriptInvalidShutdownScriptZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ShutdownScriptInvalidShutdownScriptZ* o_conv = (LDKCResult_ShutdownScriptInvalidShutdownScriptZ*)(o & ~1);
+       jboolean ret_val = CResult_ShutdownScriptInvalidShutdownScriptZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownScriptInvalidShutdownScriptZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12123,6 +11925,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownScriptInvalid
        CResult_ShutdownScriptInvalidShutdownScriptZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ShutdownScriptInvalidShutdownScriptZ_clone_ptr(LDKCResult_ShutdownScriptInvalidShutdownScriptZ *NONNULL_PTR arg) {
+       LDKCResult_ShutdownScriptInvalidShutdownScriptZ* ret_conv = MALLOC(sizeof(LDKCResult_ShutdownScriptInvalidShutdownScriptZ), "LDKCResult_ShutdownScriptInvalidShutdownScriptZ");
+       *ret_conv = CResult_ShutdownScriptInvalidShutdownScriptZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownScriptInvalidShutdownScriptZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_ShutdownScriptInvalidShutdownScriptZ* arg_conv = (LDKCResult_ShutdownScriptInvalidShutdownScriptZ*)(arg & ~1);
+       int64_t ret_val = CResult_ShutdownScriptInvalidShutdownScriptZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownScriptInvalidShutdownScriptZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_ShutdownScriptInvalidShutdownScriptZ* orig_conv = (LDKCResult_ShutdownScriptInvalidShutdownScriptZ*)(orig & ~1);
        LDKCResult_ShutdownScriptInvalidShutdownScriptZ* ret_conv = MALLOC(sizeof(LDKCResult_ShutdownScriptInvalidShutdownScriptZ), "LDKCResult_ShutdownScriptInvalidShutdownScriptZ");
@@ -12143,6 +11956,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneErrorZ_1err(JN
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NoneErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_NoneErrorZ* o_conv = (LDKCResult_NoneErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_NoneErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12152,6 +11971,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneErrorZ_1free(JNIE
        CResult_NoneErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_NoneErrorZ_clone_ptr(LDKCResult_NoneErrorZ *NONNULL_PTR arg) {
+       LDKCResult_NoneErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneErrorZ), "LDKCResult_NoneErrorZ");
+       *ret_conv = CResult_NoneErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_NoneErrorZ* arg_conv = (LDKCResult_NoneErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_NoneErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_NoneErrorZ* orig_conv = (LDKCResult_NoneErrorZ*)(orig & ~1);
        LDKCResult_NoneErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneErrorZ), "LDKCResult_NoneErrorZ");
@@ -12163,6 +11993,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RouteHopDecodeErro
        LDKRouteHop o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = RouteHop_clone(&o_conv);
        LDKCResult_RouteHopDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHopDecodeErrorZ), "LDKCResult_RouteHopDecodeErrorZ");
        *ret_conv = CResult_RouteHopDecodeErrorZ_ok(o_conv);
@@ -12173,12 +12004,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RouteHopDecodeErro
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_RouteHopDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHopDecodeErrorZ), "LDKCResult_RouteHopDecodeErrorZ");
        *ret_conv = CResult_RouteHopDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1RouteHopDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_RouteHopDecodeErrorZ* o_conv = (LDKCResult_RouteHopDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_RouteHopDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RouteHopDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12188,6 +12026,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RouteHopDecodeErrorZ_
        CResult_RouteHopDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_RouteHopDecodeErrorZ_clone_ptr(LDKCResult_RouteHopDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_RouteHopDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHopDecodeErrorZ), "LDKCResult_RouteHopDecodeErrorZ");
+       *ret_conv = CResult_RouteHopDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RouteHopDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_RouteHopDecodeErrorZ* arg_conv = (LDKCResult_RouteHopDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_RouteHopDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RouteHopDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_RouteHopDecodeErrorZ* orig_conv = (LDKCResult_RouteHopDecodeErrorZ*)(orig & ~1);
        LDKCResult_RouteHopDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHopDecodeErrorZ), "LDKCResult_RouteHopDecodeErrorZ");
@@ -12208,6 +12057,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1RouteHopZ_1free(JNIEnv *
                LDKRouteHop _res_conv_10_conv;
                _res_conv_10_conv.inner = (void*)(_res_conv_10 & (~1));
                _res_conv_10_conv.is_owned = (_res_conv_10 & 1) || (_res_conv_10 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_10_conv);
                _res_constr.data[k] = _res_conv_10_conv;
        }
        (*env)->ReleaseLongArrayElements(env, _res, _res_vals, 0);
@@ -12235,6 +12085,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1CVec_1RouteHopZZ_1free(J
                        LDKRouteHop _res_conv_12_conv_10_conv;
                        _res_conv_12_conv_10_conv.inner = (void*)(_res_conv_12_conv_10 & (~1));
                        _res_conv_12_conv_10_conv.is_owned = (_res_conv_12_conv_10 & 1) || (_res_conv_12_conv_10 == 0);
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_12_conv_10_conv);
                        _res_conv_12_constr.data[k] = _res_conv_12_conv_10_conv;
                }
                (*env)->ReleaseLongArrayElements(env, _res_conv_12, _res_conv_12_vals, 0);
@@ -12247,6 +12098,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RouteDecodeErrorZ_
        LDKRoute o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = Route_clone(&o_conv);
        LDKCResult_RouteDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteDecodeErrorZ), "LDKCResult_RouteDecodeErrorZ");
        *ret_conv = CResult_RouteDecodeErrorZ_ok(o_conv);
@@ -12257,12 +12109,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RouteDecodeErrorZ_
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_RouteDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteDecodeErrorZ), "LDKCResult_RouteDecodeErrorZ");
        *ret_conv = CResult_RouteDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1RouteDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_RouteDecodeErrorZ* o_conv = (LDKCResult_RouteDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_RouteDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RouteDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12272,6 +12131,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RouteDecodeErrorZ_1fr
        CResult_RouteDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_RouteDecodeErrorZ_clone_ptr(LDKCResult_RouteDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_RouteDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteDecodeErrorZ), "LDKCResult_RouteDecodeErrorZ");
+       *ret_conv = CResult_RouteDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RouteDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_RouteDecodeErrorZ* arg_conv = (LDKCResult_RouteDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_RouteDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RouteDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_RouteDecodeErrorZ* orig_conv = (LDKCResult_RouteDecodeErrorZ*)(orig & ~1);
        LDKCResult_RouteDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteDecodeErrorZ), "LDKCResult_RouteDecodeErrorZ");
@@ -12283,6 +12153,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RouteParametersDec
        LDKRouteParameters o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = RouteParameters_clone(&o_conv);
        LDKCResult_RouteParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteParametersDecodeErrorZ), "LDKCResult_RouteParametersDecodeErrorZ");
        *ret_conv = CResult_RouteParametersDecodeErrorZ_ok(o_conv);
@@ -12293,12 +12164,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RouteParametersDec
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_RouteParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteParametersDecodeErrorZ), "LDKCResult_RouteParametersDecodeErrorZ");
        *ret_conv = CResult_RouteParametersDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1RouteParametersDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_RouteParametersDecodeErrorZ* o_conv = (LDKCResult_RouteParametersDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_RouteParametersDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RouteParametersDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12308,6 +12186,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RouteParametersDecode
        CResult_RouteParametersDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_RouteParametersDecodeErrorZ_clone_ptr(LDKCResult_RouteParametersDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_RouteParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteParametersDecodeErrorZ), "LDKCResult_RouteParametersDecodeErrorZ");
+       *ret_conv = CResult_RouteParametersDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RouteParametersDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_RouteParametersDecodeErrorZ* arg_conv = (LDKCResult_RouteParametersDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_RouteParametersDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RouteParametersDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_RouteParametersDecodeErrorZ* orig_conv = (LDKCResult_RouteParametersDecodeErrorZ*)(orig & ~1);
        LDKCResult_RouteParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteParametersDecodeErrorZ), "LDKCResult_RouteParametersDecodeErrorZ");
@@ -12328,6 +12217,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1RouteHintZ_1free(JNIEnv
                LDKRouteHint _res_conv_11_conv;
                _res_conv_11_conv.inner = (void*)(_res_conv_11 & (~1));
                _res_conv_11_conv.is_owned = (_res_conv_11 & 1) || (_res_conv_11 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_11_conv);
                _res_constr.data[l] = _res_conv_11_conv;
        }
        (*env)->ReleaseLongArrayElements(env, _res, _res_vals, 0);
@@ -12357,6 +12247,18 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1u64Z_1free(JNIEnv *en
        COption_u64Z_free(_res_conv);
 }
 
+static inline uint64_t COption_u64Z_clone_ptr(LDKCOption_u64Z *NONNULL_PTR arg) {
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = COption_u64Z_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u64Z_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCOption_u64Z* arg_conv = (LDKCOption_u64Z*)arg;
+       int64_t ret_val = COption_u64Z_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u64Z_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCOption_u64Z* orig_conv = (LDKCOption_u64Z*)orig;
        LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
@@ -12369,6 +12271,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PayeeDecodeErrorZ_
        LDKPayee o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = Payee_clone(&o_conv);
        LDKCResult_PayeeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PayeeDecodeErrorZ), "LDKCResult_PayeeDecodeErrorZ");
        *ret_conv = CResult_PayeeDecodeErrorZ_ok(o_conv);
@@ -12379,12 +12282,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PayeeDecodeErrorZ_
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_PayeeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PayeeDecodeErrorZ), "LDKCResult_PayeeDecodeErrorZ");
        *ret_conv = CResult_PayeeDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PayeeDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_PayeeDecodeErrorZ* o_conv = (LDKCResult_PayeeDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_PayeeDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PayeeDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12394,6 +12304,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PayeeDecodeErrorZ_1fr
        CResult_PayeeDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_PayeeDecodeErrorZ_clone_ptr(LDKCResult_PayeeDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_PayeeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PayeeDecodeErrorZ), "LDKCResult_PayeeDecodeErrorZ");
+       *ret_conv = CResult_PayeeDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PayeeDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_PayeeDecodeErrorZ* arg_conv = (LDKCResult_PayeeDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_PayeeDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PayeeDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_PayeeDecodeErrorZ* orig_conv = (LDKCResult_PayeeDecodeErrorZ*)(orig & ~1);
        LDKCResult_PayeeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PayeeDecodeErrorZ), "LDKCResult_PayeeDecodeErrorZ");
@@ -12414,6 +12335,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1RouteHintHopZ_1free(JNIE
                LDKRouteHintHop _res_conv_14_conv;
                _res_conv_14_conv.inner = (void*)(_res_conv_14 & (~1));
                _res_conv_14_conv.is_owned = (_res_conv_14 & 1) || (_res_conv_14 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_14_conv);
                _res_constr.data[o] = _res_conv_14_conv;
        }
        (*env)->ReleaseLongArrayElements(env, _res, _res_vals, 0);
@@ -12424,6 +12346,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RouteHintDecodeErr
        LDKRouteHint o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = RouteHint_clone(&o_conv);
        LDKCResult_RouteHintDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHintDecodeErrorZ), "LDKCResult_RouteHintDecodeErrorZ");
        *ret_conv = CResult_RouteHintDecodeErrorZ_ok(o_conv);
@@ -12434,12 +12357,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RouteHintDecodeErr
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_RouteHintDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHintDecodeErrorZ), "LDKCResult_RouteHintDecodeErrorZ");
        *ret_conv = CResult_RouteHintDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1RouteHintDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_RouteHintDecodeErrorZ* o_conv = (LDKCResult_RouteHintDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_RouteHintDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RouteHintDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12449,6 +12379,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RouteHintDecodeErrorZ
        CResult_RouteHintDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_RouteHintDecodeErrorZ_clone_ptr(LDKCResult_RouteHintDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_RouteHintDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHintDecodeErrorZ), "LDKCResult_RouteHintDecodeErrorZ");
+       *ret_conv = CResult_RouteHintDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RouteHintDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_RouteHintDecodeErrorZ* arg_conv = (LDKCResult_RouteHintDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_RouteHintDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RouteHintDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_RouteHintDecodeErrorZ* orig_conv = (LDKCResult_RouteHintDecodeErrorZ*)(orig & ~1);
        LDKCResult_RouteHintDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHintDecodeErrorZ), "LDKCResult_RouteHintDecodeErrorZ");
@@ -12460,6 +12401,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RouteHintHopDecode
        LDKRouteHintHop o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = RouteHintHop_clone(&o_conv);
        LDKCResult_RouteHintHopDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHintHopDecodeErrorZ), "LDKCResult_RouteHintHopDecodeErrorZ");
        *ret_conv = CResult_RouteHintHopDecodeErrorZ_ok(o_conv);
@@ -12470,12 +12412,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RouteHintHopDecode
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_RouteHintHopDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHintHopDecodeErrorZ), "LDKCResult_RouteHintHopDecodeErrorZ");
        *ret_conv = CResult_RouteHintHopDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1RouteHintHopDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_RouteHintHopDecodeErrorZ* o_conv = (LDKCResult_RouteHintHopDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_RouteHintHopDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RouteHintHopDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12485,6 +12434,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RouteHintHopDecodeErr
        CResult_RouteHintHopDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_RouteHintHopDecodeErrorZ_clone_ptr(LDKCResult_RouteHintHopDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_RouteHintHopDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHintHopDecodeErrorZ), "LDKCResult_RouteHintHopDecodeErrorZ");
+       *ret_conv = CResult_RouteHintHopDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RouteHintHopDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_RouteHintHopDecodeErrorZ* arg_conv = (LDKCResult_RouteHintHopDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_RouteHintHopDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RouteHintHopDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_RouteHintHopDecodeErrorZ* orig_conv = (LDKCResult_RouteHintHopDecodeErrorZ*)(orig & ~1);
        LDKCResult_RouteHintHopDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHintHopDecodeErrorZ), "LDKCResult_RouteHintHopDecodeErrorZ");
@@ -12505,6 +12465,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1ChannelDetailsZ_1free(JN
                LDKChannelDetails _res_conv_16_conv;
                _res_conv_16_conv.inner = (void*)(_res_conv_16 & (~1));
                _res_conv_16_conv.is_owned = (_res_conv_16 & 1) || (_res_conv_16 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_16_conv);
                _res_constr.data[q] = _res_conv_16_conv;
        }
        (*env)->ReleaseLongArrayElements(env, _res, _res_vals, 0);
@@ -12515,6 +12476,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RouteLightningErro
        LDKRoute o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = Route_clone(&o_conv);
        LDKCResult_RouteLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteLightningErrorZ), "LDKCResult_RouteLightningErrorZ");
        *ret_conv = CResult_RouteLightningErrorZ_ok(o_conv);
@@ -12525,12 +12487,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RouteLightningErro
        LDKLightningError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = LightningError_clone(&e_conv);
        LDKCResult_RouteLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteLightningErrorZ), "LDKCResult_RouteLightningErrorZ");
        *ret_conv = CResult_RouteLightningErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1RouteLightningErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_RouteLightningErrorZ* o_conv = (LDKCResult_RouteLightningErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_RouteLightningErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RouteLightningErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12540,6 +12509,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RouteLightningErrorZ_
        CResult_RouteLightningErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_RouteLightningErrorZ_clone_ptr(LDKCResult_RouteLightningErrorZ *NONNULL_PTR arg) {
+       LDKCResult_RouteLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteLightningErrorZ), "LDKCResult_RouteLightningErrorZ");
+       *ret_conv = CResult_RouteLightningErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RouteLightningErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_RouteLightningErrorZ* arg_conv = (LDKCResult_RouteLightningErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_RouteLightningErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RouteLightningErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_RouteLightningErrorZ* orig_conv = (LDKCResult_RouteLightningErrorZ*)(orig & ~1);
        LDKCResult_RouteLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteLightningErrorZ), "LDKCResult_RouteLightningErrorZ");
@@ -12564,6 +12544,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1TxOutAccessErrorZ_
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1TxOutAccessErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_TxOutAccessErrorZ* o_conv = (LDKCResult_TxOutAccessErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_TxOutAccessErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1TxOutAccessErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12573,6 +12559,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1TxOutAccessErrorZ_1fr
        CResult_TxOutAccessErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_TxOutAccessErrorZ_clone_ptr(LDKCResult_TxOutAccessErrorZ *NONNULL_PTR arg) {
+       LDKCResult_TxOutAccessErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxOutAccessErrorZ), "LDKCResult_TxOutAccessErrorZ");
+       *ret_conv = CResult_TxOutAccessErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1TxOutAccessErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_TxOutAccessErrorZ* arg_conv = (LDKCResult_TxOutAccessErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_TxOutAccessErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1TxOutAccessErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_TxOutAccessErrorZ* orig_conv = (LDKCResult_TxOutAccessErrorZ*)(orig & ~1);
        LDKCResult_TxOutAccessErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxOutAccessErrorZ), "LDKCResult_TxOutAccessErrorZ");
@@ -12580,6 +12577,17 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1TxOutAccessErrorZ_
        return (uint64_t)ret_conv;
 }
 
+static inline uint64_t C2Tuple_usizeTransactionZ_clone_ptr(LDKC2Tuple_usizeTransactionZ *NONNULL_PTR arg) {
+       LDKC2Tuple_usizeTransactionZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_usizeTransactionZ), "LDKC2Tuple_usizeTransactionZ");
+       *ret_conv = C2Tuple_usizeTransactionZ_clone(arg);
+       return ((uint64_t)ret_conv);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1usizeTransactionZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKC2Tuple_usizeTransactionZ* arg_conv = (LDKC2Tuple_usizeTransactionZ*)(arg & ~1);
+       int64_t ret_val = C2Tuple_usizeTransactionZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1usizeTransactionZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKC2Tuple_usizeTransactionZ* orig_conv = (LDKC2Tuple_usizeTransactionZ*)(orig & ~1);
        LDKC2Tuple_usizeTransactionZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_usizeTransactionZ), "LDKC2Tuple_usizeTransactionZ");
@@ -12657,6 +12665,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneChannelMonitor
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NoneChannelMonitorUpdateErrZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_NoneChannelMonitorUpdateErrZ* o_conv = (LDKCResult_NoneChannelMonitorUpdateErrZ*)(o & ~1);
+       jboolean ret_val = CResult_NoneChannelMonitorUpdateErrZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneChannelMonitorUpdateErrZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12666,6 +12680,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneChannelMonitorUpd
        CResult_NoneChannelMonitorUpdateErrZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_NoneChannelMonitorUpdateErrZ_clone_ptr(LDKCResult_NoneChannelMonitorUpdateErrZ *NONNULL_PTR arg) {
+       LDKCResult_NoneChannelMonitorUpdateErrZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneChannelMonitorUpdateErrZ), "LDKCResult_NoneChannelMonitorUpdateErrZ");
+       *ret_conv = CResult_NoneChannelMonitorUpdateErrZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneChannelMonitorUpdateErrZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_NoneChannelMonitorUpdateErrZ* arg_conv = (LDKCResult_NoneChannelMonitorUpdateErrZ*)(arg & ~1);
+       int64_t ret_val = CResult_NoneChannelMonitorUpdateErrZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneChannelMonitorUpdateErrZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_NoneChannelMonitorUpdateErrZ* orig_conv = (LDKCResult_NoneChannelMonitorUpdateErrZ*)(orig & ~1);
        LDKCResult_NoneChannelMonitorUpdateErrZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneChannelMonitorUpdateErrZ), "LDKCResult_NoneChannelMonitorUpdateErrZ");
@@ -12720,6 +12745,18 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1C2Tuple_1usizeTransac
        COption_C2Tuple_usizeTransactionZZ_free(_res_conv);
 }
 
+static inline uint64_t COption_C2Tuple_usizeTransactionZZ_clone_ptr(LDKCOption_C2Tuple_usizeTransactionZZ *NONNULL_PTR arg) {
+       LDKCOption_C2Tuple_usizeTransactionZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_usizeTransactionZZ), "LDKCOption_C2Tuple_usizeTransactionZZ");
+       *ret_copy = COption_C2Tuple_usizeTransactionZZ_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1C2Tuple_1usizeTransactionZZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCOption_C2Tuple_usizeTransactionZZ* arg_conv = (LDKCOption_C2Tuple_usizeTransactionZZ*)arg;
+       int64_t ret_val = COption_C2Tuple_usizeTransactionZZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1C2Tuple_1usizeTransactionZZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCOption_C2Tuple_usizeTransactionZZ* orig_conv = (LDKCOption_C2Tuple_usizeTransactionZZ*)orig;
        LDKCOption_C2Tuple_usizeTransactionZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_usizeTransactionZZ), "LDKCOption_C2Tuple_usizeTransactionZZ");
@@ -12728,6 +12765,107 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1C2Tuple_1usizeTran
        return ret_ref;
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1ClosureReasonZ_1some(JNIEnv *env, jclass clz, int64_t o) {
+       void* o_ptr = (void*)(((uint64_t)o) & ~1);
+       CHECK_ACCESS(o_ptr);
+       LDKClosureReason o_conv = *(LDKClosureReason*)(o_ptr);
+       o_conv = ClosureReason_clone((LDKClosureReason*)(((uint64_t)o) & ~1));
+       LDKCOption_ClosureReasonZ *ret_copy = MALLOC(sizeof(LDKCOption_ClosureReasonZ), "LDKCOption_ClosureReasonZ");
+       *ret_copy = COption_ClosureReasonZ_some(o_conv);
+       uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1ClosureReasonZ_1none(JNIEnv *env, jclass clz) {
+       LDKCOption_ClosureReasonZ *ret_copy = MALLOC(sizeof(LDKCOption_ClosureReasonZ), "LDKCOption_ClosureReasonZ");
+       *ret_copy = COption_ClosureReasonZ_none();
+       uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1ClosureReasonZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if ((_res & 1) != 0) return;
+       void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
+       CHECK_ACCESS(_res_ptr);
+       LDKCOption_ClosureReasonZ _res_conv = *(LDKCOption_ClosureReasonZ*)(_res_ptr);
+       FREE((void*)_res);
+       COption_ClosureReasonZ_free(_res_conv);
+}
+
+static inline uint64_t COption_ClosureReasonZ_clone_ptr(LDKCOption_ClosureReasonZ *NONNULL_PTR arg) {
+       LDKCOption_ClosureReasonZ *ret_copy = MALLOC(sizeof(LDKCOption_ClosureReasonZ), "LDKCOption_ClosureReasonZ");
+       *ret_copy = COption_ClosureReasonZ_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1ClosureReasonZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCOption_ClosureReasonZ* arg_conv = (LDKCOption_ClosureReasonZ*)arg;
+       int64_t ret_val = COption_ClosureReasonZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1ClosureReasonZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCOption_ClosureReasonZ* orig_conv = (LDKCOption_ClosureReasonZ*)orig;
+       LDKCOption_ClosureReasonZ *ret_copy = MALLOC(sizeof(LDKCOption_ClosureReasonZ), "LDKCOption_ClosureReasonZ");
+       *ret_copy = COption_ClosureReasonZ_clone(orig_conv);
+       uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1ClosureReasonZDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       void* o_ptr = (void*)(((uint64_t)o) & ~1);
+       CHECK_ACCESS(o_ptr);
+       LDKCOption_ClosureReasonZ o_conv = *(LDKCOption_ClosureReasonZ*)(o_ptr);
+       o_conv = COption_ClosureReasonZ_clone((LDKCOption_ClosureReasonZ*)(((uint64_t)o) & ~1));
+       LDKCResult_COption_ClosureReasonZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_ClosureReasonZDecodeErrorZ), "LDKCResult_COption_ClosureReasonZDecodeErrorZ");
+       *ret_conv = CResult_COption_ClosureReasonZDecodeErrorZ_ok(o_conv);
+       return (uint64_t)ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1ClosureReasonZDecodeErrorZ_1err(JNIEnv *env, jclass clz, int64_t e) {
+       LDKDecodeError e_conv;
+       e_conv.inner = (void*)(e & (~1));
+       e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
+       e_conv = DecodeError_clone(&e_conv);
+       LDKCResult_COption_ClosureReasonZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_ClosureReasonZDecodeErrorZ), "LDKCResult_COption_ClosureReasonZDecodeErrorZ");
+       *ret_conv = CResult_COption_ClosureReasonZDecodeErrorZ_err(e_conv);
+       return (uint64_t)ret_conv;
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1ClosureReasonZDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_COption_ClosureReasonZDecodeErrorZ* o_conv = (LDKCResult_COption_ClosureReasonZDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_COption_ClosureReasonZDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1ClosureReasonZDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if ((_res & 1) != 0) return;
+       void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_COption_ClosureReasonZDecodeErrorZ _res_conv = *(LDKCResult_COption_ClosureReasonZDecodeErrorZ*)(_res_ptr);
+       FREE((void*)_res);
+       CResult_COption_ClosureReasonZDecodeErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_COption_ClosureReasonZDecodeErrorZ_clone_ptr(LDKCResult_COption_ClosureReasonZDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_COption_ClosureReasonZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_ClosureReasonZDecodeErrorZ), "LDKCResult_COption_ClosureReasonZDecodeErrorZ");
+       *ret_conv = CResult_COption_ClosureReasonZDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1ClosureReasonZDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_COption_ClosureReasonZDecodeErrorZ* arg_conv = (LDKCResult_COption_ClosureReasonZDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_COption_ClosureReasonZDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1ClosureReasonZDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_COption_ClosureReasonZDecodeErrorZ* orig_conv = (LDKCResult_COption_ClosureReasonZDecodeErrorZ*)(orig & ~1);
+       LDKCResult_COption_ClosureReasonZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_ClosureReasonZDecodeErrorZ), "LDKCResult_COption_ClosureReasonZDecodeErrorZ");
+       *ret_conv = CResult_COption_ClosureReasonZDecodeErrorZ_clone(orig_conv);
+       return (uint64_t)ret_conv;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1NetworkUpdateZ_1some(JNIEnv *env, jclass clz, int64_t o) {
        void* o_ptr = (void*)(((uint64_t)o) & ~1);
        CHECK_ACCESS(o_ptr);
@@ -12755,6 +12893,18 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1NetworkUpdateZ_1free(
        COption_NetworkUpdateZ_free(_res_conv);
 }
 
+static inline uint64_t COption_NetworkUpdateZ_clone_ptr(LDKCOption_NetworkUpdateZ *NONNULL_PTR arg) {
+       LDKCOption_NetworkUpdateZ *ret_copy = MALLOC(sizeof(LDKCOption_NetworkUpdateZ), "LDKCOption_NetworkUpdateZ");
+       *ret_copy = COption_NetworkUpdateZ_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1NetworkUpdateZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCOption_NetworkUpdateZ* arg_conv = (LDKCOption_NetworkUpdateZ*)arg;
+       int64_t ret_val = COption_NetworkUpdateZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1NetworkUpdateZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCOption_NetworkUpdateZ* orig_conv = (LDKCOption_NetworkUpdateZ*)orig;
        LDKCOption_NetworkUpdateZ *ret_copy = MALLOC(sizeof(LDKCOption_NetworkUpdateZ), "LDKCOption_NetworkUpdateZ");
@@ -12783,6 +12933,107 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1SpendableOutputDescripto
        CVec_SpendableOutputDescriptorZ_free(_res_constr);
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1EventZ_1some(JNIEnv *env, jclass clz, int64_t o) {
+       void* o_ptr = (void*)(((uint64_t)o) & ~1);
+       CHECK_ACCESS(o_ptr);
+       LDKEvent o_conv = *(LDKEvent*)(o_ptr);
+       o_conv = Event_clone((LDKEvent*)(((uint64_t)o) & ~1));
+       LDKCOption_EventZ *ret_copy = MALLOC(sizeof(LDKCOption_EventZ), "LDKCOption_EventZ");
+       *ret_copy = COption_EventZ_some(o_conv);
+       uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1EventZ_1none(JNIEnv *env, jclass clz) {
+       LDKCOption_EventZ *ret_copy = MALLOC(sizeof(LDKCOption_EventZ), "LDKCOption_EventZ");
+       *ret_copy = COption_EventZ_none();
+       uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1EventZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if ((_res & 1) != 0) return;
+       void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
+       CHECK_ACCESS(_res_ptr);
+       LDKCOption_EventZ _res_conv = *(LDKCOption_EventZ*)(_res_ptr);
+       FREE((void*)_res);
+       COption_EventZ_free(_res_conv);
+}
+
+static inline uint64_t COption_EventZ_clone_ptr(LDKCOption_EventZ *NONNULL_PTR arg) {
+       LDKCOption_EventZ *ret_copy = MALLOC(sizeof(LDKCOption_EventZ), "LDKCOption_EventZ");
+       *ret_copy = COption_EventZ_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1EventZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCOption_EventZ* arg_conv = (LDKCOption_EventZ*)arg;
+       int64_t ret_val = COption_EventZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1EventZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCOption_EventZ* orig_conv = (LDKCOption_EventZ*)orig;
+       LDKCOption_EventZ *ret_copy = MALLOC(sizeof(LDKCOption_EventZ), "LDKCOption_EventZ");
+       *ret_copy = COption_EventZ_clone(orig_conv);
+       uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1EventZDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       void* o_ptr = (void*)(((uint64_t)o) & ~1);
+       CHECK_ACCESS(o_ptr);
+       LDKCOption_EventZ o_conv = *(LDKCOption_EventZ*)(o_ptr);
+       o_conv = COption_EventZ_clone((LDKCOption_EventZ*)(((uint64_t)o) & ~1));
+       LDKCResult_COption_EventZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_EventZDecodeErrorZ), "LDKCResult_COption_EventZDecodeErrorZ");
+       *ret_conv = CResult_COption_EventZDecodeErrorZ_ok(o_conv);
+       return (uint64_t)ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1EventZDecodeErrorZ_1err(JNIEnv *env, jclass clz, int64_t e) {
+       LDKDecodeError e_conv;
+       e_conv.inner = (void*)(e & (~1));
+       e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
+       e_conv = DecodeError_clone(&e_conv);
+       LDKCResult_COption_EventZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_EventZDecodeErrorZ), "LDKCResult_COption_EventZDecodeErrorZ");
+       *ret_conv = CResult_COption_EventZDecodeErrorZ_err(e_conv);
+       return (uint64_t)ret_conv;
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1EventZDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_COption_EventZDecodeErrorZ* o_conv = (LDKCResult_COption_EventZDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_COption_EventZDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1EventZDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if ((_res & 1) != 0) return;
+       void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_COption_EventZDecodeErrorZ _res_conv = *(LDKCResult_COption_EventZDecodeErrorZ*)(_res_ptr);
+       FREE((void*)_res);
+       CResult_COption_EventZDecodeErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_COption_EventZDecodeErrorZ_clone_ptr(LDKCResult_COption_EventZDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_COption_EventZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_EventZDecodeErrorZ), "LDKCResult_COption_EventZDecodeErrorZ");
+       *ret_conv = CResult_COption_EventZDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1EventZDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_COption_EventZDecodeErrorZ* arg_conv = (LDKCResult_COption_EventZDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_COption_EventZDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1EventZDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_COption_EventZDecodeErrorZ* orig_conv = (LDKCResult_COption_EventZDecodeErrorZ*)(orig & ~1);
+       LDKCResult_COption_EventZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_EventZDecodeErrorZ), "LDKCResult_COption_EventZDecodeErrorZ");
+       *ret_conv = CResult_COption_EventZDecodeErrorZ_clone(orig_conv);
+       return (uint64_t)ret_conv;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1MessageSendEventZ_1free(JNIEnv *env, jclass clz, int64_tArray _res) {
        LDKCVec_MessageSendEventZ _res_constr;
        _res_constr.datalen = (*env)->GetArrayLength(env, _res);
@@ -12807,6 +13058,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1InitFeaturesDecode
        LDKInitFeatures o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = InitFeatures_clone(&o_conv);
        LDKCResult_InitFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InitFeaturesDecodeErrorZ), "LDKCResult_InitFeaturesDecodeErrorZ");
        *ret_conv = CResult_InitFeaturesDecodeErrorZ_ok(o_conv);
@@ -12817,12 +13069,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1InitFeaturesDecode
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_InitFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InitFeaturesDecodeErrorZ), "LDKCResult_InitFeaturesDecodeErrorZ");
        *ret_conv = CResult_InitFeaturesDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1InitFeaturesDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_InitFeaturesDecodeErrorZ* o_conv = (LDKCResult_InitFeaturesDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_InitFeaturesDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1InitFeaturesDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12836,6 +13095,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NodeFeaturesDecode
        LDKNodeFeatures o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = NodeFeatures_clone(&o_conv);
        LDKCResult_NodeFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeFeaturesDecodeErrorZ), "LDKCResult_NodeFeaturesDecodeErrorZ");
        *ret_conv = CResult_NodeFeaturesDecodeErrorZ_ok(o_conv);
@@ -12846,12 +13106,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NodeFeaturesDecode
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_NodeFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeFeaturesDecodeErrorZ), "LDKCResult_NodeFeaturesDecodeErrorZ");
        *ret_conv = CResult_NodeFeaturesDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NodeFeaturesDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_NodeFeaturesDecodeErrorZ* o_conv = (LDKCResult_NodeFeaturesDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_NodeFeaturesDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NodeFeaturesDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12865,6 +13132,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelFeaturesDec
        LDKChannelFeatures o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ChannelFeatures_clone(&o_conv);
        LDKCResult_ChannelFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelFeaturesDecodeErrorZ), "LDKCResult_ChannelFeaturesDecodeErrorZ");
        *ret_conv = CResult_ChannelFeaturesDecodeErrorZ_ok(o_conv);
@@ -12875,12 +13143,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelFeaturesDec
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ChannelFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelFeaturesDecodeErrorZ), "LDKCResult_ChannelFeaturesDecodeErrorZ");
        *ret_conv = CResult_ChannelFeaturesDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelFeaturesDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ChannelFeaturesDecodeErrorZ* o_conv = (LDKCResult_ChannelFeaturesDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ChannelFeaturesDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelFeaturesDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12894,6 +13169,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceFeaturesDec
        LDKInvoiceFeatures o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = InvoiceFeatures_clone(&o_conv);
        LDKCResult_InvoiceFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceFeaturesDecodeErrorZ), "LDKCResult_InvoiceFeaturesDecodeErrorZ");
        *ret_conv = CResult_InvoiceFeaturesDecodeErrorZ_ok(o_conv);
@@ -12904,12 +13180,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceFeaturesDec
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_InvoiceFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceFeaturesDecodeErrorZ), "LDKCResult_InvoiceFeaturesDecodeErrorZ");
        *ret_conv = CResult_InvoiceFeaturesDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceFeaturesDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_InvoiceFeaturesDecodeErrorZ* o_conv = (LDKCResult_InvoiceFeaturesDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_InvoiceFeaturesDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceFeaturesDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12923,6 +13206,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ScoringParametersD
        LDKScoringParameters o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        // Warning: we need a move here but no clone is available for LDKScoringParameters
        LDKCResult_ScoringParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ScoringParametersDecodeErrorZ), "LDKCResult_ScoringParametersDecodeErrorZ");
        *ret_conv = CResult_ScoringParametersDecodeErrorZ_ok(o_conv);
@@ -12933,12 +13217,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ScoringParametersD
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ScoringParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ScoringParametersDecodeErrorZ), "LDKCResult_ScoringParametersDecodeErrorZ");
        *ret_conv = CResult_ScoringParametersDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ScoringParametersDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ScoringParametersDecodeErrorZ* o_conv = (LDKCResult_ScoringParametersDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ScoringParametersDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ScoringParametersDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12952,6 +13243,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ScorerDecodeErrorZ
        LDKScorer o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        // Warning: we need a move here but no clone is available for LDKScorer
        LDKCResult_ScorerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ScorerDecodeErrorZ), "LDKCResult_ScorerDecodeErrorZ");
        *ret_conv = CResult_ScorerDecodeErrorZ_ok(o_conv);
@@ -12962,12 +13254,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ScorerDecodeErrorZ
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ScorerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ScorerDecodeErrorZ), "LDKCResult_ScorerDecodeErrorZ");
        *ret_conv = CResult_ScorerDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ScorerDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ScorerDecodeErrorZ* o_conv = (LDKCResult_ScorerDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ScorerDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ScorerDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12981,6 +13280,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1DelayedPaymentOutp
        LDKDelayedPaymentOutputDescriptor o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = DelayedPaymentOutputDescriptor_clone(&o_conv);
        LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ), "LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ");
        *ret_conv = CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_ok(o_conv);
@@ -12991,12 +13291,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1DelayedPaymentOutp
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ), "LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ");
        *ret_conv = CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1DelayedPaymentOutputDescriptorDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ* o_conv = (LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1DelayedPaymentOutputDescriptorDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13006,6 +13313,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1DelayedPaymentOutputD
        CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_clone_ptr(LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ), "LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ");
+       *ret_conv = CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1DelayedPaymentOutputDescriptorDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ* arg_conv = (LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1DelayedPaymentOutputDescriptorDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ* orig_conv = (LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ*)(orig & ~1);
        LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ), "LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ");
@@ -13017,6 +13335,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1StaticPaymentOutpu
        LDKStaticPaymentOutputDescriptor o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = StaticPaymentOutputDescriptor_clone(&o_conv);
        LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ), "LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ");
        *ret_conv = CResult_StaticPaymentOutputDescriptorDecodeErrorZ_ok(o_conv);
@@ -13027,12 +13346,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1StaticPaymentOutpu
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ), "LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ");
        *ret_conv = CResult_StaticPaymentOutputDescriptorDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1StaticPaymentOutputDescriptorDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ* o_conv = (LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_StaticPaymentOutputDescriptorDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1StaticPaymentOutputDescriptorDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13042,6 +13368,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1StaticPaymentOutputDe
        CResult_StaticPaymentOutputDescriptorDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_StaticPaymentOutputDescriptorDecodeErrorZ_clone_ptr(LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ), "LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ");
+       *ret_conv = CResult_StaticPaymentOutputDescriptorDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1StaticPaymentOutputDescriptorDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ* arg_conv = (LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_StaticPaymentOutputDescriptorDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1StaticPaymentOutputDescriptorDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ* orig_conv = (LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ*)(orig & ~1);
        LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ), "LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ");
@@ -13063,12 +13400,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SpendableOutputDes
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_SpendableOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SpendableOutputDescriptorDecodeErrorZ), "LDKCResult_SpendableOutputDescriptorDecodeErrorZ");
        *ret_conv = CResult_SpendableOutputDescriptorDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1SpendableOutputDescriptorDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_SpendableOutputDescriptorDecodeErrorZ* o_conv = (LDKCResult_SpendableOutputDescriptorDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_SpendableOutputDescriptorDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SpendableOutputDescriptorDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13078,6 +13422,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SpendableOutputDescri
        CResult_SpendableOutputDescriptorDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_SpendableOutputDescriptorDecodeErrorZ_clone_ptr(LDKCResult_SpendableOutputDescriptorDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_SpendableOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SpendableOutputDescriptorDecodeErrorZ), "LDKCResult_SpendableOutputDescriptorDecodeErrorZ");
+       *ret_conv = CResult_SpendableOutputDescriptorDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SpendableOutputDescriptorDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_SpendableOutputDescriptorDecodeErrorZ* arg_conv = (LDKCResult_SpendableOutputDescriptorDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_SpendableOutputDescriptorDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SpendableOutputDescriptorDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_SpendableOutputDescriptorDecodeErrorZ* orig_conv = (LDKCResult_SpendableOutputDescriptorDecodeErrorZ*)(orig & ~1);
        LDKCResult_SpendableOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SpendableOutputDescriptorDecodeErrorZ), "LDKCResult_SpendableOutputDescriptorDecodeErrorZ");
@@ -13097,6 +13452,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneNoneZ_1err(JNI
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NoneNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_NoneNoneZ* o_conv = (LDKCResult_NoneNoneZ*)(o & ~1);
+       jboolean ret_val = CResult_NoneNoneZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13106,6 +13467,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneNoneZ_1free(JNIEn
        CResult_NoneNoneZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_NoneNoneZ_clone_ptr(LDKCResult_NoneNoneZ *NONNULL_PTR arg) {
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = CResult_NoneNoneZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_NoneNoneZ* arg_conv = (LDKCResult_NoneNoneZ*)(arg & ~1);
+       int64_t ret_val = CResult_NoneNoneZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_NoneNoneZ* orig_conv = (LDKCResult_NoneNoneZ*)(orig & ~1);
        LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
@@ -13113,6 +13485,17 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneNoneZ_1clone(J
        return (uint64_t)ret_conv;
 }
 
+static inline uint64_t C2Tuple_SignatureCVec_SignatureZZ_clone_ptr(LDKC2Tuple_SignatureCVec_SignatureZZ *NONNULL_PTR arg) {
+       LDKC2Tuple_SignatureCVec_SignatureZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_SignatureCVec_SignatureZZ), "LDKC2Tuple_SignatureCVec_SignatureZZ");
+       *ret_conv = C2Tuple_SignatureCVec_SignatureZZ_clone(arg);
+       return ((uint64_t)ret_conv);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1SignatureCVec_1SignatureZZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKC2Tuple_SignatureCVec_SignatureZZ* arg_conv = (LDKC2Tuple_SignatureCVec_SignatureZZ*)(arg & ~1);
+       int64_t ret_val = C2Tuple_SignatureCVec_SignatureZZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1SignatureCVec_1SignatureZZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKC2Tuple_SignatureCVec_SignatureZZ* orig_conv = (LDKC2Tuple_SignatureCVec_SignatureZZ*)(orig & ~1);
        LDKC2Tuple_SignatureCVec_SignatureZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_SignatureCVec_SignatureZZ), "LDKC2Tuple_SignatureCVec_SignatureZZ");
@@ -13167,6 +13550,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1Signature
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1SignatureCVec_1SignatureZZNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* o_conv = (LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)(o & ~1);
+       jboolean ret_val = CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1SignatureCVec_1SignatureZZNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13176,6 +13565,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1SignatureCVe
        CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone_ptr(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ *NONNULL_PTR arg) {
+       LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ), "LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ");
+       *ret_conv = CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1SignatureCVec_1SignatureZZNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* arg_conv = (LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)(arg & ~1);
+       int64_t ret_val = CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1SignatureCVec_1SignatureZZNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* orig_conv = (LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)(orig & ~1);
        LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ), "LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ");
@@ -13198,6 +13598,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SignatureNoneZ_1er
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1SignatureNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_SignatureNoneZ* o_conv = (LDKCResult_SignatureNoneZ*)(o & ~1);
+       jboolean ret_val = CResult_SignatureNoneZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SignatureNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13207,6 +13613,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SignatureNoneZ_1free(
        CResult_SignatureNoneZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_SignatureNoneZ_clone_ptr(LDKCResult_SignatureNoneZ *NONNULL_PTR arg) {
+       LDKCResult_SignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignatureNoneZ), "LDKCResult_SignatureNoneZ");
+       *ret_conv = CResult_SignatureNoneZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SignatureNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_SignatureNoneZ* arg_conv = (LDKCResult_SignatureNoneZ*)(arg & ~1);
+       int64_t ret_val = CResult_SignatureNoneZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SignatureNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_SignatureNoneZ* orig_conv = (LDKCResult_SignatureNoneZ*)(orig & ~1);
        LDKCResult_SignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignatureNoneZ), "LDKCResult_SignatureNoneZ");
@@ -13231,12 +13648,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SignDecodeErrorZ_1
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_SignDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SignDecodeErrorZ), "LDKCResult_SignDecodeErrorZ");
        *ret_conv = CResult_SignDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1SignDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_SignDecodeErrorZ* o_conv = (LDKCResult_SignDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_SignDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SignDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13246,6 +13670,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SignDecodeErrorZ_1fre
        CResult_SignDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_SignDecodeErrorZ_clone_ptr(LDKCResult_SignDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_SignDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SignDecodeErrorZ), "LDKCResult_SignDecodeErrorZ");
+       *ret_conv = CResult_SignDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SignDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_SignDecodeErrorZ* arg_conv = (LDKCResult_SignDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_SignDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SignDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_SignDecodeErrorZ* orig_conv = (LDKCResult_SignDecodeErrorZ*)(orig & ~1);
        LDKCResult_SignDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SignDecodeErrorZ), "LDKCResult_SignDecodeErrorZ");
@@ -13276,6 +13711,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RecoverableSignatu
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1RecoverableSignatureNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_RecoverableSignatureNoneZ* o_conv = (LDKCResult_RecoverableSignatureNoneZ*)(o & ~1);
+       jboolean ret_val = CResult_RecoverableSignatureNoneZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RecoverableSignatureNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13285,6 +13726,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RecoverableSignatureN
        CResult_RecoverableSignatureNoneZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_RecoverableSignatureNoneZ_clone_ptr(LDKCResult_RecoverableSignatureNoneZ *NONNULL_PTR arg) {
+       LDKCResult_RecoverableSignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_RecoverableSignatureNoneZ), "LDKCResult_RecoverableSignatureNoneZ");
+       *ret_conv = CResult_RecoverableSignatureNoneZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RecoverableSignatureNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_RecoverableSignatureNoneZ* arg_conv = (LDKCResult_RecoverableSignatureNoneZ*)(arg & ~1);
+       int64_t ret_val = CResult_RecoverableSignatureNoneZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RecoverableSignatureNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_RecoverableSignatureNoneZ* orig_conv = (LDKCResult_RecoverableSignatureNoneZ*)(orig & ~1);
        LDKCResult_RecoverableSignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_RecoverableSignatureNoneZ), "LDKCResult_RecoverableSignatureNoneZ");
@@ -13336,6 +13788,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1CVec_1u8ZZNo
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1CVec_1u8ZZNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_CVec_CVec_u8ZZNoneZ* o_conv = (LDKCResult_CVec_CVec_u8ZZNoneZ*)(o & ~1);
+       jboolean ret_val = CResult_CVec_CVec_u8ZZNoneZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1CVec_1u8ZZNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13345,6 +13803,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1CVec_1u8ZZNoneZ
        CResult_CVec_CVec_u8ZZNoneZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_CVec_CVec_u8ZZNoneZ_clone_ptr(LDKCResult_CVec_CVec_u8ZZNoneZ *NONNULL_PTR arg) {
+       LDKCResult_CVec_CVec_u8ZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_CVec_u8ZZNoneZ), "LDKCResult_CVec_CVec_u8ZZNoneZ");
+       *ret_conv = CResult_CVec_CVec_u8ZZNoneZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1CVec_1u8ZZNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_CVec_CVec_u8ZZNoneZ* arg_conv = (LDKCResult_CVec_CVec_u8ZZNoneZ*)(arg & ~1);
+       int64_t ret_val = CResult_CVec_CVec_u8ZZNoneZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1CVec_1u8ZZNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_CVec_CVec_u8ZZNoneZ* orig_conv = (LDKCResult_CVec_CVec_u8ZZNoneZ*)(orig & ~1);
        LDKCResult_CVec_CVec_u8ZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_CVec_u8ZZNoneZ), "LDKCResult_CVec_CVec_u8ZZNoneZ");
@@ -13356,6 +13825,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1InMemorySignerDeco
        LDKInMemorySigner o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = InMemorySigner_clone(&o_conv);
        LDKCResult_InMemorySignerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InMemorySignerDecodeErrorZ), "LDKCResult_InMemorySignerDecodeErrorZ");
        *ret_conv = CResult_InMemorySignerDecodeErrorZ_ok(o_conv);
@@ -13366,12 +13836,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1InMemorySignerDeco
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_InMemorySignerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InMemorySignerDecodeErrorZ), "LDKCResult_InMemorySignerDecodeErrorZ");
        *ret_conv = CResult_InMemorySignerDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1InMemorySignerDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_InMemorySignerDecodeErrorZ* o_conv = (LDKCResult_InMemorySignerDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_InMemorySignerDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1InMemorySignerDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13381,6 +13858,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1InMemorySignerDecodeE
        CResult_InMemorySignerDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_InMemorySignerDecodeErrorZ_clone_ptr(LDKCResult_InMemorySignerDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_InMemorySignerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InMemorySignerDecodeErrorZ), "LDKCResult_InMemorySignerDecodeErrorZ");
+       *ret_conv = CResult_InMemorySignerDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1InMemorySignerDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_InMemorySignerDecodeErrorZ* arg_conv = (LDKCResult_InMemorySignerDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_InMemorySignerDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1InMemorySignerDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_InMemorySignerDecodeErrorZ* orig_conv = (LDKCResult_InMemorySignerDecodeErrorZ*)(orig & ~1);
        LDKCResult_InMemorySignerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InMemorySignerDecodeErrorZ), "LDKCResult_InMemorySignerDecodeErrorZ");
@@ -13425,6 +13913,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1TransactionNoneZ_1
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1TransactionNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_TransactionNoneZ* o_conv = (LDKCResult_TransactionNoneZ*)(o & ~1);
+       jboolean ret_val = CResult_TransactionNoneZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1TransactionNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13434,6 +13928,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1TransactionNoneZ_1fre
        CResult_TransactionNoneZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_TransactionNoneZ_clone_ptr(LDKCResult_TransactionNoneZ *NONNULL_PTR arg) {
+       LDKCResult_TransactionNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_TransactionNoneZ), "LDKCResult_TransactionNoneZ");
+       *ret_conv = CResult_TransactionNoneZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1TransactionNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_TransactionNoneZ* arg_conv = (LDKCResult_TransactionNoneZ*)(arg & ~1);
+       int64_t ret_val = CResult_TransactionNoneZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1TransactionNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_TransactionNoneZ* orig_conv = (LDKCResult_TransactionNoneZ*)(orig & ~1);
        LDKCResult_TransactionNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_TransactionNoneZ), "LDKCResult_TransactionNoneZ");
@@ -13441,6 +13946,17 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1TransactionNoneZ_1
        return (uint64_t)ret_conv;
 }
 
+static inline uint64_t C2Tuple_BlockHashChannelMonitorZ_clone_ptr(LDKC2Tuple_BlockHashChannelMonitorZ *NONNULL_PTR arg) {
+       LDKC2Tuple_BlockHashChannelMonitorZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_BlockHashChannelMonitorZ), "LDKC2Tuple_BlockHashChannelMonitorZ");
+       *ret_conv = C2Tuple_BlockHashChannelMonitorZ_clone(arg);
+       return ((uint64_t)ret_conv);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelMonitorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKC2Tuple_BlockHashChannelMonitorZ* arg_conv = (LDKC2Tuple_BlockHashChannelMonitorZ*)(arg & ~1);
+       int64_t ret_val = C2Tuple_BlockHashChannelMonitorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelMonitorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKC2Tuple_BlockHashChannelMonitorZ* orig_conv = (LDKC2Tuple_BlockHashChannelMonitorZ*)(orig & ~1);
        LDKC2Tuple_BlockHashChannelMonitorZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_BlockHashChannelMonitorZ), "LDKC2Tuple_BlockHashChannelMonitorZ");
@@ -13455,6 +13971,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelMo
        LDKChannelMonitor b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = (b & 1) || (b == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv = ChannelMonitor_clone(&b_conv);
        LDKC2Tuple_BlockHashChannelMonitorZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_BlockHashChannelMonitorZ), "LDKC2Tuple_BlockHashChannelMonitorZ");
        *ret_conv = C2Tuple_BlockHashChannelMonitorZ_new(a_ref, b_conv);
@@ -13519,6 +14036,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1Blo
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1BlockHashChannelMonitorZZErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ* o_conv = (LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1BlockHashChannelMonitorZZErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13528,6 +14051,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1BlockH
        CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_clone_ptr(LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ *NONNULL_PTR arg) {
+       LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ), "LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ");
+       *ret_conv = CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1BlockHashChannelMonitorZZErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ* arg_conv = (LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1BlockHashChannelMonitorZZErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ* orig_conv = (LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ*)(orig & ~1);
        LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ), "LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ");
@@ -13558,6 +14092,18 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1u16Z_1free(JNIEnv *en
        COption_u16Z_free(_res_conv);
 }
 
+static inline uint64_t COption_u16Z_clone_ptr(LDKCOption_u16Z *NONNULL_PTR arg) {
+       LDKCOption_u16Z *ret_copy = MALLOC(sizeof(LDKCOption_u16Z), "LDKCOption_u16Z");
+       *ret_copy = COption_u16Z_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u16Z_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCOption_u16Z* arg_conv = (LDKCOption_u16Z*)arg;
+       int64_t ret_val = COption_u16Z_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1u16Z_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCOption_u16Z* orig_conv = (LDKCOption_u16Z*)orig;
        LDKCOption_u16Z *ret_copy = MALLOC(sizeof(LDKCOption_u16Z), "LDKCOption_u16Z");
@@ -13582,6 +14128,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneAPIErrorZ_1err
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NoneAPIErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_NoneAPIErrorZ* o_conv = (LDKCResult_NoneAPIErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_NoneAPIErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneAPIErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13591,6 +14143,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneAPIErrorZ_1free(J
        CResult_NoneAPIErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_NoneAPIErrorZ_clone_ptr(LDKCResult_NoneAPIErrorZ *NONNULL_PTR arg) {
+       LDKCResult_NoneAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneAPIErrorZ), "LDKCResult_NoneAPIErrorZ");
+       *ret_conv = CResult_NoneAPIErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneAPIErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_NoneAPIErrorZ* arg_conv = (LDKCResult_NoneAPIErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_NoneAPIErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneAPIErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_NoneAPIErrorZ* orig_conv = (LDKCResult_NoneAPIErrorZ*)(orig & ~1);
        LDKCResult_NoneAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneAPIErrorZ), "LDKCResult_NoneAPIErrorZ");
@@ -13657,6 +14220,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1_1u832APIErrorZ_1e
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1_1u832APIErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult__u832APIErrorZ* o_conv = (LDKCResult__u832APIErrorZ*)(o & ~1);
+       jboolean ret_val = CResult__u832APIErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1_1u832APIErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13666,6 +14235,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1_1u832APIErrorZ_1free
        CResult__u832APIErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult__u832APIErrorZ_clone_ptr(LDKCResult__u832APIErrorZ *NONNULL_PTR arg) {
+       LDKCResult__u832APIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult__u832APIErrorZ), "LDKCResult__u832APIErrorZ");
+       *ret_conv = CResult__u832APIErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1_1u832APIErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult__u832APIErrorZ* arg_conv = (LDKCResult__u832APIErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult__u832APIErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1_1u832APIErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult__u832APIErrorZ* orig_conv = (LDKCResult__u832APIErrorZ*)(orig & ~1);
        LDKCResult__u832APIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult__u832APIErrorZ), "LDKCResult__u832APIErrorZ");
@@ -13692,6 +14272,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentSe
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentSendFailureZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_PaymentIdPaymentSendFailureZ* o_conv = (LDKCResult_PaymentIdPaymentSendFailureZ*)(o & ~1);
+       jboolean ret_val = CResult_PaymentIdPaymentSendFailureZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentSendFailureZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13701,6 +14287,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentSendF
        CResult_PaymentIdPaymentSendFailureZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_PaymentIdPaymentSendFailureZ_clone_ptr(LDKCResult_PaymentIdPaymentSendFailureZ *NONNULL_PTR arg) {
+       LDKCResult_PaymentIdPaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentIdPaymentSendFailureZ), "LDKCResult_PaymentIdPaymentSendFailureZ");
+       *ret_conv = CResult_PaymentIdPaymentSendFailureZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentSendFailureZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_PaymentIdPaymentSendFailureZ* arg_conv = (LDKCResult_PaymentIdPaymentSendFailureZ*)(arg & ~1);
+       int64_t ret_val = CResult_PaymentIdPaymentSendFailureZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentSendFailureZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_PaymentIdPaymentSendFailureZ* orig_conv = (LDKCResult_PaymentIdPaymentSendFailureZ*)(orig & ~1);
        LDKCResult_PaymentIdPaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentIdPaymentSendFailureZ), "LDKCResult_PaymentIdPaymentSendFailureZ");
@@ -13724,6 +14321,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NonePaymentSendFai
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NonePaymentSendFailureZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_NonePaymentSendFailureZ* o_conv = (LDKCResult_NonePaymentSendFailureZ*)(o & ~1);
+       jboolean ret_val = CResult_NonePaymentSendFailureZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NonePaymentSendFailureZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13733,6 +14336,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NonePaymentSendFailur
        CResult_NonePaymentSendFailureZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_NonePaymentSendFailureZ_clone_ptr(LDKCResult_NonePaymentSendFailureZ *NONNULL_PTR arg) {
+       LDKCResult_NonePaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_NonePaymentSendFailureZ), "LDKCResult_NonePaymentSendFailureZ");
+       *ret_conv = CResult_NonePaymentSendFailureZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NonePaymentSendFailureZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_NonePaymentSendFailureZ* arg_conv = (LDKCResult_NonePaymentSendFailureZ*)(arg & ~1);
+       int64_t ret_val = CResult_NonePaymentSendFailureZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NonePaymentSendFailureZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_NonePaymentSendFailureZ* orig_conv = (LDKCResult_NonePaymentSendFailureZ*)(orig & ~1);
        LDKCResult_NonePaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_NonePaymentSendFailureZ), "LDKCResult_NonePaymentSendFailureZ");
@@ -13740,6 +14354,17 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NonePaymentSendFai
        return (uint64_t)ret_conv;
 }
 
+static inline uint64_t C2Tuple_PaymentHashPaymentIdZ_clone_ptr(LDKC2Tuple_PaymentHashPaymentIdZ *NONNULL_PTR arg) {
+       LDKC2Tuple_PaymentHashPaymentIdZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PaymentHashPaymentIdZ), "LDKC2Tuple_PaymentHashPaymentIdZ");
+       *ret_conv = C2Tuple_PaymentHashPaymentIdZ_clone(arg);
+       return ((uint64_t)ret_conv);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PaymentHashPaymentIdZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKC2Tuple_PaymentHashPaymentIdZ* arg_conv = (LDKC2Tuple_PaymentHashPaymentIdZ*)(arg & ~1);
+       int64_t ret_val = C2Tuple_PaymentHashPaymentIdZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PaymentHashPaymentIdZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKC2Tuple_PaymentHashPaymentIdZ* orig_conv = (LDKC2Tuple_PaymentHashPaymentIdZ*)(orig & ~1);
        LDKC2Tuple_PaymentHashPaymentIdZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PaymentHashPaymentIdZ), "LDKC2Tuple_PaymentHashPaymentIdZ");
@@ -13788,6 +14413,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHa
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentIdZPaymentSendFailureZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ* o_conv = (LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ*)(o & ~1);
+       jboolean ret_val = CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentIdZPaymentSendFailureZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13797,6 +14428,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashP
        CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_clone_ptr(LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ *NONNULL_PTR arg) {
+       LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ), "LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ");
+       *ret_conv = CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentIdZPaymentSendFailureZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ* arg_conv = (LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ*)(arg & ~1);
+       int64_t ret_val = CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentIdZPaymentSendFailureZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ* orig_conv = (LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ*)(orig & ~1);
        LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ), "LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ");
@@ -13824,6 +14466,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1NetAddressZ_1free(JNIEnv
        CVec_NetAddressZ_free(_res_constr);
 }
 
+static inline uint64_t C2Tuple_PaymentHashPaymentSecretZ_clone_ptr(LDKC2Tuple_PaymentHashPaymentSecretZ *NONNULL_PTR arg) {
+       LDKC2Tuple_PaymentHashPaymentSecretZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PaymentHashPaymentSecretZ), "LDKC2Tuple_PaymentHashPaymentSecretZ");
+       *ret_conv = C2Tuple_PaymentHashPaymentSecretZ_clone(arg);
+       return ((uint64_t)ret_conv);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PaymentHashPaymentSecretZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKC2Tuple_PaymentHashPaymentSecretZ* arg_conv = (LDKC2Tuple_PaymentHashPaymentSecretZ*)(arg & ~1);
+       int64_t ret_val = C2Tuple_PaymentHashPaymentSecretZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PaymentHashPaymentSecretZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKC2Tuple_PaymentHashPaymentSecretZ* orig_conv = (LDKC2Tuple_PaymentHashPaymentSecretZ*)(orig & ~1);
        LDKC2Tuple_PaymentHashPaymentSecretZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PaymentHashPaymentSecretZ), "LDKC2Tuple_PaymentHashPaymentSecretZ");
@@ -13871,6 +14524,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentSecretAPIEr
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentSecretAPIErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_PaymentSecretAPIErrorZ* o_conv = (LDKCResult_PaymentSecretAPIErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_PaymentSecretAPIErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentSecretAPIErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13880,6 +14539,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentSecretAPIError
        CResult_PaymentSecretAPIErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_PaymentSecretAPIErrorZ_clone_ptr(LDKCResult_PaymentSecretAPIErrorZ *NONNULL_PTR arg) {
+       LDKCResult_PaymentSecretAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentSecretAPIErrorZ), "LDKCResult_PaymentSecretAPIErrorZ");
+       *ret_conv = CResult_PaymentSecretAPIErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentSecretAPIErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_PaymentSecretAPIErrorZ* arg_conv = (LDKCResult_PaymentSecretAPIErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_PaymentSecretAPIErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentSecretAPIErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_PaymentSecretAPIErrorZ* orig_conv = (LDKCResult_PaymentSecretAPIErrorZ*)(orig & ~1);
        LDKCResult_PaymentSecretAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentSecretAPIErrorZ), "LDKCResult_PaymentSecretAPIErrorZ");
@@ -13900,6 +14570,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1ChannelMonitorZ_1free(JN
                LDKChannelMonitor _res_conv_16_conv;
                _res_conv_16_conv.inner = (void*)(_res_conv_16 & (~1));
                _res_conv_16_conv.is_owned = (_res_conv_16 & 1) || (_res_conv_16 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_16_conv);
                _res_constr.data[q] = _res_conv_16_conv;
        }
        (*env)->ReleaseLongArrayElements(env, _res, _res_vals, 0);
@@ -13913,6 +14584,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelMa
        LDKChannelManager b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = (b & 1) || (b == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        // Warning: we need a move here but no clone is available for LDKChannelManager
        LDKC2Tuple_BlockHashChannelManagerZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_BlockHashChannelManagerZ), "LDKC2Tuple_BlockHashChannelManagerZ");
        *ret_conv = C2Tuple_BlockHashChannelManagerZ_new(a_ref, b_conv);
@@ -13942,12 +14614,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHash
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ), "LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ");
        *ret_conv = CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelManagerZDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ* o_conv = (LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelManagerZDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13961,6 +14640,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelConfigDecod
        LDKChannelConfig o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ChannelConfig_clone(&o_conv);
        LDKCResult_ChannelConfigDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelConfigDecodeErrorZ), "LDKCResult_ChannelConfigDecodeErrorZ");
        *ret_conv = CResult_ChannelConfigDecodeErrorZ_ok(o_conv);
@@ -13971,12 +14651,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelConfigDecod
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ChannelConfigDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelConfigDecodeErrorZ), "LDKCResult_ChannelConfigDecodeErrorZ");
        *ret_conv = CResult_ChannelConfigDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelConfigDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ChannelConfigDecodeErrorZ* o_conv = (LDKCResult_ChannelConfigDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ChannelConfigDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelConfigDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13986,6 +14673,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelConfigDecodeEr
        CResult_ChannelConfigDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ChannelConfigDecodeErrorZ_clone_ptr(LDKCResult_ChannelConfigDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ChannelConfigDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelConfigDecodeErrorZ), "LDKCResult_ChannelConfigDecodeErrorZ");
+       *ret_conv = CResult_ChannelConfigDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelConfigDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_ChannelConfigDecodeErrorZ* arg_conv = (LDKCResult_ChannelConfigDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ChannelConfigDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelConfigDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_ChannelConfigDecodeErrorZ* orig_conv = (LDKCResult_ChannelConfigDecodeErrorZ*)(orig & ~1);
        LDKCResult_ChannelConfigDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelConfigDecodeErrorZ), "LDKCResult_ChannelConfigDecodeErrorZ");
@@ -13997,6 +14695,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1OutPointDecodeErro
        LDKOutPoint o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = OutPoint_clone(&o_conv);
        LDKCResult_OutPointDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OutPointDecodeErrorZ), "LDKCResult_OutPointDecodeErrorZ");
        *ret_conv = CResult_OutPointDecodeErrorZ_ok(o_conv);
@@ -14007,12 +14706,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1OutPointDecodeErro
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_OutPointDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OutPointDecodeErrorZ), "LDKCResult_OutPointDecodeErrorZ");
        *ret_conv = CResult_OutPointDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1OutPointDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_OutPointDecodeErrorZ* o_conv = (LDKCResult_OutPointDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_OutPointDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1OutPointDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -14022,6 +14728,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1OutPointDecodeErrorZ_
        CResult_OutPointDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_OutPointDecodeErrorZ_clone_ptr(LDKCResult_OutPointDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_OutPointDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OutPointDecodeErrorZ), "LDKCResult_OutPointDecodeErrorZ");
+       *ret_conv = CResult_OutPointDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1OutPointDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_OutPointDecodeErrorZ* arg_conv = (LDKCResult_OutPointDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_OutPointDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1OutPointDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_OutPointDecodeErrorZ* orig_conv = (LDKCResult_OutPointDecodeErrorZ*)(orig & ~1);
        LDKCResult_OutPointDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OutPointDecodeErrorZ), "LDKCResult_OutPointDecodeErrorZ");
@@ -14059,6 +14776,18 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1TypeZ_1free(JNIEnv *e
        COption_TypeZ_free(_res_conv);
 }
 
+static inline uint64_t COption_TypeZ_clone_ptr(LDKCOption_TypeZ *NONNULL_PTR arg) {
+       LDKCOption_TypeZ *ret_copy = MALLOC(sizeof(LDKCOption_TypeZ), "LDKCOption_TypeZ");
+       *ret_copy = COption_TypeZ_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1TypeZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCOption_TypeZ* arg_conv = (LDKCOption_TypeZ*)arg;
+       int64_t ret_val = COption_TypeZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1TypeZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCOption_TypeZ* orig_conv = (LDKCOption_TypeZ*)orig;
        LDKCOption_TypeZ *ret_copy = MALLOC(sizeof(LDKCOption_TypeZ), "LDKCOption_TypeZ");
@@ -14081,12 +14810,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1TypeZDeco
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_COption_TypeZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_TypeZDecodeErrorZ), "LDKCResult_COption_TypeZDecodeErrorZ");
        *ret_conv = CResult_COption_TypeZDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1TypeZDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_COption_TypeZDecodeErrorZ* o_conv = (LDKCResult_COption_TypeZDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_COption_TypeZDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1TypeZDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -14096,6 +14832,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1TypeZDecodeE
        CResult_COption_TypeZDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_COption_TypeZDecodeErrorZ_clone_ptr(LDKCResult_COption_TypeZDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_COption_TypeZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_TypeZDecodeErrorZ), "LDKCResult_COption_TypeZDecodeErrorZ");
+       *ret_conv = CResult_COption_TypeZDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1TypeZDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_COption_TypeZDecodeErrorZ* arg_conv = (LDKCResult_COption_TypeZDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_COption_TypeZDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1TypeZDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_COption_TypeZDecodeErrorZ* orig_conv = (LDKCResult_COption_TypeZDecodeErrorZ*)(orig & ~1);
        LDKCResult_COption_TypeZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_TypeZDecodeErrorZ), "LDKCResult_COption_TypeZDecodeErrorZ");
@@ -14122,6 +14869,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentEr
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_PaymentIdPaymentErrorZ* o_conv = (LDKCResult_PaymentIdPaymentErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_PaymentIdPaymentErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -14131,6 +14884,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentError
        CResult_PaymentIdPaymentErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_PaymentIdPaymentErrorZ_clone_ptr(LDKCResult_PaymentIdPaymentErrorZ *NONNULL_PTR arg) {
+       LDKCResult_PaymentIdPaymentErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentIdPaymentErrorZ), "LDKCResult_PaymentIdPaymentErrorZ");
+       *ret_conv = CResult_PaymentIdPaymentErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_PaymentIdPaymentErrorZ* arg_conv = (LDKCResult_PaymentIdPaymentErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_PaymentIdPaymentErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_PaymentIdPaymentErrorZ* orig_conv = (LDKCResult_PaymentIdPaymentErrorZ*)(orig & ~1);
        LDKCResult_PaymentIdPaymentErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentIdPaymentErrorZ), "LDKCResult_PaymentIdPaymentErrorZ");
@@ -14151,6 +14915,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SiPrefixNoneZ_1err
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1SiPrefixNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_SiPrefixNoneZ* o_conv = (LDKCResult_SiPrefixNoneZ*)(o & ~1);
+       jboolean ret_val = CResult_SiPrefixNoneZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SiPrefixNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -14160,6 +14930,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SiPrefixNoneZ_1free(J
        CResult_SiPrefixNoneZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_SiPrefixNoneZ_clone_ptr(LDKCResult_SiPrefixNoneZ *NONNULL_PTR arg) {
+       LDKCResult_SiPrefixNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SiPrefixNoneZ), "LDKCResult_SiPrefixNoneZ");
+       *ret_conv = CResult_SiPrefixNoneZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SiPrefixNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_SiPrefixNoneZ* arg_conv = (LDKCResult_SiPrefixNoneZ*)(arg & ~1);
+       int64_t ret_val = CResult_SiPrefixNoneZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SiPrefixNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_SiPrefixNoneZ* orig_conv = (LDKCResult_SiPrefixNoneZ*)(orig & ~1);
        LDKCResult_SiPrefixNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SiPrefixNoneZ), "LDKCResult_SiPrefixNoneZ");
@@ -14171,6 +14952,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceNoneZ_1ok(J
        LDKInvoice o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = Invoice_clone(&o_conv);
        LDKCResult_InvoiceNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceNoneZ), "LDKCResult_InvoiceNoneZ");
        *ret_conv = CResult_InvoiceNoneZ_ok(o_conv);
@@ -14183,6 +14965,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceNoneZ_1err(
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_InvoiceNoneZ* o_conv = (LDKCResult_InvoiceNoneZ*)(o & ~1);
+       jboolean ret_val = CResult_InvoiceNoneZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -14192,6 +14980,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceNoneZ_1free(JN
        CResult_InvoiceNoneZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_InvoiceNoneZ_clone_ptr(LDKCResult_InvoiceNoneZ *NONNULL_PTR arg) {
+       LDKCResult_InvoiceNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceNoneZ), "LDKCResult_InvoiceNoneZ");
+       *ret_conv = CResult_InvoiceNoneZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_InvoiceNoneZ* arg_conv = (LDKCResult_InvoiceNoneZ*)(arg & ~1);
+       int64_t ret_val = CResult_InvoiceNoneZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_InvoiceNoneZ* orig_conv = (LDKCResult_InvoiceNoneZ*)(orig & ~1);
        LDKCResult_InvoiceNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceNoneZ), "LDKCResult_InvoiceNoneZ");
@@ -14203,6 +15002,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SignedRawInvoiceNo
        LDKSignedRawInvoice o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = SignedRawInvoice_clone(&o_conv);
        LDKCResult_SignedRawInvoiceNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignedRawInvoiceNoneZ), "LDKCResult_SignedRawInvoiceNoneZ");
        *ret_conv = CResult_SignedRawInvoiceNoneZ_ok(o_conv);
@@ -14215,6 +15015,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SignedRawInvoiceNo
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1SignedRawInvoiceNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_SignedRawInvoiceNoneZ* o_conv = (LDKCResult_SignedRawInvoiceNoneZ*)(o & ~1);
+       jboolean ret_val = CResult_SignedRawInvoiceNoneZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SignedRawInvoiceNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -14224,6 +15030,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SignedRawInvoiceNoneZ
        CResult_SignedRawInvoiceNoneZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_SignedRawInvoiceNoneZ_clone_ptr(LDKCResult_SignedRawInvoiceNoneZ *NONNULL_PTR arg) {
+       LDKCResult_SignedRawInvoiceNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignedRawInvoiceNoneZ), "LDKCResult_SignedRawInvoiceNoneZ");
+       *ret_conv = CResult_SignedRawInvoiceNoneZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SignedRawInvoiceNoneZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_SignedRawInvoiceNoneZ* arg_conv = (LDKCResult_SignedRawInvoiceNoneZ*)(arg & ~1);
+       int64_t ret_val = CResult_SignedRawInvoiceNoneZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SignedRawInvoiceNoneZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_SignedRawInvoiceNoneZ* orig_conv = (LDKCResult_SignedRawInvoiceNoneZ*)(orig & ~1);
        LDKCResult_SignedRawInvoiceNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignedRawInvoiceNoneZ), "LDKCResult_SignedRawInvoiceNoneZ");
@@ -14231,6 +15048,17 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1SignedRawInvoiceNo
        return (uint64_t)ret_conv;
 }
 
+static inline uint64_t C3Tuple_RawInvoice_u832InvoiceSignatureZ_clone_ptr(LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ *NONNULL_PTR arg) {
+       LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ* ret_conv = MALLOC(sizeof(LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ), "LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ");
+       *ret_conv = C3Tuple_RawInvoice_u832InvoiceSignatureZ_clone(arg);
+       return ((uint64_t)ret_conv);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C3Tuple_1RawInvoice_1u832InvoiceSignatureZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ* arg_conv = (LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ*)(arg & ~1);
+       int64_t ret_val = C3Tuple_RawInvoice_u832InvoiceSignatureZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C3Tuple_1RawInvoice_1u832InvoiceSignatureZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ* orig_conv = (LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ*)(orig & ~1);
        LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ* ret_conv = MALLOC(sizeof(LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ), "LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ");
@@ -14242,6 +15070,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C3Tuple_1RawInvoice_1u832In
        LDKRawInvoice a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = (a & 1) || (a == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv = RawInvoice_clone(&a_conv);
        LDKThirtyTwoBytes b_ref;
        CHECK((*env)->GetArrayLength(env, b) == 32);
@@ -14249,6 +15078,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C3Tuple_1RawInvoice_1u832In
        LDKInvoiceSignature c_conv;
        c_conv.inner = (void*)(c & (~1));
        c_conv.is_owned = (c & 1) || (c == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(c_conv);
        c_conv = InvoiceSignature_clone(&c_conv);
        LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ* ret_conv = MALLOC(sizeof(LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ), "LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ");
        *ret_conv = C3Tuple_RawInvoice_u832InvoiceSignatureZ_new(a_conv, b_ref, c_conv);
@@ -14268,6 +15098,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeyErrorZ_
        LDKPayeePubKey o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = PayeePubKey_clone(&o_conv);
        LDKCResult_PayeePubKeyErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PayeePubKeyErrorZ), "LDKCResult_PayeePubKeyErrorZ");
        *ret_conv = CResult_PayeePubKeyErrorZ_ok(o_conv);
@@ -14281,6 +15112,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeyErrorZ_
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeyErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_PayeePubKeyErrorZ* o_conv = (LDKCResult_PayeePubKeyErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_PayeePubKeyErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeyErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -14290,6 +15127,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeyErrorZ_1fr
        CResult_PayeePubKeyErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_PayeePubKeyErrorZ_clone_ptr(LDKCResult_PayeePubKeyErrorZ *NONNULL_PTR arg) {
+       LDKCResult_PayeePubKeyErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PayeePubKeyErrorZ), "LDKCResult_PayeePubKeyErrorZ");
+       *ret_conv = CResult_PayeePubKeyErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeyErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_PayeePubKeyErrorZ* arg_conv = (LDKCResult_PayeePubKeyErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_PayeePubKeyErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeyErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_PayeePubKeyErrorZ* orig_conv = (LDKCResult_PayeePubKeyErrorZ*)(orig & ~1);
        LDKCResult_PayeePubKeyErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PayeePubKeyErrorZ), "LDKCResult_PayeePubKeyErrorZ");
@@ -14310,6 +15158,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1PrivateRouteZ_1free(JNIE
                LDKPrivateRoute _res_conv_14_conv;
                _res_conv_14_conv.inner = (void*)(_res_conv_14 & (~1));
                _res_conv_14_conv.is_owned = (_res_conv_14 & 1) || (_res_conv_14 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_14_conv);
                _res_constr.data[o] = _res_conv_14_conv;
        }
        (*env)->ReleaseLongArrayElements(env, _res, _res_vals, 0);
@@ -14320,6 +15169,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PositiveTimestampC
        LDKPositiveTimestamp o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = PositiveTimestamp_clone(&o_conv);
        LDKCResult_PositiveTimestampCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PositiveTimestampCreationErrorZ), "LDKCResult_PositiveTimestampCreationErrorZ");
        *ret_conv = CResult_PositiveTimestampCreationErrorZ_ok(o_conv);
@@ -14333,6 +15183,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PositiveTimestampC
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PositiveTimestampCreationErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_PositiveTimestampCreationErrorZ* o_conv = (LDKCResult_PositiveTimestampCreationErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_PositiveTimestampCreationErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PositiveTimestampCreationErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -14342,6 +15198,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PositiveTimestampCrea
        CResult_PositiveTimestampCreationErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_PositiveTimestampCreationErrorZ_clone_ptr(LDKCResult_PositiveTimestampCreationErrorZ *NONNULL_PTR arg) {
+       LDKCResult_PositiveTimestampCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PositiveTimestampCreationErrorZ), "LDKCResult_PositiveTimestampCreationErrorZ");
+       *ret_conv = CResult_PositiveTimestampCreationErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PositiveTimestampCreationErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_PositiveTimestampCreationErrorZ* arg_conv = (LDKCResult_PositiveTimestampCreationErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_PositiveTimestampCreationErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PositiveTimestampCreationErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_PositiveTimestampCreationErrorZ* orig_conv = (LDKCResult_PositiveTimestampCreationErrorZ*)(orig & ~1);
        LDKCResult_PositiveTimestampCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PositiveTimestampCreationErrorZ), "LDKCResult_PositiveTimestampCreationErrorZ");
@@ -14362,6 +15229,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneSemanticErrorZ
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NoneSemanticErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_NoneSemanticErrorZ* o_conv = (LDKCResult_NoneSemanticErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_NoneSemanticErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneSemanticErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -14371,6 +15244,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneSemanticErrorZ_1f
        CResult_NoneSemanticErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_NoneSemanticErrorZ_clone_ptr(LDKCResult_NoneSemanticErrorZ *NONNULL_PTR arg) {
+       LDKCResult_NoneSemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneSemanticErrorZ), "LDKCResult_NoneSemanticErrorZ");
+       *ret_conv = CResult_NoneSemanticErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneSemanticErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_NoneSemanticErrorZ* arg_conv = (LDKCResult_NoneSemanticErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_NoneSemanticErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneSemanticErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_NoneSemanticErrorZ* orig_conv = (LDKCResult_NoneSemanticErrorZ*)(orig & ~1);
        LDKCResult_NoneSemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneSemanticErrorZ), "LDKCResult_NoneSemanticErrorZ");
@@ -14382,6 +15266,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceSemanticErr
        LDKInvoice o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = Invoice_clone(&o_conv);
        LDKCResult_InvoiceSemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceSemanticErrorZ), "LDKCResult_InvoiceSemanticErrorZ");
        *ret_conv = CResult_InvoiceSemanticErrorZ_ok(o_conv);
@@ -14395,6 +15280,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceSemanticErr
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceSemanticErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_InvoiceSemanticErrorZ* o_conv = (LDKCResult_InvoiceSemanticErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_InvoiceSemanticErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceSemanticErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -14404,6 +15295,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceSemanticErrorZ
        CResult_InvoiceSemanticErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_InvoiceSemanticErrorZ_clone_ptr(LDKCResult_InvoiceSemanticErrorZ *NONNULL_PTR arg) {
+       LDKCResult_InvoiceSemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceSemanticErrorZ), "LDKCResult_InvoiceSemanticErrorZ");
+       *ret_conv = CResult_InvoiceSemanticErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceSemanticErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_InvoiceSemanticErrorZ* arg_conv = (LDKCResult_InvoiceSemanticErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_InvoiceSemanticErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceSemanticErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_InvoiceSemanticErrorZ* orig_conv = (LDKCResult_InvoiceSemanticErrorZ*)(orig & ~1);
        LDKCResult_InvoiceSemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceSemanticErrorZ), "LDKCResult_InvoiceSemanticErrorZ");
@@ -14415,6 +15317,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1DescriptionCreatio
        LDKDescription o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = Description_clone(&o_conv);
        LDKCResult_DescriptionCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_DescriptionCreationErrorZ), "LDKCResult_DescriptionCreationErrorZ");
        *ret_conv = CResult_DescriptionCreationErrorZ_ok(o_conv);
@@ -14428,6 +15331,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1DescriptionCreatio
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1DescriptionCreationErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_DescriptionCreationErrorZ* o_conv = (LDKCResult_DescriptionCreationErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_DescriptionCreationErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1DescriptionCreationErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -14437,6 +15346,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1DescriptionCreationEr
        CResult_DescriptionCreationErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_DescriptionCreationErrorZ_clone_ptr(LDKCResult_DescriptionCreationErrorZ *NONNULL_PTR arg) {
+       LDKCResult_DescriptionCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_DescriptionCreationErrorZ), "LDKCResult_DescriptionCreationErrorZ");
+       *ret_conv = CResult_DescriptionCreationErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1DescriptionCreationErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_DescriptionCreationErrorZ* arg_conv = (LDKCResult_DescriptionCreationErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_DescriptionCreationErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1DescriptionCreationErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_DescriptionCreationErrorZ* orig_conv = (LDKCResult_DescriptionCreationErrorZ*)(orig & ~1);
        LDKCResult_DescriptionCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_DescriptionCreationErrorZ), "LDKCResult_DescriptionCreationErrorZ");
@@ -14448,6 +15368,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ExpiryTimeCreation
        LDKExpiryTime o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ExpiryTime_clone(&o_conv);
        LDKCResult_ExpiryTimeCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ExpiryTimeCreationErrorZ), "LDKCResult_ExpiryTimeCreationErrorZ");
        *ret_conv = CResult_ExpiryTimeCreationErrorZ_ok(o_conv);
@@ -14461,6 +15382,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ExpiryTimeCreation
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ExpiryTimeCreationErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ExpiryTimeCreationErrorZ* o_conv = (LDKCResult_ExpiryTimeCreationErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ExpiryTimeCreationErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ExpiryTimeCreationErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -14470,6 +15397,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ExpiryTimeCreationErr
        CResult_ExpiryTimeCreationErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ExpiryTimeCreationErrorZ_clone_ptr(LDKCResult_ExpiryTimeCreationErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ExpiryTimeCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ExpiryTimeCreationErrorZ), "LDKCResult_ExpiryTimeCreationErrorZ");
+       *ret_conv = CResult_ExpiryTimeCreationErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ExpiryTimeCreationErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_ExpiryTimeCreationErrorZ* arg_conv = (LDKCResult_ExpiryTimeCreationErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ExpiryTimeCreationErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ExpiryTimeCreationErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_ExpiryTimeCreationErrorZ* orig_conv = (LDKCResult_ExpiryTimeCreationErrorZ*)(orig & ~1);
        LDKCResult_ExpiryTimeCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ExpiryTimeCreationErrorZ), "LDKCResult_ExpiryTimeCreationErrorZ");
@@ -14481,6 +15419,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PrivateRouteCreati
        LDKPrivateRoute o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = PrivateRoute_clone(&o_conv);
        LDKCResult_PrivateRouteCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PrivateRouteCreationErrorZ), "LDKCResult_PrivateRouteCreationErrorZ");
        *ret_conv = CResult_PrivateRouteCreationErrorZ_ok(o_conv);
@@ -14494,6 +15433,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PrivateRouteCreati
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PrivateRouteCreationErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_PrivateRouteCreationErrorZ* o_conv = (LDKCResult_PrivateRouteCreationErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_PrivateRouteCreationErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PrivateRouteCreationErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -14503,6 +15448,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PrivateRouteCreationE
        CResult_PrivateRouteCreationErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_PrivateRouteCreationErrorZ_clone_ptr(LDKCResult_PrivateRouteCreationErrorZ *NONNULL_PTR arg) {
+       LDKCResult_PrivateRouteCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PrivateRouteCreationErrorZ), "LDKCResult_PrivateRouteCreationErrorZ");
+       *ret_conv = CResult_PrivateRouteCreationErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PrivateRouteCreationErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_PrivateRouteCreationErrorZ* arg_conv = (LDKCResult_PrivateRouteCreationErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_PrivateRouteCreationErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PrivateRouteCreationErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_PrivateRouteCreationErrorZ* orig_conv = (LDKCResult_PrivateRouteCreationErrorZ*)(orig & ~1);
        LDKCResult_PrivateRouteCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PrivateRouteCreationErrorZ), "LDKCResult_PrivateRouteCreationErrorZ");
@@ -14524,6 +15480,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1StringErrorZ_1err(
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1StringErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_StringErrorZ* o_conv = (LDKCResult_StringErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_StringErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1StringErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -14537,6 +15499,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelMonitorUpda
        LDKChannelMonitorUpdate o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ChannelMonitorUpdate_clone(&o_conv);
        LDKCResult_ChannelMonitorUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelMonitorUpdateDecodeErrorZ), "LDKCResult_ChannelMonitorUpdateDecodeErrorZ");
        *ret_conv = CResult_ChannelMonitorUpdateDecodeErrorZ_ok(o_conv);
@@ -14547,12 +15510,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelMonitorUpda
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ChannelMonitorUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelMonitorUpdateDecodeErrorZ), "LDKCResult_ChannelMonitorUpdateDecodeErrorZ");
        *ret_conv = CResult_ChannelMonitorUpdateDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelMonitorUpdateDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ChannelMonitorUpdateDecodeErrorZ* o_conv = (LDKCResult_ChannelMonitorUpdateDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ChannelMonitorUpdateDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelMonitorUpdateDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -14562,6 +15532,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelMonitorUpdateD
        CResult_ChannelMonitorUpdateDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ChannelMonitorUpdateDecodeErrorZ_clone_ptr(LDKCResult_ChannelMonitorUpdateDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ChannelMonitorUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelMonitorUpdateDecodeErrorZ), "LDKCResult_ChannelMonitorUpdateDecodeErrorZ");
+       *ret_conv = CResult_ChannelMonitorUpdateDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelMonitorUpdateDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_ChannelMonitorUpdateDecodeErrorZ* arg_conv = (LDKCResult_ChannelMonitorUpdateDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ChannelMonitorUpdateDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelMonitorUpdateDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_ChannelMonitorUpdateDecodeErrorZ* orig_conv = (LDKCResult_ChannelMonitorUpdateDecodeErrorZ*)(orig & ~1);
        LDKCResult_ChannelMonitorUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelMonitorUpdateDecodeErrorZ), "LDKCResult_ChannelMonitorUpdateDecodeErrorZ");
@@ -14569,10 +15550,112 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelMonitorUpda
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1MonitorEventZ_1some(JNIEnv *env, jclass clz, int64_t o) {
+       void* o_ptr = (void*)(((uint64_t)o) & ~1);
+       CHECK_ACCESS(o_ptr);
+       LDKMonitorEvent o_conv = *(LDKMonitorEvent*)(o_ptr);
+       o_conv = MonitorEvent_clone((LDKMonitorEvent*)(((uint64_t)o) & ~1));
+       LDKCOption_MonitorEventZ *ret_copy = MALLOC(sizeof(LDKCOption_MonitorEventZ), "LDKCOption_MonitorEventZ");
+       *ret_copy = COption_MonitorEventZ_some(o_conv);
+       uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1MonitorEventZ_1none(JNIEnv *env, jclass clz) {
+       LDKCOption_MonitorEventZ *ret_copy = MALLOC(sizeof(LDKCOption_MonitorEventZ), "LDKCOption_MonitorEventZ");
+       *ret_copy = COption_MonitorEventZ_none();
+       uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1MonitorEventZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if ((_res & 1) != 0) return;
+       void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
+       CHECK_ACCESS(_res_ptr);
+       LDKCOption_MonitorEventZ _res_conv = *(LDKCOption_MonitorEventZ*)(_res_ptr);
+       FREE((void*)_res);
+       COption_MonitorEventZ_free(_res_conv);
+}
+
+static inline uint64_t COption_MonitorEventZ_clone_ptr(LDKCOption_MonitorEventZ *NONNULL_PTR arg) {
+       LDKCOption_MonitorEventZ *ret_copy = MALLOC(sizeof(LDKCOption_MonitorEventZ), "LDKCOption_MonitorEventZ");
+       *ret_copy = COption_MonitorEventZ_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1MonitorEventZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCOption_MonitorEventZ* arg_conv = (LDKCOption_MonitorEventZ*)arg;
+       int64_t ret_val = COption_MonitorEventZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1MonitorEventZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCOption_MonitorEventZ* orig_conv = (LDKCOption_MonitorEventZ*)orig;
+       LDKCOption_MonitorEventZ *ret_copy = MALLOC(sizeof(LDKCOption_MonitorEventZ), "LDKCOption_MonitorEventZ");
+       *ret_copy = COption_MonitorEventZ_clone(orig_conv);
+       uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1MonitorEventZDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       void* o_ptr = (void*)(((uint64_t)o) & ~1);
+       CHECK_ACCESS(o_ptr);
+       LDKCOption_MonitorEventZ o_conv = *(LDKCOption_MonitorEventZ*)(o_ptr);
+       o_conv = COption_MonitorEventZ_clone((LDKCOption_MonitorEventZ*)(((uint64_t)o) & ~1));
+       LDKCResult_COption_MonitorEventZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_MonitorEventZDecodeErrorZ), "LDKCResult_COption_MonitorEventZDecodeErrorZ");
+       *ret_conv = CResult_COption_MonitorEventZDecodeErrorZ_ok(o_conv);
+       return (uint64_t)ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1MonitorEventZDecodeErrorZ_1err(JNIEnv *env, jclass clz, int64_t e) {
+       LDKDecodeError e_conv;
+       e_conv.inner = (void*)(e & (~1));
+       e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
+       e_conv = DecodeError_clone(&e_conv);
+       LDKCResult_COption_MonitorEventZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_MonitorEventZDecodeErrorZ), "LDKCResult_COption_MonitorEventZDecodeErrorZ");
+       *ret_conv = CResult_COption_MonitorEventZDecodeErrorZ_err(e_conv);
+       return (uint64_t)ret_conv;
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1MonitorEventZDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_COption_MonitorEventZDecodeErrorZ* o_conv = (LDKCResult_COption_MonitorEventZDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_COption_MonitorEventZDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1MonitorEventZDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if ((_res & 1) != 0) return;
+       void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_COption_MonitorEventZDecodeErrorZ _res_conv = *(LDKCResult_COption_MonitorEventZDecodeErrorZ*)(_res_ptr);
+       FREE((void*)_res);
+       CResult_COption_MonitorEventZDecodeErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_COption_MonitorEventZDecodeErrorZ_clone_ptr(LDKCResult_COption_MonitorEventZDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_COption_MonitorEventZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_MonitorEventZDecodeErrorZ), "LDKCResult_COption_MonitorEventZDecodeErrorZ");
+       *ret_conv = CResult_COption_MonitorEventZDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1MonitorEventZDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_COption_MonitorEventZDecodeErrorZ* arg_conv = (LDKCResult_COption_MonitorEventZDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_COption_MonitorEventZDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1MonitorEventZDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_COption_MonitorEventZDecodeErrorZ* orig_conv = (LDKCResult_COption_MonitorEventZDecodeErrorZ*)(orig & ~1);
+       LDKCResult_COption_MonitorEventZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_MonitorEventZDecodeErrorZ), "LDKCResult_COption_MonitorEventZDecodeErrorZ");
+       *ret_conv = CResult_COption_MonitorEventZDecodeErrorZ_clone(orig_conv);
+       return (uint64_t)ret_conv;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCUpdateDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
        LDKHTLCUpdate o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = HTLCUpdate_clone(&o_conv);
        LDKCResult_HTLCUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HTLCUpdateDecodeErrorZ), "LDKCResult_HTLCUpdateDecodeErrorZ");
        *ret_conv = CResult_HTLCUpdateDecodeErrorZ_ok(o_conv);
@@ -14583,12 +15666,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCUpdateDecodeEr
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_HTLCUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HTLCUpdateDecodeErrorZ), "LDKCResult_HTLCUpdateDecodeErrorZ");
        *ret_conv = CResult_HTLCUpdateDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCUpdateDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_HTLCUpdateDecodeErrorZ* o_conv = (LDKCResult_HTLCUpdateDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_HTLCUpdateDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCUpdateDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -14598,6 +15688,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCUpdateDecodeError
        CResult_HTLCUpdateDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_HTLCUpdateDecodeErrorZ_clone_ptr(LDKCResult_HTLCUpdateDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_HTLCUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HTLCUpdateDecodeErrorZ), "LDKCResult_HTLCUpdateDecodeErrorZ");
+       *ret_conv = CResult_HTLCUpdateDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCUpdateDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_HTLCUpdateDecodeErrorZ* arg_conv = (LDKCResult_HTLCUpdateDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_HTLCUpdateDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCUpdateDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_HTLCUpdateDecodeErrorZ* orig_conv = (LDKCResult_HTLCUpdateDecodeErrorZ*)(orig & ~1);
        LDKCResult_HTLCUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HTLCUpdateDecodeErrorZ), "LDKCResult_HTLCUpdateDecodeErrorZ");
@@ -14615,12 +15716,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneMonitorUpdateE
        LDKMonitorUpdateError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = MonitorUpdateError_clone(&e_conv);
        LDKCResult_NoneMonitorUpdateErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneMonitorUpdateErrorZ), "LDKCResult_NoneMonitorUpdateErrorZ");
        *ret_conv = CResult_NoneMonitorUpdateErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NoneMonitorUpdateErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_NoneMonitorUpdateErrorZ* o_conv = (LDKCResult_NoneMonitorUpdateErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_NoneMonitorUpdateErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneMonitorUpdateErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -14630,6 +15738,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneMonitorUpdateErro
        CResult_NoneMonitorUpdateErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_NoneMonitorUpdateErrorZ_clone_ptr(LDKCResult_NoneMonitorUpdateErrorZ *NONNULL_PTR arg) {
+       LDKCResult_NoneMonitorUpdateErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneMonitorUpdateErrorZ), "LDKCResult_NoneMonitorUpdateErrorZ");
+       *ret_conv = CResult_NoneMonitorUpdateErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneMonitorUpdateErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_NoneMonitorUpdateErrorZ* arg_conv = (LDKCResult_NoneMonitorUpdateErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_NoneMonitorUpdateErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneMonitorUpdateErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_NoneMonitorUpdateErrorZ* orig_conv = (LDKCResult_NoneMonitorUpdateErrorZ*)(orig & ~1);
        LDKCResult_NoneMonitorUpdateErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneMonitorUpdateErrorZ), "LDKCResult_NoneMonitorUpdateErrorZ");
@@ -14637,6 +15756,17 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneMonitorUpdateE
        return (uint64_t)ret_conv;
 }
 
+static inline uint64_t C2Tuple_OutPointScriptZ_clone_ptr(LDKC2Tuple_OutPointScriptZ *NONNULL_PTR arg) {
+       LDKC2Tuple_OutPointScriptZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OutPointScriptZ), "LDKC2Tuple_OutPointScriptZ");
+       *ret_conv = C2Tuple_OutPointScriptZ_clone(arg);
+       return ((uint64_t)ret_conv);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1OutPointScriptZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKC2Tuple_OutPointScriptZ* arg_conv = (LDKC2Tuple_OutPointScriptZ*)(arg & ~1);
+       int64_t ret_val = C2Tuple_OutPointScriptZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1OutPointScriptZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKC2Tuple_OutPointScriptZ* orig_conv = (LDKC2Tuple_OutPointScriptZ*)(orig & ~1);
        LDKC2Tuple_OutPointScriptZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OutPointScriptZ), "LDKC2Tuple_OutPointScriptZ");
@@ -14648,6 +15778,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1OutPointScriptZ_1n
        LDKOutPoint a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = (a & 1) || (a == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv = OutPoint_clone(&a_conv);
        LDKCVec_u8Z b_ref;
        b_ref.datalen = (*env)->GetArrayLength(env, b);
@@ -14667,6 +15798,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1OutPointScriptZ_1free
        C2Tuple_OutPointScriptZ_free(_res_conv);
 }
 
+static inline uint64_t C2Tuple_u32ScriptZ_clone_ptr(LDKC2Tuple_u32ScriptZ *NONNULL_PTR arg) {
+       LDKC2Tuple_u32ScriptZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_u32ScriptZ), "LDKC2Tuple_u32ScriptZ");
+       *ret_conv = C2Tuple_u32ScriptZ_clone(arg);
+       return ((uint64_t)ret_conv);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32ScriptZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKC2Tuple_u32ScriptZ* arg_conv = (LDKC2Tuple_u32ScriptZ*)(arg & ~1);
+       int64_t ret_val = C2Tuple_u32ScriptZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32ScriptZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKC2Tuple_u32ScriptZ* orig_conv = (LDKC2Tuple_u32ScriptZ*)(orig & ~1);
        LDKC2Tuple_u32ScriptZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_u32ScriptZ), "LDKC2Tuple_u32ScriptZ");
@@ -14713,6 +15855,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1u32ScriptZZ_1fr
        CVec_C2Tuple_u32ScriptZZ_free(_res_constr);
 }
 
+static inline uint64_t C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_clone_ptr(LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ *NONNULL_PTR arg) {
+       LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ), "LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ");
+       *ret_conv = C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_clone(arg);
+       return ((uint64_t)ret_conv);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2Tuple_1u32ScriptZZZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ* arg_conv = (LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ*)(arg & ~1);
+       int64_t ret_val = C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2Tuple_1u32ScriptZZZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ* orig_conv = (LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ*)(orig & ~1);
        LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ), "LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ");
@@ -14813,6 +15966,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1TransactionZ_1free(JNIEn
        CVec_TransactionZ_free(_res_constr);
 }
 
+static inline uint64_t C2Tuple_u32TxOutZ_clone_ptr(LDKC2Tuple_u32TxOutZ *NONNULL_PTR arg) {
+       LDKC2Tuple_u32TxOutZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_u32TxOutZ), "LDKC2Tuple_u32TxOutZ");
+       *ret_conv = C2Tuple_u32TxOutZ_clone(arg);
+       return ((uint64_t)ret_conv);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32TxOutZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKC2Tuple_u32TxOutZ* arg_conv = (LDKC2Tuple_u32TxOutZ*)(arg & ~1);
+       int64_t ret_val = C2Tuple_u32TxOutZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32TxOutZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKC2Tuple_u32TxOutZ* orig_conv = (LDKC2Tuple_u32TxOutZ*)(orig & ~1);
        LDKC2Tuple_u32TxOutZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_u32TxOutZ), "LDKC2Tuple_u32TxOutZ");
@@ -14859,6 +16023,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1u32TxOutZZ_1fre
        CVec_C2Tuple_u32TxOutZZ_free(_res_constr);
 }
 
+static inline uint64_t C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_clone_ptr(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ *NONNULL_PTR arg) {
+       LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ), "LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ");
+       *ret_conv = C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_clone(arg);
+       return ((uint64_t)ret_conv);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2Tuple_1u32TxOutZZZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ* arg_conv = (LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ*)(arg & ~1);
+       int64_t ret_val = C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2Tuple_1u32TxOutZZZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ* orig_conv = (LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ*)(orig & ~1);
        LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ), "LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ");
@@ -14954,12 +16129,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHash
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ), "LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ");
        *ret_conv = CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelMonitorZDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ* o_conv = (LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelMonitorZDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -14969,6 +16151,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashCha
        CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_clone_ptr(LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ), "LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ");
+       *ret_conv = CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelMonitorZDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ* arg_conv = (LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelMonitorZDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ* orig_conv = (LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ*)(orig & ~1);
        LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ), "LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ");
@@ -14986,12 +16179,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneLightningError
        LDKLightningError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = LightningError_clone(&e_conv);
        LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
        *ret_conv = CResult_NoneLightningErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NoneLightningErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_NoneLightningErrorZ* o_conv = (LDKCResult_NoneLightningErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_NoneLightningErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneLightningErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -15001,6 +16201,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneLightningErrorZ_1
        CResult_NoneLightningErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_NoneLightningErrorZ_clone_ptr(LDKCResult_NoneLightningErrorZ *NONNULL_PTR arg) {
+       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
+       *ret_conv = CResult_NoneLightningErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneLightningErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_NoneLightningErrorZ* arg_conv = (LDKCResult_NoneLightningErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_NoneLightningErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneLightningErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_NoneLightningErrorZ* orig_conv = (LDKCResult_NoneLightningErrorZ*)(orig & ~1);
        LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
@@ -15008,6 +16219,17 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NoneLightningError
        return (uint64_t)ret_conv;
 }
 
+static inline uint64_t C2Tuple_PublicKeyTypeZ_clone_ptr(LDKC2Tuple_PublicKeyTypeZ *NONNULL_PTR arg) {
+       LDKC2Tuple_PublicKeyTypeZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PublicKeyTypeZ), "LDKC2Tuple_PublicKeyTypeZ");
+       *ret_conv = C2Tuple_PublicKeyTypeZ_clone(arg);
+       return ((uint64_t)ret_conv);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyTypeZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKC2Tuple_PublicKeyTypeZ* arg_conv = (LDKC2Tuple_PublicKeyTypeZ*)(arg & ~1);
+       int64_t ret_val = C2Tuple_PublicKeyTypeZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyTypeZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKC2Tuple_PublicKeyTypeZ* orig_conv = (LDKC2Tuple_PublicKeyTypeZ*)(orig & ~1);
        LDKC2Tuple_PublicKeyTypeZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PublicKeyTypeZ), "LDKC2Tuple_PublicKeyTypeZ");
@@ -15070,12 +16292,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1boolLightningError
        LDKLightningError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = LightningError_clone(&e_conv);
        LDKCResult_boolLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_boolLightningErrorZ), "LDKCResult_boolLightningErrorZ");
        *ret_conv = CResult_boolLightningErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1boolLightningErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_boolLightningErrorZ* o_conv = (LDKCResult_boolLightningErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_boolLightningErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1boolLightningErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -15085,6 +16314,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1boolLightningErrorZ_1
        CResult_boolLightningErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_boolLightningErrorZ_clone_ptr(LDKCResult_boolLightningErrorZ *NONNULL_PTR arg) {
+       LDKCResult_boolLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_boolLightningErrorZ), "LDKCResult_boolLightningErrorZ");
+       *ret_conv = CResult_boolLightningErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1boolLightningErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_boolLightningErrorZ* arg_conv = (LDKCResult_boolLightningErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_boolLightningErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1boolLightningErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_boolLightningErrorZ* orig_conv = (LDKCResult_boolLightningErrorZ*)(orig & ~1);
        LDKCResult_boolLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_boolLightningErrorZ), "LDKCResult_boolLightningErrorZ");
@@ -15092,6 +16332,17 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1boolLightningError
        return (uint64_t)ret_conv;
 }
 
+static inline uint64_t C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_clone_ptr(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ *NONNULL_PTR arg) {
+       LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ* ret_conv = MALLOC(sizeof(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ), "LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ");
+       *ret_conv = C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_clone(arg);
+       return ((uint64_t)ret_conv);
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C3Tuple_1ChannelAnnouncementChannelUpdateChannelUpdateZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ* arg_conv = (LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ*)(arg & ~1);
+       int64_t ret_val = C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C3Tuple_1ChannelAnnouncementChannelUpdateChannelUpdateZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ* orig_conv = (LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ*)(orig & ~1);
        LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ* ret_conv = MALLOC(sizeof(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ), "LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ");
@@ -15103,14 +16354,17 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C3Tuple_1ChannelAnnouncemen
        LDKChannelAnnouncement a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = (a & 1) || (a == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv = ChannelAnnouncement_clone(&a_conv);
        LDKChannelUpdate b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = (b & 1) || (b == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv = ChannelUpdate_clone(&b_conv);
        LDKChannelUpdate c_conv;
        c_conv.inner = (void*)(c & (~1));
        c_conv.is_owned = (c & 1) || (c == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(c_conv);
        c_conv = ChannelUpdate_clone(&c_conv);
        LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ* ret_conv = MALLOC(sizeof(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ), "LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ");
        *ret_conv = C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_new(a_conv, b_conv, c_conv);
@@ -15159,6 +16413,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1NodeAnnouncementZ_1free(
                LDKNodeAnnouncement _res_conv_18_conv;
                _res_conv_18_conv.inner = (void*)(_res_conv_18 & (~1));
                _res_conv_18_conv.is_owned = (_res_conv_18 & 1) || (_res_conv_18 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_18_conv);
                _res_constr.data[s] = _res_conv_18_conv;
        }
        (*env)->ReleaseLongArrayElements(env, _res, _res_vals, 0);
@@ -15196,12 +16451,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZPeerHandl
        LDKPeerHandleError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = PeerHandleError_clone(&e_conv);
        LDKCResult_CVec_u8ZPeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_u8ZPeerHandleErrorZ), "LDKCResult_CVec_u8ZPeerHandleErrorZ");
        *ret_conv = CResult_CVec_u8ZPeerHandleErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZPeerHandleErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_CVec_u8ZPeerHandleErrorZ* o_conv = (LDKCResult_CVec_u8ZPeerHandleErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_CVec_u8ZPeerHandleErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZPeerHandleErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -15211,6 +16473,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZPeerHandleEr
        CResult_CVec_u8ZPeerHandleErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_CVec_u8ZPeerHandleErrorZ_clone_ptr(LDKCResult_CVec_u8ZPeerHandleErrorZ *NONNULL_PTR arg) {
+       LDKCResult_CVec_u8ZPeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_u8ZPeerHandleErrorZ), "LDKCResult_CVec_u8ZPeerHandleErrorZ");
+       *ret_conv = CResult_CVec_u8ZPeerHandleErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZPeerHandleErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_CVec_u8ZPeerHandleErrorZ* arg_conv = (LDKCResult_CVec_u8ZPeerHandleErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_CVec_u8ZPeerHandleErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZPeerHandleErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_CVec_u8ZPeerHandleErrorZ* orig_conv = (LDKCResult_CVec_u8ZPeerHandleErrorZ*)(orig & ~1);
        LDKCResult_CVec_u8ZPeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_u8ZPeerHandleErrorZ), "LDKCResult_CVec_u8ZPeerHandleErrorZ");
@@ -15228,12 +16501,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NonePeerHandleErro
        LDKPeerHandleError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = PeerHandleError_clone(&e_conv);
        LDKCResult_NonePeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NonePeerHandleErrorZ), "LDKCResult_NonePeerHandleErrorZ");
        *ret_conv = CResult_NonePeerHandleErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NonePeerHandleErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_NonePeerHandleErrorZ* o_conv = (LDKCResult_NonePeerHandleErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_NonePeerHandleErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NonePeerHandleErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -15243,6 +16523,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NonePeerHandleErrorZ_
        CResult_NonePeerHandleErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_NonePeerHandleErrorZ_clone_ptr(LDKCResult_NonePeerHandleErrorZ *NONNULL_PTR arg) {
+       LDKCResult_NonePeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NonePeerHandleErrorZ), "LDKCResult_NonePeerHandleErrorZ");
+       *ret_conv = CResult_NonePeerHandleErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NonePeerHandleErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_NonePeerHandleErrorZ* arg_conv = (LDKCResult_NonePeerHandleErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_NonePeerHandleErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NonePeerHandleErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_NonePeerHandleErrorZ* orig_conv = (LDKCResult_NonePeerHandleErrorZ*)(orig & ~1);
        LDKCResult_NonePeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NonePeerHandleErrorZ), "LDKCResult_NonePeerHandleErrorZ");
@@ -15260,12 +16551,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1boolPeerHandleErro
        LDKPeerHandleError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = PeerHandleError_clone(&e_conv);
        LDKCResult_boolPeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_boolPeerHandleErrorZ), "LDKCResult_boolPeerHandleErrorZ");
        *ret_conv = CResult_boolPeerHandleErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1boolPeerHandleErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_boolPeerHandleErrorZ* o_conv = (LDKCResult_boolPeerHandleErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_boolPeerHandleErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1boolPeerHandleErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -15275,6 +16573,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1boolPeerHandleErrorZ_
        CResult_boolPeerHandleErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_boolPeerHandleErrorZ_clone_ptr(LDKCResult_boolPeerHandleErrorZ *NONNULL_PTR arg) {
+       LDKCResult_boolPeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_boolPeerHandleErrorZ), "LDKCResult_boolPeerHandleErrorZ");
+       *ret_conv = CResult_boolPeerHandleErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1boolPeerHandleErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_boolPeerHandleErrorZ* arg_conv = (LDKCResult_boolPeerHandleErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_boolPeerHandleErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1boolPeerHandleErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_boolPeerHandleErrorZ* orig_conv = (LDKCResult_boolPeerHandleErrorZ*)(orig & ~1);
        LDKCResult_boolPeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_boolPeerHandleErrorZ), "LDKCResult_boolPeerHandleErrorZ");
@@ -15286,6 +16595,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NodeIdDecodeErrorZ
        LDKNodeId o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = NodeId_clone(&o_conv);
        LDKCResult_NodeIdDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeIdDecodeErrorZ), "LDKCResult_NodeIdDecodeErrorZ");
        *ret_conv = CResult_NodeIdDecodeErrorZ_ok(o_conv);
@@ -15296,12 +16606,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NodeIdDecodeErrorZ
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_NodeIdDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeIdDecodeErrorZ), "LDKCResult_NodeIdDecodeErrorZ");
        *ret_conv = CResult_NodeIdDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NodeIdDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_NodeIdDecodeErrorZ* o_conv = (LDKCResult_NodeIdDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_NodeIdDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NodeIdDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -15311,6 +16628,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NodeIdDecodeErrorZ_1f
        CResult_NodeIdDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_NodeIdDecodeErrorZ_clone_ptr(LDKCResult_NodeIdDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_NodeIdDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeIdDecodeErrorZ), "LDKCResult_NodeIdDecodeErrorZ");
+       *ret_conv = CResult_NodeIdDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NodeIdDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_NodeIdDecodeErrorZ* arg_conv = (LDKCResult_NodeIdDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_NodeIdDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NodeIdDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_NodeIdDecodeErrorZ* orig_conv = (LDKCResult_NodeIdDecodeErrorZ*)(orig & ~1);
        LDKCResult_NodeIdDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeIdDecodeErrorZ), "LDKCResult_NodeIdDecodeErrorZ");
@@ -15318,6 +16646,60 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NodeIdDecodeErrorZ
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1NetworkUpdateZDecodeErrorZ_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       void* o_ptr = (void*)(((uint64_t)o) & ~1);
+       CHECK_ACCESS(o_ptr);
+       LDKCOption_NetworkUpdateZ o_conv = *(LDKCOption_NetworkUpdateZ*)(o_ptr);
+       o_conv = COption_NetworkUpdateZ_clone((LDKCOption_NetworkUpdateZ*)(((uint64_t)o) & ~1));
+       LDKCResult_COption_NetworkUpdateZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_NetworkUpdateZDecodeErrorZ), "LDKCResult_COption_NetworkUpdateZDecodeErrorZ");
+       *ret_conv = CResult_COption_NetworkUpdateZDecodeErrorZ_ok(o_conv);
+       return (uint64_t)ret_conv;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1NetworkUpdateZDecodeErrorZ_1err(JNIEnv *env, jclass clz, int64_t e) {
+       LDKDecodeError e_conv;
+       e_conv.inner = (void*)(e & (~1));
+       e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
+       e_conv = DecodeError_clone(&e_conv);
+       LDKCResult_COption_NetworkUpdateZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_NetworkUpdateZDecodeErrorZ), "LDKCResult_COption_NetworkUpdateZDecodeErrorZ");
+       *ret_conv = CResult_COption_NetworkUpdateZDecodeErrorZ_err(e_conv);
+       return (uint64_t)ret_conv;
+}
+
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1NetworkUpdateZDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_COption_NetworkUpdateZDecodeErrorZ* o_conv = (LDKCResult_COption_NetworkUpdateZDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_COption_NetworkUpdateZDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1NetworkUpdateZDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
+       if ((_res & 1) != 0) return;
+       void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_COption_NetworkUpdateZDecodeErrorZ _res_conv = *(LDKCResult_COption_NetworkUpdateZDecodeErrorZ*)(_res_ptr);
+       FREE((void*)_res);
+       CResult_COption_NetworkUpdateZDecodeErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_COption_NetworkUpdateZDecodeErrorZ_clone_ptr(LDKCResult_COption_NetworkUpdateZDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_COption_NetworkUpdateZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_NetworkUpdateZDecodeErrorZ), "LDKCResult_COption_NetworkUpdateZDecodeErrorZ");
+       *ret_conv = CResult_COption_NetworkUpdateZDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1NetworkUpdateZDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_COption_NetworkUpdateZDecodeErrorZ* arg_conv = (LDKCResult_COption_NetworkUpdateZDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_COption_NetworkUpdateZDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1NetworkUpdateZDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKCResult_COption_NetworkUpdateZDecodeErrorZ* orig_conv = (LDKCResult_COption_NetworkUpdateZDecodeErrorZ*)(orig & ~1);
+       LDKCResult_COption_NetworkUpdateZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_NetworkUpdateZDecodeErrorZ), "LDKCResult_COption_NetworkUpdateZDecodeErrorZ");
+       *ret_conv = CResult_COption_NetworkUpdateZDecodeErrorZ_clone(orig_conv);
+       return (uint64_t)ret_conv;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1AccessZ_1some(JNIEnv *env, jclass clz, int64_t o) {
        void* o_ptr = (void*)(((uint64_t)o) & ~1);
        CHECK_ACCESS(o_ptr);
@@ -15352,6 +16734,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1DirectionalChannel
        LDKDirectionalChannelInfo o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = DirectionalChannelInfo_clone(&o_conv);
        LDKCResult_DirectionalChannelInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_DirectionalChannelInfoDecodeErrorZ), "LDKCResult_DirectionalChannelInfoDecodeErrorZ");
        *ret_conv = CResult_DirectionalChannelInfoDecodeErrorZ_ok(o_conv);
@@ -15362,12 +16745,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1DirectionalChannel
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_DirectionalChannelInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_DirectionalChannelInfoDecodeErrorZ), "LDKCResult_DirectionalChannelInfoDecodeErrorZ");
        *ret_conv = CResult_DirectionalChannelInfoDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1DirectionalChannelInfoDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_DirectionalChannelInfoDecodeErrorZ* o_conv = (LDKCResult_DirectionalChannelInfoDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_DirectionalChannelInfoDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1DirectionalChannelInfoDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -15377,6 +16767,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1DirectionalChannelInf
        CResult_DirectionalChannelInfoDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_DirectionalChannelInfoDecodeErrorZ_clone_ptr(LDKCResult_DirectionalChannelInfoDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_DirectionalChannelInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_DirectionalChannelInfoDecodeErrorZ), "LDKCResult_DirectionalChannelInfoDecodeErrorZ");
+       *ret_conv = CResult_DirectionalChannelInfoDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1DirectionalChannelInfoDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_DirectionalChannelInfoDecodeErrorZ* arg_conv = (LDKCResult_DirectionalChannelInfoDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_DirectionalChannelInfoDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1DirectionalChannelInfoDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_DirectionalChannelInfoDecodeErrorZ* orig_conv = (LDKCResult_DirectionalChannelInfoDecodeErrorZ*)(orig & ~1);
        LDKCResult_DirectionalChannelInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_DirectionalChannelInfoDecodeErrorZ), "LDKCResult_DirectionalChannelInfoDecodeErrorZ");
@@ -15388,6 +16789,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelInfoDecodeE
        LDKChannelInfo o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ChannelInfo_clone(&o_conv);
        LDKCResult_ChannelInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelInfoDecodeErrorZ), "LDKCResult_ChannelInfoDecodeErrorZ");
        *ret_conv = CResult_ChannelInfoDecodeErrorZ_ok(o_conv);
@@ -15398,12 +16800,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelInfoDecodeE
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ChannelInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelInfoDecodeErrorZ), "LDKCResult_ChannelInfoDecodeErrorZ");
        *ret_conv = CResult_ChannelInfoDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelInfoDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ChannelInfoDecodeErrorZ* o_conv = (LDKCResult_ChannelInfoDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ChannelInfoDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelInfoDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -15413,6 +16822,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelInfoDecodeErro
        CResult_ChannelInfoDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ChannelInfoDecodeErrorZ_clone_ptr(LDKCResult_ChannelInfoDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ChannelInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelInfoDecodeErrorZ), "LDKCResult_ChannelInfoDecodeErrorZ");
+       *ret_conv = CResult_ChannelInfoDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelInfoDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_ChannelInfoDecodeErrorZ* arg_conv = (LDKCResult_ChannelInfoDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ChannelInfoDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelInfoDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_ChannelInfoDecodeErrorZ* orig_conv = (LDKCResult_ChannelInfoDecodeErrorZ*)(orig & ~1);
        LDKCResult_ChannelInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelInfoDecodeErrorZ), "LDKCResult_ChannelInfoDecodeErrorZ");
@@ -15424,6 +16844,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RoutingFeesDecodeE
        LDKRoutingFees o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = RoutingFees_clone(&o_conv);
        LDKCResult_RoutingFeesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RoutingFeesDecodeErrorZ), "LDKCResult_RoutingFeesDecodeErrorZ");
        *ret_conv = CResult_RoutingFeesDecodeErrorZ_ok(o_conv);
@@ -15434,12 +16855,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RoutingFeesDecodeE
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_RoutingFeesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RoutingFeesDecodeErrorZ), "LDKCResult_RoutingFeesDecodeErrorZ");
        *ret_conv = CResult_RoutingFeesDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1RoutingFeesDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_RoutingFeesDecodeErrorZ* o_conv = (LDKCResult_RoutingFeesDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_RoutingFeesDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RoutingFeesDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -15449,6 +16877,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RoutingFeesDecodeErro
        CResult_RoutingFeesDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_RoutingFeesDecodeErrorZ_clone_ptr(LDKCResult_RoutingFeesDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_RoutingFeesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RoutingFeesDecodeErrorZ), "LDKCResult_RoutingFeesDecodeErrorZ");
+       *ret_conv = CResult_RoutingFeesDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RoutingFeesDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_RoutingFeesDecodeErrorZ* arg_conv = (LDKCResult_RoutingFeesDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_RoutingFeesDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RoutingFeesDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_RoutingFeesDecodeErrorZ* orig_conv = (LDKCResult_RoutingFeesDecodeErrorZ*)(orig & ~1);
        LDKCResult_RoutingFeesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RoutingFeesDecodeErrorZ), "LDKCResult_RoutingFeesDecodeErrorZ");
@@ -15460,6 +16899,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NodeAnnouncementIn
        LDKNodeAnnouncementInfo o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = NodeAnnouncementInfo_clone(&o_conv);
        LDKCResult_NodeAnnouncementInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeAnnouncementInfoDecodeErrorZ), "LDKCResult_NodeAnnouncementInfoDecodeErrorZ");
        *ret_conv = CResult_NodeAnnouncementInfoDecodeErrorZ_ok(o_conv);
@@ -15470,12 +16910,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NodeAnnouncementIn
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_NodeAnnouncementInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeAnnouncementInfoDecodeErrorZ), "LDKCResult_NodeAnnouncementInfoDecodeErrorZ");
        *ret_conv = CResult_NodeAnnouncementInfoDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NodeAnnouncementInfoDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_NodeAnnouncementInfoDecodeErrorZ* o_conv = (LDKCResult_NodeAnnouncementInfoDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_NodeAnnouncementInfoDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NodeAnnouncementInfoDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -15485,6 +16932,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NodeAnnouncementInfoD
        CResult_NodeAnnouncementInfoDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_NodeAnnouncementInfoDecodeErrorZ_clone_ptr(LDKCResult_NodeAnnouncementInfoDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_NodeAnnouncementInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeAnnouncementInfoDecodeErrorZ), "LDKCResult_NodeAnnouncementInfoDecodeErrorZ");
+       *ret_conv = CResult_NodeAnnouncementInfoDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NodeAnnouncementInfoDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_NodeAnnouncementInfoDecodeErrorZ* arg_conv = (LDKCResult_NodeAnnouncementInfoDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_NodeAnnouncementInfoDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NodeAnnouncementInfoDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_NodeAnnouncementInfoDecodeErrorZ* orig_conv = (LDKCResult_NodeAnnouncementInfoDecodeErrorZ*)(orig & ~1);
        LDKCResult_NodeAnnouncementInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeAnnouncementInfoDecodeErrorZ), "LDKCResult_NodeAnnouncementInfoDecodeErrorZ");
@@ -15512,6 +16970,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NodeInfoDecodeErro
        LDKNodeInfo o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = NodeInfo_clone(&o_conv);
        LDKCResult_NodeInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeInfoDecodeErrorZ), "LDKCResult_NodeInfoDecodeErrorZ");
        *ret_conv = CResult_NodeInfoDecodeErrorZ_ok(o_conv);
@@ -15522,12 +16981,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NodeInfoDecodeErro
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_NodeInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeInfoDecodeErrorZ), "LDKCResult_NodeInfoDecodeErrorZ");
        *ret_conv = CResult_NodeInfoDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NodeInfoDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_NodeInfoDecodeErrorZ* o_conv = (LDKCResult_NodeInfoDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_NodeInfoDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NodeInfoDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -15537,6 +17003,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NodeInfoDecodeErrorZ_
        CResult_NodeInfoDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_NodeInfoDecodeErrorZ_clone_ptr(LDKCResult_NodeInfoDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_NodeInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeInfoDecodeErrorZ), "LDKCResult_NodeInfoDecodeErrorZ");
+       *ret_conv = CResult_NodeInfoDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NodeInfoDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_NodeInfoDecodeErrorZ* arg_conv = (LDKCResult_NodeInfoDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_NodeInfoDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NodeInfoDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_NodeInfoDecodeErrorZ* orig_conv = (LDKCResult_NodeInfoDecodeErrorZ*)(orig & ~1);
        LDKCResult_NodeInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeInfoDecodeErrorZ), "LDKCResult_NodeInfoDecodeErrorZ");
@@ -15548,6 +17025,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NetworkGraphDecode
        LDKNetworkGraph o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = NetworkGraph_clone(&o_conv);
        LDKCResult_NetworkGraphDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NetworkGraphDecodeErrorZ), "LDKCResult_NetworkGraphDecodeErrorZ");
        *ret_conv = CResult_NetworkGraphDecodeErrorZ_ok(o_conv);
@@ -15558,12 +17036,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NetworkGraphDecode
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_NetworkGraphDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NetworkGraphDecodeErrorZ), "LDKCResult_NetworkGraphDecodeErrorZ");
        *ret_conv = CResult_NetworkGraphDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NetworkGraphDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_NetworkGraphDecodeErrorZ* o_conv = (LDKCResult_NetworkGraphDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_NetworkGraphDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NetworkGraphDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -15573,6 +17058,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NetworkGraphDecodeErr
        CResult_NetworkGraphDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_NetworkGraphDecodeErrorZ_clone_ptr(LDKCResult_NetworkGraphDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_NetworkGraphDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NetworkGraphDecodeErrorZ), "LDKCResult_NetworkGraphDecodeErrorZ");
+       *ret_conv = CResult_NetworkGraphDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NetworkGraphDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_NetworkGraphDecodeErrorZ* arg_conv = (LDKCResult_NetworkGraphDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_NetworkGraphDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NetworkGraphDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_NetworkGraphDecodeErrorZ* orig_conv = (LDKCResult_NetworkGraphDecodeErrorZ*)(orig & ~1);
        LDKCResult_NetworkGraphDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NetworkGraphDecodeErrorZ), "LDKCResult_NetworkGraphDecodeErrorZ");
@@ -15619,6 +17115,18 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1NetAddressZZ_1f
        COption_CVec_NetAddressZZ_free(_res_conv);
 }
 
+static inline uint64_t COption_CVec_NetAddressZZ_clone_ptr(LDKCOption_CVec_NetAddressZZ *NONNULL_PTR arg) {
+       LDKCOption_CVec_NetAddressZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_NetAddressZZ), "LDKCOption_CVec_NetAddressZZ");
+       *ret_copy = COption_CVec_NetAddressZZ_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1NetAddressZZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCOption_CVec_NetAddressZZ* arg_conv = (LDKCOption_CVec_NetAddressZZ*)arg;
+       int64_t ret_val = COption_CVec_NetAddressZZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1NetAddressZZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCOption_CVec_NetAddressZZ* orig_conv = (LDKCOption_CVec_NetAddressZZ*)orig;
        LDKCOption_CVec_NetAddressZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_NetAddressZZ), "LDKCOption_CVec_NetAddressZZ");
@@ -15641,12 +17149,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NetAddressDecodeEr
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_NetAddressDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NetAddressDecodeErrorZ), "LDKCResult_NetAddressDecodeErrorZ");
        *ret_conv = CResult_NetAddressDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NetAddressDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_NetAddressDecodeErrorZ* o_conv = (LDKCResult_NetAddressDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_NetAddressDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NetAddressDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -15656,6 +17171,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NetAddressDecodeError
        CResult_NetAddressDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_NetAddressDecodeErrorZ_clone_ptr(LDKCResult_NetAddressDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_NetAddressDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NetAddressDecodeErrorZ), "LDKCResult_NetAddressDecodeErrorZ");
+       *ret_conv = CResult_NetAddressDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NetAddressDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_NetAddressDecodeErrorZ* arg_conv = (LDKCResult_NetAddressDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_NetAddressDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NetAddressDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_NetAddressDecodeErrorZ* orig_conv = (LDKCResult_NetAddressDecodeErrorZ*)(orig & ~1);
        LDKCResult_NetAddressDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NetAddressDecodeErrorZ), "LDKCResult_NetAddressDecodeErrorZ");
@@ -15676,6 +17202,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1UpdateAddHTLCZ_1free(JNI
                LDKUpdateAddHTLC _res_conv_15_conv;
                _res_conv_15_conv.inner = (void*)(_res_conv_15 & (~1));
                _res_conv_15_conv.is_owned = (_res_conv_15 & 1) || (_res_conv_15 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_15_conv);
                _res_constr.data[p] = _res_conv_15_conv;
        }
        (*env)->ReleaseLongArrayElements(env, _res, _res_vals, 0);
@@ -15695,6 +17222,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1UpdateFulfillHTLCZ_1free
                LDKUpdateFulfillHTLC _res_conv_19_conv;
                _res_conv_19_conv.inner = (void*)(_res_conv_19 & (~1));
                _res_conv_19_conv.is_owned = (_res_conv_19 & 1) || (_res_conv_19 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_19_conv);
                _res_constr.data[t] = _res_conv_19_conv;
        }
        (*env)->ReleaseLongArrayElements(env, _res, _res_vals, 0);
@@ -15714,6 +17242,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1UpdateFailHTLCZ_1free(JN
                LDKUpdateFailHTLC _res_conv_16_conv;
                _res_conv_16_conv.inner = (void*)(_res_conv_16 & (~1));
                _res_conv_16_conv.is_owned = (_res_conv_16 & 1) || (_res_conv_16 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_16_conv);
                _res_constr.data[q] = _res_conv_16_conv;
        }
        (*env)->ReleaseLongArrayElements(env, _res, _res_vals, 0);
@@ -15733,6 +17262,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1UpdateFailMalformedHTLCZ
                LDKUpdateFailMalformedHTLC _res_conv_25_conv;
                _res_conv_25_conv.inner = (void*)(_res_conv_25 & (~1));
                _res_conv_25_conv.is_owned = (_res_conv_25 & 1) || (_res_conv_25 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_25_conv);
                _res_constr.data[z] = _res_conv_25_conv;
        }
        (*env)->ReleaseLongArrayElements(env, _res, _res_vals, 0);
@@ -15743,6 +17273,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1AcceptChannelDecod
        LDKAcceptChannel o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = AcceptChannel_clone(&o_conv);
        LDKCResult_AcceptChannelDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_AcceptChannelDecodeErrorZ), "LDKCResult_AcceptChannelDecodeErrorZ");
        *ret_conv = CResult_AcceptChannelDecodeErrorZ_ok(o_conv);
@@ -15753,12 +17284,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1AcceptChannelDecod
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_AcceptChannelDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_AcceptChannelDecodeErrorZ), "LDKCResult_AcceptChannelDecodeErrorZ");
        *ret_conv = CResult_AcceptChannelDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1AcceptChannelDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_AcceptChannelDecodeErrorZ* o_conv = (LDKCResult_AcceptChannelDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_AcceptChannelDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1AcceptChannelDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -15768,6 +17306,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1AcceptChannelDecodeEr
        CResult_AcceptChannelDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_AcceptChannelDecodeErrorZ_clone_ptr(LDKCResult_AcceptChannelDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_AcceptChannelDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_AcceptChannelDecodeErrorZ), "LDKCResult_AcceptChannelDecodeErrorZ");
+       *ret_conv = CResult_AcceptChannelDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1AcceptChannelDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_AcceptChannelDecodeErrorZ* arg_conv = (LDKCResult_AcceptChannelDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_AcceptChannelDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1AcceptChannelDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_AcceptChannelDecodeErrorZ* orig_conv = (LDKCResult_AcceptChannelDecodeErrorZ*)(orig & ~1);
        LDKCResult_AcceptChannelDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_AcceptChannelDecodeErrorZ), "LDKCResult_AcceptChannelDecodeErrorZ");
@@ -15779,6 +17328,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1AnnouncementSignat
        LDKAnnouncementSignatures o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = AnnouncementSignatures_clone(&o_conv);
        LDKCResult_AnnouncementSignaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_AnnouncementSignaturesDecodeErrorZ), "LDKCResult_AnnouncementSignaturesDecodeErrorZ");
        *ret_conv = CResult_AnnouncementSignaturesDecodeErrorZ_ok(o_conv);
@@ -15789,12 +17339,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1AnnouncementSignat
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_AnnouncementSignaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_AnnouncementSignaturesDecodeErrorZ), "LDKCResult_AnnouncementSignaturesDecodeErrorZ");
        *ret_conv = CResult_AnnouncementSignaturesDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1AnnouncementSignaturesDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_AnnouncementSignaturesDecodeErrorZ* o_conv = (LDKCResult_AnnouncementSignaturesDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_AnnouncementSignaturesDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1AnnouncementSignaturesDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -15804,6 +17361,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1AnnouncementSignature
        CResult_AnnouncementSignaturesDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_AnnouncementSignaturesDecodeErrorZ_clone_ptr(LDKCResult_AnnouncementSignaturesDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_AnnouncementSignaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_AnnouncementSignaturesDecodeErrorZ), "LDKCResult_AnnouncementSignaturesDecodeErrorZ");
+       *ret_conv = CResult_AnnouncementSignaturesDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1AnnouncementSignaturesDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_AnnouncementSignaturesDecodeErrorZ* arg_conv = (LDKCResult_AnnouncementSignaturesDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_AnnouncementSignaturesDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1AnnouncementSignaturesDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_AnnouncementSignaturesDecodeErrorZ* orig_conv = (LDKCResult_AnnouncementSignaturesDecodeErrorZ*)(orig & ~1);
        LDKCResult_AnnouncementSignaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_AnnouncementSignaturesDecodeErrorZ), "LDKCResult_AnnouncementSignaturesDecodeErrorZ");
@@ -15815,6 +17383,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelReestablish
        LDKChannelReestablish o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ChannelReestablish_clone(&o_conv);
        LDKCResult_ChannelReestablishDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelReestablishDecodeErrorZ), "LDKCResult_ChannelReestablishDecodeErrorZ");
        *ret_conv = CResult_ChannelReestablishDecodeErrorZ_ok(o_conv);
@@ -15825,12 +17394,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelReestablish
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ChannelReestablishDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelReestablishDecodeErrorZ), "LDKCResult_ChannelReestablishDecodeErrorZ");
        *ret_conv = CResult_ChannelReestablishDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelReestablishDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ChannelReestablishDecodeErrorZ* o_conv = (LDKCResult_ChannelReestablishDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ChannelReestablishDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelReestablishDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -15840,6 +17416,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelReestablishDec
        CResult_ChannelReestablishDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ChannelReestablishDecodeErrorZ_clone_ptr(LDKCResult_ChannelReestablishDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ChannelReestablishDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelReestablishDecodeErrorZ), "LDKCResult_ChannelReestablishDecodeErrorZ");
+       *ret_conv = CResult_ChannelReestablishDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelReestablishDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_ChannelReestablishDecodeErrorZ* arg_conv = (LDKCResult_ChannelReestablishDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ChannelReestablishDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelReestablishDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_ChannelReestablishDecodeErrorZ* orig_conv = (LDKCResult_ChannelReestablishDecodeErrorZ*)(orig & ~1);
        LDKCResult_ChannelReestablishDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelReestablishDecodeErrorZ), "LDKCResult_ChannelReestablishDecodeErrorZ");
@@ -15851,6 +17438,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ClosingSignedDecod
        LDKClosingSigned o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ClosingSigned_clone(&o_conv);
        LDKCResult_ClosingSignedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ClosingSignedDecodeErrorZ), "LDKCResult_ClosingSignedDecodeErrorZ");
        *ret_conv = CResult_ClosingSignedDecodeErrorZ_ok(o_conv);
@@ -15861,12 +17449,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ClosingSignedDecod
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ClosingSignedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ClosingSignedDecodeErrorZ), "LDKCResult_ClosingSignedDecodeErrorZ");
        *ret_conv = CResult_ClosingSignedDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ClosingSignedDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ClosingSignedDecodeErrorZ* o_conv = (LDKCResult_ClosingSignedDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ClosingSignedDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ClosingSignedDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -15876,6 +17471,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ClosingSignedDecodeEr
        CResult_ClosingSignedDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ClosingSignedDecodeErrorZ_clone_ptr(LDKCResult_ClosingSignedDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ClosingSignedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ClosingSignedDecodeErrorZ), "LDKCResult_ClosingSignedDecodeErrorZ");
+       *ret_conv = CResult_ClosingSignedDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ClosingSignedDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_ClosingSignedDecodeErrorZ* arg_conv = (LDKCResult_ClosingSignedDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ClosingSignedDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ClosingSignedDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_ClosingSignedDecodeErrorZ* orig_conv = (LDKCResult_ClosingSignedDecodeErrorZ*)(orig & ~1);
        LDKCResult_ClosingSignedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ClosingSignedDecodeErrorZ), "LDKCResult_ClosingSignedDecodeErrorZ");
@@ -15887,6 +17493,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ClosingSignedFeeRa
        LDKClosingSignedFeeRange o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ClosingSignedFeeRange_clone(&o_conv);
        LDKCResult_ClosingSignedFeeRangeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ClosingSignedFeeRangeDecodeErrorZ), "LDKCResult_ClosingSignedFeeRangeDecodeErrorZ");
        *ret_conv = CResult_ClosingSignedFeeRangeDecodeErrorZ_ok(o_conv);
@@ -15897,12 +17504,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ClosingSignedFeeRa
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ClosingSignedFeeRangeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ClosingSignedFeeRangeDecodeErrorZ), "LDKCResult_ClosingSignedFeeRangeDecodeErrorZ");
        *ret_conv = CResult_ClosingSignedFeeRangeDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ClosingSignedFeeRangeDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ClosingSignedFeeRangeDecodeErrorZ* o_conv = (LDKCResult_ClosingSignedFeeRangeDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ClosingSignedFeeRangeDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ClosingSignedFeeRangeDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -15912,6 +17526,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ClosingSignedFeeRange
        CResult_ClosingSignedFeeRangeDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ClosingSignedFeeRangeDecodeErrorZ_clone_ptr(LDKCResult_ClosingSignedFeeRangeDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ClosingSignedFeeRangeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ClosingSignedFeeRangeDecodeErrorZ), "LDKCResult_ClosingSignedFeeRangeDecodeErrorZ");
+       *ret_conv = CResult_ClosingSignedFeeRangeDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ClosingSignedFeeRangeDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_ClosingSignedFeeRangeDecodeErrorZ* arg_conv = (LDKCResult_ClosingSignedFeeRangeDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ClosingSignedFeeRangeDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ClosingSignedFeeRangeDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_ClosingSignedFeeRangeDecodeErrorZ* orig_conv = (LDKCResult_ClosingSignedFeeRangeDecodeErrorZ*)(orig & ~1);
        LDKCResult_ClosingSignedFeeRangeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ClosingSignedFeeRangeDecodeErrorZ), "LDKCResult_ClosingSignedFeeRangeDecodeErrorZ");
@@ -15923,6 +17548,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CommitmentSignedDe
        LDKCommitmentSigned o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = CommitmentSigned_clone(&o_conv);
        LDKCResult_CommitmentSignedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CommitmentSignedDecodeErrorZ), "LDKCResult_CommitmentSignedDecodeErrorZ");
        *ret_conv = CResult_CommitmentSignedDecodeErrorZ_ok(o_conv);
@@ -15933,12 +17559,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CommitmentSignedDe
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_CommitmentSignedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CommitmentSignedDecodeErrorZ), "LDKCResult_CommitmentSignedDecodeErrorZ");
        *ret_conv = CResult_CommitmentSignedDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1CommitmentSignedDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_CommitmentSignedDecodeErrorZ* o_conv = (LDKCResult_CommitmentSignedDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_CommitmentSignedDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CommitmentSignedDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -15948,6 +17581,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CommitmentSignedDecod
        CResult_CommitmentSignedDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_CommitmentSignedDecodeErrorZ_clone_ptr(LDKCResult_CommitmentSignedDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_CommitmentSignedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CommitmentSignedDecodeErrorZ), "LDKCResult_CommitmentSignedDecodeErrorZ");
+       *ret_conv = CResult_CommitmentSignedDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CommitmentSignedDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_CommitmentSignedDecodeErrorZ* arg_conv = (LDKCResult_CommitmentSignedDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_CommitmentSignedDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1CommitmentSignedDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_CommitmentSignedDecodeErrorZ* orig_conv = (LDKCResult_CommitmentSignedDecodeErrorZ*)(orig & ~1);
        LDKCResult_CommitmentSignedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CommitmentSignedDecodeErrorZ), "LDKCResult_CommitmentSignedDecodeErrorZ");
@@ -15959,6 +17603,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1FundingCreatedDeco
        LDKFundingCreated o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = FundingCreated_clone(&o_conv);
        LDKCResult_FundingCreatedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FundingCreatedDecodeErrorZ), "LDKCResult_FundingCreatedDecodeErrorZ");
        *ret_conv = CResult_FundingCreatedDecodeErrorZ_ok(o_conv);
@@ -15969,12 +17614,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1FundingCreatedDeco
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_FundingCreatedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FundingCreatedDecodeErrorZ), "LDKCResult_FundingCreatedDecodeErrorZ");
        *ret_conv = CResult_FundingCreatedDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1FundingCreatedDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_FundingCreatedDecodeErrorZ* o_conv = (LDKCResult_FundingCreatedDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_FundingCreatedDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1FundingCreatedDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -15984,6 +17636,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1FundingCreatedDecodeE
        CResult_FundingCreatedDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_FundingCreatedDecodeErrorZ_clone_ptr(LDKCResult_FundingCreatedDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_FundingCreatedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FundingCreatedDecodeErrorZ), "LDKCResult_FundingCreatedDecodeErrorZ");
+       *ret_conv = CResult_FundingCreatedDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1FundingCreatedDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_FundingCreatedDecodeErrorZ* arg_conv = (LDKCResult_FundingCreatedDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_FundingCreatedDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1FundingCreatedDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_FundingCreatedDecodeErrorZ* orig_conv = (LDKCResult_FundingCreatedDecodeErrorZ*)(orig & ~1);
        LDKCResult_FundingCreatedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FundingCreatedDecodeErrorZ), "LDKCResult_FundingCreatedDecodeErrorZ");
@@ -15995,6 +17658,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1FundingSignedDecod
        LDKFundingSigned o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = FundingSigned_clone(&o_conv);
        LDKCResult_FundingSignedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FundingSignedDecodeErrorZ), "LDKCResult_FundingSignedDecodeErrorZ");
        *ret_conv = CResult_FundingSignedDecodeErrorZ_ok(o_conv);
@@ -16005,12 +17669,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1FundingSignedDecod
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_FundingSignedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FundingSignedDecodeErrorZ), "LDKCResult_FundingSignedDecodeErrorZ");
        *ret_conv = CResult_FundingSignedDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1FundingSignedDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_FundingSignedDecodeErrorZ* o_conv = (LDKCResult_FundingSignedDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_FundingSignedDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1FundingSignedDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -16020,6 +17691,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1FundingSignedDecodeEr
        CResult_FundingSignedDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_FundingSignedDecodeErrorZ_clone_ptr(LDKCResult_FundingSignedDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_FundingSignedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FundingSignedDecodeErrorZ), "LDKCResult_FundingSignedDecodeErrorZ");
+       *ret_conv = CResult_FundingSignedDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1FundingSignedDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_FundingSignedDecodeErrorZ* arg_conv = (LDKCResult_FundingSignedDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_FundingSignedDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1FundingSignedDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_FundingSignedDecodeErrorZ* orig_conv = (LDKCResult_FundingSignedDecodeErrorZ*)(orig & ~1);
        LDKCResult_FundingSignedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FundingSignedDecodeErrorZ), "LDKCResult_FundingSignedDecodeErrorZ");
@@ -16031,6 +17713,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1FundingLockedDecod
        LDKFundingLocked o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = FundingLocked_clone(&o_conv);
        LDKCResult_FundingLockedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FundingLockedDecodeErrorZ), "LDKCResult_FundingLockedDecodeErrorZ");
        *ret_conv = CResult_FundingLockedDecodeErrorZ_ok(o_conv);
@@ -16041,12 +17724,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1FundingLockedDecod
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_FundingLockedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FundingLockedDecodeErrorZ), "LDKCResult_FundingLockedDecodeErrorZ");
        *ret_conv = CResult_FundingLockedDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1FundingLockedDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_FundingLockedDecodeErrorZ* o_conv = (LDKCResult_FundingLockedDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_FundingLockedDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1FundingLockedDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -16056,6 +17746,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1FundingLockedDecodeEr
        CResult_FundingLockedDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_FundingLockedDecodeErrorZ_clone_ptr(LDKCResult_FundingLockedDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_FundingLockedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FundingLockedDecodeErrorZ), "LDKCResult_FundingLockedDecodeErrorZ");
+       *ret_conv = CResult_FundingLockedDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1FundingLockedDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_FundingLockedDecodeErrorZ* arg_conv = (LDKCResult_FundingLockedDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_FundingLockedDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1FundingLockedDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_FundingLockedDecodeErrorZ* orig_conv = (LDKCResult_FundingLockedDecodeErrorZ*)(orig & ~1);
        LDKCResult_FundingLockedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FundingLockedDecodeErrorZ), "LDKCResult_FundingLockedDecodeErrorZ");
@@ -16067,6 +17768,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1InitDecodeErrorZ_1
        LDKInit o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = Init_clone(&o_conv);
        LDKCResult_InitDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InitDecodeErrorZ), "LDKCResult_InitDecodeErrorZ");
        *ret_conv = CResult_InitDecodeErrorZ_ok(o_conv);
@@ -16077,12 +17779,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1InitDecodeErrorZ_1
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_InitDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InitDecodeErrorZ), "LDKCResult_InitDecodeErrorZ");
        *ret_conv = CResult_InitDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1InitDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_InitDecodeErrorZ* o_conv = (LDKCResult_InitDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_InitDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1InitDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -16092,6 +17801,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1InitDecodeErrorZ_1fre
        CResult_InitDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_InitDecodeErrorZ_clone_ptr(LDKCResult_InitDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_InitDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InitDecodeErrorZ), "LDKCResult_InitDecodeErrorZ");
+       *ret_conv = CResult_InitDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1InitDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_InitDecodeErrorZ* arg_conv = (LDKCResult_InitDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_InitDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1InitDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_InitDecodeErrorZ* orig_conv = (LDKCResult_InitDecodeErrorZ*)(orig & ~1);
        LDKCResult_InitDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InitDecodeErrorZ), "LDKCResult_InitDecodeErrorZ");
@@ -16103,6 +17823,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1OpenChannelDecodeE
        LDKOpenChannel o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = OpenChannel_clone(&o_conv);
        LDKCResult_OpenChannelDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OpenChannelDecodeErrorZ), "LDKCResult_OpenChannelDecodeErrorZ");
        *ret_conv = CResult_OpenChannelDecodeErrorZ_ok(o_conv);
@@ -16113,12 +17834,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1OpenChannelDecodeE
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_OpenChannelDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OpenChannelDecodeErrorZ), "LDKCResult_OpenChannelDecodeErrorZ");
        *ret_conv = CResult_OpenChannelDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1OpenChannelDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_OpenChannelDecodeErrorZ* o_conv = (LDKCResult_OpenChannelDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_OpenChannelDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1OpenChannelDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -16128,6 +17856,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1OpenChannelDecodeErro
        CResult_OpenChannelDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_OpenChannelDecodeErrorZ_clone_ptr(LDKCResult_OpenChannelDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_OpenChannelDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OpenChannelDecodeErrorZ), "LDKCResult_OpenChannelDecodeErrorZ");
+       *ret_conv = CResult_OpenChannelDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1OpenChannelDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_OpenChannelDecodeErrorZ* arg_conv = (LDKCResult_OpenChannelDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_OpenChannelDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1OpenChannelDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_OpenChannelDecodeErrorZ* orig_conv = (LDKCResult_OpenChannelDecodeErrorZ*)(orig & ~1);
        LDKCResult_OpenChannelDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OpenChannelDecodeErrorZ), "LDKCResult_OpenChannelDecodeErrorZ");
@@ -16139,6 +17878,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RevokeAndACKDecode
        LDKRevokeAndACK o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = RevokeAndACK_clone(&o_conv);
        LDKCResult_RevokeAndACKDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RevokeAndACKDecodeErrorZ), "LDKCResult_RevokeAndACKDecodeErrorZ");
        *ret_conv = CResult_RevokeAndACKDecodeErrorZ_ok(o_conv);
@@ -16149,12 +17889,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RevokeAndACKDecode
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_RevokeAndACKDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RevokeAndACKDecodeErrorZ), "LDKCResult_RevokeAndACKDecodeErrorZ");
        *ret_conv = CResult_RevokeAndACKDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1RevokeAndACKDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_RevokeAndACKDecodeErrorZ* o_conv = (LDKCResult_RevokeAndACKDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_RevokeAndACKDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RevokeAndACKDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -16164,6 +17911,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RevokeAndACKDecodeErr
        CResult_RevokeAndACKDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_RevokeAndACKDecodeErrorZ_clone_ptr(LDKCResult_RevokeAndACKDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_RevokeAndACKDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RevokeAndACKDecodeErrorZ), "LDKCResult_RevokeAndACKDecodeErrorZ");
+       *ret_conv = CResult_RevokeAndACKDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RevokeAndACKDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_RevokeAndACKDecodeErrorZ* arg_conv = (LDKCResult_RevokeAndACKDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_RevokeAndACKDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1RevokeAndACKDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_RevokeAndACKDecodeErrorZ* orig_conv = (LDKCResult_RevokeAndACKDecodeErrorZ*)(orig & ~1);
        LDKCResult_RevokeAndACKDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RevokeAndACKDecodeErrorZ), "LDKCResult_RevokeAndACKDecodeErrorZ");
@@ -16175,6 +17933,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownDecodeErro
        LDKShutdown o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = Shutdown_clone(&o_conv);
        LDKCResult_ShutdownDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ShutdownDecodeErrorZ), "LDKCResult_ShutdownDecodeErrorZ");
        *ret_conv = CResult_ShutdownDecodeErrorZ_ok(o_conv);
@@ -16185,12 +17944,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownDecodeErro
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ShutdownDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ShutdownDecodeErrorZ), "LDKCResult_ShutdownDecodeErrorZ");
        *ret_conv = CResult_ShutdownDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ShutdownDecodeErrorZ* o_conv = (LDKCResult_ShutdownDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ShutdownDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -16200,6 +17966,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownDecodeErrorZ_
        CResult_ShutdownDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ShutdownDecodeErrorZ_clone_ptr(LDKCResult_ShutdownDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ShutdownDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ShutdownDecodeErrorZ), "LDKCResult_ShutdownDecodeErrorZ");
+       *ret_conv = CResult_ShutdownDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_ShutdownDecodeErrorZ* arg_conv = (LDKCResult_ShutdownDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ShutdownDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_ShutdownDecodeErrorZ* orig_conv = (LDKCResult_ShutdownDecodeErrorZ*)(orig & ~1);
        LDKCResult_ShutdownDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ShutdownDecodeErrorZ), "LDKCResult_ShutdownDecodeErrorZ");
@@ -16211,6 +17988,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFailHTLCDeco
        LDKUpdateFailHTLC o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = UpdateFailHTLC_clone(&o_conv);
        LDKCResult_UpdateFailHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFailHTLCDecodeErrorZ), "LDKCResult_UpdateFailHTLCDecodeErrorZ");
        *ret_conv = CResult_UpdateFailHTLCDecodeErrorZ_ok(o_conv);
@@ -16221,12 +17999,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFailHTLCDeco
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_UpdateFailHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFailHTLCDecodeErrorZ), "LDKCResult_UpdateFailHTLCDecodeErrorZ");
        *ret_conv = CResult_UpdateFailHTLCDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFailHTLCDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_UpdateFailHTLCDecodeErrorZ* o_conv = (LDKCResult_UpdateFailHTLCDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_UpdateFailHTLCDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFailHTLCDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -16236,6 +18021,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFailHTLCDecodeE
        CResult_UpdateFailHTLCDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_UpdateFailHTLCDecodeErrorZ_clone_ptr(LDKCResult_UpdateFailHTLCDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_UpdateFailHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFailHTLCDecodeErrorZ), "LDKCResult_UpdateFailHTLCDecodeErrorZ");
+       *ret_conv = CResult_UpdateFailHTLCDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFailHTLCDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_UpdateFailHTLCDecodeErrorZ* arg_conv = (LDKCResult_UpdateFailHTLCDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_UpdateFailHTLCDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFailHTLCDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_UpdateFailHTLCDecodeErrorZ* orig_conv = (LDKCResult_UpdateFailHTLCDecodeErrorZ*)(orig & ~1);
        LDKCResult_UpdateFailHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFailHTLCDecodeErrorZ), "LDKCResult_UpdateFailHTLCDecodeErrorZ");
@@ -16247,6 +18043,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFailMalforme
        LDKUpdateFailMalformedHTLC o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = UpdateFailMalformedHTLC_clone(&o_conv);
        LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ), "LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ");
        *ret_conv = CResult_UpdateFailMalformedHTLCDecodeErrorZ_ok(o_conv);
@@ -16257,12 +18054,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFailMalforme
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ), "LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ");
        *ret_conv = CResult_UpdateFailMalformedHTLCDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFailMalformedHTLCDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ* o_conv = (LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_UpdateFailMalformedHTLCDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFailMalformedHTLCDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -16272,6 +18076,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFailMalformedHT
        CResult_UpdateFailMalformedHTLCDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_UpdateFailMalformedHTLCDecodeErrorZ_clone_ptr(LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ), "LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ");
+       *ret_conv = CResult_UpdateFailMalformedHTLCDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFailMalformedHTLCDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ* arg_conv = (LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_UpdateFailMalformedHTLCDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFailMalformedHTLCDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ* orig_conv = (LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ*)(orig & ~1);
        LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ), "LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ");
@@ -16283,6 +18098,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFeeDecodeErr
        LDKUpdateFee o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = UpdateFee_clone(&o_conv);
        LDKCResult_UpdateFeeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFeeDecodeErrorZ), "LDKCResult_UpdateFeeDecodeErrorZ");
        *ret_conv = CResult_UpdateFeeDecodeErrorZ_ok(o_conv);
@@ -16293,12 +18109,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFeeDecodeErr
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_UpdateFeeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFeeDecodeErrorZ), "LDKCResult_UpdateFeeDecodeErrorZ");
        *ret_conv = CResult_UpdateFeeDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFeeDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_UpdateFeeDecodeErrorZ* o_conv = (LDKCResult_UpdateFeeDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_UpdateFeeDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFeeDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -16308,6 +18131,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFeeDecodeErrorZ
        CResult_UpdateFeeDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_UpdateFeeDecodeErrorZ_clone_ptr(LDKCResult_UpdateFeeDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_UpdateFeeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFeeDecodeErrorZ), "LDKCResult_UpdateFeeDecodeErrorZ");
+       *ret_conv = CResult_UpdateFeeDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFeeDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_UpdateFeeDecodeErrorZ* arg_conv = (LDKCResult_UpdateFeeDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_UpdateFeeDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFeeDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_UpdateFeeDecodeErrorZ* orig_conv = (LDKCResult_UpdateFeeDecodeErrorZ*)(orig & ~1);
        LDKCResult_UpdateFeeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFeeDecodeErrorZ), "LDKCResult_UpdateFeeDecodeErrorZ");
@@ -16319,6 +18153,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFulfillHTLCD
        LDKUpdateFulfillHTLC o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = UpdateFulfillHTLC_clone(&o_conv);
        LDKCResult_UpdateFulfillHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFulfillHTLCDecodeErrorZ), "LDKCResult_UpdateFulfillHTLCDecodeErrorZ");
        *ret_conv = CResult_UpdateFulfillHTLCDecodeErrorZ_ok(o_conv);
@@ -16329,12 +18164,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFulfillHTLCD
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_UpdateFulfillHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFulfillHTLCDecodeErrorZ), "LDKCResult_UpdateFulfillHTLCDecodeErrorZ");
        *ret_conv = CResult_UpdateFulfillHTLCDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFulfillHTLCDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_UpdateFulfillHTLCDecodeErrorZ* o_conv = (LDKCResult_UpdateFulfillHTLCDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_UpdateFulfillHTLCDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFulfillHTLCDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -16344,6 +18186,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFulfillHTLCDeco
        CResult_UpdateFulfillHTLCDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_UpdateFulfillHTLCDecodeErrorZ_clone_ptr(LDKCResult_UpdateFulfillHTLCDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_UpdateFulfillHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFulfillHTLCDecodeErrorZ), "LDKCResult_UpdateFulfillHTLCDecodeErrorZ");
+       *ret_conv = CResult_UpdateFulfillHTLCDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFulfillHTLCDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_UpdateFulfillHTLCDecodeErrorZ* arg_conv = (LDKCResult_UpdateFulfillHTLCDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_UpdateFulfillHTLCDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFulfillHTLCDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_UpdateFulfillHTLCDecodeErrorZ* orig_conv = (LDKCResult_UpdateFulfillHTLCDecodeErrorZ*)(orig & ~1);
        LDKCResult_UpdateFulfillHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFulfillHTLCDecodeErrorZ), "LDKCResult_UpdateFulfillHTLCDecodeErrorZ");
@@ -16355,6 +18208,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateAddHTLCDecod
        LDKUpdateAddHTLC o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = UpdateAddHTLC_clone(&o_conv);
        LDKCResult_UpdateAddHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateAddHTLCDecodeErrorZ), "LDKCResult_UpdateAddHTLCDecodeErrorZ");
        *ret_conv = CResult_UpdateAddHTLCDecodeErrorZ_ok(o_conv);
@@ -16365,12 +18219,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateAddHTLCDecod
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_UpdateAddHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateAddHTLCDecodeErrorZ), "LDKCResult_UpdateAddHTLCDecodeErrorZ");
        *ret_conv = CResult_UpdateAddHTLCDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateAddHTLCDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_UpdateAddHTLCDecodeErrorZ* o_conv = (LDKCResult_UpdateAddHTLCDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_UpdateAddHTLCDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateAddHTLCDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -16380,6 +18241,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateAddHTLCDecodeEr
        CResult_UpdateAddHTLCDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_UpdateAddHTLCDecodeErrorZ_clone_ptr(LDKCResult_UpdateAddHTLCDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_UpdateAddHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateAddHTLCDecodeErrorZ), "LDKCResult_UpdateAddHTLCDecodeErrorZ");
+       *ret_conv = CResult_UpdateAddHTLCDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateAddHTLCDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_UpdateAddHTLCDecodeErrorZ* arg_conv = (LDKCResult_UpdateAddHTLCDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_UpdateAddHTLCDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateAddHTLCDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_UpdateAddHTLCDecodeErrorZ* orig_conv = (LDKCResult_UpdateAddHTLCDecodeErrorZ*)(orig & ~1);
        LDKCResult_UpdateAddHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateAddHTLCDecodeErrorZ), "LDKCResult_UpdateAddHTLCDecodeErrorZ");
@@ -16391,6 +18263,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PingDecodeErrorZ_1
        LDKPing o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = Ping_clone(&o_conv);
        LDKCResult_PingDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PingDecodeErrorZ), "LDKCResult_PingDecodeErrorZ");
        *ret_conv = CResult_PingDecodeErrorZ_ok(o_conv);
@@ -16401,12 +18274,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PingDecodeErrorZ_1
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_PingDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PingDecodeErrorZ), "LDKCResult_PingDecodeErrorZ");
        *ret_conv = CResult_PingDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PingDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_PingDecodeErrorZ* o_conv = (LDKCResult_PingDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_PingDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PingDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -16416,6 +18296,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PingDecodeErrorZ_1fre
        CResult_PingDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_PingDecodeErrorZ_clone_ptr(LDKCResult_PingDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_PingDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PingDecodeErrorZ), "LDKCResult_PingDecodeErrorZ");
+       *ret_conv = CResult_PingDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PingDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_PingDecodeErrorZ* arg_conv = (LDKCResult_PingDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_PingDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PingDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_PingDecodeErrorZ* orig_conv = (LDKCResult_PingDecodeErrorZ*)(orig & ~1);
        LDKCResult_PingDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PingDecodeErrorZ), "LDKCResult_PingDecodeErrorZ");
@@ -16427,6 +18318,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PongDecodeErrorZ_1
        LDKPong o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = Pong_clone(&o_conv);
        LDKCResult_PongDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PongDecodeErrorZ), "LDKCResult_PongDecodeErrorZ");
        *ret_conv = CResult_PongDecodeErrorZ_ok(o_conv);
@@ -16437,12 +18329,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PongDecodeErrorZ_1
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_PongDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PongDecodeErrorZ), "LDKCResult_PongDecodeErrorZ");
        *ret_conv = CResult_PongDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PongDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_PongDecodeErrorZ* o_conv = (LDKCResult_PongDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_PongDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PongDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -16452,6 +18351,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PongDecodeErrorZ_1fre
        CResult_PongDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_PongDecodeErrorZ_clone_ptr(LDKCResult_PongDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_PongDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PongDecodeErrorZ), "LDKCResult_PongDecodeErrorZ");
+       *ret_conv = CResult_PongDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PongDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_PongDecodeErrorZ* arg_conv = (LDKCResult_PongDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_PongDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1PongDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_PongDecodeErrorZ* orig_conv = (LDKCResult_PongDecodeErrorZ*)(orig & ~1);
        LDKCResult_PongDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PongDecodeErrorZ), "LDKCResult_PongDecodeErrorZ");
@@ -16463,6 +18373,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedChannelAnn
        LDKUnsignedChannelAnnouncement o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = UnsignedChannelAnnouncement_clone(&o_conv);
        LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ), "LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ");
        *ret_conv = CResult_UnsignedChannelAnnouncementDecodeErrorZ_ok(o_conv);
@@ -16473,12 +18384,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedChannelAnn
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ), "LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ");
        *ret_conv = CResult_UnsignedChannelAnnouncementDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedChannelAnnouncementDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ* o_conv = (LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_UnsignedChannelAnnouncementDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedChannelAnnouncementDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -16488,6 +18406,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedChannelAnnoun
        CResult_UnsignedChannelAnnouncementDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_UnsignedChannelAnnouncementDecodeErrorZ_clone_ptr(LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ), "LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ");
+       *ret_conv = CResult_UnsignedChannelAnnouncementDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedChannelAnnouncementDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ* arg_conv = (LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_UnsignedChannelAnnouncementDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedChannelAnnouncementDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ* orig_conv = (LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ*)(orig & ~1);
        LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ), "LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ");
@@ -16499,6 +18428,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelAnnouncemen
        LDKChannelAnnouncement o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ChannelAnnouncement_clone(&o_conv);
        LDKCResult_ChannelAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelAnnouncementDecodeErrorZ), "LDKCResult_ChannelAnnouncementDecodeErrorZ");
        *ret_conv = CResult_ChannelAnnouncementDecodeErrorZ_ok(o_conv);
@@ -16509,12 +18439,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelAnnouncemen
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ChannelAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelAnnouncementDecodeErrorZ), "LDKCResult_ChannelAnnouncementDecodeErrorZ");
        *ret_conv = CResult_ChannelAnnouncementDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelAnnouncementDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ChannelAnnouncementDecodeErrorZ* o_conv = (LDKCResult_ChannelAnnouncementDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ChannelAnnouncementDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelAnnouncementDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -16524,6 +18461,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelAnnouncementDe
        CResult_ChannelAnnouncementDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ChannelAnnouncementDecodeErrorZ_clone_ptr(LDKCResult_ChannelAnnouncementDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ChannelAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelAnnouncementDecodeErrorZ), "LDKCResult_ChannelAnnouncementDecodeErrorZ");
+       *ret_conv = CResult_ChannelAnnouncementDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelAnnouncementDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_ChannelAnnouncementDecodeErrorZ* arg_conv = (LDKCResult_ChannelAnnouncementDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ChannelAnnouncementDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelAnnouncementDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_ChannelAnnouncementDecodeErrorZ* orig_conv = (LDKCResult_ChannelAnnouncementDecodeErrorZ*)(orig & ~1);
        LDKCResult_ChannelAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelAnnouncementDecodeErrorZ), "LDKCResult_ChannelAnnouncementDecodeErrorZ");
@@ -16535,6 +18483,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedChannelUpd
        LDKUnsignedChannelUpdate o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = UnsignedChannelUpdate_clone(&o_conv);
        LDKCResult_UnsignedChannelUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedChannelUpdateDecodeErrorZ), "LDKCResult_UnsignedChannelUpdateDecodeErrorZ");
        *ret_conv = CResult_UnsignedChannelUpdateDecodeErrorZ_ok(o_conv);
@@ -16545,12 +18494,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedChannelUpd
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_UnsignedChannelUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedChannelUpdateDecodeErrorZ), "LDKCResult_UnsignedChannelUpdateDecodeErrorZ");
        *ret_conv = CResult_UnsignedChannelUpdateDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedChannelUpdateDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_UnsignedChannelUpdateDecodeErrorZ* o_conv = (LDKCResult_UnsignedChannelUpdateDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_UnsignedChannelUpdateDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedChannelUpdateDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -16560,6 +18516,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedChannelUpdate
        CResult_UnsignedChannelUpdateDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_UnsignedChannelUpdateDecodeErrorZ_clone_ptr(LDKCResult_UnsignedChannelUpdateDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_UnsignedChannelUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedChannelUpdateDecodeErrorZ), "LDKCResult_UnsignedChannelUpdateDecodeErrorZ");
+       *ret_conv = CResult_UnsignedChannelUpdateDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedChannelUpdateDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_UnsignedChannelUpdateDecodeErrorZ* arg_conv = (LDKCResult_UnsignedChannelUpdateDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_UnsignedChannelUpdateDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedChannelUpdateDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_UnsignedChannelUpdateDecodeErrorZ* orig_conv = (LDKCResult_UnsignedChannelUpdateDecodeErrorZ*)(orig & ~1);
        LDKCResult_UnsignedChannelUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedChannelUpdateDecodeErrorZ), "LDKCResult_UnsignedChannelUpdateDecodeErrorZ");
@@ -16571,6 +18538,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelUpdateDecod
        LDKChannelUpdate o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ChannelUpdate_clone(&o_conv);
        LDKCResult_ChannelUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelUpdateDecodeErrorZ), "LDKCResult_ChannelUpdateDecodeErrorZ");
        *ret_conv = CResult_ChannelUpdateDecodeErrorZ_ok(o_conv);
@@ -16581,12 +18549,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelUpdateDecod
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ChannelUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelUpdateDecodeErrorZ), "LDKCResult_ChannelUpdateDecodeErrorZ");
        *ret_conv = CResult_ChannelUpdateDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelUpdateDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ChannelUpdateDecodeErrorZ* o_conv = (LDKCResult_ChannelUpdateDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ChannelUpdateDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelUpdateDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -16596,6 +18571,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelUpdateDecodeEr
        CResult_ChannelUpdateDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ChannelUpdateDecodeErrorZ_clone_ptr(LDKCResult_ChannelUpdateDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ChannelUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelUpdateDecodeErrorZ), "LDKCResult_ChannelUpdateDecodeErrorZ");
+       *ret_conv = CResult_ChannelUpdateDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelUpdateDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_ChannelUpdateDecodeErrorZ* arg_conv = (LDKCResult_ChannelUpdateDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ChannelUpdateDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelUpdateDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_ChannelUpdateDecodeErrorZ* orig_conv = (LDKCResult_ChannelUpdateDecodeErrorZ*)(orig & ~1);
        LDKCResult_ChannelUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelUpdateDecodeErrorZ), "LDKCResult_ChannelUpdateDecodeErrorZ");
@@ -16607,6 +18593,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ErrorMessageDecode
        LDKErrorMessage o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ErrorMessage_clone(&o_conv);
        LDKCResult_ErrorMessageDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ErrorMessageDecodeErrorZ), "LDKCResult_ErrorMessageDecodeErrorZ");
        *ret_conv = CResult_ErrorMessageDecodeErrorZ_ok(o_conv);
@@ -16617,12 +18604,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ErrorMessageDecode
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ErrorMessageDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ErrorMessageDecodeErrorZ), "LDKCResult_ErrorMessageDecodeErrorZ");
        *ret_conv = CResult_ErrorMessageDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ErrorMessageDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ErrorMessageDecodeErrorZ* o_conv = (LDKCResult_ErrorMessageDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ErrorMessageDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ErrorMessageDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -16632,6 +18626,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ErrorMessageDecodeErr
        CResult_ErrorMessageDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ErrorMessageDecodeErrorZ_clone_ptr(LDKCResult_ErrorMessageDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ErrorMessageDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ErrorMessageDecodeErrorZ), "LDKCResult_ErrorMessageDecodeErrorZ");
+       *ret_conv = CResult_ErrorMessageDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ErrorMessageDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_ErrorMessageDecodeErrorZ* arg_conv = (LDKCResult_ErrorMessageDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ErrorMessageDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ErrorMessageDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_ErrorMessageDecodeErrorZ* orig_conv = (LDKCResult_ErrorMessageDecodeErrorZ*)(orig & ~1);
        LDKCResult_ErrorMessageDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ErrorMessageDecodeErrorZ), "LDKCResult_ErrorMessageDecodeErrorZ");
@@ -16643,6 +18648,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedNodeAnnoun
        LDKUnsignedNodeAnnouncement o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = UnsignedNodeAnnouncement_clone(&o_conv);
        LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ), "LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ");
        *ret_conv = CResult_UnsignedNodeAnnouncementDecodeErrorZ_ok(o_conv);
@@ -16653,12 +18659,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedNodeAnnoun
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ), "LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ");
        *ret_conv = CResult_UnsignedNodeAnnouncementDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedNodeAnnouncementDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ* o_conv = (LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_UnsignedNodeAnnouncementDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedNodeAnnouncementDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -16668,6 +18681,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedNodeAnnouncem
        CResult_UnsignedNodeAnnouncementDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_UnsignedNodeAnnouncementDecodeErrorZ_clone_ptr(LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ), "LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ");
+       *ret_conv = CResult_UnsignedNodeAnnouncementDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedNodeAnnouncementDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ* arg_conv = (LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_UnsignedNodeAnnouncementDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedNodeAnnouncementDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ* orig_conv = (LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ*)(orig & ~1);
        LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ), "LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ");
@@ -16679,6 +18703,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NodeAnnouncementDe
        LDKNodeAnnouncement o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = NodeAnnouncement_clone(&o_conv);
        LDKCResult_NodeAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeAnnouncementDecodeErrorZ), "LDKCResult_NodeAnnouncementDecodeErrorZ");
        *ret_conv = CResult_NodeAnnouncementDecodeErrorZ_ok(o_conv);
@@ -16689,12 +18714,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NodeAnnouncementDe
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_NodeAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeAnnouncementDecodeErrorZ), "LDKCResult_NodeAnnouncementDecodeErrorZ");
        *ret_conv = CResult_NodeAnnouncementDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NodeAnnouncementDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_NodeAnnouncementDecodeErrorZ* o_conv = (LDKCResult_NodeAnnouncementDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_NodeAnnouncementDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NodeAnnouncementDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -16704,6 +18736,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NodeAnnouncementDecod
        CResult_NodeAnnouncementDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_NodeAnnouncementDecodeErrorZ_clone_ptr(LDKCResult_NodeAnnouncementDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_NodeAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeAnnouncementDecodeErrorZ), "LDKCResult_NodeAnnouncementDecodeErrorZ");
+       *ret_conv = CResult_NodeAnnouncementDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NodeAnnouncementDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_NodeAnnouncementDecodeErrorZ* arg_conv = (LDKCResult_NodeAnnouncementDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_NodeAnnouncementDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1NodeAnnouncementDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_NodeAnnouncementDecodeErrorZ* orig_conv = (LDKCResult_NodeAnnouncementDecodeErrorZ*)(orig & ~1);
        LDKCResult_NodeAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeAnnouncementDecodeErrorZ), "LDKCResult_NodeAnnouncementDecodeErrorZ");
@@ -16715,6 +18758,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1QueryShortChannelI
        LDKQueryShortChannelIds o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = QueryShortChannelIds_clone(&o_conv);
        LDKCResult_QueryShortChannelIdsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_QueryShortChannelIdsDecodeErrorZ), "LDKCResult_QueryShortChannelIdsDecodeErrorZ");
        *ret_conv = CResult_QueryShortChannelIdsDecodeErrorZ_ok(o_conv);
@@ -16725,12 +18769,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1QueryShortChannelI
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_QueryShortChannelIdsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_QueryShortChannelIdsDecodeErrorZ), "LDKCResult_QueryShortChannelIdsDecodeErrorZ");
        *ret_conv = CResult_QueryShortChannelIdsDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1QueryShortChannelIdsDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_QueryShortChannelIdsDecodeErrorZ* o_conv = (LDKCResult_QueryShortChannelIdsDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_QueryShortChannelIdsDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1QueryShortChannelIdsDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -16740,6 +18791,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1QueryShortChannelIdsD
        CResult_QueryShortChannelIdsDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_QueryShortChannelIdsDecodeErrorZ_clone_ptr(LDKCResult_QueryShortChannelIdsDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_QueryShortChannelIdsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_QueryShortChannelIdsDecodeErrorZ), "LDKCResult_QueryShortChannelIdsDecodeErrorZ");
+       *ret_conv = CResult_QueryShortChannelIdsDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1QueryShortChannelIdsDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_QueryShortChannelIdsDecodeErrorZ* arg_conv = (LDKCResult_QueryShortChannelIdsDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_QueryShortChannelIdsDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1QueryShortChannelIdsDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_QueryShortChannelIdsDecodeErrorZ* orig_conv = (LDKCResult_QueryShortChannelIdsDecodeErrorZ*)(orig & ~1);
        LDKCResult_QueryShortChannelIdsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_QueryShortChannelIdsDecodeErrorZ), "LDKCResult_QueryShortChannelIdsDecodeErrorZ");
@@ -16751,6 +18813,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ReplyShortChannelI
        LDKReplyShortChannelIdsEnd o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ReplyShortChannelIdsEnd_clone(&o_conv);
        LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ), "LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ");
        *ret_conv = CResult_ReplyShortChannelIdsEndDecodeErrorZ_ok(o_conv);
@@ -16761,12 +18824,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ReplyShortChannelI
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ), "LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ");
        *ret_conv = CResult_ReplyShortChannelIdsEndDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ReplyShortChannelIdsEndDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ* o_conv = (LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ReplyShortChannelIdsEndDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ReplyShortChannelIdsEndDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -16776,6 +18846,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ReplyShortChannelIdsE
        CResult_ReplyShortChannelIdsEndDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ReplyShortChannelIdsEndDecodeErrorZ_clone_ptr(LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ), "LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ");
+       *ret_conv = CResult_ReplyShortChannelIdsEndDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ReplyShortChannelIdsEndDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ* arg_conv = (LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ReplyShortChannelIdsEndDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ReplyShortChannelIdsEndDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ* orig_conv = (LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ*)(orig & ~1);
        LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ), "LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ");
@@ -16787,6 +18868,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1QueryChannelRangeD
        LDKQueryChannelRange o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = QueryChannelRange_clone(&o_conv);
        LDKCResult_QueryChannelRangeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_QueryChannelRangeDecodeErrorZ), "LDKCResult_QueryChannelRangeDecodeErrorZ");
        *ret_conv = CResult_QueryChannelRangeDecodeErrorZ_ok(o_conv);
@@ -16797,12 +18879,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1QueryChannelRangeD
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_QueryChannelRangeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_QueryChannelRangeDecodeErrorZ), "LDKCResult_QueryChannelRangeDecodeErrorZ");
        *ret_conv = CResult_QueryChannelRangeDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1QueryChannelRangeDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_QueryChannelRangeDecodeErrorZ* o_conv = (LDKCResult_QueryChannelRangeDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_QueryChannelRangeDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1QueryChannelRangeDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -16812,6 +18901,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1QueryChannelRangeDeco
        CResult_QueryChannelRangeDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_QueryChannelRangeDecodeErrorZ_clone_ptr(LDKCResult_QueryChannelRangeDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_QueryChannelRangeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_QueryChannelRangeDecodeErrorZ), "LDKCResult_QueryChannelRangeDecodeErrorZ");
+       *ret_conv = CResult_QueryChannelRangeDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1QueryChannelRangeDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_QueryChannelRangeDecodeErrorZ* arg_conv = (LDKCResult_QueryChannelRangeDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_QueryChannelRangeDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1QueryChannelRangeDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_QueryChannelRangeDecodeErrorZ* orig_conv = (LDKCResult_QueryChannelRangeDecodeErrorZ*)(orig & ~1);
        LDKCResult_QueryChannelRangeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_QueryChannelRangeDecodeErrorZ), "LDKCResult_QueryChannelRangeDecodeErrorZ");
@@ -16823,6 +18923,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ReplyChannelRangeD
        LDKReplyChannelRange o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ReplyChannelRange_clone(&o_conv);
        LDKCResult_ReplyChannelRangeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReplyChannelRangeDecodeErrorZ), "LDKCResult_ReplyChannelRangeDecodeErrorZ");
        *ret_conv = CResult_ReplyChannelRangeDecodeErrorZ_ok(o_conv);
@@ -16833,12 +18934,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ReplyChannelRangeD
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ReplyChannelRangeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReplyChannelRangeDecodeErrorZ), "LDKCResult_ReplyChannelRangeDecodeErrorZ");
        *ret_conv = CResult_ReplyChannelRangeDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ReplyChannelRangeDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_ReplyChannelRangeDecodeErrorZ* o_conv = (LDKCResult_ReplyChannelRangeDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ReplyChannelRangeDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ReplyChannelRangeDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -16848,6 +18956,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ReplyChannelRangeDeco
        CResult_ReplyChannelRangeDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ReplyChannelRangeDecodeErrorZ_clone_ptr(LDKCResult_ReplyChannelRangeDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ReplyChannelRangeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReplyChannelRangeDecodeErrorZ), "LDKCResult_ReplyChannelRangeDecodeErrorZ");
+       *ret_conv = CResult_ReplyChannelRangeDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ReplyChannelRangeDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_ReplyChannelRangeDecodeErrorZ* arg_conv = (LDKCResult_ReplyChannelRangeDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ReplyChannelRangeDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1ReplyChannelRangeDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_ReplyChannelRangeDecodeErrorZ* orig_conv = (LDKCResult_ReplyChannelRangeDecodeErrorZ*)(orig & ~1);
        LDKCResult_ReplyChannelRangeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReplyChannelRangeDecodeErrorZ), "LDKCResult_ReplyChannelRangeDecodeErrorZ");
@@ -16859,6 +18978,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1GossipTimestampFil
        LDKGossipTimestampFilter o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = GossipTimestampFilter_clone(&o_conv);
        LDKCResult_GossipTimestampFilterDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_GossipTimestampFilterDecodeErrorZ), "LDKCResult_GossipTimestampFilterDecodeErrorZ");
        *ret_conv = CResult_GossipTimestampFilterDecodeErrorZ_ok(o_conv);
@@ -16869,12 +18989,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1GossipTimestampFil
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_GossipTimestampFilterDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_GossipTimestampFilterDecodeErrorZ), "LDKCResult_GossipTimestampFilterDecodeErrorZ");
        *ret_conv = CResult_GossipTimestampFilterDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1GossipTimestampFilterDecodeErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_GossipTimestampFilterDecodeErrorZ* o_conv = (LDKCResult_GossipTimestampFilterDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_GossipTimestampFilterDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1GossipTimestampFilterDecodeErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -16884,6 +19011,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1GossipTimestampFilter
        CResult_GossipTimestampFilterDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_GossipTimestampFilterDecodeErrorZ_clone_ptr(LDKCResult_GossipTimestampFilterDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_GossipTimestampFilterDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_GossipTimestampFilterDecodeErrorZ), "LDKCResult_GossipTimestampFilterDecodeErrorZ");
+       *ret_conv = CResult_GossipTimestampFilterDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1GossipTimestampFilterDecodeErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_GossipTimestampFilterDecodeErrorZ* arg_conv = (LDKCResult_GossipTimestampFilterDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_GossipTimestampFilterDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1GossipTimestampFilterDecodeErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_GossipTimestampFilterDecodeErrorZ* orig_conv = (LDKCResult_GossipTimestampFilterDecodeErrorZ*)(orig & ~1);
        LDKCResult_GossipTimestampFilterDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_GossipTimestampFilterDecodeErrorZ), "LDKCResult_GossipTimestampFilterDecodeErrorZ");
@@ -16895,6 +19033,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceSignOrCreat
        LDKInvoice o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = Invoice_clone(&o_conv);
        LDKCResult_InvoiceSignOrCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceSignOrCreationErrorZ), "LDKCResult_InvoiceSignOrCreationErrorZ");
        *ret_conv = CResult_InvoiceSignOrCreationErrorZ_ok(o_conv);
@@ -16911,6 +19050,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceSignOrCreat
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceSignOrCreationErrorZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_InvoiceSignOrCreationErrorZ* o_conv = (LDKCResult_InvoiceSignOrCreationErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_InvoiceSignOrCreationErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceSignOrCreationErrorZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -16920,6 +19065,17 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceSignOrCreation
        CResult_InvoiceSignOrCreationErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_InvoiceSignOrCreationErrorZ_clone_ptr(LDKCResult_InvoiceSignOrCreationErrorZ *NONNULL_PTR arg) {
+       LDKCResult_InvoiceSignOrCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceSignOrCreationErrorZ), "LDKCResult_InvoiceSignOrCreationErrorZ");
+       *ret_conv = CResult_InvoiceSignOrCreationErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceSignOrCreationErrorZ_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCResult_InvoiceSignOrCreationErrorZ* arg_conv = (LDKCResult_InvoiceSignOrCreationErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_InvoiceSignOrCreationErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceSignOrCreationErrorZ_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCResult_InvoiceSignOrCreationErrorZ* orig_conv = (LDKCResult_InvoiceSignOrCreationErrorZ*)(orig & ~1);
        LDKCResult_InvoiceSignOrCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceSignOrCreationErrorZ), "LDKCResult_InvoiceSignOrCreationErrorZ");
@@ -16961,6 +19117,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1LockedChannelMonit
        LDKLockedChannelMonitor o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        // Warning: we need a move here but no clone is available for LDKLockedChannelMonitor
        LDKCResult_LockedChannelMonitorNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_LockedChannelMonitorNoneZ), "LDKCResult_LockedChannelMonitorNoneZ");
        *ret_conv = CResult_LockedChannelMonitorNoneZ_ok(o_conv);
@@ -16973,6 +19130,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CResult_1LockedChannelMonit
        return (uint64_t)ret_conv;
 }
 
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1LockedChannelMonitorNoneZ_1is_1ok(JNIEnv *env, jclass clz, int64_t o) {
+       LDKCResult_LockedChannelMonitorNoneZ* o_conv = (LDKCResult_LockedChannelMonitorNoneZ*)(o & ~1);
+       jboolean ret_val = CResult_LockedChannelMonitorNoneZ_is_ok(o_conv);
+       return ret_val;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1LockedChannelMonitorNoneZ_1free(JNIEnv *env, jclass clz, int64_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -16995,6 +19158,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1OutPointZ_1free(JNIEnv *
                LDKOutPoint _res_conv_10_conv;
                _res_conv_10_conv.inner = (void*)(_res_conv_10 & (~1));
                _res_conv_10_conv.is_owned = (_res_conv_10 & 1) || (_res_conv_10 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_10_conv);
                _res_constr.data[k] = _res_conv_10_conv;
        }
        (*env)->ReleaseLongArrayElements(env, _res, _res_vals, 0);
@@ -17010,6 +19174,18 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentPurpose_1free(JNIEnv *e
        PaymentPurpose_free(this_ptr_conv);
 }
 
+static inline uint64_t PaymentPurpose_clone_ptr(LDKPaymentPurpose *NONNULL_PTR arg) {
+       LDKPaymentPurpose *ret_copy = MALLOC(sizeof(LDKPaymentPurpose), "LDKPaymentPurpose");
+       *ret_copy = PaymentPurpose_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentPurpose_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKPaymentPurpose* arg_conv = (LDKPaymentPurpose*)arg;
+       int64_t ret_val = PaymentPurpose_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentPurpose_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKPaymentPurpose* orig_conv = (LDKPaymentPurpose*)orig;
        LDKPaymentPurpose *ret_copy = MALLOC(sizeof(LDKPaymentPurpose), "LDKPaymentPurpose");
@@ -17050,6 +19226,18 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ClosureReason_1free(JNIEnv *en
        ClosureReason_free(this_ptr_conv);
 }
 
+static inline uint64_t ClosureReason_clone_ptr(LDKClosureReason *NONNULL_PTR arg) {
+       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
+       *ret_copy = ClosureReason_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClosureReason_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKClosureReason* arg_conv = (LDKClosureReason*)arg;
+       int64_t ret_val = ClosureReason_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClosureReason_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKClosureReason* orig_conv = (LDKClosureReason*)orig;
        LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
@@ -17118,6 +19306,16 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ClosureReason_1write(JN
        return ret_arr;
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClosureReason_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
+       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
+       LDKCResult_COption_ClosureReasonZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_ClosureReasonZDecodeErrorZ), "LDKCResult_COption_ClosureReasonZDecodeErrorZ");
+       *ret_conv = ClosureReason_read(ser_ref);
+       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
+       return (uint64_t)ret_conv;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Event_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
        if ((this_ptr & 1) != 0) return;
        void* this_ptr_ptr = (void*)(((uint64_t)this_ptr) & ~1);
@@ -17127,6 +19325,18 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Event_1free(JNIEnv *env, jclas
        Event_free(this_ptr_conv);
 }
 
+static inline uint64_t Event_clone_ptr(LDKEvent *NONNULL_PTR arg) {
+       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
+       *ret_copy = Event_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKEvent* arg_conv = (LDKEvent*)arg;
+       int64_t ret_val = Event_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKEvent* orig_conv = (LDKEvent*)orig;
        LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
@@ -17206,6 +19416,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1payment_1path_1faile
                LDKRouteHop path_conv_10_conv;
                path_conv_10_conv.inner = (void*)(path_conv_10 & (~1));
                path_conv_10_conv.is_owned = (path_conv_10 & 1) || (path_conv_10 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv_10_conv);
                path_conv_10_conv = RouteHop_clone(&path_conv_10_conv);
                path_constr.data[k] = path_conv_10_conv;
        }
@@ -17217,6 +19428,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1payment_1path_1faile
        LDKRouteParameters retry_conv;
        retry_conv.inner = (void*)(retry & (~1));
        retry_conv.is_owned = (retry & 1) || (retry == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(retry_conv);
        retry_conv = RouteParameters_clone(&retry_conv);
        LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
        *ret_copy = Event_payment_path_failed(payment_id_ref, payment_hash_ref, rejected_by_dest, network_update_conv, all_paths_failed, path_constr, short_channel_id_conv, retry_conv);
@@ -17303,6 +19515,16 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Event_1write(JNIEnv *en
        return ret_arr;
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Event_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
+       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
+       LDKCResult_COption_EventZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_EventZDecodeErrorZ), "LDKCResult_COption_EventZDecodeErrorZ");
+       *ret_conv = Event_read(ser_ref);
+       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
+       return (uint64_t)ret_conv;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MessageSendEvent_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
        if ((this_ptr & 1) != 0) return;
        void* this_ptr_ptr = (void*)(((uint64_t)this_ptr) & ~1);
@@ -17312,6 +19534,18 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MessageSendEvent_1free(JNIEnv
        MessageSendEvent_free(this_ptr_conv);
 }
 
+static inline uint64_t MessageSendEvent_clone_ptr(LDKMessageSendEvent *NONNULL_PTR arg) {
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MessageSendEvent_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKMessageSendEvent* arg_conv = (LDKMessageSendEvent*)arg;
+       int64_t ret_val = MessageSendEvent_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MessageSendEvent_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKMessageSendEvent* orig_conv = (LDKMessageSendEvent*)orig;
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
@@ -17327,6 +19561,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MessageSendEvent_1send_1acc
        LDKAcceptChannel msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = AcceptChannel_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_send_accept_channel(node_id_ref, msg_conv);
@@ -17341,6 +19576,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MessageSendEvent_1send_1ope
        LDKOpenChannel msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = OpenChannel_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_send_open_channel(node_id_ref, msg_conv);
@@ -17355,6 +19591,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MessageSendEvent_1send_1fun
        LDKFundingCreated msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = FundingCreated_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_send_funding_created(node_id_ref, msg_conv);
@@ -17369,6 +19606,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MessageSendEvent_1send_1fun
        LDKFundingSigned msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = FundingSigned_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_send_funding_signed(node_id_ref, msg_conv);
@@ -17383,6 +19621,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MessageSendEvent_1send_1fun
        LDKFundingLocked msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = FundingLocked_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_send_funding_locked(node_id_ref, msg_conv);
@@ -17397,6 +19636,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MessageSendEvent_1send_1ann
        LDKAnnouncementSignatures msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = AnnouncementSignatures_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_send_announcement_signatures(node_id_ref, msg_conv);
@@ -17411,6 +19651,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MessageSendEvent_1update_1h
        LDKCommitmentUpdate updates_conv;
        updates_conv.inner = (void*)(updates & (~1));
        updates_conv.is_owned = (updates & 1) || (updates == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(updates_conv);
        updates_conv = CommitmentUpdate_clone(&updates_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_update_htlcs(node_id_ref, updates_conv);
@@ -17425,6 +19666,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MessageSendEvent_1send_1rev
        LDKRevokeAndACK msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = RevokeAndACK_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_send_revoke_and_ack(node_id_ref, msg_conv);
@@ -17439,6 +19681,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MessageSendEvent_1send_1clo
        LDKClosingSigned msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = ClosingSigned_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_send_closing_signed(node_id_ref, msg_conv);
@@ -17453,6 +19696,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MessageSendEvent_1send_1shu
        LDKShutdown msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = Shutdown_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_send_shutdown(node_id_ref, msg_conv);
@@ -17467,6 +19711,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MessageSendEvent_1send_1cha
        LDKChannelReestablish msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = ChannelReestablish_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_send_channel_reestablish(node_id_ref, msg_conv);
@@ -17478,10 +19723,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MessageSendEvent_1broadcast
        LDKChannelAnnouncement msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = ChannelAnnouncement_clone(&msg_conv);
        LDKChannelUpdate update_msg_conv;
        update_msg_conv.inner = (void*)(update_msg & (~1));
        update_msg_conv.is_owned = (update_msg & 1) || (update_msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_msg_conv);
        update_msg_conv = ChannelUpdate_clone(&update_msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_broadcast_channel_announcement(msg_conv, update_msg_conv);
@@ -17493,6 +19740,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MessageSendEvent_1broadcast
        LDKNodeAnnouncement msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = NodeAnnouncement_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_broadcast_node_announcement(msg_conv);
@@ -17504,6 +19752,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MessageSendEvent_1broadcast
        LDKChannelUpdate msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = ChannelUpdate_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_broadcast_channel_update(msg_conv);
@@ -17518,6 +19767,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MessageSendEvent_1send_1cha
        LDKChannelUpdate msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = ChannelUpdate_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_send_channel_update(node_id_ref, msg_conv);
@@ -17546,6 +19796,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MessageSendEvent_1send_1cha
        LDKQueryChannelRange msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = QueryChannelRange_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_send_channel_range_query(node_id_ref, msg_conv);
@@ -17560,6 +19811,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MessageSendEvent_1send_1sho
        LDKQueryShortChannelIds msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = QueryShortChannelIds_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_send_short_ids_query(node_id_ref, msg_conv);
@@ -17574,6 +19826,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MessageSendEvent_1send_1rep
        LDKReplyChannelRange msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = ReplyChannelRange_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_send_reply_channel_range(node_id_ref, msg_conv);
@@ -17617,6 +19870,18 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_APIError_1free(JNIEnv *env, jc
        APIError_free(this_ptr_conv);
 }
 
+static inline uint64_t APIError_clone_ptr(LDKAPIError *NONNULL_PTR arg) {
+       LDKAPIError *ret_copy = MALLOC(sizeof(LDKAPIError), "LDKAPIError");
+       *ret_copy = APIError_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_APIError_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKAPIError* arg_conv = (LDKAPIError*)arg;
+       int64_t ret_val = APIError_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_APIError_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKAPIError* orig_conv = (LDKAPIError*)orig;
        LDKAPIError *ret_copy = MALLOC(sizeof(LDKAPIError), "LDKAPIError");
@@ -17668,6 +19933,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_APIError_1incompatible_1shu
        LDKShutdownScript script_conv;
        script_conv.inner = (void*)(script & (~1));
        script_conv.is_owned = (script & 1) || (script == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(script_conv);
        script_conv = ShutdownScript_clone(&script_conv);
        LDKAPIError *ret_copy = MALLOC(sizeof(LDKAPIError), "LDKAPIError");
        *ret_copy = APIError_incompatible_shutdown_script(script_conv);
@@ -17762,6 +20028,147 @@ JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Level_1max(JNIEnv *env, jcla
        return ret_conv;
 }
 
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Record_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
+       LDKRecord this_obj_conv;
+       this_obj_conv.inner = (void*)(this_obj & (~1));
+       this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       Record_free(this_obj_conv);
+}
+
+JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Record_1get_1level(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKRecord this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       jclass ret_conv = LDKLevel_to_java(env, Record_get_level(&this_ptr_conv));
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Record_1set_1level(JNIEnv *env, jclass clz, int64_t this_ptr, jclass val) {
+       LDKRecord this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKLevel val_conv = LDKLevel_from_java(env, val);
+       Record_set_level(&this_ptr_conv, val_conv);
+}
+
+JNIEXPORT jstring JNICALL Java_org_ldk_impl_bindings_Record_1get_1args(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKRecord this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKStr ret_str = Record_get_args(&this_ptr_conv);
+       jstring ret_conv = str_ref_to_java(env, ret_str.chars, ret_str.len);
+       Str_free(ret_str);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Record_1set_1args(JNIEnv *env, jclass clz, int64_t this_ptr, jstring val) {
+       LDKRecord this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKStr val_conv = java_to_owned_str(env, val);
+       Record_set_args(&this_ptr_conv, val_conv);
+}
+
+JNIEXPORT jstring JNICALL Java_org_ldk_impl_bindings_Record_1get_1module_1path(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKRecord this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKStr ret_str = Record_get_module_path(&this_ptr_conv);
+       jstring ret_conv = str_ref_to_java(env, ret_str.chars, ret_str.len);
+       Str_free(ret_str);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Record_1set_1module_1path(JNIEnv *env, jclass clz, int64_t this_ptr, jstring val) {
+       LDKRecord this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKStr val_conv = java_to_owned_str(env, val);
+       Record_set_module_path(&this_ptr_conv, val_conv);
+}
+
+JNIEXPORT jstring JNICALL Java_org_ldk_impl_bindings_Record_1get_1file(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKRecord this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKStr ret_str = Record_get_file(&this_ptr_conv);
+       jstring ret_conv = str_ref_to_java(env, ret_str.chars, ret_str.len);
+       Str_free(ret_str);
+       return ret_conv;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Record_1set_1file(JNIEnv *env, jclass clz, int64_t this_ptr, jstring val) {
+       LDKRecord this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKStr val_conv = java_to_owned_str(env, val);
+       Record_set_file(&this_ptr_conv, val_conv);
+}
+
+JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_Record_1get_1line(JNIEnv *env, jclass clz, int64_t this_ptr) {
+       LDKRecord this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       int32_t ret_val = Record_get_line(&this_ptr_conv);
+       return ret_val;
+}
+
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Record_1set_1line(JNIEnv *env, jclass clz, int64_t this_ptr, int32_t val) {
+       LDKRecord this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       Record_set_line(&this_ptr_conv, val);
+}
+
+static inline uint64_t Record_clone_ptr(LDKRecord *NONNULL_PTR arg) {
+       LDKRecord ret_var = Record_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Record_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKRecord arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = Record_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Record_1clone(JNIEnv *env, jclass clz, int64_t orig) {
+       LDKRecord orig_conv;
+       orig_conv.inner = (void*)(orig & (~1));
+       orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       LDKRecord ret_var = Record_clone(&orig_conv);
+       uint64_t ret_ref = 0;
+       CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+       CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = (uint64_t)ret_var.inner;
+       if (ret_var.is_owned) {
+               ret_ref |= 1;
+       }
+       return ret_ref;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Logger_1free(JNIEnv *env, jclass clz, int64_t this_ptr) {
        if ((this_ptr & 1) != 0) return;
        void* this_ptr_ptr = (void*)(((uint64_t)this_ptr) & ~1);
@@ -17775,6 +20182,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeConfig_1free(J
        LDKChannelHandshakeConfig this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelHandshakeConfig_free(this_obj_conv);
 }
 
@@ -17782,6 +20190,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeConfig_1get
        LDKChannelHandshakeConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = ChannelHandshakeConfig_get_minimum_depth(&this_ptr_conv);
        return ret_val;
 }
@@ -17790,6 +20199,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeConfig_1set_1m
        LDKChannelHandshakeConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelHandshakeConfig_set_minimum_depth(&this_ptr_conv, val);
 }
 
@@ -17797,6 +20207,7 @@ JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeConfig_1get
        LDKChannelHandshakeConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = ChannelHandshakeConfig_get_our_to_self_delay(&this_ptr_conv);
        return ret_val;
 }
@@ -17805,6 +20216,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeConfig_1set_1o
        LDKChannelHandshakeConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelHandshakeConfig_set_our_to_self_delay(&this_ptr_conv, val);
 }
 
@@ -17812,6 +20224,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeConfig_1get
        LDKChannelHandshakeConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelHandshakeConfig_get_our_htlc_minimum_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -17820,6 +20233,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeConfig_1set_1o
        LDKChannelHandshakeConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelHandshakeConfig_set_our_htlc_minimum_msat(&this_ptr_conv, val);
 }
 
@@ -17828,6 +20242,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeConfig_1new
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -17835,14 +20250,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeConfig_1new
        return ret_ref;
 }
 
+static inline uint64_t ChannelHandshakeConfig_clone_ptr(LDKChannelHandshakeConfig *NONNULL_PTR arg) {
+       LDKChannelHandshakeConfig ret_var = ChannelHandshakeConfig_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeConfig_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKChannelHandshakeConfig arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChannelHandshakeConfig_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeConfig_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKChannelHandshakeConfig orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChannelHandshakeConfig ret_var = ChannelHandshakeConfig_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -17855,6 +20293,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeConfig_1def
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -17866,6 +20305,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeLimits_1free(J
        LDKChannelHandshakeLimits this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelHandshakeLimits_free(this_obj_conv);
 }
 
@@ -17873,6 +20313,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeLimits_1get
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelHandshakeLimits_get_min_funding_satoshis(&this_ptr_conv);
        return ret_val;
 }
@@ -17881,6 +20322,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeLimits_1set_1m
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelHandshakeLimits_set_min_funding_satoshis(&this_ptr_conv, val);
 }
 
@@ -17888,6 +20330,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeLimits_1get
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelHandshakeLimits_get_max_htlc_minimum_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -17896,6 +20339,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeLimits_1set_1m
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelHandshakeLimits_set_max_htlc_minimum_msat(&this_ptr_conv, val);
 }
 
@@ -17903,6 +20347,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeLimits_1get
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelHandshakeLimits_get_min_max_htlc_value_in_flight_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -17911,6 +20356,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeLimits_1set_1m
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelHandshakeLimits_set_min_max_htlc_value_in_flight_msat(&this_ptr_conv, val);
 }
 
@@ -17918,6 +20364,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeLimits_1get
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelHandshakeLimits_get_max_channel_reserve_satoshis(&this_ptr_conv);
        return ret_val;
 }
@@ -17926,6 +20373,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeLimits_1set_1m
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelHandshakeLimits_set_max_channel_reserve_satoshis(&this_ptr_conv, val);
 }
 
@@ -17933,6 +20381,7 @@ JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeLimits_1get
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = ChannelHandshakeLimits_get_min_max_accepted_htlcs(&this_ptr_conv);
        return ret_val;
 }
@@ -17941,6 +20390,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeLimits_1set_1m
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelHandshakeLimits_set_min_max_accepted_htlcs(&this_ptr_conv, val);
 }
 
@@ -17948,6 +20398,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeLimits_1get
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = ChannelHandshakeLimits_get_max_minimum_depth(&this_ptr_conv);
        return ret_val;
 }
@@ -17956,6 +20407,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeLimits_1set_1m
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelHandshakeLimits_set_max_minimum_depth(&this_ptr_conv, val);
 }
 
@@ -17963,6 +20415,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeLimits_1ge
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        jboolean ret_val = ChannelHandshakeLimits_get_force_announced_channel_preference(&this_ptr_conv);
        return ret_val;
 }
@@ -17971,6 +20424,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeLimits_1set_1f
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelHandshakeLimits_set_force_announced_channel_preference(&this_ptr_conv, val);
 }
 
@@ -17978,6 +20432,7 @@ JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeLimits_1get
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = ChannelHandshakeLimits_get_their_to_self_delay(&this_ptr_conv);
        return ret_val;
 }
@@ -17986,6 +20441,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeLimits_1set_1t
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelHandshakeLimits_set_their_to_self_delay(&this_ptr_conv, val);
 }
 
@@ -17994,6 +20450,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeLimits_1new
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18001,14 +20458,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeLimits_1new
        return ret_ref;
 }
 
+static inline uint64_t ChannelHandshakeLimits_clone_ptr(LDKChannelHandshakeLimits *NONNULL_PTR arg) {
+       LDKChannelHandshakeLimits ret_var = ChannelHandshakeLimits_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeLimits_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKChannelHandshakeLimits arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChannelHandshakeLimits_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeLimits_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKChannelHandshakeLimits orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChannelHandshakeLimits ret_var = ChannelHandshakeLimits_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18021,6 +20501,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeLimits_1def
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18032,6 +20513,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelConfig_1free(JNIEnv *en
        LDKChannelConfig this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelConfig_free(this_obj_conv);
 }
 
@@ -18039,6 +20521,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_ChannelConfig_1get_1forward
        LDKChannelConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = ChannelConfig_get_forwarding_fee_proportional_millionths(&this_ptr_conv);
        return ret_val;
 }
@@ -18047,6 +20530,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelConfig_1set_1forwarding
        LDKChannelConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelConfig_set_forwarding_fee_proportional_millionths(&this_ptr_conv, val);
 }
 
@@ -18054,6 +20538,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_ChannelConfig_1get_1forward
        LDKChannelConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = ChannelConfig_get_forwarding_fee_base_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -18062,6 +20547,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelConfig_1set_1forwarding
        LDKChannelConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelConfig_set_forwarding_fee_base_msat(&this_ptr_conv, val);
 }
 
@@ -18069,6 +20555,7 @@ JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_ChannelConfig_1get_1cltv_1e
        LDKChannelConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = ChannelConfig_get_cltv_expiry_delta(&this_ptr_conv);
        return ret_val;
 }
@@ -18077,6 +20564,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelConfig_1set_1cltv_1expi
        LDKChannelConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelConfig_set_cltv_expiry_delta(&this_ptr_conv, val);
 }
 
@@ -18084,6 +20572,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelConfig_1get_1announ
        LDKChannelConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        jboolean ret_val = ChannelConfig_get_announced_channel(&this_ptr_conv);
        return ret_val;
 }
@@ -18092,6 +20581,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelConfig_1set_1announced_
        LDKChannelConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelConfig_set_announced_channel(&this_ptr_conv, val);
 }
 
@@ -18099,6 +20589,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelConfig_1get_1commit
        LDKChannelConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        jboolean ret_val = ChannelConfig_get_commit_upfront_shutdown_pubkey(&this_ptr_conv);
        return ret_val;
 }
@@ -18107,6 +20598,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelConfig_1set_1commit_1up
        LDKChannelConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelConfig_set_commit_upfront_shutdown_pubkey(&this_ptr_conv, val);
 }
 
@@ -18114,6 +20606,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelConfig_1get_1max_1du
        LDKChannelConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelConfig_get_max_dust_htlc_exposure_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -18122,6 +20615,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelConfig_1set_1max_1dust_
        LDKChannelConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelConfig_set_max_dust_htlc_exposure_msat(&this_ptr_conv, val);
 }
 
@@ -18129,6 +20623,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelConfig_1get_1force_1
        LDKChannelConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelConfig_get_force_close_avoidance_max_fee_satoshis(&this_ptr_conv);
        return ret_val;
 }
@@ -18137,6 +20632,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelConfig_1set_1force_1clo
        LDKChannelConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelConfig_set_force_close_avoidance_max_fee_satoshis(&this_ptr_conv, val);
 }
 
@@ -18145,6 +20641,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelConfig_1new(JNIEnv *
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18152,14 +20649,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelConfig_1new(JNIEnv *
        return ret_ref;
 }
 
+static inline uint64_t ChannelConfig_clone_ptr(LDKChannelConfig *NONNULL_PTR arg) {
+       LDKChannelConfig ret_var = ChannelConfig_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelConfig_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKChannelConfig arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChannelConfig_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelConfig_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKChannelConfig orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChannelConfig ret_var = ChannelConfig_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18172,6 +20692,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelConfig_1default(JNIE
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18183,6 +20704,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelConfig_1write(JN
        LDKChannelConfig obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ChannelConfig_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -18204,6 +20726,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UserConfig_1free(JNIEnv *env,
        LDKUserConfig this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        UserConfig_free(this_obj_conv);
 }
 
@@ -18211,10 +20734,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UserConfig_1get_1own_1chann
        LDKUserConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelHandshakeConfig ret_var = UserConfig_get_own_channel_config(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18226,9 +20751,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UserConfig_1set_1own_1channel_
        LDKUserConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelHandshakeConfig val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = ChannelHandshakeConfig_clone(&val_conv);
        UserConfig_set_own_channel_config(&this_ptr_conv, val_conv);
 }
@@ -18237,10 +20764,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UserConfig_1get_1peer_1chan
        LDKUserConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelHandshakeLimits ret_var = UserConfig_get_peer_channel_config_limits(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18252,9 +20781,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UserConfig_1set_1peer_1channel
        LDKUserConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelHandshakeLimits val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = ChannelHandshakeLimits_clone(&val_conv);
        UserConfig_set_peer_channel_config_limits(&this_ptr_conv, val_conv);
 }
@@ -18263,10 +20794,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UserConfig_1get_1channel_1o
        LDKUserConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelConfig ret_var = UserConfig_get_channel_options(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18278,9 +20811,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UserConfig_1set_1channel_1opti
        LDKUserConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelConfig val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = ChannelConfig_clone(&val_conv);
        UserConfig_set_channel_options(&this_ptr_conv, val_conv);
 }
@@ -18289,6 +20824,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_UserConfig_1get_1accept_1f
        LDKUserConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        jboolean ret_val = UserConfig_get_accept_forwards_to_priv_channels(&this_ptr_conv);
        return ret_val;
 }
@@ -18297,6 +20833,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UserConfig_1set_1accept_1forwa
        LDKUserConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UserConfig_set_accept_forwards_to_priv_channels(&this_ptr_conv, val);
 }
 
@@ -18304,19 +20841,23 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UserConfig_1new(JNIEnv *env
        LDKChannelHandshakeConfig own_channel_config_arg_conv;
        own_channel_config_arg_conv.inner = (void*)(own_channel_config_arg & (~1));
        own_channel_config_arg_conv.is_owned = (own_channel_config_arg & 1) || (own_channel_config_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(own_channel_config_arg_conv);
        own_channel_config_arg_conv = ChannelHandshakeConfig_clone(&own_channel_config_arg_conv);
        LDKChannelHandshakeLimits peer_channel_config_limits_arg_conv;
        peer_channel_config_limits_arg_conv.inner = (void*)(peer_channel_config_limits_arg & (~1));
        peer_channel_config_limits_arg_conv.is_owned = (peer_channel_config_limits_arg & 1) || (peer_channel_config_limits_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(peer_channel_config_limits_arg_conv);
        peer_channel_config_limits_arg_conv = ChannelHandshakeLimits_clone(&peer_channel_config_limits_arg_conv);
        LDKChannelConfig channel_options_arg_conv;
        channel_options_arg_conv.inner = (void*)(channel_options_arg & (~1));
        channel_options_arg_conv.is_owned = (channel_options_arg & 1) || (channel_options_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_options_arg_conv);
        channel_options_arg_conv = ChannelConfig_clone(&channel_options_arg_conv);
        LDKUserConfig ret_var = UserConfig_new(own_channel_config_arg_conv, peer_channel_config_limits_arg_conv, channel_options_arg_conv, accept_forwards_to_priv_channels_arg);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18324,14 +20865,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UserConfig_1new(JNIEnv *env
        return ret_ref;
 }
 
+static inline uint64_t UserConfig_clone_ptr(LDKUserConfig *NONNULL_PTR arg) {
+       LDKUserConfig ret_var = UserConfig_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UserConfig_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKUserConfig arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = UserConfig_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UserConfig_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKUserConfig orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKUserConfig ret_var = UserConfig_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18344,6 +20908,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UserConfig_1default(JNIEnv
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18355,17 +20920,41 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BestBlock_1free(JNIEnv *env, j
        LDKBestBlock this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        BestBlock_free(this_obj_conv);
 }
 
+static inline uint64_t BestBlock_clone_ptr(LDKBestBlock *NONNULL_PTR arg) {
+       LDKBestBlock ret_var = BestBlock_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BestBlock_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKBestBlock arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = BestBlock_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BestBlock_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKBestBlock orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKBestBlock ret_var = BestBlock_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18379,6 +20968,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BestBlock_1from_1genesis(JN
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18394,6 +20984,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BestBlock_1new(JNIEnv *env,
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18405,6 +20996,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_BestBlock_1block_1hash(
        LDKBestBlock this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, BestBlock_block_hash(&this_arg_conv).data);
        return ret_arr;
@@ -18414,6 +21006,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_BestBlock_1height(JNIEnv *e
        LDKBestBlock this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int32_t ret_val = BestBlock_height(&this_arg_conv);
        return ret_val;
 }
@@ -18499,6 +21092,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_WatchedOutput_1free(JNIEnv *en
        LDKWatchedOutput this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        WatchedOutput_free(this_obj_conv);
 }
 
@@ -18506,6 +21100,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_WatchedOutput_1get_1blo
        LDKWatchedOutput this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, WatchedOutput_get_block_hash(&this_ptr_conv).data);
        return ret_arr;
@@ -18515,6 +21110,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_WatchedOutput_1set_1block_1has
        LDKWatchedOutput this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -18525,10 +21121,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_WatchedOutput_1get_1outpoin
        LDKWatchedOutput this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKOutPoint ret_var = WatchedOutput_get_outpoint(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18540,9 +21138,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_WatchedOutput_1set_1outpoint(J
        LDKWatchedOutput this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKOutPoint val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = OutPoint_clone(&val_conv);
        WatchedOutput_set_outpoint(&this_ptr_conv, val_conv);
 }
@@ -18551,6 +21151,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_WatchedOutput_1get_1scr
        LDKWatchedOutput this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKu8slice ret_var = WatchedOutput_get_script_pubkey(&this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -18561,6 +21162,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_WatchedOutput_1set_1script_1pu
        LDKWatchedOutput this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_u8Z val_ref;
        val_ref.datalen = (*env)->GetArrayLength(env, val);
        val_ref.data = MALLOC(val_ref.datalen, "LDKCVec_u8Z Bytes");
@@ -18575,6 +21177,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_WatchedOutput_1new(JNIEnv *
        LDKOutPoint outpoint_arg_conv;
        outpoint_arg_conv.inner = (void*)(outpoint_arg & (~1));
        outpoint_arg_conv.is_owned = (outpoint_arg & 1) || (outpoint_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_arg_conv);
        outpoint_arg_conv = OutPoint_clone(&outpoint_arg_conv);
        LDKCVec_u8Z script_pubkey_arg_ref;
        script_pubkey_arg_ref.datalen = (*env)->GetArrayLength(env, script_pubkey_arg);
@@ -18584,6 +21187,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_WatchedOutput_1new(JNIEnv *
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18591,14 +21195,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_WatchedOutput_1new(JNIEnv *
        return ret_ref;
 }
 
+static inline uint64_t WatchedOutput_clone_ptr(LDKWatchedOutput *NONNULL_PTR arg) {
+       LDKWatchedOutput ret_var = WatchedOutput_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_WatchedOutput_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKWatchedOutput arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = WatchedOutput_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_WatchedOutput_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKWatchedOutput orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKWatchedOutput ret_var = WatchedOutput_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18610,6 +21237,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_WatchedOutput_1hash(JNIEnv
        LDKWatchedOutput o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = WatchedOutput_hash(&o_conv);
        return ret_val;
 }
@@ -18664,17 +21292,41 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MonitorUpdateId_1free(JNIEnv *
        LDKMonitorUpdateId this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        MonitorUpdateId_free(this_obj_conv);
 }
 
+static inline uint64_t MonitorUpdateId_clone_ptr(LDKMonitorUpdateId *NONNULL_PTR arg) {
+       LDKMonitorUpdateId ret_var = MonitorUpdateId_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MonitorUpdateId_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKMonitorUpdateId arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = MonitorUpdateId_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MonitorUpdateId_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKMonitorUpdateId orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKMonitorUpdateId ret_var = MonitorUpdateId_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18686,6 +21338,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MonitorUpdateId_1hash(JNIEn
        LDKMonitorUpdateId o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = MonitorUpdateId_hash(&o_conv);
        return ret_val;
 }
@@ -18694,9 +21347,11 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_MonitorUpdateId_1eq(JNIEnv
        LDKMonitorUpdateId a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKMonitorUpdateId b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = MonitorUpdateId_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -18714,6 +21369,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LockedChannelMonitor_1free(JNI
        LDKLockedChannelMonitor this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        LockedChannelMonitor_free(this_obj_conv);
 }
 
@@ -18721,6 +21377,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChainMonitor_1free(JNIEnv *env
        LDKChainMonitor this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChainMonitor_free(this_obj_conv);
 }
 
@@ -18768,6 +21425,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChainMonitor_1new(JNIEnv *e
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18779,6 +21437,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_ChainMonitor_1get_1cla
        LDKChainMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCVec_ChannelDetailsZ ignored_channels_constr;
        ignored_channels_constr.datalen = (*env)->GetArrayLength(env, ignored_channels);
        if (ignored_channels_constr.datalen > 0)
@@ -18791,6 +21450,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_ChainMonitor_1get_1cla
                LDKChannelDetails ignored_channels_conv_16_conv;
                ignored_channels_conv_16_conv.inner = (void*)(ignored_channels_conv_16 & (~1));
                ignored_channels_conv_16_conv.is_owned = (ignored_channels_conv_16 & 1) || (ignored_channels_conv_16 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ignored_channels_conv_16_conv);
                ignored_channels_conv_16_conv = ChannelDetails_clone(&ignored_channels_conv_16_conv);
                ignored_channels_constr.data[q] = ignored_channels_conv_16_conv;
        }
@@ -18814,9 +21474,11 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChainMonitor_1get_1monitor(
        LDKChainMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKOutPoint funding_txo_conv;
        funding_txo_conv.inner = (void*)(funding_txo & (~1));
        funding_txo_conv.is_owned = (funding_txo & 1) || (funding_txo == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_txo_conv);
        funding_txo_conv = OutPoint_clone(&funding_txo_conv);
        LDKCResult_LockedChannelMonitorNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_LockedChannelMonitorNoneZ), "LDKCResult_LockedChannelMonitorNoneZ");
        *ret_conv = ChainMonitor_get_monitor(&this_arg_conv, funding_txo_conv);
@@ -18827,6 +21489,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_ChainMonitor_1list_1mo
        LDKChainMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCVec_OutPointZ ret_var = ChainMonitor_list_monitors(&this_arg_conv);
        int64_tArray ret_arr = NULL;
        ret_arr = (*env)->NewLongArray(env, ret_var.datalen);
@@ -18836,6 +21499,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_ChainMonitor_1list_1mo
                uint64_t ret_conv_10_ref = 0;
                CHECK((((uint64_t)ret_conv_10_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_conv_10_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_10_var);
                ret_conv_10_ref = (uint64_t)ret_conv_10_var.inner;
                if (ret_conv_10_var.is_owned) {
                        ret_conv_10_ref |= 1;
@@ -18851,13 +21515,16 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChainMonitor_1channel_1moni
        LDKChainMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKOutPoint funding_txo_conv;
        funding_txo_conv.inner = (void*)(funding_txo & (~1));
        funding_txo_conv.is_owned = (funding_txo & 1) || (funding_txo == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_txo_conv);
        funding_txo_conv = OutPoint_clone(&funding_txo_conv);
        LDKMonitorUpdateId completed_update_id_conv;
        completed_update_id_conv.inner = (void*)(completed_update_id & (~1));
        completed_update_id_conv.is_owned = (completed_update_id & 1) || (completed_update_id == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(completed_update_id_conv);
        completed_update_id_conv = MonitorUpdateId_clone(&completed_update_id_conv);
        LDKCResult_NoneAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneAPIErrorZ), "LDKCResult_NoneAPIErrorZ");
        *ret_conv = ChainMonitor_channel_monitor_updated(&this_arg_conv, funding_txo_conv, completed_update_id_conv);
@@ -18868,6 +21535,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChainMonitor_1as_1Listen(JN
        LDKChainMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKListen* ret_ret = MALLOC(sizeof(LDKListen), "LDKListen");
        *ret_ret = ChainMonitor_as_Listen(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -18877,6 +21545,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChainMonitor_1as_1Confirm(J
        LDKChainMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKConfirm* ret_ret = MALLOC(sizeof(LDKConfirm), "LDKConfirm");
        *ret_ret = ChainMonitor_as_Confirm(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -18886,6 +21555,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChainMonitor_1as_1Watch(JNI
        LDKChainMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKWatch* ret_ret = MALLOC(sizeof(LDKWatch), "LDKWatch");
        *ret_ret = ChainMonitor_as_Watch(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -18895,6 +21565,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChainMonitor_1as_1EventsPro
        LDKChainMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKEventsProvider* ret_ret = MALLOC(sizeof(LDKEventsProvider), "LDKEventsProvider");
        *ret_ret = ChainMonitor_as_EventsProvider(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -18904,6 +21575,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMonitorUpdate_1free(JNI
        LDKChannelMonitorUpdate this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelMonitorUpdate_free(this_obj_conv);
 }
 
@@ -18911,6 +21583,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelMonitorUpdate_1get_1
        LDKChannelMonitorUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelMonitorUpdate_get_update_id(&this_ptr_conv);
        return ret_val;
 }
@@ -18919,17 +21592,41 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMonitorUpdate_1set_1upd
        LDKChannelMonitorUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelMonitorUpdate_set_update_id(&this_ptr_conv, val);
 }
 
+static inline uint64_t ChannelMonitorUpdate_clone_ptr(LDKChannelMonitorUpdate *NONNULL_PTR arg) {
+       LDKChannelMonitorUpdate ret_var = ChannelMonitorUpdate_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelMonitorUpdate_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKChannelMonitorUpdate arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChannelMonitorUpdate_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelMonitorUpdate_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKChannelMonitorUpdate orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChannelMonitorUpdate ret_var = ChannelMonitorUpdate_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18941,6 +21638,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelMonitorUpdate_1w
        LDKChannelMonitorUpdate obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ChannelMonitorUpdate_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -18962,6 +21660,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MonitorUpdateError_1free(JNIEn
        LDKMonitorUpdateError this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        MonitorUpdateError_free(this_obj_conv);
 }
 
@@ -18969,6 +21668,7 @@ JNIEXPORT jstring JNICALL Java_org_ldk_impl_bindings_MonitorUpdateError_1get_1a(
        LDKMonitorUpdateError this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKStr ret_str = MonitorUpdateError_get_a(&this_ptr_conv);
        jstring ret_conv = str_ref_to_java(env, ret_str.chars, ret_str.len);
        Str_free(ret_str);
@@ -18979,6 +21679,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MonitorUpdateError_1set_1a(JNI
        LDKMonitorUpdateError this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKStr val_conv = java_to_owned_str(env, val);
        MonitorUpdateError_set_a(&this_ptr_conv, val_conv);
 }
@@ -18989,6 +21690,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MonitorUpdateError_1new(JNI
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18996,14 +21698,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MonitorUpdateError_1new(JNI
        return ret_ref;
 }
 
+static inline uint64_t MonitorUpdateError_clone_ptr(LDKMonitorUpdateError *NONNULL_PTR arg) {
+       LDKMonitorUpdateError ret_var = MonitorUpdateError_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MonitorUpdateError_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKMonitorUpdateError arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = MonitorUpdateError_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MonitorUpdateError_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKMonitorUpdateError orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKMonitorUpdateError ret_var = MonitorUpdateError_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -19020,6 +21745,18 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MonitorEvent_1free(JNIEnv *env
        MonitorEvent_free(this_ptr_conv);
 }
 
+static inline uint64_t MonitorEvent_clone_ptr(LDKMonitorEvent *NONNULL_PTR arg) {
+       LDKMonitorEvent *ret_copy = MALLOC(sizeof(LDKMonitorEvent), "LDKMonitorEvent");
+       *ret_copy = MonitorEvent_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MonitorEvent_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKMonitorEvent* arg_conv = (LDKMonitorEvent*)arg;
+       int64_t ret_val = MonitorEvent_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MonitorEvent_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKMonitorEvent* orig_conv = (LDKMonitorEvent*)orig;
        LDKMonitorEvent *ret_copy = MALLOC(sizeof(LDKMonitorEvent), "LDKMonitorEvent");
@@ -19032,6 +21769,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MonitorEvent_1htlcevent(JNI
        LDKHTLCUpdate a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = (a & 1) || (a == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv = HTLCUpdate_clone(&a_conv);
        LDKMonitorEvent *ret_copy = MALLOC(sizeof(LDKMonitorEvent), "LDKMonitorEvent");
        *ret_copy = MonitorEvent_htlcevent(a_conv);
@@ -19043,6 +21781,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MonitorEvent_1commitment_1t
        LDKOutPoint a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = (a & 1) || (a == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv = OutPoint_clone(&a_conv);
        LDKMonitorEvent *ret_copy = MALLOC(sizeof(LDKMonitorEvent), "LDKMonitorEvent");
        *ret_copy = MonitorEvent_commitment_tx_confirmed(a_conv);
@@ -19054,6 +21793,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MonitorEvent_1update_1compl
        LDKOutPoint funding_txo_conv;
        funding_txo_conv.inner = (void*)(funding_txo & (~1));
        funding_txo_conv.is_owned = (funding_txo & 1) || (funding_txo == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_txo_conv);
        funding_txo_conv = OutPoint_clone(&funding_txo_conv);
        LDKMonitorEvent *ret_copy = MALLOC(sizeof(LDKMonitorEvent), "LDKMonitorEvent");
        *ret_copy = MonitorEvent_update_completed(funding_txo_conv, monitor_update_id);
@@ -19065,6 +21805,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MonitorEvent_1update_1faile
        LDKOutPoint a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = (a & 1) || (a == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv = OutPoint_clone(&a_conv);
        LDKMonitorEvent *ret_copy = MALLOC(sizeof(LDKMonitorEvent), "LDKMonitorEvent");
        *ret_copy = MonitorEvent_update_failed(a_conv);
@@ -19081,21 +21822,55 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_MonitorEvent_1write(JNI
        return ret_arr;
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MonitorEvent_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
+       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
+       LDKCResult_COption_MonitorEventZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_MonitorEventZDecodeErrorZ), "LDKCResult_COption_MonitorEventZDecodeErrorZ");
+       *ret_conv = MonitorEvent_read(ser_ref);
+       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
+       return (uint64_t)ret_conv;
+}
+
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_HTLCUpdate_1free(JNIEnv *env, jclass clz, int64_t this_obj) {
        LDKHTLCUpdate this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        HTLCUpdate_free(this_obj_conv);
 }
 
+static inline uint64_t HTLCUpdate_clone_ptr(LDKHTLCUpdate *NONNULL_PTR arg) {
+       LDKHTLCUpdate ret_var = HTLCUpdate_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_HTLCUpdate_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKHTLCUpdate arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = HTLCUpdate_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_HTLCUpdate_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKHTLCUpdate orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKHTLCUpdate ret_var = HTLCUpdate_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -19107,6 +21882,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_HTLCUpdate_1write(JNIEn
        LDKHTLCUpdate obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = HTLCUpdate_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -19133,6 +21909,18 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Balance_1free(JNIEnv *env, jcl
        Balance_free(this_ptr_conv);
 }
 
+static inline uint64_t Balance_clone_ptr(LDKBalance *NONNULL_PTR arg) {
+       LDKBalance *ret_copy = MALLOC(sizeof(LDKBalance), "LDKBalance");
+       *ret_copy = Balance_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Balance_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKBalance* arg_conv = (LDKBalance*)arg;
+       int64_t ret_val = Balance_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Balance_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKBalance* orig_conv = (LDKBalance*)orig;
        LDKBalance *ret_copy = MALLOC(sizeof(LDKBalance), "LDKBalance");
@@ -19180,17 +21968,41 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1free(JNIEnv *e
        LDKChannelMonitor this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelMonitor_free(this_obj_conv);
 }
 
+static inline uint64_t ChannelMonitor_clone_ptr(LDKChannelMonitor *NONNULL_PTR arg) {
+       LDKChannelMonitor ret_var = ChannelMonitor_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKChannelMonitor arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChannelMonitor_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKChannelMonitor orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChannelMonitor ret_var = ChannelMonitor_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -19202,6 +22014,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1write(J
        LDKChannelMonitor obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ChannelMonitor_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -19213,9 +22026,11 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1update_1mon
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKChannelMonitorUpdate updates_conv;
        updates_conv.inner = (void*)(updates & (~1));
        updates_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(updates_conv);
        void* broadcaster_ptr = (void*)(((uint64_t)broadcaster) & ~1);
        if (!(broadcaster & 1)) { CHECK_ACCESS(broadcaster_ptr); }
        LDKBroadcasterInterface* broadcaster_conv = (LDKBroadcasterInterface*)broadcaster_ptr;
@@ -19234,6 +22049,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1get_1latest
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = ChannelMonitor_get_latest_update_id(&this_arg_conv);
        return ret_val;
 }
@@ -19242,6 +22058,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1get_1fundin
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKC2Tuple_OutPointScriptZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OutPointScriptZ), "LDKC2Tuple_OutPointScriptZ");
        *ret_conv = ChannelMonitor_get_funding_txo(&this_arg_conv);
        return ((uint64_t)ret_conv);
@@ -19251,6 +22068,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1get_1o
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ ret_var = ChannelMonitor_get_outputs_to_watch(&this_arg_conv);
        int64_tArray ret_arr = NULL;
        ret_arr = (*env)->NewLongArray(env, ret_var.datalen);
@@ -19269,6 +22087,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1load_1outputs_
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        void* filter_ptr = (void*)(((uint64_t)filter) & ~1);
        if (!(filter & 1)) { CHECK_ACCESS(filter_ptr); }
        LDKFilter* filter_conv = (LDKFilter*)filter_ptr;
@@ -19279,6 +22098,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1get_1a
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCVec_MonitorEventZ ret_var = ChannelMonitor_get_and_clear_pending_monitor_events(&this_arg_conv);
        int64_tArray ret_arr = NULL;
        ret_arr = (*env)->NewLongArray(env, ret_var.datalen);
@@ -19298,6 +22118,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1get_1a
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCVec_EventZ ret_var = ChannelMonitor_get_and_clear_pending_events(&this_arg_conv);
        int64_tArray ret_arr = NULL;
        ret_arr = (*env)->NewLongArray(env, ret_var.datalen);
@@ -19317,6 +22138,7 @@ JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1get_1l
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        void* logger_ptr = (void*)(((uint64_t)logger) & ~1);
        if (!(logger & 1)) { CHECK_ACCESS(logger_ptr); }
        LDKLogger* logger_conv = (LDKLogger*)logger_ptr;
@@ -19340,6 +22162,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1block_
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char header_arr[80];
        CHECK((*env)->GetArrayLength(env, header) == 80);
        (*env)->GetByteArrayRegion(env, header, 0, 80, header_arr);
@@ -19399,6 +22222,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1block_1disconn
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char header_arr[80];
        CHECK((*env)->GetArrayLength(env, header) == 80);
        (*env)->GetByteArrayRegion(env, header, 0, 80, header_arr);
@@ -19431,6 +22255,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1transa
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char header_arr[80];
        CHECK((*env)->GetArrayLength(env, header) == 80);
        (*env)->GetByteArrayRegion(env, header, 0, 80, header_arr);
@@ -19490,6 +22315,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1transaction_1u
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char txid_arr[32];
        CHECK((*env)->GetArrayLength(env, txid) == 32);
        (*env)->GetByteArrayRegion(env, txid, 0, 32, txid_arr);
@@ -19522,6 +22348,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1best_1
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char header_arr[80];
        CHECK((*env)->GetArrayLength(env, header) == 80);
        (*env)->GetByteArrayRegion(env, header, 0, 80, header_arr);
@@ -19565,6 +22392,7 @@ JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1get_1r
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCVec_TxidZ ret_var = ChannelMonitor_get_relevant_txids(&this_arg_conv);
        jobjectArray ret_arr = NULL;
        ret_arr = (*env)->NewObjectArray(env, ret_var.datalen, arr_of_B_clz, NULL);
@@ -19583,10 +22411,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1current_1be
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKBestBlock ret_var = ChannelMonitor_current_best_block(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -19598,6 +22428,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1get_1c
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCVec_BalanceZ ret_var = ChannelMonitor_get_claimable_balances(&this_arg_conv);
        int64_tArray ret_arr = NULL;
        ret_arr = (*env)->NewLongArray(env, ret_var.datalen);
@@ -19630,6 +22461,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OutPoint_1free(JNIEnv *env, jc
        LDKOutPoint this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        OutPoint_free(this_obj_conv);
 }
 
@@ -19637,6 +22469,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_OutPoint_1get_1txid(JNI
        LDKOutPoint this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *OutPoint_get_txid(&this_ptr_conv));
        return ret_arr;
@@ -19646,6 +22479,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OutPoint_1set_1txid(JNIEnv *en
        LDKOutPoint this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -19656,6 +22490,7 @@ JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_OutPoint_1get_1index(JNIEnv
        LDKOutPoint this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = OutPoint_get_index(&this_ptr_conv);
        return ret_val;
 }
@@ -19664,6 +22499,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OutPoint_1set_1index(JNIEnv *e
        LDKOutPoint this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        OutPoint_set_index(&this_ptr_conv, val);
 }
 
@@ -19675,6 +22511,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OutPoint_1new(JNIEnv *env,
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -19682,14 +22519,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OutPoint_1new(JNIEnv *env,
        return ret_ref;
 }
 
+static inline uint64_t OutPoint_clone_ptr(LDKOutPoint *NONNULL_PTR arg) {
+       LDKOutPoint ret_var = OutPoint_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OutPoint_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKOutPoint arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = OutPoint_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OutPoint_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKOutPoint orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKOutPoint ret_var = OutPoint_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -19701,9 +22561,11 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_OutPoint_1eq(JNIEnv *env,
        LDKOutPoint a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKOutPoint b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = OutPoint_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -19712,6 +22574,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OutPoint_1hash(JNIEnv *env,
        LDKOutPoint o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = OutPoint_hash(&o_conv);
        return ret_val;
 }
@@ -19720,6 +22583,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_OutPoint_1to_1channel_1
        LDKOutPoint this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, OutPoint_to_channel_id(&this_arg_conv).data);
        return ret_arr;
@@ -19729,6 +22593,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_OutPoint_1write(JNIEnv
        LDKOutPoint obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = OutPoint_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -19750,6 +22615,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor
        LDKDelayedPaymentOutputDescriptor this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        DelayedPaymentOutputDescriptor_free(this_obj_conv);
 }
 
@@ -19757,10 +22623,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescrip
        LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKOutPoint ret_var = DelayedPaymentOutputDescriptor_get_outpoint(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -19772,9 +22640,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor
        LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKOutPoint val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = OutPoint_clone(&val_conv);
        DelayedPaymentOutputDescriptor_set_outpoint(&this_ptr_conv, val_conv);
 }
@@ -19783,6 +22653,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDes
        LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, DelayedPaymentOutputDescriptor_get_per_commitment_point(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -19792,6 +22663,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor
        LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -19802,6 +22674,7 @@ JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescrip
        LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = DelayedPaymentOutputDescriptor_get_to_self_delay(&this_ptr_conv);
        return ret_val;
 }
@@ -19810,6 +22683,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor
        LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        DelayedPaymentOutputDescriptor_set_to_self_delay(&this_ptr_conv, val);
 }
 
@@ -19817,6 +22691,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor
        LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKTxOut val_conv = *(LDKTxOut*)(val_ptr);
@@ -19828,6 +22703,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDes
        LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, DelayedPaymentOutputDescriptor_get_revocation_pubkey(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -19837,6 +22713,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor
        LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -19847,6 +22724,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDes
        LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *DelayedPaymentOutputDescriptor_get_channel_keys_id(&this_ptr_conv));
        return ret_arr;
@@ -19856,6 +22734,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor
        LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -19866,6 +22745,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescrip
        LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = DelayedPaymentOutputDescriptor_get_channel_value_satoshis(&this_ptr_conv);
        return ret_val;
 }
@@ -19874,6 +22754,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor
        LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        DelayedPaymentOutputDescriptor_set_channel_value_satoshis(&this_ptr_conv, val);
 }
 
@@ -19881,6 +22762,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescrip
        LDKOutPoint outpoint_arg_conv;
        outpoint_arg_conv.inner = (void*)(outpoint_arg & (~1));
        outpoint_arg_conv.is_owned = (outpoint_arg & 1) || (outpoint_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_arg_conv);
        outpoint_arg_conv = OutPoint_clone(&outpoint_arg_conv);
        LDKPublicKey per_commitment_point_arg_ref;
        CHECK((*env)->GetArrayLength(env, per_commitment_point_arg) == 33);
@@ -19899,6 +22781,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescrip
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -19906,14 +22789,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescrip
        return ret_ref;
 }
 
+static inline uint64_t DelayedPaymentOutputDescriptor_clone_ptr(LDKDelayedPaymentOutputDescriptor *NONNULL_PTR arg) {
+       LDKDelayedPaymentOutputDescriptor ret_var = DelayedPaymentOutputDescriptor_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKDelayedPaymentOutputDescriptor arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = DelayedPaymentOutputDescriptor_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKDelayedPaymentOutputDescriptor orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKDelayedPaymentOutputDescriptor ret_var = DelayedPaymentOutputDescriptor_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -19925,6 +22831,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDes
        LDKDelayedPaymentOutputDescriptor obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = DelayedPaymentOutputDescriptor_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -19946,6 +22853,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_
        LDKStaticPaymentOutputDescriptor this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        StaticPaymentOutputDescriptor_free(this_obj_conv);
 }
 
@@ -19953,10 +22861,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescript
        LDKStaticPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKOutPoint ret_var = StaticPaymentOutputDescriptor_get_outpoint(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -19968,9 +22878,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_
        LDKStaticPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKOutPoint val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = OutPoint_clone(&val_conv);
        StaticPaymentOutputDescriptor_set_outpoint(&this_ptr_conv, val_conv);
 }
@@ -19979,6 +22891,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_
        LDKStaticPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKTxOut val_conv = *(LDKTxOut*)(val_ptr);
@@ -19990,6 +22903,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDesc
        LDKStaticPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *StaticPaymentOutputDescriptor_get_channel_keys_id(&this_ptr_conv));
        return ret_arr;
@@ -19999,6 +22913,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_
        LDKStaticPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -20009,6 +22924,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescript
        LDKStaticPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = StaticPaymentOutputDescriptor_get_channel_value_satoshis(&this_ptr_conv);
        return ret_val;
 }
@@ -20017,6 +22933,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_
        LDKStaticPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        StaticPaymentOutputDescriptor_set_channel_value_satoshis(&this_ptr_conv, val);
 }
 
@@ -20024,6 +22941,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescript
        LDKOutPoint outpoint_arg_conv;
        outpoint_arg_conv.inner = (void*)(outpoint_arg & (~1));
        outpoint_arg_conv.is_owned = (outpoint_arg & 1) || (outpoint_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_arg_conv);
        outpoint_arg_conv = OutPoint_clone(&outpoint_arg_conv);
        void* output_arg_ptr = (void*)(((uint64_t)output_arg) & ~1);
        CHECK_ACCESS(output_arg_ptr);
@@ -20036,6 +22954,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescript
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20043,14 +22962,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescript
        return ret_ref;
 }
 
+static inline uint64_t StaticPaymentOutputDescriptor_clone_ptr(LDKStaticPaymentOutputDescriptor *NONNULL_PTR arg) {
+       LDKStaticPaymentOutputDescriptor ret_var = StaticPaymentOutputDescriptor_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKStaticPaymentOutputDescriptor arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = StaticPaymentOutputDescriptor_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKStaticPaymentOutputDescriptor orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKStaticPaymentOutputDescriptor ret_var = StaticPaymentOutputDescriptor_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20062,6 +23004,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDesc
        LDKStaticPaymentOutputDescriptor obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = StaticPaymentOutputDescriptor_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -20088,6 +23031,18 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1fre
        SpendableOutputDescriptor_free(this_ptr_conv);
 }
 
+static inline uint64_t SpendableOutputDescriptor_clone_ptr(LDKSpendableOutputDescriptor *NONNULL_PTR arg) {
+       LDKSpendableOutputDescriptor *ret_copy = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor");
+       *ret_copy = SpendableOutputDescriptor_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKSpendableOutputDescriptor* arg_conv = (LDKSpendableOutputDescriptor*)arg;
+       int64_t ret_val = SpendableOutputDescriptor_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKSpendableOutputDescriptor* orig_conv = (LDKSpendableOutputDescriptor*)orig;
        LDKSpendableOutputDescriptor *ret_copy = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor");
@@ -20100,6 +23055,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1
        LDKOutPoint outpoint_conv;
        outpoint_conv.inner = (void*)(outpoint & (~1));
        outpoint_conv.is_owned = (outpoint & 1) || (outpoint == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_conv);
        outpoint_conv = OutPoint_clone(&outpoint_conv);
        void* output_ptr = (void*)(((uint64_t)output) & ~1);
        CHECK_ACCESS(output_ptr);
@@ -20115,6 +23071,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1
        LDKDelayedPaymentOutputDescriptor a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = (a & 1) || (a == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv = DelayedPaymentOutputDescriptor_clone(&a_conv);
        LDKSpendableOutputDescriptor *ret_copy = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor");
        *ret_copy = SpendableOutputDescriptor_delayed_payment_output(a_conv);
@@ -20126,6 +23083,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1
        LDKStaticPaymentOutputDescriptor a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = (a & 1) || (a == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv = StaticPaymentOutputDescriptor_clone(&a_conv);
        LDKSpendableOutputDescriptor *ret_copy = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor");
        *ret_copy = SpendableOutputDescriptor_static_payment_output(a_conv);
@@ -20161,6 +23119,19 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BaseSign_1free(JNIEnv *env, jc
        BaseSign_free(this_ptr_conv);
 }
 
+static inline uint64_t Sign_clone_ptr(LDKSign *NONNULL_PTR arg) {
+       LDKSign* ret_ret = MALLOC(sizeof(LDKSign), "LDKSign");
+       *ret_ret = Sign_clone(arg);
+       return (uint64_t)ret_ret;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Sign_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       void* arg_ptr = (void*)(((uint64_t)arg) & ~1);
+       if (!(arg & 1)) { CHECK_ACCESS(arg_ptr); }
+       LDKSign* arg_conv = (LDKSign*)arg_ptr;
+       int64_t ret_val = Sign_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Sign_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        void* orig_ptr = (void*)(((uint64_t)orig) & ~1);
        if (!(orig & 1)) { CHECK_ACCESS(orig_ptr); }
@@ -20192,6 +23163,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1free(JNIEnv *e
        LDKInMemorySigner this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        InMemorySigner_free(this_obj_conv);
 }
 
@@ -20199,6 +23171,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1get_1fu
        LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *InMemorySigner_get_funding_key(&this_ptr_conv));
        return ret_arr;
@@ -20208,6 +23181,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1set_1funding_1
        LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSecretKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.bytes);
@@ -20218,6 +23192,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1get_1re
        LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *InMemorySigner_get_revocation_base_key(&this_ptr_conv));
        return ret_arr;
@@ -20227,6 +23202,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1set_1revocatio
        LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSecretKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.bytes);
@@ -20237,6 +23213,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1get_1pa
        LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *InMemorySigner_get_payment_key(&this_ptr_conv));
        return ret_arr;
@@ -20246,6 +23223,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1set_1payment_1
        LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSecretKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.bytes);
@@ -20256,6 +23234,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1get_1de
        LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *InMemorySigner_get_delayed_payment_base_key(&this_ptr_conv));
        return ret_arr;
@@ -20265,6 +23244,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1set_1delayed_1
        LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSecretKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.bytes);
@@ -20275,6 +23255,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1get_1ht
        LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *InMemorySigner_get_htlc_base_key(&this_ptr_conv));
        return ret_arr;
@@ -20284,6 +23265,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1set_1htlc_1bas
        LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSecretKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.bytes);
@@ -20294,6 +23276,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1get_1co
        LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *InMemorySigner_get_commitment_seed(&this_ptr_conv));
        return ret_arr;
@@ -20303,20 +23286,44 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1set_1commitmen
        LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
        InMemorySigner_set_commitment_seed(&this_ptr_conv, val_ref);
 }
 
+static inline uint64_t InMemorySigner_clone_ptr(LDKInMemorySigner *NONNULL_PTR arg) {
+       LDKInMemorySigner ret_var = InMemorySigner_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKInMemorySigner arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = InMemorySigner_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKInMemorySigner orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKInMemorySigner ret_var = InMemorySigner_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20350,6 +23357,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1new(JNIEnv
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20361,10 +23369,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1counterpart
        LDKInMemorySigner this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKChannelPublicKeys ret_var = InMemorySigner_counterparty_pubkeys(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20376,6 +23386,7 @@ JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1counterpart
        LDKInMemorySigner this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int16_t ret_val = InMemorySigner_counterparty_selected_contest_delay(&this_arg_conv);
        return ret_val;
 }
@@ -20384,6 +23395,7 @@ JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1holder_1sel
        LDKInMemorySigner this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int16_t ret_val = InMemorySigner_holder_selected_contest_delay(&this_arg_conv);
        return ret_val;
 }
@@ -20392,6 +23404,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1is_1outbou
        LDKInMemorySigner this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        jboolean ret_val = InMemorySigner_is_outbound(&this_arg_conv);
        return ret_val;
 }
@@ -20400,10 +23413,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1funding_1ou
        LDKInMemorySigner this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKOutPoint ret_var = InMemorySigner_funding_outpoint(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20415,10 +23430,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1get_1channe
        LDKInMemorySigner this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKChannelTransactionParameters ret_var = InMemorySigner_get_channel_parameters(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20430,6 +23447,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1sign_1count
        LDKInMemorySigner this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKTransaction spend_tx_ref;
        spend_tx_ref.datalen = (*env)->GetArrayLength(env, spend_tx);
        spend_tx_ref.data = MALLOC(spend_tx_ref.datalen, "LDKTransaction Bytes");
@@ -20438,6 +23456,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1sign_1count
        LDKStaticPaymentOutputDescriptor descriptor_conv;
        descriptor_conv.inner = (void*)(descriptor & (~1));
        descriptor_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(descriptor_conv);
        LDKCResult_CVec_CVec_u8ZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_CVec_u8ZZNoneZ), "LDKCResult_CVec_CVec_u8ZZNoneZ");
        *ret_conv = InMemorySigner_sign_counterparty_payment_input(&this_arg_conv, spend_tx_ref, input_idx, &descriptor_conv);
        return (uint64_t)ret_conv;
@@ -20447,6 +23466,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1sign_1dynam
        LDKInMemorySigner this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKTransaction spend_tx_ref;
        spend_tx_ref.datalen = (*env)->GetArrayLength(env, spend_tx);
        spend_tx_ref.data = MALLOC(spend_tx_ref.datalen, "LDKTransaction Bytes");
@@ -20455,6 +23475,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1sign_1dynam
        LDKDelayedPaymentOutputDescriptor descriptor_conv;
        descriptor_conv.inner = (void*)(descriptor & (~1));
        descriptor_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(descriptor_conv);
        LDKCResult_CVec_CVec_u8ZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_CVec_u8ZZNoneZ), "LDKCResult_CVec_CVec_u8ZZNoneZ");
        *ret_conv = InMemorySigner_sign_dynamic_p2wsh_input(&this_arg_conv, spend_tx_ref, input_idx, &descriptor_conv);
        return (uint64_t)ret_conv;
@@ -20464,6 +23485,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1as_1BaseSig
        LDKInMemorySigner this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKBaseSign* ret_ret = MALLOC(sizeof(LDKBaseSign), "LDKBaseSign");
        *ret_ret = InMemorySigner_as_BaseSign(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -20473,6 +23495,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1as_1Sign(JN
        LDKInMemorySigner this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKSign* ret_ret = MALLOC(sizeof(LDKSign), "LDKSign");
        *ret_ret = InMemorySigner_as_Sign(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -20482,6 +23505,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1write(J
        LDKInMemorySigner obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = InMemorySigner_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -20503,6 +23527,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_KeysManager_1free(JNIEnv *env,
        LDKKeysManager this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        KeysManager_free(this_obj_conv);
 }
 
@@ -20515,6 +23540,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_KeysManager_1new(JNIEnv *en
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20526,6 +23552,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_KeysManager_1derive_1channe
        LDKKeysManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char params_arr[32];
        CHECK((*env)->GetArrayLength(env, params) == 32);
        (*env)->GetByteArrayRegion(env, params, 0, 32, params_arr);
@@ -20534,6 +23561,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_KeysManager_1derive_1channe
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20545,6 +23573,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_KeysManager_1spend_1spendab
        LDKKeysManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCVec_SpendableOutputDescriptorZ descriptors_constr;
        descriptors_constr.datalen = (*env)->GetArrayLength(env, descriptors);
        if (descriptors_constr.datalen > 0)
@@ -20590,6 +23619,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_KeysManager_1as_1KeysInterf
        LDKKeysManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKKeysInterface* ret_ret = MALLOC(sizeof(LDKKeysInterface), "LDKKeysInterface");
        *ret_ret = KeysManager_as_KeysInterface(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -20599,6 +23629,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelManager_1free(JNIEnv *e
        LDKChannelManager this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelManager_free(this_obj_conv);
 }
 
@@ -20606,6 +23637,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChainParameters_1free(JNIEnv *
        LDKChainParameters this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChainParameters_free(this_obj_conv);
 }
 
@@ -20613,6 +23645,7 @@ JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_ChainParameters_1get_1networ
        LDKChainParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        jclass ret_conv = LDKNetwork_to_java(env, ChainParameters_get_network(&this_ptr_conv));
        return ret_conv;
 }
@@ -20621,6 +23654,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChainParameters_1set_1network(
        LDKChainParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNetwork val_conv = LDKNetwork_from_java(env, val);
        ChainParameters_set_network(&this_ptr_conv, val_conv);
 }
@@ -20629,10 +23663,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChainParameters_1get_1best_
        LDKChainParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKBestBlock ret_var = ChainParameters_get_best_block(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20644,9 +23680,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChainParameters_1set_1best_1bl
        LDKChainParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKBestBlock val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = BestBlock_clone(&val_conv);
        ChainParameters_set_best_block(&this_ptr_conv, val_conv);
 }
@@ -20656,11 +23694,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChainParameters_1new(JNIEnv
        LDKBestBlock best_block_arg_conv;
        best_block_arg_conv.inner = (void*)(best_block_arg & (~1));
        best_block_arg_conv.is_owned = (best_block_arg & 1) || (best_block_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(best_block_arg_conv);
        best_block_arg_conv = BestBlock_clone(&best_block_arg_conv);
        LDKChainParameters ret_var = ChainParameters_new(network_arg_conv, best_block_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20668,14 +23708,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChainParameters_1new(JNIEnv
        return ret_ref;
 }
 
+static inline uint64_t ChainParameters_clone_ptr(LDKChainParameters *NONNULL_PTR arg) {
+       LDKChainParameters ret_var = ChainParameters_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChainParameters_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKChainParameters arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChainParameters_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChainParameters_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKChainParameters orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChainParameters ret_var = ChainParameters_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20687,6 +23750,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CounterpartyForwardingInfo_1fr
        LDKCounterpartyForwardingInfo this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        CounterpartyForwardingInfo_free(this_obj_conv);
 }
 
@@ -20694,6 +23758,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_CounterpartyForwardingInfo_
        LDKCounterpartyForwardingInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = CounterpartyForwardingInfo_get_fee_base_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -20702,6 +23767,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CounterpartyForwardingInfo_1se
        LDKCounterpartyForwardingInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        CounterpartyForwardingInfo_set_fee_base_msat(&this_ptr_conv, val);
 }
 
@@ -20709,6 +23775,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_CounterpartyForwardingInfo_
        LDKCounterpartyForwardingInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = CounterpartyForwardingInfo_get_fee_proportional_millionths(&this_ptr_conv);
        return ret_val;
 }
@@ -20717,6 +23784,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CounterpartyForwardingInfo_1se
        LDKCounterpartyForwardingInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        CounterpartyForwardingInfo_set_fee_proportional_millionths(&this_ptr_conv, val);
 }
 
@@ -20724,6 +23792,7 @@ JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_CounterpartyForwardingInfo_
        LDKCounterpartyForwardingInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = CounterpartyForwardingInfo_get_cltv_expiry_delta(&this_ptr_conv);
        return ret_val;
 }
@@ -20732,6 +23801,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CounterpartyForwardingInfo_1se
        LDKCounterpartyForwardingInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        CounterpartyForwardingInfo_set_cltv_expiry_delta(&this_ptr_conv, val);
 }
 
@@ -20740,6 +23810,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CounterpartyForwardingInfo_
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20747,14 +23818,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CounterpartyForwardingInfo_
        return ret_ref;
 }
 
+static inline uint64_t CounterpartyForwardingInfo_clone_ptr(LDKCounterpartyForwardingInfo *NONNULL_PTR arg) {
+       LDKCounterpartyForwardingInfo ret_var = CounterpartyForwardingInfo_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CounterpartyForwardingInfo_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCounterpartyForwardingInfo arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = CounterpartyForwardingInfo_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CounterpartyForwardingInfo_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCounterpartyForwardingInfo orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKCounterpartyForwardingInfo ret_var = CounterpartyForwardingInfo_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20766,6 +23860,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelCounterparty_1free(JNIE
        LDKChannelCounterparty this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelCounterparty_free(this_obj_conv);
 }
 
@@ -20773,6 +23868,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelCounterparty_1ge
        LDKChannelCounterparty this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, ChannelCounterparty_get_node_id(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -20782,6 +23878,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelCounterparty_1set_1node
        LDKChannelCounterparty this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -20792,10 +23889,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelCounterparty_1get_1f
        LDKChannelCounterparty this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKInitFeatures ret_var = ChannelCounterparty_get_features(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20807,9 +23906,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelCounterparty_1set_1feat
        LDKChannelCounterparty this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKInitFeatures val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = InitFeatures_clone(&val_conv);
        ChannelCounterparty_set_features(&this_ptr_conv, val_conv);
 }
@@ -20818,6 +23919,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelCounterparty_1get_1u
        LDKChannelCounterparty this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelCounterparty_get_unspendable_punishment_reserve(&this_ptr_conv);
        return ret_val;
 }
@@ -20826,6 +23928,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelCounterparty_1set_1unsp
        LDKChannelCounterparty this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelCounterparty_set_unspendable_punishment_reserve(&this_ptr_conv, val);
 }
 
@@ -20833,11 +23936,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelCounterparty_1get_1f
        LDKChannelCounterparty this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCounterpartyForwardingInfo ret_var = ChannelCounterparty_get_forwarding_info(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -20850,9 +23955,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelCounterparty_1set_1forw
        LDKChannelCounterparty this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCounterpartyForwardingInfo val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = CounterpartyForwardingInfo_clone(&val_conv);
        ChannelCounterparty_set_forwarding_info(&this_ptr_conv, val_conv);
 }
@@ -20864,15 +23971,18 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelCounterparty_1new(JN
        LDKInitFeatures features_arg_conv;
        features_arg_conv.inner = (void*)(features_arg & (~1));
        features_arg_conv.is_owned = (features_arg & 1) || (features_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_arg_conv);
        features_arg_conv = InitFeatures_clone(&features_arg_conv);
        LDKCounterpartyForwardingInfo forwarding_info_arg_conv;
        forwarding_info_arg_conv.inner = (void*)(forwarding_info_arg & (~1));
        forwarding_info_arg_conv.is_owned = (forwarding_info_arg & 1) || (forwarding_info_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(forwarding_info_arg_conv);
        forwarding_info_arg_conv = CounterpartyForwardingInfo_clone(&forwarding_info_arg_conv);
        LDKChannelCounterparty ret_var = ChannelCounterparty_new(node_id_arg_ref, features_arg_conv, unspendable_punishment_reserve_arg, forwarding_info_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20880,14 +23990,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelCounterparty_1new(JN
        return ret_ref;
 }
 
+static inline uint64_t ChannelCounterparty_clone_ptr(LDKChannelCounterparty *NONNULL_PTR arg) {
+       LDKChannelCounterparty ret_var = ChannelCounterparty_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelCounterparty_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKChannelCounterparty arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChannelCounterparty_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelCounterparty_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKChannelCounterparty orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChannelCounterparty ret_var = ChannelCounterparty_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20899,6 +24032,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1free(JNIEnv *e
        LDKChannelDetails this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelDetails_free(this_obj_conv);
 }
 
@@ -20906,6 +24040,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1get_1ch
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *ChannelDetails_get_channel_id(&this_ptr_conv));
        return ret_arr;
@@ -20915,6 +24050,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1set_1channel_1
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -20925,10 +24061,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1get_1counte
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelCounterparty ret_var = ChannelDetails_get_counterparty(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20940,9 +24078,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1set_1counterpa
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelCounterparty val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = ChannelCounterparty_clone(&val_conv);
        ChannelDetails_set_counterparty(&this_ptr_conv, val_conv);
 }
@@ -20951,11 +24091,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1get_1fundin
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKOutPoint ret_var = ChannelDetails_get_funding_txo(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -20968,9 +24110,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1set_1funding_1
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKOutPoint val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = OutPoint_clone(&val_conv);
        ChannelDetails_set_funding_txo(&this_ptr_conv, val_conv);
 }
@@ -20979,6 +24123,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1get_1short_
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
        *ret_copy = ChannelDetails_get_short_channel_id(&this_ptr_conv);
        uint64_t ret_ref = (uint64_t)ret_copy;
@@ -20989,6 +24134,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1set_1short_1ch
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
@@ -21000,6 +24146,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1get_1channe
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelDetails_get_channel_value_satoshis(&this_ptr_conv);
        return ret_val;
 }
@@ -21008,6 +24155,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1set_1channel_1
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelDetails_set_channel_value_satoshis(&this_ptr_conv, val);
 }
 
@@ -21015,6 +24163,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1get_1unspen
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
        *ret_copy = ChannelDetails_get_unspendable_punishment_reserve(&this_ptr_conv);
        uint64_t ret_ref = (uint64_t)ret_copy;
@@ -21025,6 +24174,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1set_1unspendab
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
@@ -21036,6 +24186,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1get_1user_1
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelDetails_get_user_channel_id(&this_ptr_conv);
        return ret_val;
 }
@@ -21044,6 +24195,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1set_1user_1cha
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelDetails_set_user_channel_id(&this_ptr_conv, val);
 }
 
@@ -21051,6 +24203,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1get_1outbou
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelDetails_get_outbound_capacity_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -21059,6 +24212,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1set_1outbound_
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelDetails_set_outbound_capacity_msat(&this_ptr_conv, val);
 }
 
@@ -21066,6 +24220,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1get_1inboun
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelDetails_get_inbound_capacity_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -21074,6 +24229,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1set_1inbound_1
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelDetails_set_inbound_capacity_msat(&this_ptr_conv, val);
 }
 
@@ -21081,6 +24237,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1get_1confir
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCOption_u32Z *ret_copy = MALLOC(sizeof(LDKCOption_u32Z), "LDKCOption_u32Z");
        *ret_copy = ChannelDetails_get_confirmations_required(&this_ptr_conv);
        uint64_t ret_ref = (uint64_t)ret_copy;
@@ -21091,6 +24248,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1set_1confirmat
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKCOption_u32Z val_conv = *(LDKCOption_u32Z*)(val_ptr);
@@ -21102,6 +24260,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1get_1force_
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCOption_u16Z *ret_copy = MALLOC(sizeof(LDKCOption_u16Z), "LDKCOption_u16Z");
        *ret_copy = ChannelDetails_get_force_close_spend_delay(&this_ptr_conv);
        uint64_t ret_ref = (uint64_t)ret_copy;
@@ -21112,6 +24271,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1set_1force_1cl
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKCOption_u16Z val_conv = *(LDKCOption_u16Z*)(val_ptr);
@@ -21123,6 +24283,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1get_1is_1o
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        jboolean ret_val = ChannelDetails_get_is_outbound(&this_ptr_conv);
        return ret_val;
 }
@@ -21131,6 +24292,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1set_1is_1outbo
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelDetails_set_is_outbound(&this_ptr_conv, val);
 }
 
@@ -21138,6 +24300,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1get_1is_1f
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        jboolean ret_val = ChannelDetails_get_is_funding_locked(&this_ptr_conv);
        return ret_val;
 }
@@ -21146,6 +24309,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1set_1is_1fundi
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelDetails_set_is_funding_locked(&this_ptr_conv, val);
 }
 
@@ -21153,6 +24317,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1get_1is_1u
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        jboolean ret_val = ChannelDetails_get_is_usable(&this_ptr_conv);
        return ret_val;
 }
@@ -21161,6 +24326,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1set_1is_1usabl
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelDetails_set_is_usable(&this_ptr_conv, val);
 }
 
@@ -21168,6 +24334,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1get_1is_1p
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        jboolean ret_val = ChannelDetails_get_is_public(&this_ptr_conv);
        return ret_val;
 }
@@ -21176,6 +24343,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1set_1is_1publi
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelDetails_set_is_public(&this_ptr_conv, val);
 }
 
@@ -21186,10 +24354,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1new(JNIEnv
        LDKChannelCounterparty counterparty_arg_conv;
        counterparty_arg_conv.inner = (void*)(counterparty_arg & (~1));
        counterparty_arg_conv.is_owned = (counterparty_arg & 1) || (counterparty_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(counterparty_arg_conv);
        counterparty_arg_conv = ChannelCounterparty_clone(&counterparty_arg_conv);
        LDKOutPoint funding_txo_arg_conv;
        funding_txo_arg_conv.inner = (void*)(funding_txo_arg & (~1));
        funding_txo_arg_conv.is_owned = (funding_txo_arg & 1) || (funding_txo_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_txo_arg_conv);
        funding_txo_arg_conv = OutPoint_clone(&funding_txo_arg_conv);
        void* short_channel_id_arg_ptr = (void*)(((uint64_t)short_channel_id_arg) & ~1);
        CHECK_ACCESS(short_channel_id_arg_ptr);
@@ -21210,6 +24380,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1new(JNIEnv
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -21217,14 +24388,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1new(JNIEnv
        return ret_ref;
 }
 
+static inline uint64_t ChannelDetails_clone_ptr(LDKChannelDetails *NONNULL_PTR arg) {
+       LDKChannelDetails ret_var = ChannelDetails_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKChannelDetails arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChannelDetails_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKChannelDetails orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChannelDetails ret_var = ChannelDetails_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -21241,6 +24435,18 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentSendFailure_1free(JNIEn
        PaymentSendFailure_free(this_ptr_conv);
 }
 
+static inline uint64_t PaymentSendFailure_clone_ptr(LDKPaymentSendFailure *NONNULL_PTR arg) {
+       LDKPaymentSendFailure *ret_copy = MALLOC(sizeof(LDKPaymentSendFailure), "LDKPaymentSendFailure");
+       *ret_copy = PaymentSendFailure_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentSendFailure_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKPaymentSendFailure* arg_conv = (LDKPaymentSendFailure*)arg;
+       int64_t ret_val = PaymentSendFailure_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentSendFailure_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKPaymentSendFailure* orig_conv = (LDKPaymentSendFailure*)orig;
        LDKPaymentSendFailure *ret_copy = MALLOC(sizeof(LDKPaymentSendFailure), "LDKPaymentSendFailure");
@@ -21325,6 +24531,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentSendFailure_1partial
        LDKRouteParameters failed_paths_retry_conv;
        failed_paths_retry_conv.inner = (void*)(failed_paths_retry & (~1));
        failed_paths_retry_conv.is_owned = (failed_paths_retry & 1) || (failed_paths_retry == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(failed_paths_retry_conv);
        failed_paths_retry_conv = RouteParameters_clone(&failed_paths_retry_conv);
        LDKThirtyTwoBytes payment_id_ref;
        CHECK((*env)->GetArrayLength(env, payment_id) == 32);
@@ -21374,15 +24581,18 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1new(JNIEnv
        LDKUserConfig config_conv;
        config_conv.inner = (void*)(config & (~1));
        config_conv.is_owned = (config & 1) || (config == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(config_conv);
        config_conv = UserConfig_clone(&config_conv);
        LDKChainParameters params_conv;
        params_conv.inner = (void*)(params & (~1));
        params_conv.is_owned = (params & 1) || (params == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(params_conv);
        params_conv = ChainParameters_clone(&params_conv);
        LDKChannelManager ret_var = ChannelManager_new(fee_est_conv, chain_monitor_conv, tx_broadcaster_conv, logger_conv, keys_manager_conv, config_conv, params_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -21394,10 +24604,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1get_1curren
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKUserConfig ret_var = ChannelManager_get_current_default_configuration(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -21409,12 +24621,14 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1create_1cha
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKPublicKey their_network_key_ref;
        CHECK((*env)->GetArrayLength(env, their_network_key) == 33);
        (*env)->GetByteArrayRegion(env, their_network_key, 0, 33, their_network_key_ref.compressed_form);
        LDKUserConfig override_config_conv;
        override_config_conv.inner = (void*)(override_config & (~1));
        override_config_conv.is_owned = (override_config & 1) || (override_config == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(override_config_conv);
        override_config_conv = UserConfig_clone(&override_config_conv);
        LDKCResult__u832APIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult__u832APIErrorZ), "LDKCResult__u832APIErrorZ");
        *ret_conv = ChannelManager_create_channel(&this_arg_conv, their_network_key_ref, channel_value_satoshis, push_msat, user_channel_id, override_config_conv);
@@ -21425,6 +24639,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_ChannelManager_1list_1
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCVec_ChannelDetailsZ ret_var = ChannelManager_list_channels(&this_arg_conv);
        int64_tArray ret_arr = NULL;
        ret_arr = (*env)->NewLongArray(env, ret_var.datalen);
@@ -21434,6 +24649,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_ChannelManager_1list_1
                uint64_t ret_conv_16_ref = 0;
                CHECK((((uint64_t)ret_conv_16_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_conv_16_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_16_var);
                ret_conv_16_ref = (uint64_t)ret_conv_16_var.inner;
                if (ret_conv_16_var.is_owned) {
                        ret_conv_16_ref |= 1;
@@ -21449,6 +24665,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_ChannelManager_1list_1
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCVec_ChannelDetailsZ ret_var = ChannelManager_list_usable_channels(&this_arg_conv);
        int64_tArray ret_arr = NULL;
        ret_arr = (*env)->NewLongArray(env, ret_var.datalen);
@@ -21458,6 +24675,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_ChannelManager_1list_1
                uint64_t ret_conv_16_ref = 0;
                CHECK((((uint64_t)ret_conv_16_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_conv_16_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_16_var);
                ret_conv_16_ref = (uint64_t)ret_conv_16_var.inner;
                if (ret_conv_16_var.is_owned) {
                        ret_conv_16_ref |= 1;
@@ -21473,6 +24691,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1close_1chan
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char channel_id_arr[32];
        CHECK((*env)->GetArrayLength(env, channel_id) == 32);
        (*env)->GetByteArrayRegion(env, channel_id, 0, 32, channel_id_arr);
@@ -21486,6 +24705,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1close_1chan
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char channel_id_arr[32];
        CHECK((*env)->GetArrayLength(env, channel_id) == 32);
        (*env)->GetByteArrayRegion(env, channel_id, 0, 32, channel_id_arr);
@@ -21499,6 +24719,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1force_1clos
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char channel_id_arr[32];
        CHECK((*env)->GetArrayLength(env, channel_id) == 32);
        (*env)->GetByteArrayRegion(env, channel_id, 0, 32, channel_id_arr);
@@ -21512,6 +24733,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelManager_1force_1close_1
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        ChannelManager_force_close_all_channels(&this_arg_conv);
 }
 
@@ -21519,9 +24741,11 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1send_1payme
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKRoute route_conv;
        route_conv.inner = (void*)(route & (~1));
        route_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(route_conv);
        LDKThirtyTwoBytes payment_hash_ref;
        CHECK((*env)->GetArrayLength(env, payment_hash) == 32);
        (*env)->GetByteArrayRegion(env, payment_hash, 0, 32, payment_hash_ref.data);
@@ -21537,9 +24761,11 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1retry_1paym
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKRoute route_conv;
        route_conv.inner = (void*)(route & (~1));
        route_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(route_conv);
        LDKThirtyTwoBytes payment_id_ref;
        CHECK((*env)->GetArrayLength(env, payment_id) == 32);
        (*env)->GetByteArrayRegion(env, payment_id, 0, 32, payment_id_ref.data);
@@ -21552,9 +24778,11 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1send_1spont
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKRoute route_conv;
        route_conv.inner = (void*)(route & (~1));
        route_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(route_conv);
        LDKThirtyTwoBytes payment_preimage_ref;
        CHECK((*env)->GetArrayLength(env, payment_preimage) == 32);
        (*env)->GetByteArrayRegion(env, payment_preimage, 0, 32, payment_preimage_ref.data);
@@ -21567,6 +24795,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1funding_1tr
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char temporary_channel_id_arr[32];
        CHECK((*env)->GetArrayLength(env, temporary_channel_id) == 32);
        (*env)->GetByteArrayRegion(env, temporary_channel_id, 0, 32, temporary_channel_id_arr);
@@ -21585,6 +24814,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelManager_1broadcast_1nod
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKThreeBytes rgb_ref;
        CHECK((*env)->GetArrayLength(env, rgb) == 3);
        (*env)->GetByteArrayRegion(env, rgb, 0, 3, rgb_ref.data);
@@ -21613,6 +24843,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelManager_1process_1pendi
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        ChannelManager_process_pending_htlc_forwards(&this_arg_conv);
 }
 
@@ -21620,6 +24851,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelManager_1timer_1tick_1o
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        ChannelManager_timer_tick_occurred(&this_arg_conv);
 }
 
@@ -21627,6 +24859,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelManager_1fail_1htlc
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char payment_hash_arr[32];
        CHECK((*env)->GetArrayLength(env, payment_hash) == 32);
        (*env)->GetByteArrayRegion(env, payment_hash, 0, 32, payment_hash_arr);
@@ -21639,6 +24872,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelManager_1claim_1fun
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKThirtyTwoBytes payment_preimage_ref;
        CHECK((*env)->GetArrayLength(env, payment_preimage) == 32);
        (*env)->GetByteArrayRegion(env, payment_preimage, 0, 32, payment_preimage_ref.data);
@@ -21650,6 +24884,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelManager_1get_1ou
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, ChannelManager_get_our_node_id(&this_arg_conv).compressed_form);
        return ret_arr;
@@ -21659,6 +24894,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1create_1inb
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        void* min_value_msat_ptr = (void*)(((uint64_t)min_value_msat) & ~1);
        CHECK_ACCESS(min_value_msat_ptr);
        LDKCOption_u64Z min_value_msat_conv = *(LDKCOption_u64Z*)(min_value_msat_ptr);
@@ -21672,6 +24908,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1create_1inb
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKThirtyTwoBytes payment_hash_ref;
        CHECK((*env)->GetArrayLength(env, payment_hash) == 32);
        (*env)->GetByteArrayRegion(env, payment_hash, 0, 32, payment_hash_ref.data);
@@ -21688,6 +24925,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1as_1Message
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKMessageSendEventsProvider* ret_ret = MALLOC(sizeof(LDKMessageSendEventsProvider), "LDKMessageSendEventsProvider");
        *ret_ret = ChannelManager_as_MessageSendEventsProvider(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -21697,6 +24935,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1as_1EventsP
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKEventsProvider* ret_ret = MALLOC(sizeof(LDKEventsProvider), "LDKEventsProvider");
        *ret_ret = ChannelManager_as_EventsProvider(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -21706,6 +24945,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1as_1Listen(
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKListen* ret_ret = MALLOC(sizeof(LDKListen), "LDKListen");
        *ret_ret = ChannelManager_as_Listen(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -21715,6 +24955,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1as_1Confirm
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKConfirm* ret_ret = MALLOC(sizeof(LDKConfirm), "LDKConfirm");
        *ret_ret = ChannelManager_as_Confirm(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -21724,6 +24965,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelManager_1await_1per
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        jboolean ret_val = ChannelManager_await_persistable_update_timeout(&this_arg_conv, max_wait);
        return ret_val;
 }
@@ -21732,6 +24974,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelManager_1await_1persist
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        ChannelManager_await_persistable_update(&this_arg_conv);
 }
 
@@ -21739,10 +24982,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1current_1be
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKBestBlock ret_var = ChannelManager_current_best_block(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -21754,6 +24999,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1as_1Channel
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKChannelMessageHandler* ret_ret = MALLOC(sizeof(LDKChannelMessageHandler), "LDKChannelMessageHandler");
        *ret_ret = ChannelManager_as_ChannelMessageHandler(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -21763,6 +25009,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelManager_1write(J
        LDKChannelManager obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ChannelManager_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -21774,6 +25021,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelManagerReadArgs_1free(J
        LDKChannelManagerReadArgs this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelManagerReadArgs_free(this_obj_conv);
 }
 
@@ -21781,6 +25029,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManagerReadArgs_1get
        LDKChannelManagerReadArgs this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        // WARNING: This object doesn't live past this scope, needs clone!
        uint64_t ret_ret = ((uint64_t)ChannelManagerReadArgs_get_keys_manager(&this_ptr_conv)) | 1;
        return ret_ret;
@@ -21790,6 +25039,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelManagerReadArgs_1set_1k
        LDKChannelManagerReadArgs this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKKeysInterface val_conv = *(LDKKeysInterface*)(val_ptr);
@@ -21804,6 +25054,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManagerReadArgs_1get
        LDKChannelManagerReadArgs this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        // WARNING: This object doesn't live past this scope, needs clone!
        uint64_t ret_ret = ((uint64_t)ChannelManagerReadArgs_get_fee_estimator(&this_ptr_conv)) | 1;
        return ret_ret;
@@ -21813,6 +25064,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelManagerReadArgs_1set_1f
        LDKChannelManagerReadArgs this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKFeeEstimator val_conv = *(LDKFeeEstimator*)(val_ptr);
@@ -21827,6 +25079,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManagerReadArgs_1get
        LDKChannelManagerReadArgs this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        // WARNING: This object doesn't live past this scope, needs clone!
        uint64_t ret_ret = ((uint64_t)ChannelManagerReadArgs_get_chain_monitor(&this_ptr_conv)) | 1;
        return ret_ret;
@@ -21836,6 +25089,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelManagerReadArgs_1set_1c
        LDKChannelManagerReadArgs this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKWatch val_conv = *(LDKWatch*)(val_ptr);
@@ -21850,6 +25104,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManagerReadArgs_1get
        LDKChannelManagerReadArgs this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        // WARNING: This object doesn't live past this scope, needs clone!
        uint64_t ret_ret = ((uint64_t)ChannelManagerReadArgs_get_tx_broadcaster(&this_ptr_conv)) | 1;
        return ret_ret;
@@ -21859,6 +25114,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelManagerReadArgs_1set_1t
        LDKChannelManagerReadArgs this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKBroadcasterInterface val_conv = *(LDKBroadcasterInterface*)(val_ptr);
@@ -21873,6 +25129,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManagerReadArgs_1get
        LDKChannelManagerReadArgs this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        // WARNING: This object doesn't live past this scope, needs clone!
        uint64_t ret_ret = ((uint64_t)ChannelManagerReadArgs_get_logger(&this_ptr_conv)) | 1;
        return ret_ret;
@@ -21882,6 +25139,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelManagerReadArgs_1set_1l
        LDKChannelManagerReadArgs this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKLogger val_conv = *(LDKLogger*)(val_ptr);
@@ -21896,10 +25154,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManagerReadArgs_1get
        LDKChannelManagerReadArgs this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKUserConfig ret_var = ChannelManagerReadArgs_get_default_config(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -21911,9 +25171,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelManagerReadArgs_1set_1d
        LDKChannelManagerReadArgs this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKUserConfig val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = UserConfig_clone(&val_conv);
        ChannelManagerReadArgs_set_default_config(&this_ptr_conv, val_conv);
 }
@@ -21957,6 +25219,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManagerReadArgs_1new
        LDKUserConfig default_config_conv;
        default_config_conv.inner = (void*)(default_config & (~1));
        default_config_conv.is_owned = (default_config & 1) || (default_config == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(default_config_conv);
        default_config_conv = UserConfig_clone(&default_config_conv);
        LDKCVec_ChannelMonitorZ channel_monitors_constr;
        channel_monitors_constr.datalen = (*env)->GetArrayLength(env, channel_monitors);
@@ -21970,6 +25233,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManagerReadArgs_1new
                LDKChannelMonitor channel_monitors_conv_16_conv;
                channel_monitors_conv_16_conv.inner = (void*)(channel_monitors_conv_16 & (~1));
                channel_monitors_conv_16_conv.is_owned = (channel_monitors_conv_16 & 1) || (channel_monitors_conv_16 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_monitors_conv_16_conv);
                channel_monitors_constr.data[q] = channel_monitors_conv_16_conv;
        }
        (*env)->ReleaseLongArrayElements(env, channel_monitors, channel_monitors_vals, 0);
@@ -21977,6 +25241,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManagerReadArgs_1new
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -21991,6 +25256,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelMa
        LDKChannelManagerReadArgs arg_conv;
        arg_conv.inner = (void*)(arg & (~1));
        arg_conv.is_owned = (arg & 1) || (arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        // Warning: we need a move here but no clone is available for LDKChannelManagerReadArgs
        LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ), "LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ");
        *ret_conv = C2Tuple_BlockHashChannelManagerZ_read(ser_ref, arg_conv);
@@ -22002,17 +25268,41 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DecodeError_1free(JNIEnv *env,
        LDKDecodeError this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        DecodeError_free(this_obj_conv);
 }
 
+static inline uint64_t DecodeError_clone_ptr(LDKDecodeError *NONNULL_PTR arg) {
+       LDKDecodeError ret_var = DecodeError_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DecodeError_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKDecodeError arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = DecodeError_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DecodeError_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKDecodeError orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKDecodeError ret_var = DecodeError_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -22024,6 +25314,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Init_1free(JNIEnv *env, jclass
        LDKInit this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        Init_free(this_obj_conv);
 }
 
@@ -22031,10 +25322,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Init_1get_1features(JNIEnv
        LDKInit this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKInitFeatures ret_var = Init_get_features(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -22046,9 +25339,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Init_1set_1features(JNIEnv *en
        LDKInit this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKInitFeatures val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = InitFeatures_clone(&val_conv);
        Init_set_features(&this_ptr_conv, val_conv);
 }
@@ -22057,11 +25352,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Init_1new(JNIEnv *env, jcla
        LDKInitFeatures features_arg_conv;
        features_arg_conv.inner = (void*)(features_arg & (~1));
        features_arg_conv.is_owned = (features_arg & 1) || (features_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_arg_conv);
        features_arg_conv = InitFeatures_clone(&features_arg_conv);
        LDKInit ret_var = Init_new(features_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -22069,14 +25366,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Init_1new(JNIEnv *env, jcla
        return ret_ref;
 }
 
+static inline uint64_t Init_clone_ptr(LDKInit *NONNULL_PTR arg) {
+       LDKInit ret_var = Init_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Init_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKInit arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = Init_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Init_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKInit orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKInit ret_var = Init_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -22088,6 +25408,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ErrorMessage_1free(JNIEnv *env
        LDKErrorMessage this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ErrorMessage_free(this_obj_conv);
 }
 
@@ -22095,6 +25416,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ErrorMessage_1get_1chan
        LDKErrorMessage this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *ErrorMessage_get_channel_id(&this_ptr_conv));
        return ret_arr;
@@ -22104,6 +25426,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ErrorMessage_1set_1channel_1id
        LDKErrorMessage this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -22114,6 +25437,7 @@ JNIEXPORT jstring JNICALL Java_org_ldk_impl_bindings_ErrorMessage_1get_1data(JNI
        LDKErrorMessage this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKStr ret_str = ErrorMessage_get_data(&this_ptr_conv);
        jstring ret_conv = str_ref_to_java(env, ret_str.chars, ret_str.len);
        Str_free(ret_str);
@@ -22124,6 +25448,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ErrorMessage_1set_1data(JNIEnv
        LDKErrorMessage this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKStr val_conv = java_to_owned_str(env, val);
        ErrorMessage_set_data(&this_ptr_conv, val_conv);
 }
@@ -22137,6 +25462,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ErrorMessage_1new(JNIEnv *e
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -22144,14 +25470,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ErrorMessage_1new(JNIEnv *e
        return ret_ref;
 }
 
+static inline uint64_t ErrorMessage_clone_ptr(LDKErrorMessage *NONNULL_PTR arg) {
+       LDKErrorMessage ret_var = ErrorMessage_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ErrorMessage_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKErrorMessage arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ErrorMessage_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ErrorMessage_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKErrorMessage orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKErrorMessage ret_var = ErrorMessage_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -22163,6 +25512,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Ping_1free(JNIEnv *env, jclass
        LDKPing this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        Ping_free(this_obj_conv);
 }
 
@@ -22170,6 +25520,7 @@ JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_Ping_1get_1ponglen(JNIEnv *
        LDKPing this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = Ping_get_ponglen(&this_ptr_conv);
        return ret_val;
 }
@@ -22178,6 +25529,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Ping_1set_1ponglen(JNIEnv *env
        LDKPing this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        Ping_set_ponglen(&this_ptr_conv, val);
 }
 
@@ -22185,6 +25537,7 @@ JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_Ping_1get_1byteslen(JNIEnv
        LDKPing this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = Ping_get_byteslen(&this_ptr_conv);
        return ret_val;
 }
@@ -22193,6 +25546,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Ping_1set_1byteslen(JNIEnv *en
        LDKPing this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        Ping_set_byteslen(&this_ptr_conv, val);
 }
 
@@ -22201,6 +25555,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Ping_1new(JNIEnv *env, jcla
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -22208,14 +25563,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Ping_1new(JNIEnv *env, jcla
        return ret_ref;
 }
 
+static inline uint64_t Ping_clone_ptr(LDKPing *NONNULL_PTR arg) {
+       LDKPing ret_var = Ping_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Ping_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKPing arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = Ping_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Ping_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKPing orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKPing ret_var = Ping_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -22227,6 +25605,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Pong_1free(JNIEnv *env, jclass
        LDKPong this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        Pong_free(this_obj_conv);
 }
 
@@ -22234,6 +25613,7 @@ JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_Pong_1get_1byteslen(JNIEnv
        LDKPong this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = Pong_get_byteslen(&this_ptr_conv);
        return ret_val;
 }
@@ -22242,6 +25622,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Pong_1set_1byteslen(JNIEnv *en
        LDKPong this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        Pong_set_byteslen(&this_ptr_conv, val);
 }
 
@@ -22250,6 +25631,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Pong_1new(JNIEnv *env, jcla
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -22257,14 +25639,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Pong_1new(JNIEnv *env, jcla
        return ret_ref;
 }
 
+static inline uint64_t Pong_clone_ptr(LDKPong *NONNULL_PTR arg) {
+       LDKPong ret_var = Pong_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Pong_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKPong arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = Pong_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Pong_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKPong orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKPong ret_var = Pong_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -22276,6 +25681,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OpenChannel_1free(JNIEnv *env,
        LDKOpenChannel this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        OpenChannel_free(this_obj_conv);
 }
 
@@ -22283,6 +25689,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_OpenChannel_1get_1chain
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *OpenChannel_get_chain_hash(&this_ptr_conv));
        return ret_arr;
@@ -22292,6 +25699,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OpenChannel_1set_1chain_1hash(
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -22302,6 +25710,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_OpenChannel_1get_1tempo
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *OpenChannel_get_temporary_channel_id(&this_ptr_conv));
        return ret_arr;
@@ -22311,6 +25720,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OpenChannel_1set_1temporary_1c
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -22321,6 +25731,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OpenChannel_1get_1funding_1
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = OpenChannel_get_funding_satoshis(&this_ptr_conv);
        return ret_val;
 }
@@ -22329,6 +25740,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OpenChannel_1set_1funding_1sat
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        OpenChannel_set_funding_satoshis(&this_ptr_conv, val);
 }
 
@@ -22336,6 +25748,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OpenChannel_1get_1push_1msa
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = OpenChannel_get_push_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -22344,6 +25757,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OpenChannel_1set_1push_1msat(J
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        OpenChannel_set_push_msat(&this_ptr_conv, val);
 }
 
@@ -22351,6 +25765,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OpenChannel_1get_1dust_1lim
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = OpenChannel_get_dust_limit_satoshis(&this_ptr_conv);
        return ret_val;
 }
@@ -22359,6 +25774,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OpenChannel_1set_1dust_1limit_
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        OpenChannel_set_dust_limit_satoshis(&this_ptr_conv, val);
 }
 
@@ -22366,6 +25782,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OpenChannel_1get_1max_1htlc
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = OpenChannel_get_max_htlc_value_in_flight_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -22374,6 +25791,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OpenChannel_1set_1max_1htlc_1v
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        OpenChannel_set_max_htlc_value_in_flight_msat(&this_ptr_conv, val);
 }
 
@@ -22381,6 +25799,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OpenChannel_1get_1channel_1
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = OpenChannel_get_channel_reserve_satoshis(&this_ptr_conv);
        return ret_val;
 }
@@ -22389,6 +25808,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OpenChannel_1set_1channel_1res
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        OpenChannel_set_channel_reserve_satoshis(&this_ptr_conv, val);
 }
 
@@ -22396,6 +25816,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OpenChannel_1get_1htlc_1min
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = OpenChannel_get_htlc_minimum_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -22404,6 +25825,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OpenChannel_1set_1htlc_1minimu
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        OpenChannel_set_htlc_minimum_msat(&this_ptr_conv, val);
 }
 
@@ -22411,6 +25833,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_OpenChannel_1get_1feerate_1
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = OpenChannel_get_feerate_per_kw(&this_ptr_conv);
        return ret_val;
 }
@@ -22419,6 +25842,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OpenChannel_1set_1feerate_1per
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        OpenChannel_set_feerate_per_kw(&this_ptr_conv, val);
 }
 
@@ -22426,6 +25850,7 @@ JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_OpenChannel_1get_1to_1self_
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = OpenChannel_get_to_self_delay(&this_ptr_conv);
        return ret_val;
 }
@@ -22434,6 +25859,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OpenChannel_1set_1to_1self_1de
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        OpenChannel_set_to_self_delay(&this_ptr_conv, val);
 }
 
@@ -22441,6 +25867,7 @@ JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_OpenChannel_1get_1max_1acce
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = OpenChannel_get_max_accepted_htlcs(&this_ptr_conv);
        return ret_val;
 }
@@ -22449,6 +25876,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OpenChannel_1set_1max_1accepte
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        OpenChannel_set_max_accepted_htlcs(&this_ptr_conv, val);
 }
 
@@ -22456,6 +25884,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_OpenChannel_1get_1fundi
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, OpenChannel_get_funding_pubkey(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -22465,6 +25894,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OpenChannel_1set_1funding_1pub
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -22475,6 +25905,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_OpenChannel_1get_1revoc
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, OpenChannel_get_revocation_basepoint(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -22484,6 +25915,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OpenChannel_1set_1revocation_1
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -22494,6 +25926,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_OpenChannel_1get_1payme
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, OpenChannel_get_payment_point(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -22503,6 +25936,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OpenChannel_1set_1payment_1poi
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -22513,6 +25947,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_OpenChannel_1get_1delay
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, OpenChannel_get_delayed_payment_basepoint(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -22522,6 +25957,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OpenChannel_1set_1delayed_1pay
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -22532,6 +25968,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_OpenChannel_1get_1htlc_
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, OpenChannel_get_htlc_basepoint(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -22541,6 +25978,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OpenChannel_1set_1htlc_1basepo
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -22551,6 +25989,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_OpenChannel_1get_1first
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, OpenChannel_get_first_per_commitment_point(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -22560,6 +25999,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OpenChannel_1set_1first_1per_1
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -22570,6 +26010,7 @@ JNIEXPORT int8_t JNICALL Java_org_ldk_impl_bindings_OpenChannel_1get_1channel_1f
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_t ret_val = OpenChannel_get_channel_flags(&this_ptr_conv);
        return ret_val;
 }
@@ -22578,17 +26019,41 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OpenChannel_1set_1channel_1fla
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        OpenChannel_set_channel_flags(&this_ptr_conv, val);
 }
 
+static inline uint64_t OpenChannel_clone_ptr(LDKOpenChannel *NONNULL_PTR arg) {
+       LDKOpenChannel ret_var = OpenChannel_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OpenChannel_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKOpenChannel arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = OpenChannel_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_OpenChannel_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKOpenChannel orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKOpenChannel ret_var = OpenChannel_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -22600,6 +26065,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1free(JNIEnv *en
        LDKAcceptChannel this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        AcceptChannel_free(this_obj_conv);
 }
 
@@ -22607,6 +26073,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1get_1tem
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *AcceptChannel_get_temporary_channel_id(&this_ptr_conv));
        return ret_arr;
@@ -22616,6 +26083,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1set_1temporary_
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -22626,6 +26094,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1get_1dust_1l
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = AcceptChannel_get_dust_limit_satoshis(&this_ptr_conv);
        return ret_val;
 }
@@ -22634,6 +26103,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1set_1dust_1limi
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        AcceptChannel_set_dust_limit_satoshis(&this_ptr_conv, val);
 }
 
@@ -22641,6 +26111,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1get_1max_1ht
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = AcceptChannel_get_max_htlc_value_in_flight_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -22649,6 +26120,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1set_1max_1htlc_
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        AcceptChannel_set_max_htlc_value_in_flight_msat(&this_ptr_conv, val);
 }
 
@@ -22656,6 +26128,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1get_1channel
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = AcceptChannel_get_channel_reserve_satoshis(&this_ptr_conv);
        return ret_val;
 }
@@ -22664,6 +26137,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1set_1channel_1r
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        AcceptChannel_set_channel_reserve_satoshis(&this_ptr_conv, val);
 }
 
@@ -22671,6 +26145,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1get_1htlc_1m
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = AcceptChannel_get_htlc_minimum_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -22679,6 +26154,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1set_1htlc_1mini
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        AcceptChannel_set_htlc_minimum_msat(&this_ptr_conv, val);
 }
 
@@ -22686,6 +26162,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1get_1minimum
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = AcceptChannel_get_minimum_depth(&this_ptr_conv);
        return ret_val;
 }
@@ -22694,6 +26171,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1set_1minimum_1d
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        AcceptChannel_set_minimum_depth(&this_ptr_conv, val);
 }
 
@@ -22701,6 +26179,7 @@ JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1get_1to_1sel
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = AcceptChannel_get_to_self_delay(&this_ptr_conv);
        return ret_val;
 }
@@ -22709,6 +26188,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1set_1to_1self_1
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        AcceptChannel_set_to_self_delay(&this_ptr_conv, val);
 }
 
@@ -22716,6 +26196,7 @@ JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1get_1max_1ac
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = AcceptChannel_get_max_accepted_htlcs(&this_ptr_conv);
        return ret_val;
 }
@@ -22724,6 +26205,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1set_1max_1accep
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        AcceptChannel_set_max_accepted_htlcs(&this_ptr_conv, val);
 }
 
@@ -22731,6 +26213,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1get_1fun
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, AcceptChannel_get_funding_pubkey(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -22740,6 +26223,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1set_1funding_1p
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -22750,6 +26234,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1get_1rev
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, AcceptChannel_get_revocation_basepoint(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -22759,6 +26244,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1set_1revocation
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -22769,6 +26255,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1get_1pay
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, AcceptChannel_get_payment_point(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -22778,6 +26265,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1set_1payment_1p
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -22788,6 +26276,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1get_1del
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, AcceptChannel_get_delayed_payment_basepoint(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -22797,6 +26286,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1set_1delayed_1p
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -22807,6 +26297,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1get_1htl
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, AcceptChannel_get_htlc_basepoint(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -22816,6 +26307,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1set_1htlc_1base
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -22826,6 +26318,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1get_1fir
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, AcceptChannel_get_first_per_commitment_point(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -22835,20 +26328,44 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1set_1first_1per
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
        AcceptChannel_set_first_per_commitment_point(&this_ptr_conv, val_ref);
 }
 
+static inline uint64_t AcceptChannel_clone_ptr(LDKAcceptChannel *NONNULL_PTR arg) {
+       LDKAcceptChannel ret_var = AcceptChannel_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKAcceptChannel arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = AcceptChannel_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKAcceptChannel orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKAcceptChannel ret_var = AcceptChannel_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -22860,6 +26377,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_FundingCreated_1free(JNIEnv *e
        LDKFundingCreated this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        FundingCreated_free(this_obj_conv);
 }
 
@@ -22867,6 +26385,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_FundingCreated_1get_1te
        LDKFundingCreated this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *FundingCreated_get_temporary_channel_id(&this_ptr_conv));
        return ret_arr;
@@ -22876,6 +26395,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_FundingCreated_1set_1temporary
        LDKFundingCreated this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -22886,6 +26406,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_FundingCreated_1get_1fu
        LDKFundingCreated this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *FundingCreated_get_funding_txid(&this_ptr_conv));
        return ret_arr;
@@ -22895,6 +26416,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_FundingCreated_1set_1funding_1
        LDKFundingCreated this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -22905,6 +26427,7 @@ JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_FundingCreated_1get_1fundin
        LDKFundingCreated this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = FundingCreated_get_funding_output_index(&this_ptr_conv);
        return ret_val;
 }
@@ -22913,6 +26436,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_FundingCreated_1set_1funding_1
        LDKFundingCreated this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        FundingCreated_set_funding_output_index(&this_ptr_conv, val);
 }
 
@@ -22920,6 +26444,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_FundingCreated_1get_1si
        LDKFundingCreated this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 64);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 64, FundingCreated_get_signature(&this_ptr_conv).compact_form);
        return ret_arr;
@@ -22929,6 +26454,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_FundingCreated_1set_1signature
        LDKFundingCreated this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSignature val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 64);
        (*env)->GetByteArrayRegion(env, val, 0, 64, val_ref.compact_form);
@@ -22949,6 +26475,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FundingCreated_1new(JNIEnv
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -22956,14 +26483,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FundingCreated_1new(JNIEnv
        return ret_ref;
 }
 
+static inline uint64_t FundingCreated_clone_ptr(LDKFundingCreated *NONNULL_PTR arg) {
+       LDKFundingCreated ret_var = FundingCreated_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FundingCreated_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKFundingCreated arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = FundingCreated_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FundingCreated_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKFundingCreated orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKFundingCreated ret_var = FundingCreated_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -22975,6 +26525,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_FundingSigned_1free(JNIEnv *en
        LDKFundingSigned this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        FundingSigned_free(this_obj_conv);
 }
 
@@ -22982,6 +26533,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_FundingSigned_1get_1cha
        LDKFundingSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *FundingSigned_get_channel_id(&this_ptr_conv));
        return ret_arr;
@@ -22991,6 +26543,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_FundingSigned_1set_1channel_1i
        LDKFundingSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -23001,6 +26554,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_FundingSigned_1get_1sig
        LDKFundingSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 64);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 64, FundingSigned_get_signature(&this_ptr_conv).compact_form);
        return ret_arr;
@@ -23010,6 +26564,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_FundingSigned_1set_1signature(
        LDKFundingSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSignature val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 64);
        (*env)->GetByteArrayRegion(env, val, 0, 64, val_ref.compact_form);
@@ -23027,6 +26582,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FundingSigned_1new(JNIEnv *
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -23034,14 +26590,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FundingSigned_1new(JNIEnv *
        return ret_ref;
 }
 
+static inline uint64_t FundingSigned_clone_ptr(LDKFundingSigned *NONNULL_PTR arg) {
+       LDKFundingSigned ret_var = FundingSigned_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FundingSigned_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKFundingSigned arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = FundingSigned_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FundingSigned_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKFundingSigned orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKFundingSigned ret_var = FundingSigned_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -23053,6 +26632,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_FundingLocked_1free(JNIEnv *en
        LDKFundingLocked this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        FundingLocked_free(this_obj_conv);
 }
 
@@ -23060,6 +26640,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_FundingLocked_1get_1cha
        LDKFundingLocked this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *FundingLocked_get_channel_id(&this_ptr_conv));
        return ret_arr;
@@ -23069,6 +26650,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_FundingLocked_1set_1channel_1i
        LDKFundingLocked this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -23079,6 +26661,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_FundingLocked_1get_1nex
        LDKFundingLocked this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, FundingLocked_get_next_per_commitment_point(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -23088,6 +26671,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_FundingLocked_1set_1next_1per_
        LDKFundingLocked this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -23105,6 +26689,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FundingLocked_1new(JNIEnv *
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -23112,14 +26697,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FundingLocked_1new(JNIEnv *
        return ret_ref;
 }
 
+static inline uint64_t FundingLocked_clone_ptr(LDKFundingLocked *NONNULL_PTR arg) {
+       LDKFundingLocked ret_var = FundingLocked_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FundingLocked_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKFundingLocked arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = FundingLocked_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FundingLocked_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKFundingLocked orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKFundingLocked ret_var = FundingLocked_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -23131,6 +26739,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Shutdown_1free(JNIEnv *env, jc
        LDKShutdown this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        Shutdown_free(this_obj_conv);
 }
 
@@ -23138,6 +26747,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Shutdown_1get_1channel_
        LDKShutdown this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *Shutdown_get_channel_id(&this_ptr_conv));
        return ret_arr;
@@ -23147,6 +26757,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Shutdown_1set_1channel_1id(JNI
        LDKShutdown this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -23157,6 +26768,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Shutdown_1get_1scriptpu
        LDKShutdown this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKu8slice ret_var = Shutdown_get_scriptpubkey(&this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -23167,6 +26779,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Shutdown_1set_1scriptpubkey(JN
        LDKShutdown this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_u8Z val_ref;
        val_ref.datalen = (*env)->GetArrayLength(env, val);
        val_ref.data = MALLOC(val_ref.datalen, "LDKCVec_u8Z Bytes");
@@ -23186,6 +26799,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Shutdown_1new(JNIEnv *env,
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -23193,14 +26807,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Shutdown_1new(JNIEnv *env,
        return ret_ref;
 }
 
+static inline uint64_t Shutdown_clone_ptr(LDKShutdown *NONNULL_PTR arg) {
+       LDKShutdown ret_var = Shutdown_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Shutdown_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKShutdown arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = Shutdown_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Shutdown_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKShutdown orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKShutdown ret_var = Shutdown_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -23212,6 +26849,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ClosingSignedFeeRange_1free(JN
        LDKClosingSignedFeeRange this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ClosingSignedFeeRange_free(this_obj_conv);
 }
 
@@ -23219,6 +26857,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClosingSignedFeeRange_1get_
        LDKClosingSignedFeeRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ClosingSignedFeeRange_get_min_fee_satoshis(&this_ptr_conv);
        return ret_val;
 }
@@ -23227,6 +26866,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ClosingSignedFeeRange_1set_1mi
        LDKClosingSignedFeeRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ClosingSignedFeeRange_set_min_fee_satoshis(&this_ptr_conv, val);
 }
 
@@ -23234,6 +26874,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClosingSignedFeeRange_1get_
        LDKClosingSignedFeeRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ClosingSignedFeeRange_get_max_fee_satoshis(&this_ptr_conv);
        return ret_val;
 }
@@ -23242,6 +26883,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ClosingSignedFeeRange_1set_1ma
        LDKClosingSignedFeeRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ClosingSignedFeeRange_set_max_fee_satoshis(&this_ptr_conv, val);
 }
 
@@ -23250,6 +26892,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClosingSignedFeeRange_1new(
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -23257,14 +26900,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClosingSignedFeeRange_1new(
        return ret_ref;
 }
 
+static inline uint64_t ClosingSignedFeeRange_clone_ptr(LDKClosingSignedFeeRange *NONNULL_PTR arg) {
+       LDKClosingSignedFeeRange ret_var = ClosingSignedFeeRange_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClosingSignedFeeRange_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKClosingSignedFeeRange arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ClosingSignedFeeRange_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClosingSignedFeeRange_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKClosingSignedFeeRange orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKClosingSignedFeeRange ret_var = ClosingSignedFeeRange_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -23276,6 +26942,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ClosingSigned_1free(JNIEnv *en
        LDKClosingSigned this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ClosingSigned_free(this_obj_conv);
 }
 
@@ -23283,6 +26950,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ClosingSigned_1get_1cha
        LDKClosingSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *ClosingSigned_get_channel_id(&this_ptr_conv));
        return ret_arr;
@@ -23292,6 +26960,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ClosingSigned_1set_1channel_1i
        LDKClosingSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -23302,6 +26971,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClosingSigned_1get_1fee_1sa
        LDKClosingSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ClosingSigned_get_fee_satoshis(&this_ptr_conv);
        return ret_val;
 }
@@ -23310,6 +26980,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ClosingSigned_1set_1fee_1satos
        LDKClosingSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ClosingSigned_set_fee_satoshis(&this_ptr_conv, val);
 }
 
@@ -23317,6 +26988,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ClosingSigned_1get_1sig
        LDKClosingSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 64);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 64, ClosingSigned_get_signature(&this_ptr_conv).compact_form);
        return ret_arr;
@@ -23326,6 +26998,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ClosingSigned_1set_1signature(
        LDKClosingSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSignature val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 64);
        (*env)->GetByteArrayRegion(env, val, 0, 64, val_ref.compact_form);
@@ -23336,11 +27009,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClosingSigned_1get_1fee_1ra
        LDKClosingSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKClosingSignedFeeRange ret_var = ClosingSigned_get_fee_range(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -23353,9 +27028,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ClosingSigned_1set_1fee_1range
        LDKClosingSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKClosingSignedFeeRange val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = ClosingSignedFeeRange_clone(&val_conv);
        ClosingSigned_set_fee_range(&this_ptr_conv, val_conv);
 }
@@ -23370,11 +27047,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClosingSigned_1new(JNIEnv *
        LDKClosingSignedFeeRange fee_range_arg_conv;
        fee_range_arg_conv.inner = (void*)(fee_range_arg & (~1));
        fee_range_arg_conv.is_owned = (fee_range_arg & 1) || (fee_range_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(fee_range_arg_conv);
        fee_range_arg_conv = ClosingSignedFeeRange_clone(&fee_range_arg_conv);
        LDKClosingSigned ret_var = ClosingSigned_new(channel_id_arg_ref, fee_satoshis_arg, signature_arg_ref, fee_range_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -23382,14 +27061,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClosingSigned_1new(JNIEnv *
        return ret_ref;
 }
 
+static inline uint64_t ClosingSigned_clone_ptr(LDKClosingSigned *NONNULL_PTR arg) {
+       LDKClosingSigned ret_var = ClosingSigned_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClosingSigned_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKClosingSigned arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ClosingSigned_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClosingSigned_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKClosingSigned orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKClosingSigned ret_var = ClosingSigned_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -23401,6 +27103,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UpdateAddHTLC_1free(JNIEnv *en
        LDKUpdateAddHTLC this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        UpdateAddHTLC_free(this_obj_conv);
 }
 
@@ -23408,6 +27111,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UpdateAddHTLC_1get_1cha
        LDKUpdateAddHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *UpdateAddHTLC_get_channel_id(&this_ptr_conv));
        return ret_arr;
@@ -23417,6 +27121,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UpdateAddHTLC_1set_1channel_1i
        LDKUpdateAddHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -23427,6 +27132,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UpdateAddHTLC_1get_1htlc_1i
        LDKUpdateAddHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = UpdateAddHTLC_get_htlc_id(&this_ptr_conv);
        return ret_val;
 }
@@ -23435,6 +27141,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UpdateAddHTLC_1set_1htlc_1id(J
        LDKUpdateAddHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UpdateAddHTLC_set_htlc_id(&this_ptr_conv, val);
 }
 
@@ -23442,6 +27149,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UpdateAddHTLC_1get_1amount_
        LDKUpdateAddHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = UpdateAddHTLC_get_amount_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -23450,6 +27158,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UpdateAddHTLC_1set_1amount_1ms
        LDKUpdateAddHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UpdateAddHTLC_set_amount_msat(&this_ptr_conv, val);
 }
 
@@ -23457,6 +27166,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UpdateAddHTLC_1get_1pay
        LDKUpdateAddHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *UpdateAddHTLC_get_payment_hash(&this_ptr_conv));
        return ret_arr;
@@ -23466,6 +27176,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UpdateAddHTLC_1set_1payment_1h
        LDKUpdateAddHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -23476,6 +27187,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_UpdateAddHTLC_1get_1cltv_1e
        LDKUpdateAddHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = UpdateAddHTLC_get_cltv_expiry(&this_ptr_conv);
        return ret_val;
 }
@@ -23484,17 +27196,41 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UpdateAddHTLC_1set_1cltv_1expi
        LDKUpdateAddHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UpdateAddHTLC_set_cltv_expiry(&this_ptr_conv, val);
 }
 
+static inline uint64_t UpdateAddHTLC_clone_ptr(LDKUpdateAddHTLC *NONNULL_PTR arg) {
+       LDKUpdateAddHTLC ret_var = UpdateAddHTLC_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UpdateAddHTLC_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKUpdateAddHTLC arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = UpdateAddHTLC_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UpdateAddHTLC_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKUpdateAddHTLC orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKUpdateAddHTLC ret_var = UpdateAddHTLC_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -23506,6 +27242,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UpdateFulfillHTLC_1free(JNIEnv
        LDKUpdateFulfillHTLC this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        UpdateFulfillHTLC_free(this_obj_conv);
 }
 
@@ -23513,6 +27250,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UpdateFulfillHTLC_1get_
        LDKUpdateFulfillHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *UpdateFulfillHTLC_get_channel_id(&this_ptr_conv));
        return ret_arr;
@@ -23522,6 +27260,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UpdateFulfillHTLC_1set_1channe
        LDKUpdateFulfillHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -23532,6 +27271,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UpdateFulfillHTLC_1get_1htl
        LDKUpdateFulfillHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = UpdateFulfillHTLC_get_htlc_id(&this_ptr_conv);
        return ret_val;
 }
@@ -23540,6 +27280,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UpdateFulfillHTLC_1set_1htlc_1
        LDKUpdateFulfillHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UpdateFulfillHTLC_set_htlc_id(&this_ptr_conv, val);
 }
 
@@ -23547,6 +27288,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UpdateFulfillHTLC_1get_
        LDKUpdateFulfillHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *UpdateFulfillHTLC_get_payment_preimage(&this_ptr_conv));
        return ret_arr;
@@ -23556,6 +27298,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UpdateFulfillHTLC_1set_1paymen
        LDKUpdateFulfillHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -23573,6 +27316,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UpdateFulfillHTLC_1new(JNIE
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -23580,14 +27324,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UpdateFulfillHTLC_1new(JNIE
        return ret_ref;
 }
 
+static inline uint64_t UpdateFulfillHTLC_clone_ptr(LDKUpdateFulfillHTLC *NONNULL_PTR arg) {
+       LDKUpdateFulfillHTLC ret_var = UpdateFulfillHTLC_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UpdateFulfillHTLC_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKUpdateFulfillHTLC arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = UpdateFulfillHTLC_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UpdateFulfillHTLC_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKUpdateFulfillHTLC orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKUpdateFulfillHTLC ret_var = UpdateFulfillHTLC_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -23599,6 +27366,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UpdateFailHTLC_1free(JNIEnv *e
        LDKUpdateFailHTLC this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        UpdateFailHTLC_free(this_obj_conv);
 }
 
@@ -23606,6 +27374,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UpdateFailHTLC_1get_1ch
        LDKUpdateFailHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *UpdateFailHTLC_get_channel_id(&this_ptr_conv));
        return ret_arr;
@@ -23615,6 +27384,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UpdateFailHTLC_1set_1channel_1
        LDKUpdateFailHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -23625,6 +27395,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UpdateFailHTLC_1get_1htlc_1
        LDKUpdateFailHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = UpdateFailHTLC_get_htlc_id(&this_ptr_conv);
        return ret_val;
 }
@@ -23633,17 +27404,41 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UpdateFailHTLC_1set_1htlc_1id(
        LDKUpdateFailHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UpdateFailHTLC_set_htlc_id(&this_ptr_conv, val);
 }
 
+static inline uint64_t UpdateFailHTLC_clone_ptr(LDKUpdateFailHTLC *NONNULL_PTR arg) {
+       LDKUpdateFailHTLC ret_var = UpdateFailHTLC_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UpdateFailHTLC_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKUpdateFailHTLC arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = UpdateFailHTLC_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UpdateFailHTLC_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKUpdateFailHTLC orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKUpdateFailHTLC ret_var = UpdateFailHTLC_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -23655,6 +27450,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UpdateFailMalformedHTLC_1free(
        LDKUpdateFailMalformedHTLC this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        UpdateFailMalformedHTLC_free(this_obj_conv);
 }
 
@@ -23662,6 +27458,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UpdateFailMalformedHTLC
        LDKUpdateFailMalformedHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *UpdateFailMalformedHTLC_get_channel_id(&this_ptr_conv));
        return ret_arr;
@@ -23671,6 +27468,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UpdateFailMalformedHTLC_1set_1
        LDKUpdateFailMalformedHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -23681,6 +27479,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UpdateFailMalformedHTLC_1ge
        LDKUpdateFailMalformedHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = UpdateFailMalformedHTLC_get_htlc_id(&this_ptr_conv);
        return ret_val;
 }
@@ -23689,6 +27488,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UpdateFailMalformedHTLC_1set_1
        LDKUpdateFailMalformedHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UpdateFailMalformedHTLC_set_htlc_id(&this_ptr_conv, val);
 }
 
@@ -23696,6 +27496,7 @@ JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_UpdateFailMalformedHTLC_1ge
        LDKUpdateFailMalformedHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = UpdateFailMalformedHTLC_get_failure_code(&this_ptr_conv);
        return ret_val;
 }
@@ -23704,17 +27505,41 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UpdateFailMalformedHTLC_1set_1
        LDKUpdateFailMalformedHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UpdateFailMalformedHTLC_set_failure_code(&this_ptr_conv, val);
 }
 
+static inline uint64_t UpdateFailMalformedHTLC_clone_ptr(LDKUpdateFailMalformedHTLC *NONNULL_PTR arg) {
+       LDKUpdateFailMalformedHTLC ret_var = UpdateFailMalformedHTLC_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UpdateFailMalformedHTLC_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKUpdateFailMalformedHTLC arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = UpdateFailMalformedHTLC_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UpdateFailMalformedHTLC_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKUpdateFailMalformedHTLC orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKUpdateFailMalformedHTLC ret_var = UpdateFailMalformedHTLC_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -23726,6 +27551,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CommitmentSigned_1free(JNIEnv
        LDKCommitmentSigned this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        CommitmentSigned_free(this_obj_conv);
 }
 
@@ -23733,6 +27559,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_CommitmentSigned_1get_1
        LDKCommitmentSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *CommitmentSigned_get_channel_id(&this_ptr_conv));
        return ret_arr;
@@ -23742,6 +27569,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CommitmentSigned_1set_1channel
        LDKCommitmentSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -23752,6 +27580,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_CommitmentSigned_1get_1
        LDKCommitmentSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 64);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 64, CommitmentSigned_get_signature(&this_ptr_conv).compact_form);
        return ret_arr;
@@ -23761,6 +27590,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CommitmentSigned_1set_1signatu
        LDKCommitmentSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSignature val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 64);
        (*env)->GetByteArrayRegion(env, val, 0, 64, val_ref.compact_form);
@@ -23771,6 +27601,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CommitmentSigned_1set_1htlc_1s
        LDKCommitmentSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_SignatureZ val_constr;
        val_constr.datalen = (*env)->GetArrayLength(env, val);
        if (val_constr.datalen > 0)
@@ -23811,6 +27642,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CommitmentSigned_1new(JNIEn
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -23818,14 +27650,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CommitmentSigned_1new(JNIEn
        return ret_ref;
 }
 
+static inline uint64_t CommitmentSigned_clone_ptr(LDKCommitmentSigned *NONNULL_PTR arg) {
+       LDKCommitmentSigned ret_var = CommitmentSigned_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CommitmentSigned_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCommitmentSigned arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = CommitmentSigned_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CommitmentSigned_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCommitmentSigned orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKCommitmentSigned ret_var = CommitmentSigned_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -23837,6 +27692,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RevokeAndACK_1free(JNIEnv *env
        LDKRevokeAndACK this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        RevokeAndACK_free(this_obj_conv);
 }
 
@@ -23844,6 +27700,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_RevokeAndACK_1get_1chan
        LDKRevokeAndACK this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *RevokeAndACK_get_channel_id(&this_ptr_conv));
        return ret_arr;
@@ -23853,6 +27710,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RevokeAndACK_1set_1channel_1id
        LDKRevokeAndACK this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -23863,6 +27721,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_RevokeAndACK_1get_1per_
        LDKRevokeAndACK this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *RevokeAndACK_get_per_commitment_secret(&this_ptr_conv));
        return ret_arr;
@@ -23872,6 +27731,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RevokeAndACK_1set_1per_1commit
        LDKRevokeAndACK this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -23882,6 +27742,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_RevokeAndACK_1get_1next
        LDKRevokeAndACK this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, RevokeAndACK_get_next_per_commitment_point(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -23891,6 +27752,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RevokeAndACK_1set_1next_1per_1
        LDKRevokeAndACK this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -23911,6 +27773,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RevokeAndACK_1new(JNIEnv *e
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -23918,14 +27781,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RevokeAndACK_1new(JNIEnv *e
        return ret_ref;
 }
 
+static inline uint64_t RevokeAndACK_clone_ptr(LDKRevokeAndACK *NONNULL_PTR arg) {
+       LDKRevokeAndACK ret_var = RevokeAndACK_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RevokeAndACK_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKRevokeAndACK arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = RevokeAndACK_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RevokeAndACK_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKRevokeAndACK orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKRevokeAndACK ret_var = RevokeAndACK_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -23937,6 +27823,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UpdateFee_1free(JNIEnv *env, j
        LDKUpdateFee this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        UpdateFee_free(this_obj_conv);
 }
 
@@ -23944,6 +27831,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UpdateFee_1get_1channel
        LDKUpdateFee this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *UpdateFee_get_channel_id(&this_ptr_conv));
        return ret_arr;
@@ -23953,6 +27841,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UpdateFee_1set_1channel_1id(JN
        LDKUpdateFee this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -23963,6 +27852,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_UpdateFee_1get_1feerate_1pe
        LDKUpdateFee this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = UpdateFee_get_feerate_per_kw(&this_ptr_conv);
        return ret_val;
 }
@@ -23971,6 +27861,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UpdateFee_1set_1feerate_1per_1
        LDKUpdateFee this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UpdateFee_set_feerate_per_kw(&this_ptr_conv, val);
 }
 
@@ -23982,6 +27873,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UpdateFee_1new(JNIEnv *env,
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -23989,14 +27881,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UpdateFee_1new(JNIEnv *env,
        return ret_ref;
 }
 
+static inline uint64_t UpdateFee_clone_ptr(LDKUpdateFee *NONNULL_PTR arg) {
+       LDKUpdateFee ret_var = UpdateFee_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UpdateFee_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKUpdateFee arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = UpdateFee_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UpdateFee_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKUpdateFee orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKUpdateFee ret_var = UpdateFee_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24008,6 +27923,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DataLossProtect_1free(JNIEnv *
        LDKDataLossProtect this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        DataLossProtect_free(this_obj_conv);
 }
 
@@ -24015,6 +27931,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_DataLossProtect_1get_1y
        LDKDataLossProtect this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *DataLossProtect_get_your_last_per_commitment_secret(&this_ptr_conv));
        return ret_arr;
@@ -24024,6 +27941,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DataLossProtect_1set_1your_1la
        LDKDataLossProtect this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -24034,6 +27952,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_DataLossProtect_1get_1m
        LDKDataLossProtect this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, DataLossProtect_get_my_current_per_commitment_point(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -24043,6 +27962,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DataLossProtect_1set_1my_1curr
        LDKDataLossProtect this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -24060,6 +27980,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DataLossProtect_1new(JNIEnv
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24067,14 +27988,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DataLossProtect_1new(JNIEnv
        return ret_ref;
 }
 
+static inline uint64_t DataLossProtect_clone_ptr(LDKDataLossProtect *NONNULL_PTR arg) {
+       LDKDataLossProtect ret_var = DataLossProtect_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DataLossProtect_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKDataLossProtect arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = DataLossProtect_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DataLossProtect_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKDataLossProtect orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKDataLossProtect ret_var = DataLossProtect_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24086,6 +28030,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelReestablish_1free(JNIEn
        LDKChannelReestablish this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelReestablish_free(this_obj_conv);
 }
 
@@ -24093,6 +28038,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelReestablish_1get
        LDKChannelReestablish this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *ChannelReestablish_get_channel_id(&this_ptr_conv));
        return ret_arr;
@@ -24102,6 +28048,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelReestablish_1set_1chann
        LDKChannelReestablish this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -24112,6 +28059,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelReestablish_1get_1ne
        LDKChannelReestablish this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelReestablish_get_next_local_commitment_number(&this_ptr_conv);
        return ret_val;
 }
@@ -24120,6 +28068,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelReestablish_1set_1next_
        LDKChannelReestablish this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelReestablish_set_next_local_commitment_number(&this_ptr_conv, val);
 }
 
@@ -24127,6 +28076,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelReestablish_1get_1ne
        LDKChannelReestablish this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelReestablish_get_next_remote_commitment_number(&this_ptr_conv);
        return ret_val;
 }
@@ -24135,17 +28085,41 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelReestablish_1set_1next_
        LDKChannelReestablish this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelReestablish_set_next_remote_commitment_number(&this_ptr_conv, val);
 }
 
+static inline uint64_t ChannelReestablish_clone_ptr(LDKChannelReestablish *NONNULL_PTR arg) {
+       LDKChannelReestablish ret_var = ChannelReestablish_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelReestablish_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKChannelReestablish arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChannelReestablish_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelReestablish_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKChannelReestablish orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChannelReestablish ret_var = ChannelReestablish_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24157,6 +28131,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_AnnouncementSignatures_1free(J
        LDKAnnouncementSignatures this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        AnnouncementSignatures_free(this_obj_conv);
 }
 
@@ -24164,6 +28139,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_AnnouncementSignatures_
        LDKAnnouncementSignatures this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *AnnouncementSignatures_get_channel_id(&this_ptr_conv));
        return ret_arr;
@@ -24173,6 +28149,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_AnnouncementSignatures_1set_1c
        LDKAnnouncementSignatures this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -24183,6 +28160,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_AnnouncementSignatures_1get
        LDKAnnouncementSignatures this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = AnnouncementSignatures_get_short_channel_id(&this_ptr_conv);
        return ret_val;
 }
@@ -24191,6 +28169,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_AnnouncementSignatures_1set_1s
        LDKAnnouncementSignatures this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        AnnouncementSignatures_set_short_channel_id(&this_ptr_conv, val);
 }
 
@@ -24198,6 +28177,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_AnnouncementSignatures_
        LDKAnnouncementSignatures this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 64);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 64, AnnouncementSignatures_get_node_signature(&this_ptr_conv).compact_form);
        return ret_arr;
@@ -24207,6 +28187,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_AnnouncementSignatures_1set_1n
        LDKAnnouncementSignatures this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSignature val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 64);
        (*env)->GetByteArrayRegion(env, val, 0, 64, val_ref.compact_form);
@@ -24217,6 +28198,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_AnnouncementSignatures_
        LDKAnnouncementSignatures this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 64);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 64, AnnouncementSignatures_get_bitcoin_signature(&this_ptr_conv).compact_form);
        return ret_arr;
@@ -24226,6 +28208,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_AnnouncementSignatures_1set_1b
        LDKAnnouncementSignatures this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSignature val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 64);
        (*env)->GetByteArrayRegion(env, val, 0, 64, val_ref.compact_form);
@@ -24246,6 +28229,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_AnnouncementSignatures_1new
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24253,14 +28237,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_AnnouncementSignatures_1new
        return ret_ref;
 }
 
+static inline uint64_t AnnouncementSignatures_clone_ptr(LDKAnnouncementSignatures *NONNULL_PTR arg) {
+       LDKAnnouncementSignatures ret_var = AnnouncementSignatures_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_AnnouncementSignatures_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKAnnouncementSignatures arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = AnnouncementSignatures_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_AnnouncementSignatures_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKAnnouncementSignatures orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKAnnouncementSignatures ret_var = AnnouncementSignatures_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24277,6 +28284,18 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NetAddress_1free(JNIEnv *env,
        NetAddress_free(this_ptr_conv);
 }
 
+static inline uint64_t NetAddress_clone_ptr(LDKNetAddress *NONNULL_PTR arg) {
+       LDKNetAddress *ret_copy = MALLOC(sizeof(LDKNetAddress), "LDKNetAddress");
+       *ret_copy = NetAddress_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetAddress_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKNetAddress* arg_conv = (LDKNetAddress*)arg;
+       int64_t ret_val = NetAddress_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetAddress_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKNetAddress* orig_conv = (LDKNetAddress*)orig;
        LDKNetAddress *ret_copy = MALLOC(sizeof(LDKNetAddress), "LDKNetAddress");
@@ -24348,6 +28367,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedNodeAnnouncement_1free
        LDKUnsignedNodeAnnouncement this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        UnsignedNodeAnnouncement_free(this_obj_conv);
 }
 
@@ -24355,10 +28375,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedNodeAnnouncement_1g
        LDKUnsignedNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNodeFeatures ret_var = UnsignedNodeAnnouncement_get_features(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24370,9 +28392,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedNodeAnnouncement_1set_
        LDKUnsignedNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNodeFeatures val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = NodeFeatures_clone(&val_conv);
        UnsignedNodeAnnouncement_set_features(&this_ptr_conv, val_conv);
 }
@@ -24381,6 +28405,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_UnsignedNodeAnnouncement_1g
        LDKUnsignedNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = UnsignedNodeAnnouncement_get_timestamp(&this_ptr_conv);
        return ret_val;
 }
@@ -24389,6 +28414,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedNodeAnnouncement_1set_
        LDKUnsignedNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UnsignedNodeAnnouncement_set_timestamp(&this_ptr_conv, val);
 }
 
@@ -24396,6 +28422,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedNodeAnnouncemen
        LDKUnsignedNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, UnsignedNodeAnnouncement_get_node_id(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -24405,6 +28432,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedNodeAnnouncement_1set_
        LDKUnsignedNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -24415,6 +28443,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedNodeAnnouncemen
        LDKUnsignedNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 3);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 3, *UnsignedNodeAnnouncement_get_rgb(&this_ptr_conv));
        return ret_arr;
@@ -24424,6 +28453,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedNodeAnnouncement_1set_
        LDKUnsignedNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThreeBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 3);
        (*env)->GetByteArrayRegion(env, val, 0, 3, val_ref.data);
@@ -24434,6 +28464,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedNodeAnnouncemen
        LDKUnsignedNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *UnsignedNodeAnnouncement_get_alias(&this_ptr_conv));
        return ret_arr;
@@ -24443,6 +28474,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedNodeAnnouncement_1set_
        LDKUnsignedNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -24453,6 +28485,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedNodeAnnouncement_1set_
        LDKUnsignedNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_NetAddressZ val_constr;
        val_constr.datalen = (*env)->GetArrayLength(env, val);
        if (val_constr.datalen > 0)
@@ -24472,14 +28505,37 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedNodeAnnouncement_1set_
        UnsignedNodeAnnouncement_set_addresses(&this_ptr_conv, val_constr);
 }
 
+static inline uint64_t UnsignedNodeAnnouncement_clone_ptr(LDKUnsignedNodeAnnouncement *NONNULL_PTR arg) {
+       LDKUnsignedNodeAnnouncement ret_var = UnsignedNodeAnnouncement_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedNodeAnnouncement_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKUnsignedNodeAnnouncement arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = UnsignedNodeAnnouncement_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedNodeAnnouncement_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKUnsignedNodeAnnouncement orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKUnsignedNodeAnnouncement ret_var = UnsignedNodeAnnouncement_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24491,6 +28547,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncement_1free(JNIEnv
        LDKNodeAnnouncement this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        NodeAnnouncement_free(this_obj_conv);
 }
 
@@ -24498,6 +28555,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NodeAnnouncement_1get_1
        LDKNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 64);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 64, NodeAnnouncement_get_signature(&this_ptr_conv).compact_form);
        return ret_arr;
@@ -24507,6 +28565,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncement_1set_1signatu
        LDKNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSignature val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 64);
        (*env)->GetByteArrayRegion(env, val, 0, 64, val_ref.compact_form);
@@ -24517,10 +28576,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncement_1get_1cont
        LDKNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKUnsignedNodeAnnouncement ret_var = NodeAnnouncement_get_contents(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24532,9 +28593,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncement_1set_1content
        LDKNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKUnsignedNodeAnnouncement val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = UnsignedNodeAnnouncement_clone(&val_conv);
        NodeAnnouncement_set_contents(&this_ptr_conv, val_conv);
 }
@@ -24546,11 +28609,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncement_1new(JNIEn
        LDKUnsignedNodeAnnouncement contents_arg_conv;
        contents_arg_conv.inner = (void*)(contents_arg & (~1));
        contents_arg_conv.is_owned = (contents_arg & 1) || (contents_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(contents_arg_conv);
        contents_arg_conv = UnsignedNodeAnnouncement_clone(&contents_arg_conv);
        LDKNodeAnnouncement ret_var = NodeAnnouncement_new(signature_arg_ref, contents_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24558,14 +28623,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncement_1new(JNIEn
        return ret_ref;
 }
 
+static inline uint64_t NodeAnnouncement_clone_ptr(LDKNodeAnnouncement *NONNULL_PTR arg) {
+       LDKNodeAnnouncement ret_var = NodeAnnouncement_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncement_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKNodeAnnouncement arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = NodeAnnouncement_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncement_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKNodeAnnouncement orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKNodeAnnouncement ret_var = NodeAnnouncement_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24577,6 +28665,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedChannelAnnouncement_1f
        LDKUnsignedChannelAnnouncement this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        UnsignedChannelAnnouncement_free(this_obj_conv);
 }
 
@@ -24584,10 +28673,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedChannelAnnouncement
        LDKUnsignedChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelFeatures ret_var = UnsignedChannelAnnouncement_get_features(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24599,9 +28690,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedChannelAnnouncement_1s
        LDKUnsignedChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelFeatures val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = ChannelFeatures_clone(&val_conv);
        UnsignedChannelAnnouncement_set_features(&this_ptr_conv, val_conv);
 }
@@ -24610,6 +28703,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedChannelAnnounce
        LDKUnsignedChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *UnsignedChannelAnnouncement_get_chain_hash(&this_ptr_conv));
        return ret_arr;
@@ -24619,6 +28713,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedChannelAnnouncement_1s
        LDKUnsignedChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -24629,6 +28724,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedChannelAnnouncement
        LDKUnsignedChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = UnsignedChannelAnnouncement_get_short_channel_id(&this_ptr_conv);
        return ret_val;
 }
@@ -24637,6 +28733,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedChannelAnnouncement_1s
        LDKUnsignedChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UnsignedChannelAnnouncement_set_short_channel_id(&this_ptr_conv, val);
 }
 
@@ -24644,6 +28741,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedChannelAnnounce
        LDKUnsignedChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, UnsignedChannelAnnouncement_get_node_id_1(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -24653,6 +28751,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedChannelAnnouncement_1s
        LDKUnsignedChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -24663,6 +28762,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedChannelAnnounce
        LDKUnsignedChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, UnsignedChannelAnnouncement_get_node_id_2(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -24672,6 +28772,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedChannelAnnouncement_1s
        LDKUnsignedChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -24682,6 +28783,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedChannelAnnounce
        LDKUnsignedChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, UnsignedChannelAnnouncement_get_bitcoin_key_1(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -24691,6 +28793,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedChannelAnnouncement_1s
        LDKUnsignedChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -24701,6 +28804,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedChannelAnnounce
        LDKUnsignedChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, UnsignedChannelAnnouncement_get_bitcoin_key_2(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -24710,20 +28814,44 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedChannelAnnouncement_1s
        LDKUnsignedChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
        UnsignedChannelAnnouncement_set_bitcoin_key_2(&this_ptr_conv, val_ref);
 }
 
+static inline uint64_t UnsignedChannelAnnouncement_clone_ptr(LDKUnsignedChannelAnnouncement *NONNULL_PTR arg) {
+       LDKUnsignedChannelAnnouncement ret_var = UnsignedChannelAnnouncement_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedChannelAnnouncement_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKUnsignedChannelAnnouncement arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = UnsignedChannelAnnouncement_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedChannelAnnouncement_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKUnsignedChannelAnnouncement orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKUnsignedChannelAnnouncement ret_var = UnsignedChannelAnnouncement_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24735,6 +28863,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelAnnouncement_1free(JNIE
        LDKChannelAnnouncement this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelAnnouncement_free(this_obj_conv);
 }
 
@@ -24742,6 +28871,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelAnnouncement_1ge
        LDKChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 64);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 64, ChannelAnnouncement_get_node_signature_1(&this_ptr_conv).compact_form);
        return ret_arr;
@@ -24751,6 +28881,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelAnnouncement_1set_1node
        LDKChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSignature val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 64);
        (*env)->GetByteArrayRegion(env, val, 0, 64, val_ref.compact_form);
@@ -24761,6 +28892,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelAnnouncement_1ge
        LDKChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 64);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 64, ChannelAnnouncement_get_node_signature_2(&this_ptr_conv).compact_form);
        return ret_arr;
@@ -24770,6 +28902,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelAnnouncement_1set_1node
        LDKChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSignature val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 64);
        (*env)->GetByteArrayRegion(env, val, 0, 64, val_ref.compact_form);
@@ -24780,6 +28913,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelAnnouncement_1ge
        LDKChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 64);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 64, ChannelAnnouncement_get_bitcoin_signature_1(&this_ptr_conv).compact_form);
        return ret_arr;
@@ -24789,6 +28923,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelAnnouncement_1set_1bitc
        LDKChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSignature val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 64);
        (*env)->GetByteArrayRegion(env, val, 0, 64, val_ref.compact_form);
@@ -24799,6 +28934,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelAnnouncement_1ge
        LDKChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 64);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 64, ChannelAnnouncement_get_bitcoin_signature_2(&this_ptr_conv).compact_form);
        return ret_arr;
@@ -24808,6 +28944,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelAnnouncement_1set_1bitc
        LDKChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSignature val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 64);
        (*env)->GetByteArrayRegion(env, val, 0, 64, val_ref.compact_form);
@@ -24818,10 +28955,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelAnnouncement_1get_1c
        LDKChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKUnsignedChannelAnnouncement ret_var = ChannelAnnouncement_get_contents(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24833,9 +28972,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelAnnouncement_1set_1cont
        LDKChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKUnsignedChannelAnnouncement val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = UnsignedChannelAnnouncement_clone(&val_conv);
        ChannelAnnouncement_set_contents(&this_ptr_conv, val_conv);
 }
@@ -24856,11 +28997,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelAnnouncement_1new(JN
        LDKUnsignedChannelAnnouncement contents_arg_conv;
        contents_arg_conv.inner = (void*)(contents_arg & (~1));
        contents_arg_conv.is_owned = (contents_arg & 1) || (contents_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(contents_arg_conv);
        contents_arg_conv = UnsignedChannelAnnouncement_clone(&contents_arg_conv);
        LDKChannelAnnouncement ret_var = ChannelAnnouncement_new(node_signature_1_arg_ref, node_signature_2_arg_ref, bitcoin_signature_1_arg_ref, bitcoin_signature_2_arg_ref, contents_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24868,14 +29011,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelAnnouncement_1new(JN
        return ret_ref;
 }
 
+static inline uint64_t ChannelAnnouncement_clone_ptr(LDKChannelAnnouncement *NONNULL_PTR arg) {
+       LDKChannelAnnouncement ret_var = ChannelAnnouncement_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelAnnouncement_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKChannelAnnouncement arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChannelAnnouncement_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelAnnouncement_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKChannelAnnouncement orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChannelAnnouncement ret_var = ChannelAnnouncement_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24887,6 +29053,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedChannelUpdate_1free(JN
        LDKUnsignedChannelUpdate this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        UnsignedChannelUpdate_free(this_obj_conv);
 }
 
@@ -24894,6 +29061,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedChannelUpdate_1
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *UnsignedChannelUpdate_get_chain_hash(&this_ptr_conv));
        return ret_arr;
@@ -24903,6 +29071,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedChannelUpdate_1set_1ch
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -24913,6 +29082,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedChannelUpdate_1get_
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = UnsignedChannelUpdate_get_short_channel_id(&this_ptr_conv);
        return ret_val;
 }
@@ -24921,6 +29091,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedChannelUpdate_1set_1sh
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UnsignedChannelUpdate_set_short_channel_id(&this_ptr_conv, val);
 }
 
@@ -24928,6 +29099,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_UnsignedChannelUpdate_1get_
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = UnsignedChannelUpdate_get_timestamp(&this_ptr_conv);
        return ret_val;
 }
@@ -24936,6 +29108,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedChannelUpdate_1set_1ti
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UnsignedChannelUpdate_set_timestamp(&this_ptr_conv, val);
 }
 
@@ -24943,6 +29116,7 @@ JNIEXPORT int8_t JNICALL Java_org_ldk_impl_bindings_UnsignedChannelUpdate_1get_1
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_t ret_val = UnsignedChannelUpdate_get_flags(&this_ptr_conv);
        return ret_val;
 }
@@ -24951,6 +29125,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedChannelUpdate_1set_1fl
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UnsignedChannelUpdate_set_flags(&this_ptr_conv, val);
 }
 
@@ -24958,6 +29133,7 @@ JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_UnsignedChannelUpdate_1get_
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = UnsignedChannelUpdate_get_cltv_expiry_delta(&this_ptr_conv);
        return ret_val;
 }
@@ -24966,6 +29142,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedChannelUpdate_1set_1cl
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UnsignedChannelUpdate_set_cltv_expiry_delta(&this_ptr_conv, val);
 }
 
@@ -24973,6 +29150,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedChannelUpdate_1get_
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = UnsignedChannelUpdate_get_htlc_minimum_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -24981,6 +29159,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedChannelUpdate_1set_1ht
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UnsignedChannelUpdate_set_htlc_minimum_msat(&this_ptr_conv, val);
 }
 
@@ -24988,6 +29167,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_UnsignedChannelUpdate_1get_
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = UnsignedChannelUpdate_get_fee_base_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -24996,6 +29176,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedChannelUpdate_1set_1fe
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UnsignedChannelUpdate_set_fee_base_msat(&this_ptr_conv, val);
 }
 
@@ -25003,6 +29184,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_UnsignedChannelUpdate_1get_
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = UnsignedChannelUpdate_get_fee_proportional_millionths(&this_ptr_conv);
        return ret_val;
 }
@@ -25011,17 +29193,41 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedChannelUpdate_1set_1fe
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UnsignedChannelUpdate_set_fee_proportional_millionths(&this_ptr_conv, val);
 }
 
+static inline uint64_t UnsignedChannelUpdate_clone_ptr(LDKUnsignedChannelUpdate *NONNULL_PTR arg) {
+       LDKUnsignedChannelUpdate ret_var = UnsignedChannelUpdate_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedChannelUpdate_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKUnsignedChannelUpdate arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = UnsignedChannelUpdate_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_UnsignedChannelUpdate_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKUnsignedChannelUpdate orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKUnsignedChannelUpdate ret_var = UnsignedChannelUpdate_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25033,6 +29239,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelUpdate_1free(JNIEnv *en
        LDKChannelUpdate this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelUpdate_free(this_obj_conv);
 }
 
@@ -25040,6 +29247,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelUpdate_1get_1sig
        LDKChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 64);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 64, ChannelUpdate_get_signature(&this_ptr_conv).compact_form);
        return ret_arr;
@@ -25049,6 +29257,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelUpdate_1set_1signature(
        LDKChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSignature val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 64);
        (*env)->GetByteArrayRegion(env, val, 0, 64, val_ref.compact_form);
@@ -25059,10 +29268,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUpdate_1get_1content
        LDKChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKUnsignedChannelUpdate ret_var = ChannelUpdate_get_contents(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25074,9 +29285,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelUpdate_1set_1contents(J
        LDKChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKUnsignedChannelUpdate val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = UnsignedChannelUpdate_clone(&val_conv);
        ChannelUpdate_set_contents(&this_ptr_conv, val_conv);
 }
@@ -25088,11 +29301,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUpdate_1new(JNIEnv *
        LDKUnsignedChannelUpdate contents_arg_conv;
        contents_arg_conv.inner = (void*)(contents_arg & (~1));
        contents_arg_conv.is_owned = (contents_arg & 1) || (contents_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(contents_arg_conv);
        contents_arg_conv = UnsignedChannelUpdate_clone(&contents_arg_conv);
        LDKChannelUpdate ret_var = ChannelUpdate_new(signature_arg_ref, contents_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25100,14 +29315,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUpdate_1new(JNIEnv *
        return ret_ref;
 }
 
+static inline uint64_t ChannelUpdate_clone_ptr(LDKChannelUpdate *NONNULL_PTR arg) {
+       LDKChannelUpdate ret_var = ChannelUpdate_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUpdate_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKChannelUpdate arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChannelUpdate_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelUpdate_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKChannelUpdate orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChannelUpdate ret_var = ChannelUpdate_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25119,6 +29357,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_QueryChannelRange_1free(JNIEnv
        LDKQueryChannelRange this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        QueryChannelRange_free(this_obj_conv);
 }
 
@@ -25126,6 +29365,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_QueryChannelRange_1get_
        LDKQueryChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *QueryChannelRange_get_chain_hash(&this_ptr_conv));
        return ret_arr;
@@ -25135,6 +29375,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_QueryChannelRange_1set_1chain_
        LDKQueryChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -25145,6 +29386,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_QueryChannelRange_1get_1fir
        LDKQueryChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = QueryChannelRange_get_first_blocknum(&this_ptr_conv);
        return ret_val;
 }
@@ -25153,6 +29395,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_QueryChannelRange_1set_1first_
        LDKQueryChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        QueryChannelRange_set_first_blocknum(&this_ptr_conv, val);
 }
 
@@ -25160,6 +29403,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_QueryChannelRange_1get_1num
        LDKQueryChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = QueryChannelRange_get_number_of_blocks(&this_ptr_conv);
        return ret_val;
 }
@@ -25168,6 +29412,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_QueryChannelRange_1set_1number
        LDKQueryChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        QueryChannelRange_set_number_of_blocks(&this_ptr_conv, val);
 }
 
@@ -25179,6 +29424,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_QueryChannelRange_1new(JNIE
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25186,14 +29432,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_QueryChannelRange_1new(JNIE
        return ret_ref;
 }
 
+static inline uint64_t QueryChannelRange_clone_ptr(LDKQueryChannelRange *NONNULL_PTR arg) {
+       LDKQueryChannelRange ret_var = QueryChannelRange_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_QueryChannelRange_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKQueryChannelRange arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = QueryChannelRange_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_QueryChannelRange_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKQueryChannelRange orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKQueryChannelRange ret_var = QueryChannelRange_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25205,6 +29474,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ReplyChannelRange_1free(JNIEnv
        LDKReplyChannelRange this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ReplyChannelRange_free(this_obj_conv);
 }
 
@@ -25212,6 +29482,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ReplyChannelRange_1get_
        LDKReplyChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *ReplyChannelRange_get_chain_hash(&this_ptr_conv));
        return ret_arr;
@@ -25221,6 +29492,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ReplyChannelRange_1set_1chain_
        LDKReplyChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -25231,6 +29503,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_ReplyChannelRange_1get_1fir
        LDKReplyChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = ReplyChannelRange_get_first_blocknum(&this_ptr_conv);
        return ret_val;
 }
@@ -25239,6 +29512,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ReplyChannelRange_1set_1first_
        LDKReplyChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ReplyChannelRange_set_first_blocknum(&this_ptr_conv, val);
 }
 
@@ -25246,6 +29520,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_ReplyChannelRange_1get_1num
        LDKReplyChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = ReplyChannelRange_get_number_of_blocks(&this_ptr_conv);
        return ret_val;
 }
@@ -25254,6 +29529,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ReplyChannelRange_1set_1number
        LDKReplyChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ReplyChannelRange_set_number_of_blocks(&this_ptr_conv, val);
 }
 
@@ -25261,6 +29537,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ReplyChannelRange_1get_1sy
        LDKReplyChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        jboolean ret_val = ReplyChannelRange_get_sync_complete(&this_ptr_conv);
        return ret_val;
 }
@@ -25269,6 +29546,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ReplyChannelRange_1set_1sync_1
        LDKReplyChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ReplyChannelRange_set_sync_complete(&this_ptr_conv, val);
 }
 
@@ -25276,6 +29554,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ReplyChannelRange_1set_1short_
        LDKReplyChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_u64Z val_constr;
        val_constr.datalen = (*env)->GetArrayLength(env, val);
        if (val_constr.datalen > 0)
@@ -25311,6 +29590,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ReplyChannelRange_1new(JNIE
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25318,14 +29598,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ReplyChannelRange_1new(JNIE
        return ret_ref;
 }
 
+static inline uint64_t ReplyChannelRange_clone_ptr(LDKReplyChannelRange *NONNULL_PTR arg) {
+       LDKReplyChannelRange ret_var = ReplyChannelRange_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ReplyChannelRange_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKReplyChannelRange arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ReplyChannelRange_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ReplyChannelRange_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKReplyChannelRange orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKReplyChannelRange ret_var = ReplyChannelRange_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25337,6 +29640,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_QueryShortChannelIds_1free(JNI
        LDKQueryShortChannelIds this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        QueryShortChannelIds_free(this_obj_conv);
 }
 
@@ -25344,6 +29648,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_QueryShortChannelIds_1g
        LDKQueryShortChannelIds this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *QueryShortChannelIds_get_chain_hash(&this_ptr_conv));
        return ret_arr;
@@ -25353,6 +29658,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_QueryShortChannelIds_1set_1cha
        LDKQueryShortChannelIds this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -25363,6 +29669,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_QueryShortChannelIds_1set_1sho
        LDKQueryShortChannelIds this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_u64Z val_constr;
        val_constr.datalen = (*env)->GetArrayLength(env, val);
        if (val_constr.datalen > 0)
@@ -25398,6 +29705,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_QueryShortChannelIds_1new(J
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25405,14 +29713,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_QueryShortChannelIds_1new(J
        return ret_ref;
 }
 
+static inline uint64_t QueryShortChannelIds_clone_ptr(LDKQueryShortChannelIds *NONNULL_PTR arg) {
+       LDKQueryShortChannelIds ret_var = QueryShortChannelIds_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_QueryShortChannelIds_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKQueryShortChannelIds arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = QueryShortChannelIds_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_QueryShortChannelIds_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKQueryShortChannelIds orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKQueryShortChannelIds ret_var = QueryShortChannelIds_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25424,6 +29755,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ReplyShortChannelIdsEnd_1free(
        LDKReplyShortChannelIdsEnd this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ReplyShortChannelIdsEnd_free(this_obj_conv);
 }
 
@@ -25431,6 +29763,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ReplyShortChannelIdsEnd
        LDKReplyShortChannelIdsEnd this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *ReplyShortChannelIdsEnd_get_chain_hash(&this_ptr_conv));
        return ret_arr;
@@ -25440,6 +29773,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ReplyShortChannelIdsEnd_1set_1
        LDKReplyShortChannelIdsEnd this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -25450,6 +29784,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ReplyShortChannelIdsEnd_1g
        LDKReplyShortChannelIdsEnd this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        jboolean ret_val = ReplyShortChannelIdsEnd_get_full_information(&this_ptr_conv);
        return ret_val;
 }
@@ -25458,6 +29793,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ReplyShortChannelIdsEnd_1set_1
        LDKReplyShortChannelIdsEnd this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ReplyShortChannelIdsEnd_set_full_information(&this_ptr_conv, val);
 }
 
@@ -25469,6 +29805,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ReplyShortChannelIdsEnd_1ne
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25476,14 +29813,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ReplyShortChannelIdsEnd_1ne
        return ret_ref;
 }
 
+static inline uint64_t ReplyShortChannelIdsEnd_clone_ptr(LDKReplyShortChannelIdsEnd *NONNULL_PTR arg) {
+       LDKReplyShortChannelIdsEnd ret_var = ReplyShortChannelIdsEnd_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ReplyShortChannelIdsEnd_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKReplyShortChannelIdsEnd arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ReplyShortChannelIdsEnd_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ReplyShortChannelIdsEnd_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKReplyShortChannelIdsEnd orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKReplyShortChannelIdsEnd ret_var = ReplyShortChannelIdsEnd_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25495,6 +29855,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_GossipTimestampFilter_1free(JN
        LDKGossipTimestampFilter this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        GossipTimestampFilter_free(this_obj_conv);
 }
 
@@ -25502,6 +29863,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_GossipTimestampFilter_1
        LDKGossipTimestampFilter this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *GossipTimestampFilter_get_chain_hash(&this_ptr_conv));
        return ret_arr;
@@ -25511,6 +29873,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_GossipTimestampFilter_1set_1ch
        LDKGossipTimestampFilter this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -25521,6 +29884,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_GossipTimestampFilter_1get_
        LDKGossipTimestampFilter this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = GossipTimestampFilter_get_first_timestamp(&this_ptr_conv);
        return ret_val;
 }
@@ -25529,6 +29893,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_GossipTimestampFilter_1set_1fi
        LDKGossipTimestampFilter this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        GossipTimestampFilter_set_first_timestamp(&this_ptr_conv, val);
 }
 
@@ -25536,6 +29901,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_GossipTimestampFilter_1get_
        LDKGossipTimestampFilter this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = GossipTimestampFilter_get_timestamp_range(&this_ptr_conv);
        return ret_val;
 }
@@ -25544,6 +29910,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_GossipTimestampFilter_1set_1ti
        LDKGossipTimestampFilter this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        GossipTimestampFilter_set_timestamp_range(&this_ptr_conv, val);
 }
 
@@ -25555,6 +29922,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_GossipTimestampFilter_1new(
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25562,14 +29930,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_GossipTimestampFilter_1new(
        return ret_ref;
 }
 
+static inline uint64_t GossipTimestampFilter_clone_ptr(LDKGossipTimestampFilter *NONNULL_PTR arg) {
+       LDKGossipTimestampFilter ret_var = GossipTimestampFilter_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_GossipTimestampFilter_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKGossipTimestampFilter arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = GossipTimestampFilter_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_GossipTimestampFilter_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKGossipTimestampFilter orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKGossipTimestampFilter ret_var = GossipTimestampFilter_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25586,6 +29977,18 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ErrorAction_1free(JNIEnv *env,
        ErrorAction_free(this_ptr_conv);
 }
 
+static inline uint64_t ErrorAction_clone_ptr(LDKErrorAction *NONNULL_PTR arg) {
+       LDKErrorAction *ret_copy = MALLOC(sizeof(LDKErrorAction), "LDKErrorAction");
+       *ret_copy = ErrorAction_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ErrorAction_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKErrorAction* arg_conv = (LDKErrorAction*)arg;
+       int64_t ret_val = ErrorAction_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ErrorAction_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKErrorAction* orig_conv = (LDKErrorAction*)orig;
        LDKErrorAction *ret_copy = MALLOC(sizeof(LDKErrorAction), "LDKErrorAction");
@@ -25598,6 +30001,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ErrorAction_1disconnect_1pe
        LDKErrorMessage msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = ErrorMessage_clone(&msg_conv);
        LDKErrorAction *ret_copy = MALLOC(sizeof(LDKErrorAction), "LDKErrorAction");
        *ret_copy = ErrorAction_disconnect_peer(msg_conv);
@@ -25624,6 +30028,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ErrorAction_1send_1error_1m
        LDKErrorMessage msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = ErrorMessage_clone(&msg_conv);
        LDKErrorAction *ret_copy = MALLOC(sizeof(LDKErrorAction), "LDKErrorAction");
        *ret_copy = ErrorAction_send_error_message(msg_conv);
@@ -25635,6 +30040,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LightningError_1free(JNIEnv *e
        LDKLightningError this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        LightningError_free(this_obj_conv);
 }
 
@@ -25642,6 +30048,7 @@ JNIEXPORT jstring JNICALL Java_org_ldk_impl_bindings_LightningError_1get_1err(JN
        LDKLightningError this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKStr ret_str = LightningError_get_err(&this_ptr_conv);
        jstring ret_conv = str_ref_to_java(env, ret_str.chars, ret_str.len);
        Str_free(ret_str);
@@ -25652,6 +30059,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LightningError_1set_1err(JNIEn
        LDKLightningError this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKStr val_conv = java_to_owned_str(env, val);
        LightningError_set_err(&this_ptr_conv, val_conv);
 }
@@ -25660,6 +30068,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LightningError_1get_1action
        LDKLightningError this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKErrorAction *ret_copy = MALLOC(sizeof(LDKErrorAction), "LDKErrorAction");
        *ret_copy = LightningError_get_action(&this_ptr_conv);
        uint64_t ret_ref = (uint64_t)ret_copy;
@@ -25670,6 +30079,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LightningError_1set_1action(JN
        LDKLightningError this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKErrorAction val_conv = *(LDKErrorAction*)(val_ptr);
@@ -25687,6 +30097,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LightningError_1new(JNIEnv
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25694,14 +30105,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LightningError_1new(JNIEnv
        return ret_ref;
 }
 
+static inline uint64_t LightningError_clone_ptr(LDKLightningError *NONNULL_PTR arg) {
+       LDKLightningError ret_var = LightningError_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LightningError_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKLightningError arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = LightningError_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LightningError_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKLightningError orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKLightningError ret_var = LightningError_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25713,6 +30147,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1free(JNIEnv
        LDKCommitmentUpdate this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        CommitmentUpdate_free(this_obj_conv);
 }
 
@@ -25720,6 +30155,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1get_
        LDKCommitmentUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_UpdateAddHTLCZ ret_var = CommitmentUpdate_get_update_add_htlcs(&this_ptr_conv);
        int64_tArray ret_arr = NULL;
        ret_arr = (*env)->NewLongArray(env, ret_var.datalen);
@@ -25729,6 +30165,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1get_
                uint64_t ret_conv_15_ref = 0;
                CHECK((((uint64_t)ret_conv_15_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_conv_15_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_15_var);
                ret_conv_15_ref = (uint64_t)ret_conv_15_var.inner;
                if (ret_conv_15_var.is_owned) {
                        ret_conv_15_ref |= 1;
@@ -25744,6 +30181,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1set_1update_
        LDKCommitmentUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_UpdateAddHTLCZ val_constr;
        val_constr.datalen = (*env)->GetArrayLength(env, val);
        if (val_constr.datalen > 0)
@@ -25756,6 +30194,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1set_1update_
                LDKUpdateAddHTLC val_conv_15_conv;
                val_conv_15_conv.inner = (void*)(val_conv_15 & (~1));
                val_conv_15_conv.is_owned = (val_conv_15 & 1) || (val_conv_15 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_15_conv);
                val_conv_15_conv = UpdateAddHTLC_clone(&val_conv_15_conv);
                val_constr.data[p] = val_conv_15_conv;
        }
@@ -25767,6 +30206,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1get_
        LDKCommitmentUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_UpdateFulfillHTLCZ ret_var = CommitmentUpdate_get_update_fulfill_htlcs(&this_ptr_conv);
        int64_tArray ret_arr = NULL;
        ret_arr = (*env)->NewLongArray(env, ret_var.datalen);
@@ -25776,6 +30216,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1get_
                uint64_t ret_conv_19_ref = 0;
                CHECK((((uint64_t)ret_conv_19_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_conv_19_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_19_var);
                ret_conv_19_ref = (uint64_t)ret_conv_19_var.inner;
                if (ret_conv_19_var.is_owned) {
                        ret_conv_19_ref |= 1;
@@ -25791,6 +30232,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1set_1update_
        LDKCommitmentUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_UpdateFulfillHTLCZ val_constr;
        val_constr.datalen = (*env)->GetArrayLength(env, val);
        if (val_constr.datalen > 0)
@@ -25803,6 +30245,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1set_1update_
                LDKUpdateFulfillHTLC val_conv_19_conv;
                val_conv_19_conv.inner = (void*)(val_conv_19 & (~1));
                val_conv_19_conv.is_owned = (val_conv_19 & 1) || (val_conv_19 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_19_conv);
                val_conv_19_conv = UpdateFulfillHTLC_clone(&val_conv_19_conv);
                val_constr.data[t] = val_conv_19_conv;
        }
@@ -25814,6 +30257,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1get_
        LDKCommitmentUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_UpdateFailHTLCZ ret_var = CommitmentUpdate_get_update_fail_htlcs(&this_ptr_conv);
        int64_tArray ret_arr = NULL;
        ret_arr = (*env)->NewLongArray(env, ret_var.datalen);
@@ -25823,6 +30267,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1get_
                uint64_t ret_conv_16_ref = 0;
                CHECK((((uint64_t)ret_conv_16_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_conv_16_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_16_var);
                ret_conv_16_ref = (uint64_t)ret_conv_16_var.inner;
                if (ret_conv_16_var.is_owned) {
                        ret_conv_16_ref |= 1;
@@ -25838,6 +30283,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1set_1update_
        LDKCommitmentUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_UpdateFailHTLCZ val_constr;
        val_constr.datalen = (*env)->GetArrayLength(env, val);
        if (val_constr.datalen > 0)
@@ -25850,6 +30296,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1set_1update_
                LDKUpdateFailHTLC val_conv_16_conv;
                val_conv_16_conv.inner = (void*)(val_conv_16 & (~1));
                val_conv_16_conv.is_owned = (val_conv_16 & 1) || (val_conv_16 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_16_conv);
                val_conv_16_conv = UpdateFailHTLC_clone(&val_conv_16_conv);
                val_constr.data[q] = val_conv_16_conv;
        }
@@ -25861,6 +30308,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1get_
        LDKCommitmentUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_UpdateFailMalformedHTLCZ ret_var = CommitmentUpdate_get_update_fail_malformed_htlcs(&this_ptr_conv);
        int64_tArray ret_arr = NULL;
        ret_arr = (*env)->NewLongArray(env, ret_var.datalen);
@@ -25870,6 +30318,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1get_
                uint64_t ret_conv_25_ref = 0;
                CHECK((((uint64_t)ret_conv_25_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_conv_25_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_25_var);
                ret_conv_25_ref = (uint64_t)ret_conv_25_var.inner;
                if (ret_conv_25_var.is_owned) {
                        ret_conv_25_ref |= 1;
@@ -25885,6 +30334,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1set_1update_
        LDKCommitmentUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_UpdateFailMalformedHTLCZ val_constr;
        val_constr.datalen = (*env)->GetArrayLength(env, val);
        if (val_constr.datalen > 0)
@@ -25897,6 +30347,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1set_1update_
                LDKUpdateFailMalformedHTLC val_conv_25_conv;
                val_conv_25_conv.inner = (void*)(val_conv_25 & (~1));
                val_conv_25_conv.is_owned = (val_conv_25 & 1) || (val_conv_25 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_25_conv);
                val_conv_25_conv = UpdateFailMalformedHTLC_clone(&val_conv_25_conv);
                val_constr.data[z] = val_conv_25_conv;
        }
@@ -25908,11 +30359,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1get_1upda
        LDKCommitmentUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKUpdateFee ret_var = CommitmentUpdate_get_update_fee(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -25925,9 +30378,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1set_1update_
        LDKCommitmentUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKUpdateFee val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = UpdateFee_clone(&val_conv);
        CommitmentUpdate_set_update_fee(&this_ptr_conv, val_conv);
 }
@@ -25936,10 +30391,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1get_1comm
        LDKCommitmentUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCommitmentSigned ret_var = CommitmentUpdate_get_commitment_signed(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25951,9 +30408,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1set_1commitm
        LDKCommitmentUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCommitmentSigned val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = CommitmentSigned_clone(&val_conv);
        CommitmentUpdate_set_commitment_signed(&this_ptr_conv, val_conv);
 }
@@ -25971,6 +30430,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1new(JNIEn
                LDKUpdateAddHTLC update_add_htlcs_arg_conv_15_conv;
                update_add_htlcs_arg_conv_15_conv.inner = (void*)(update_add_htlcs_arg_conv_15 & (~1));
                update_add_htlcs_arg_conv_15_conv.is_owned = (update_add_htlcs_arg_conv_15 & 1) || (update_add_htlcs_arg_conv_15 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(update_add_htlcs_arg_conv_15_conv);
                update_add_htlcs_arg_conv_15_conv = UpdateAddHTLC_clone(&update_add_htlcs_arg_conv_15_conv);
                update_add_htlcs_arg_constr.data[p] = update_add_htlcs_arg_conv_15_conv;
        }
@@ -25987,6 +30447,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1new(JNIEn
                LDKUpdateFulfillHTLC update_fulfill_htlcs_arg_conv_19_conv;
                update_fulfill_htlcs_arg_conv_19_conv.inner = (void*)(update_fulfill_htlcs_arg_conv_19 & (~1));
                update_fulfill_htlcs_arg_conv_19_conv.is_owned = (update_fulfill_htlcs_arg_conv_19 & 1) || (update_fulfill_htlcs_arg_conv_19 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(update_fulfill_htlcs_arg_conv_19_conv);
                update_fulfill_htlcs_arg_conv_19_conv = UpdateFulfillHTLC_clone(&update_fulfill_htlcs_arg_conv_19_conv);
                update_fulfill_htlcs_arg_constr.data[t] = update_fulfill_htlcs_arg_conv_19_conv;
        }
@@ -26003,6 +30464,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1new(JNIEn
                LDKUpdateFailHTLC update_fail_htlcs_arg_conv_16_conv;
                update_fail_htlcs_arg_conv_16_conv.inner = (void*)(update_fail_htlcs_arg_conv_16 & (~1));
                update_fail_htlcs_arg_conv_16_conv.is_owned = (update_fail_htlcs_arg_conv_16 & 1) || (update_fail_htlcs_arg_conv_16 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(update_fail_htlcs_arg_conv_16_conv);
                update_fail_htlcs_arg_conv_16_conv = UpdateFailHTLC_clone(&update_fail_htlcs_arg_conv_16_conv);
                update_fail_htlcs_arg_constr.data[q] = update_fail_htlcs_arg_conv_16_conv;
        }
@@ -26019,6 +30481,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1new(JNIEn
                LDKUpdateFailMalformedHTLC update_fail_malformed_htlcs_arg_conv_25_conv;
                update_fail_malformed_htlcs_arg_conv_25_conv.inner = (void*)(update_fail_malformed_htlcs_arg_conv_25 & (~1));
                update_fail_malformed_htlcs_arg_conv_25_conv.is_owned = (update_fail_malformed_htlcs_arg_conv_25 & 1) || (update_fail_malformed_htlcs_arg_conv_25 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(update_fail_malformed_htlcs_arg_conv_25_conv);
                update_fail_malformed_htlcs_arg_conv_25_conv = UpdateFailMalformedHTLC_clone(&update_fail_malformed_htlcs_arg_conv_25_conv);
                update_fail_malformed_htlcs_arg_constr.data[z] = update_fail_malformed_htlcs_arg_conv_25_conv;
        }
@@ -26026,15 +30489,18 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1new(JNIEn
        LDKUpdateFee update_fee_arg_conv;
        update_fee_arg_conv.inner = (void*)(update_fee_arg & (~1));
        update_fee_arg_conv.is_owned = (update_fee_arg & 1) || (update_fee_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_fee_arg_conv);
        update_fee_arg_conv = UpdateFee_clone(&update_fee_arg_conv);
        LDKCommitmentSigned commitment_signed_arg_conv;
        commitment_signed_arg_conv.inner = (void*)(commitment_signed_arg & (~1));
        commitment_signed_arg_conv.is_owned = (commitment_signed_arg & 1) || (commitment_signed_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(commitment_signed_arg_conv);
        commitment_signed_arg_conv = CommitmentSigned_clone(&commitment_signed_arg_conv);
        LDKCommitmentUpdate ret_var = CommitmentUpdate_new(update_add_htlcs_arg_constr, update_fulfill_htlcs_arg_constr, update_fail_htlcs_arg_constr, update_fail_malformed_htlcs_arg_constr, update_fee_arg_conv, commitment_signed_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -26042,14 +30508,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1new(JNIEn
        return ret_ref;
 }
 
+static inline uint64_t CommitmentUpdate_clone_ptr(LDKCommitmentUpdate *NONNULL_PTR arg) {
+       LDKCommitmentUpdate ret_var = CommitmentUpdate_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCommitmentUpdate arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = CommitmentUpdate_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCommitmentUpdate orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKCommitmentUpdate ret_var = CommitmentUpdate_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -26079,6 +30568,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1write(JN
        LDKAcceptChannel obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = AcceptChannel_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26100,6 +30590,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_AnnouncementSignatures_
        LDKAnnouncementSignatures obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = AnnouncementSignatures_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26121,6 +30612,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelReestablish_1wri
        LDKChannelReestablish obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ChannelReestablish_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26142,6 +30634,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ClosingSigned_1write(JN
        LDKClosingSigned obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ClosingSigned_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26163,6 +30656,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ClosingSignedFeeRange_1
        LDKClosingSignedFeeRange obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ClosingSignedFeeRange_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26184,6 +30678,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_CommitmentSigned_1write
        LDKCommitmentSigned obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = CommitmentSigned_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26205,6 +30700,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_FundingCreated_1write(J
        LDKFundingCreated obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = FundingCreated_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26226,6 +30722,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_FundingSigned_1write(JN
        LDKFundingSigned obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = FundingSigned_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26247,6 +30744,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_FundingLocked_1write(JN
        LDKFundingLocked obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = FundingLocked_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26268,6 +30766,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Init_1write(JNIEnv *env
        LDKInit obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = Init_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26289,6 +30788,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_OpenChannel_1write(JNIE
        LDKOpenChannel obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = OpenChannel_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26310,6 +30810,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_RevokeAndACK_1write(JNI
        LDKRevokeAndACK obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = RevokeAndACK_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26331,6 +30832,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Shutdown_1write(JNIEnv
        LDKShutdown obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = Shutdown_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26352,6 +30854,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UpdateFailHTLC_1write(J
        LDKUpdateFailHTLC obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = UpdateFailHTLC_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26373,6 +30876,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UpdateFailMalformedHTLC
        LDKUpdateFailMalformedHTLC obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = UpdateFailMalformedHTLC_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26394,6 +30898,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UpdateFee_1write(JNIEnv
        LDKUpdateFee obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = UpdateFee_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26415,6 +30920,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UpdateFulfillHTLC_1writ
        LDKUpdateFulfillHTLC obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = UpdateFulfillHTLC_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26436,6 +30942,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UpdateAddHTLC_1write(JN
        LDKUpdateAddHTLC obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = UpdateAddHTLC_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26457,6 +30964,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Ping_1write(JNIEnv *env
        LDKPing obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = Ping_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26478,6 +30986,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Pong_1write(JNIEnv *env
        LDKPong obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = Pong_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26499,6 +31008,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedChannelAnnounce
        LDKUnsignedChannelAnnouncement obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = UnsignedChannelAnnouncement_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26520,6 +31030,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelAnnouncement_1wr
        LDKChannelAnnouncement obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ChannelAnnouncement_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26541,6 +31052,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedChannelUpdate_1
        LDKUnsignedChannelUpdate obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = UnsignedChannelUpdate_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26562,6 +31074,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelUpdate_1write(JN
        LDKChannelUpdate obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ChannelUpdate_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26583,6 +31096,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ErrorMessage_1write(JNI
        LDKErrorMessage obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ErrorMessage_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26604,6 +31118,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_UnsignedNodeAnnouncemen
        LDKUnsignedNodeAnnouncement obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = UnsignedNodeAnnouncement_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26625,6 +31140,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NodeAnnouncement_1write
        LDKNodeAnnouncement obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = NodeAnnouncement_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26656,6 +31172,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_QueryShortChannelIds_1w
        LDKQueryShortChannelIds obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = QueryShortChannelIds_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26667,6 +31184,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ReplyShortChannelIdsEnd
        LDKReplyShortChannelIdsEnd obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ReplyShortChannelIdsEnd_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26688,6 +31206,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_QueryChannelRange_1end_1blo
        LDKQueryChannelRange this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int32_t ret_val = QueryChannelRange_end_blocknum(&this_arg_conv);
        return ret_val;
 }
@@ -26696,6 +31215,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_QueryChannelRange_1writ
        LDKQueryChannelRange obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = QueryChannelRange_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26727,6 +31247,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ReplyChannelRange_1writ
        LDKReplyChannelRange obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ReplyChannelRange_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26738,6 +31259,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_GossipTimestampFilter_1
        LDKGossipTimestampFilter obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = GossipTimestampFilter_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -26768,6 +31290,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_IgnoringMessageHandler_1free(J
        LDKIgnoringMessageHandler this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        IgnoringMessageHandler_free(this_obj_conv);
 }
 
@@ -26776,6 +31299,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_IgnoringMessageHandler_1new
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -26787,6 +31311,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_IgnoringMessageHandler_1as_
        LDKIgnoringMessageHandler this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKMessageSendEventsProvider* ret_ret = MALLOC(sizeof(LDKMessageSendEventsProvider), "LDKMessageSendEventsProvider");
        *ret_ret = IgnoringMessageHandler_as_MessageSendEventsProvider(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -26796,6 +31321,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_IgnoringMessageHandler_1as_
        LDKIgnoringMessageHandler this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKRoutingMessageHandler* ret_ret = MALLOC(sizeof(LDKRoutingMessageHandler), "LDKRoutingMessageHandler");
        *ret_ret = IgnoringMessageHandler_as_RoutingMessageHandler(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -26805,6 +31331,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_IgnoringMessageHandler_1as_
        LDKIgnoringMessageHandler this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCustomMessageReader* ret_ret = MALLOC(sizeof(LDKCustomMessageReader), "LDKCustomMessageReader");
        *ret_ret = IgnoringMessageHandler_as_CustomMessageReader(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -26814,6 +31341,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_IgnoringMessageHandler_1as_
        LDKIgnoringMessageHandler this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCustomMessageHandler* ret_ret = MALLOC(sizeof(LDKCustomMessageHandler), "LDKCustomMessageHandler");
        *ret_ret = IgnoringMessageHandler_as_CustomMessageHandler(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -26823,6 +31351,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ErroringMessageHandler_1free(J
        LDKErroringMessageHandler this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ErroringMessageHandler_free(this_obj_conv);
 }
 
@@ -26831,6 +31360,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ErroringMessageHandler_1new
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -26842,6 +31372,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ErroringMessageHandler_1as_
        LDKErroringMessageHandler this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKMessageSendEventsProvider* ret_ret = MALLOC(sizeof(LDKMessageSendEventsProvider), "LDKMessageSendEventsProvider");
        *ret_ret = ErroringMessageHandler_as_MessageSendEventsProvider(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -26851,6 +31382,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ErroringMessageHandler_1as_
        LDKErroringMessageHandler this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKChannelMessageHandler* ret_ret = MALLOC(sizeof(LDKChannelMessageHandler), "LDKChannelMessageHandler");
        *ret_ret = ErroringMessageHandler_as_ChannelMessageHandler(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -26860,6 +31392,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MessageHandler_1free(JNIEnv *e
        LDKMessageHandler this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        MessageHandler_free(this_obj_conv);
 }
 
@@ -26867,6 +31400,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MessageHandler_1get_1chan_1
        LDKMessageHandler this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        // WARNING: This object doesn't live past this scope, needs clone!
        uint64_t ret_ret = ((uint64_t)MessageHandler_get_chan_handler(&this_ptr_conv)) | 1;
        return ret_ret;
@@ -26876,6 +31410,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MessageHandler_1set_1chan_1han
        LDKMessageHandler this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKChannelMessageHandler val_conv = *(LDKChannelMessageHandler*)(val_ptr);
@@ -26890,6 +31425,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MessageHandler_1get_1route_
        LDKMessageHandler this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        // WARNING: This object doesn't live past this scope, needs clone!
        uint64_t ret_ret = ((uint64_t)MessageHandler_get_route_handler(&this_ptr_conv)) | 1;
        return ret_ret;
@@ -26899,6 +31435,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MessageHandler_1set_1route_1ha
        LDKMessageHandler this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKRoutingMessageHandler val_conv = *(LDKRoutingMessageHandler*)(val_ptr);
@@ -26928,6 +31465,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MessageHandler_1new(JNIEnv
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -26935,6 +31473,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MessageHandler_1new(JNIEnv
        return ret_ref;
 }
 
+static inline uint64_t SocketDescriptor_clone_ptr(LDKSocketDescriptor *NONNULL_PTR arg) {
+       LDKSocketDescriptor* ret_ret = MALLOC(sizeof(LDKSocketDescriptor), "LDKSocketDescriptor");
+       *ret_ret = SocketDescriptor_clone(arg);
+       return (uint64_t)ret_ret;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SocketDescriptor_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       void* arg_ptr = (void*)(((uint64_t)arg) & ~1);
+       if (!(arg & 1)) { CHECK_ACCESS(arg_ptr); }
+       LDKSocketDescriptor* arg_conv = (LDKSocketDescriptor*)arg_ptr;
+       int64_t ret_val = SocketDescriptor_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SocketDescriptor_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        void* orig_ptr = (void*)(((uint64_t)orig) & ~1);
        if (!(orig & 1)) { CHECK_ACCESS(orig_ptr); }
@@ -26957,6 +31508,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PeerHandleError_1free(JNIEnv *
        LDKPeerHandleError this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        PeerHandleError_free(this_obj_conv);
 }
 
@@ -26964,6 +31516,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_PeerHandleError_1get_1no_1
        LDKPeerHandleError this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        jboolean ret_val = PeerHandleError_get_no_connection_possible(&this_ptr_conv);
        return ret_val;
 }
@@ -26972,6 +31525,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PeerHandleError_1set_1no_1conn
        LDKPeerHandleError this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        PeerHandleError_set_no_connection_possible(&this_ptr_conv, val);
 }
 
@@ -26980,6 +31534,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PeerHandleError_1new(JNIEnv
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -26987,14 +31542,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PeerHandleError_1new(JNIEnv
        return ret_ref;
 }
 
+static inline uint64_t PeerHandleError_clone_ptr(LDKPeerHandleError *NONNULL_PTR arg) {
+       LDKPeerHandleError ret_var = PeerHandleError_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PeerHandleError_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKPeerHandleError arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = PeerHandleError_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PeerHandleError_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKPeerHandleError orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKPeerHandleError ret_var = PeerHandleError_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -27006,6 +31584,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PeerManager_1free(JNIEnv *env,
        LDKPeerManager this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        PeerManager_free(this_obj_conv);
 }
 
@@ -27013,6 +31592,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PeerManager_1new(JNIEnv *en
        LDKMessageHandler message_handler_conv;
        message_handler_conv.inner = (void*)(message_handler & (~1));
        message_handler_conv.is_owned = (message_handler & 1) || (message_handler == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(message_handler_conv);
        // Warning: we need a move here but no clone is available for LDKMessageHandler
        LDKSecretKey our_node_secret_ref;
        CHECK((*env)->GetArrayLength(env, our_node_secret) == 32);
@@ -27039,6 +31619,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PeerManager_1new(JNIEnv *en
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -27050,6 +31631,7 @@ JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_PeerManager_1get_1peer
        LDKPeerManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCVec_PublicKeyZ ret_var = PeerManager_get_peer_node_ids(&this_arg_conv);
        jobjectArray ret_arr = NULL;
        ret_arr = (*env)->NewObjectArray(env, ret_var.datalen, arr_of_B_clz, NULL);
@@ -27068,6 +31650,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PeerManager_1new_1outbound_
        LDKPeerManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKPublicKey their_node_id_ref;
        CHECK((*env)->GetArrayLength(env, their_node_id) == 33);
        (*env)->GetByteArrayRegion(env, their_node_id, 0, 33, their_node_id_ref.compressed_form);
@@ -27087,6 +31670,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PeerManager_1new_1inbound_1
        LDKPeerManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        void* descriptor_ptr = (void*)(((uint64_t)descriptor) & ~1);
        CHECK_ACCESS(descriptor_ptr);
        LDKSocketDescriptor descriptor_conv = *(LDKSocketDescriptor*)(descriptor_ptr);
@@ -27103,6 +31687,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PeerManager_1write_1buffer_
        LDKPeerManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        void* descriptor_ptr = (void*)(((uint64_t)descriptor) & ~1);
        if (!(descriptor & 1)) { CHECK_ACCESS(descriptor_ptr); }
        LDKSocketDescriptor* descriptor_conv = (LDKSocketDescriptor*)descriptor_ptr;
@@ -27115,6 +31700,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PeerManager_1read_1event(JN
        LDKPeerManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        void* peer_descriptor_ptr = (void*)(((uint64_t)peer_descriptor) & ~1);
        if (!(peer_descriptor & 1)) { CHECK_ACCESS(peer_descriptor_ptr); }
        LDKSocketDescriptor* peer_descriptor_conv = (LDKSocketDescriptor*)peer_descriptor_ptr;
@@ -27131,6 +31717,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PeerManager_1process_1events(J
        LDKPeerManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        PeerManager_process_events(&this_arg_conv);
 }
 
@@ -27138,6 +31725,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PeerManager_1socket_1disconnec
        LDKPeerManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        void* descriptor_ptr = (void*)(((uint64_t)descriptor) & ~1);
        if (!(descriptor & 1)) { CHECK_ACCESS(descriptor_ptr); }
        LDKSocketDescriptor* descriptor_conv = (LDKSocketDescriptor*)descriptor_ptr;
@@ -27148,6 +31736,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PeerManager_1disconnect_1by_1n
        LDKPeerManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKPublicKey node_id_ref;
        CHECK((*env)->GetArrayLength(env, node_id) == 33);
        (*env)->GetByteArrayRegion(env, node_id, 0, 33, node_id_ref.compressed_form);
@@ -27158,6 +31747,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PeerManager_1disconnect_1all_1
        LDKPeerManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        PeerManager_disconnect_all_peers(&this_arg_conv);
 }
 
@@ -27165,6 +31755,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PeerManager_1timer_1tick_1occu
        LDKPeerManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        PeerManager_timer_tick_occurred(&this_arg_conv);
 }
 
@@ -27190,6 +31781,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_build_1closing_1transac
        LDKOutPoint funding_outpoint_conv;
        funding_outpoint_conv.inner = (void*)(funding_outpoint & (~1));
        funding_outpoint_conv.is_owned = (funding_outpoint & 1) || (funding_outpoint == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_outpoint_conv);
        funding_outpoint_conv = OutPoint_clone(&funding_outpoint_conv);
        LDKTransaction ret_var = build_closing_transaction(to_holder_value_sat, to_counterparty_value_sat, to_holder_script_ref, to_counterparty_script_ref, funding_outpoint_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
@@ -27253,6 +31845,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_TxCreationKeys_1free(JNIEnv *e
        LDKTxCreationKeys this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        TxCreationKeys_free(this_obj_conv);
 }
 
@@ -27260,6 +31853,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_TxCreationKeys_1get_1pe
        LDKTxCreationKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, TxCreationKeys_get_per_commitment_point(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -27269,6 +31863,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_TxCreationKeys_1set_1per_1comm
        LDKTxCreationKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -27279,6 +31874,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_TxCreationKeys_1get_1re
        LDKTxCreationKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, TxCreationKeys_get_revocation_key(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -27288,6 +31884,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_TxCreationKeys_1set_1revocatio
        LDKTxCreationKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -27298,6 +31895,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_TxCreationKeys_1get_1br
        LDKTxCreationKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, TxCreationKeys_get_broadcaster_htlc_key(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -27307,6 +31905,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_TxCreationKeys_1set_1broadcast
        LDKTxCreationKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -27317,6 +31916,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_TxCreationKeys_1get_1co
        LDKTxCreationKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, TxCreationKeys_get_countersignatory_htlc_key(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -27326,6 +31926,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_TxCreationKeys_1set_1countersi
        LDKTxCreationKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -27336,6 +31937,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_TxCreationKeys_1get_1br
        LDKTxCreationKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, TxCreationKeys_get_broadcaster_delayed_payment_key(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -27345,6 +31947,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_TxCreationKeys_1set_1broadcast
        LDKTxCreationKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -27371,6 +31974,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_TxCreationKeys_1new(JNIEnv
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -27378,14 +31982,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_TxCreationKeys_1new(JNIEnv
        return ret_ref;
 }
 
+static inline uint64_t TxCreationKeys_clone_ptr(LDKTxCreationKeys *NONNULL_PTR arg) {
+       LDKTxCreationKeys ret_var = TxCreationKeys_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_TxCreationKeys_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKTxCreationKeys arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = TxCreationKeys_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_TxCreationKeys_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKTxCreationKeys orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKTxCreationKeys ret_var = TxCreationKeys_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -27397,6 +32024,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_TxCreationKeys_1write(J
        LDKTxCreationKeys obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = TxCreationKeys_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -27418,6 +32046,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelPublicKeys_1free(JNIEnv
        LDKChannelPublicKeys this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelPublicKeys_free(this_obj_conv);
 }
 
@@ -27425,6 +32054,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelPublicKeys_1get_
        LDKChannelPublicKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, ChannelPublicKeys_get_funding_pubkey(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -27434,6 +32064,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelPublicKeys_1set_1fundin
        LDKChannelPublicKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -27444,6 +32075,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelPublicKeys_1get_
        LDKChannelPublicKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, ChannelPublicKeys_get_revocation_basepoint(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -27453,6 +32085,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelPublicKeys_1set_1revoca
        LDKChannelPublicKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -27463,6 +32096,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelPublicKeys_1get_
        LDKChannelPublicKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, ChannelPublicKeys_get_payment_point(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -27472,6 +32106,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelPublicKeys_1set_1paymen
        LDKChannelPublicKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -27482,6 +32117,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelPublicKeys_1get_
        LDKChannelPublicKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, ChannelPublicKeys_get_delayed_payment_basepoint(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -27491,6 +32127,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelPublicKeys_1set_1delaye
        LDKChannelPublicKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -27501,6 +32138,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelPublicKeys_1get_
        LDKChannelPublicKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, ChannelPublicKeys_get_htlc_basepoint(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -27510,6 +32148,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelPublicKeys_1set_1htlc_1
        LDKChannelPublicKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -27536,6 +32175,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelPublicKeys_1new(JNIE
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -27543,14 +32183,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelPublicKeys_1new(JNIE
        return ret_ref;
 }
 
+static inline uint64_t ChannelPublicKeys_clone_ptr(LDKChannelPublicKeys *NONNULL_PTR arg) {
+       LDKChannelPublicKeys ret_var = ChannelPublicKeys_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelPublicKeys_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKChannelPublicKeys arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChannelPublicKeys_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelPublicKeys_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKChannelPublicKeys orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChannelPublicKeys ret_var = ChannelPublicKeys_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -27562,6 +32225,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelPublicKeys_1writ
        LDKChannelPublicKeys obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ChannelPublicKeys_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -27607,9 +32271,11 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_TxCreationKeys_1from_1chann
        LDKChannelPublicKeys broadcaster_keys_conv;
        broadcaster_keys_conv.inner = (void*)(broadcaster_keys & (~1));
        broadcaster_keys_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(broadcaster_keys_conv);
        LDKChannelPublicKeys countersignatory_keys_conv;
        countersignatory_keys_conv.inner = (void*)(countersignatory_keys & (~1));
        countersignatory_keys_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(countersignatory_keys_conv);
        LDKCResult_TxCreationKeysErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxCreationKeysErrorZ), "LDKCResult_TxCreationKeysErrorZ");
        *ret_conv = TxCreationKeys_from_channel_static_keys(per_commitment_point_ref, &broadcaster_keys_conv, &countersignatory_keys_conv);
        return (uint64_t)ret_conv;
@@ -27633,6 +32299,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_HTLCOutputInCommitment_1free(J
        LDKHTLCOutputInCommitment this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        HTLCOutputInCommitment_free(this_obj_conv);
 }
 
@@ -27640,6 +32307,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_HTLCOutputInCommitment_1ge
        LDKHTLCOutputInCommitment this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        jboolean ret_val = HTLCOutputInCommitment_get_offered(&this_ptr_conv);
        return ret_val;
 }
@@ -27648,6 +32316,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_HTLCOutputInCommitment_1set_1o
        LDKHTLCOutputInCommitment this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        HTLCOutputInCommitment_set_offered(&this_ptr_conv, val);
 }
 
@@ -27655,6 +32324,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_HTLCOutputInCommitment_1get
        LDKHTLCOutputInCommitment this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = HTLCOutputInCommitment_get_amount_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -27663,6 +32333,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_HTLCOutputInCommitment_1set_1a
        LDKHTLCOutputInCommitment this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        HTLCOutputInCommitment_set_amount_msat(&this_ptr_conv, val);
 }
 
@@ -27670,6 +32341,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_HTLCOutputInCommitment_1get
        LDKHTLCOutputInCommitment this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = HTLCOutputInCommitment_get_cltv_expiry(&this_ptr_conv);
        return ret_val;
 }
@@ -27678,6 +32350,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_HTLCOutputInCommitment_1set_1c
        LDKHTLCOutputInCommitment this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        HTLCOutputInCommitment_set_cltv_expiry(&this_ptr_conv, val);
 }
 
@@ -27685,6 +32358,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_HTLCOutputInCommitment_
        LDKHTLCOutputInCommitment this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *HTLCOutputInCommitment_get_payment_hash(&this_ptr_conv));
        return ret_arr;
@@ -27694,6 +32368,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_HTLCOutputInCommitment_1set_1p
        LDKHTLCOutputInCommitment this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -27704,6 +32379,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_HTLCOutputInCommitment_1get
        LDKHTLCOutputInCommitment this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCOption_u32Z *ret_copy = MALLOC(sizeof(LDKCOption_u32Z), "LDKCOption_u32Z");
        *ret_copy = HTLCOutputInCommitment_get_transaction_output_index(&this_ptr_conv);
        uint64_t ret_ref = (uint64_t)ret_copy;
@@ -27714,6 +32390,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_HTLCOutputInCommitment_1set_1t
        LDKHTLCOutputInCommitment this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKCOption_u32Z val_conv = *(LDKCOption_u32Z*)(val_ptr);
@@ -27733,6 +32410,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_HTLCOutputInCommitment_1new
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -27740,14 +32418,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_HTLCOutputInCommitment_1new
        return ret_ref;
 }
 
+static inline uint64_t HTLCOutputInCommitment_clone_ptr(LDKHTLCOutputInCommitment *NONNULL_PTR arg) {
+       LDKHTLCOutputInCommitment ret_var = HTLCOutputInCommitment_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_HTLCOutputInCommitment_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKHTLCOutputInCommitment arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = HTLCOutputInCommitment_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_HTLCOutputInCommitment_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKHTLCOutputInCommitment orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKHTLCOutputInCommitment ret_var = HTLCOutputInCommitment_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -27759,6 +32460,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_HTLCOutputInCommitment_
        LDKHTLCOutputInCommitment obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = HTLCOutputInCommitment_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -27780,9 +32482,11 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_get_1htlc_1redeemscript
        LDKHTLCOutputInCommitment htlc_conv;
        htlc_conv.inner = (void*)(htlc & (~1));
        htlc_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(htlc_conv);
        LDKTxCreationKeys keys_conv;
        keys_conv.inner = (void*)(keys & (~1));
        keys_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(keys_conv);
        LDKCVec_u8Z ret_var = get_htlc_redeemscript(&htlc_conv, &keys_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -27812,6 +32516,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_build_1htlc_1transactio
        LDKHTLCOutputInCommitment htlc_conv;
        htlc_conv.inner = (void*)(htlc & (~1));
        htlc_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(htlc_conv);
        LDKPublicKey broadcaster_delayed_payment_key_ref;
        CHECK((*env)->GetArrayLength(env, broadcaster_delayed_payment_key) == 33);
        (*env)->GetByteArrayRegion(env, broadcaster_delayed_payment_key, 0, 33, broadcaster_delayed_payment_key_ref.compressed_form);
@@ -27829,6 +32534,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelTransactionParameters_1
        LDKChannelTransactionParameters this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelTransactionParameters_free(this_obj_conv);
 }
 
@@ -27836,10 +32542,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelTransactionParameter
        LDKChannelTransactionParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelPublicKeys ret_var = ChannelTransactionParameters_get_holder_pubkeys(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -27851,9 +32559,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelTransactionParameters_1
        LDKChannelTransactionParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelPublicKeys val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = ChannelPublicKeys_clone(&val_conv);
        ChannelTransactionParameters_set_holder_pubkeys(&this_ptr_conv, val_conv);
 }
@@ -27862,6 +32572,7 @@ JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_ChannelTransactionParameter
        LDKChannelTransactionParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = ChannelTransactionParameters_get_holder_selected_contest_delay(&this_ptr_conv);
        return ret_val;
 }
@@ -27870,6 +32581,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelTransactionParameters_1
        LDKChannelTransactionParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelTransactionParameters_set_holder_selected_contest_delay(&this_ptr_conv, val);
 }
 
@@ -27877,6 +32589,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelTransactionParamete
        LDKChannelTransactionParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        jboolean ret_val = ChannelTransactionParameters_get_is_outbound_from_holder(&this_ptr_conv);
        return ret_val;
 }
@@ -27885,6 +32598,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelTransactionParameters_1
        LDKChannelTransactionParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelTransactionParameters_set_is_outbound_from_holder(&this_ptr_conv, val);
 }
 
@@ -27892,11 +32606,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelTransactionParameter
        LDKChannelTransactionParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCounterpartyChannelTransactionParameters ret_var = ChannelTransactionParameters_get_counterparty_parameters(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -27909,9 +32625,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelTransactionParameters_1
        LDKChannelTransactionParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCounterpartyChannelTransactionParameters val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = CounterpartyChannelTransactionParameters_clone(&val_conv);
        ChannelTransactionParameters_set_counterparty_parameters(&this_ptr_conv, val_conv);
 }
@@ -27920,11 +32638,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelTransactionParameter
        LDKChannelTransactionParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKOutPoint ret_var = ChannelTransactionParameters_get_funding_outpoint(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -27937,9 +32657,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelTransactionParameters_1
        LDKChannelTransactionParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKOutPoint val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = OutPoint_clone(&val_conv);
        ChannelTransactionParameters_set_funding_outpoint(&this_ptr_conv, val_conv);
 }
@@ -27948,19 +32670,23 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelTransactionParameter
        LDKChannelPublicKeys holder_pubkeys_arg_conv;
        holder_pubkeys_arg_conv.inner = (void*)(holder_pubkeys_arg & (~1));
        holder_pubkeys_arg_conv.is_owned = (holder_pubkeys_arg & 1) || (holder_pubkeys_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(holder_pubkeys_arg_conv);
        holder_pubkeys_arg_conv = ChannelPublicKeys_clone(&holder_pubkeys_arg_conv);
        LDKCounterpartyChannelTransactionParameters counterparty_parameters_arg_conv;
        counterparty_parameters_arg_conv.inner = (void*)(counterparty_parameters_arg & (~1));
        counterparty_parameters_arg_conv.is_owned = (counterparty_parameters_arg & 1) || (counterparty_parameters_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(counterparty_parameters_arg_conv);
        counterparty_parameters_arg_conv = CounterpartyChannelTransactionParameters_clone(&counterparty_parameters_arg_conv);
        LDKOutPoint funding_outpoint_arg_conv;
        funding_outpoint_arg_conv.inner = (void*)(funding_outpoint_arg & (~1));
        funding_outpoint_arg_conv.is_owned = (funding_outpoint_arg & 1) || (funding_outpoint_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_outpoint_arg_conv);
        funding_outpoint_arg_conv = OutPoint_clone(&funding_outpoint_arg_conv);
        LDKChannelTransactionParameters ret_var = ChannelTransactionParameters_new(holder_pubkeys_arg_conv, holder_selected_contest_delay_arg, is_outbound_from_holder_arg, counterparty_parameters_arg_conv, funding_outpoint_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -27968,14 +32694,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelTransactionParameter
        return ret_ref;
 }
 
+static inline uint64_t ChannelTransactionParameters_clone_ptr(LDKChannelTransactionParameters *NONNULL_PTR arg) {
+       LDKChannelTransactionParameters ret_var = ChannelTransactionParameters_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelTransactionParameters_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKChannelTransactionParameters arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChannelTransactionParameters_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelTransactionParameters_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKChannelTransactionParameters orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChannelTransactionParameters ret_var = ChannelTransactionParameters_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -27987,6 +32736,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CounterpartyChannelTransaction
        LDKCounterpartyChannelTransactionParameters this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        CounterpartyChannelTransactionParameters_free(this_obj_conv);
 }
 
@@ -27994,10 +32744,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CounterpartyChannelTransact
        LDKCounterpartyChannelTransactionParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelPublicKeys ret_var = CounterpartyChannelTransactionParameters_get_pubkeys(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28009,9 +32761,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CounterpartyChannelTransaction
        LDKCounterpartyChannelTransactionParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelPublicKeys val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = ChannelPublicKeys_clone(&val_conv);
        CounterpartyChannelTransactionParameters_set_pubkeys(&this_ptr_conv, val_conv);
 }
@@ -28020,6 +32774,7 @@ JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_CounterpartyChannelTransact
        LDKCounterpartyChannelTransactionParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = CounterpartyChannelTransactionParameters_get_selected_contest_delay(&this_ptr_conv);
        return ret_val;
 }
@@ -28028,6 +32783,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CounterpartyChannelTransaction
        LDKCounterpartyChannelTransactionParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        CounterpartyChannelTransactionParameters_set_selected_contest_delay(&this_ptr_conv, val);
 }
 
@@ -28035,11 +32791,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CounterpartyChannelTransact
        LDKChannelPublicKeys pubkeys_arg_conv;
        pubkeys_arg_conv.inner = (void*)(pubkeys_arg & (~1));
        pubkeys_arg_conv.is_owned = (pubkeys_arg & 1) || (pubkeys_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(pubkeys_arg_conv);
        pubkeys_arg_conv = ChannelPublicKeys_clone(&pubkeys_arg_conv);
        LDKCounterpartyChannelTransactionParameters ret_var = CounterpartyChannelTransactionParameters_new(pubkeys_arg_conv, selected_contest_delay_arg);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28047,14 +32805,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CounterpartyChannelTransact
        return ret_ref;
 }
 
+static inline uint64_t CounterpartyChannelTransactionParameters_clone_ptr(LDKCounterpartyChannelTransactionParameters *NONNULL_PTR arg) {
+       LDKCounterpartyChannelTransactionParameters ret_var = CounterpartyChannelTransactionParameters_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CounterpartyChannelTransactionParameters_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCounterpartyChannelTransactionParameters arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = CounterpartyChannelTransactionParameters_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CounterpartyChannelTransactionParameters_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCounterpartyChannelTransactionParameters orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKCounterpartyChannelTransactionParameters ret_var = CounterpartyChannelTransactionParameters_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28066,6 +32847,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelTransactionParamete
        LDKChannelTransactionParameters this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        jboolean ret_val = ChannelTransactionParameters_is_populated(&this_arg_conv);
        return ret_val;
 }
@@ -28074,10 +32856,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelTransactionParameter
        LDKChannelTransactionParameters this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKDirectedChannelTransactionParameters ret_var = ChannelTransactionParameters_as_holder_broadcastable(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28089,10 +32873,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelTransactionParameter
        LDKChannelTransactionParameters this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKDirectedChannelTransactionParameters ret_var = ChannelTransactionParameters_as_counterparty_broadcastable(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28104,6 +32890,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_CounterpartyChannelTran
        LDKCounterpartyChannelTransactionParameters obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = CounterpartyChannelTransactionParameters_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -28125,6 +32912,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelTransactionParam
        LDKChannelTransactionParameters obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ChannelTransactionParameters_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -28146,6 +32934,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DirectedChannelTransactionPara
        LDKDirectedChannelTransactionParameters this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        DirectedChannelTransactionParameters_free(this_obj_conv);
 }
 
@@ -28153,10 +32942,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DirectedChannelTransactionP
        LDKDirectedChannelTransactionParameters this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKChannelPublicKeys ret_var = DirectedChannelTransactionParameters_broadcaster_pubkeys(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28168,10 +32959,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DirectedChannelTransactionP
        LDKDirectedChannelTransactionParameters this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKChannelPublicKeys ret_var = DirectedChannelTransactionParameters_countersignatory_pubkeys(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28183,6 +32976,7 @@ JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_DirectedChannelTransactionP
        LDKDirectedChannelTransactionParameters this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int16_t ret_val = DirectedChannelTransactionParameters_contest_delay(&this_arg_conv);
        return ret_val;
 }
@@ -28191,6 +32985,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_DirectedChannelTransaction
        LDKDirectedChannelTransactionParameters this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        jboolean ret_val = DirectedChannelTransactionParameters_is_outbound(&this_arg_conv);
        return ret_val;
 }
@@ -28199,10 +32994,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DirectedChannelTransactionP
        LDKDirectedChannelTransactionParameters this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKOutPoint ret_var = DirectedChannelTransactionParameters_funding_outpoint(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28214,6 +33011,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_HolderCommitmentTransaction_1f
        LDKHolderCommitmentTransaction this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        HolderCommitmentTransaction_free(this_obj_conv);
 }
 
@@ -28221,6 +33019,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_HolderCommitmentTransac
        LDKHolderCommitmentTransaction this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 64);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 64, HolderCommitmentTransaction_get_counterparty_sig(&this_ptr_conv).compact_form);
        return ret_arr;
@@ -28230,6 +33029,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_HolderCommitmentTransaction_1s
        LDKHolderCommitmentTransaction this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSignature val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 64);
        (*env)->GetByteArrayRegion(env, val, 0, 64, val_ref.compact_form);
@@ -28240,6 +33040,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_HolderCommitmentTransaction_1s
        LDKHolderCommitmentTransaction this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_SignatureZ val_constr;
        val_constr.datalen = (*env)->GetArrayLength(env, val);
        if (val_constr.datalen > 0)
@@ -28256,14 +33057,37 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_HolderCommitmentTransaction_1s
        HolderCommitmentTransaction_set_counterparty_htlc_sigs(&this_ptr_conv, val_constr);
 }
 
+static inline uint64_t HolderCommitmentTransaction_clone_ptr(LDKHolderCommitmentTransaction *NONNULL_PTR arg) {
+       LDKHolderCommitmentTransaction ret_var = HolderCommitmentTransaction_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_HolderCommitmentTransaction_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKHolderCommitmentTransaction arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = HolderCommitmentTransaction_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_HolderCommitmentTransaction_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKHolderCommitmentTransaction orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKHolderCommitmentTransaction ret_var = HolderCommitmentTransaction_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28275,6 +33099,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_HolderCommitmentTransac
        LDKHolderCommitmentTransaction obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = HolderCommitmentTransaction_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -28296,6 +33121,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_HolderCommitmentTransaction
        LDKCommitmentTransaction commitment_tx_conv;
        commitment_tx_conv.inner = (void*)(commitment_tx & (~1));
        commitment_tx_conv.is_owned = (commitment_tx & 1) || (commitment_tx == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(commitment_tx_conv);
        commitment_tx_conv = CommitmentTransaction_clone(&commitment_tx_conv);
        LDKSignature counterparty_sig_ref;
        CHECK((*env)->GetArrayLength(env, counterparty_sig) == 64);
@@ -28323,6 +33149,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_HolderCommitmentTransaction
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28334,6 +33161,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BuiltCommitmentTransaction_1fr
        LDKBuiltCommitmentTransaction this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        BuiltCommitmentTransaction_free(this_obj_conv);
 }
 
@@ -28341,6 +33169,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_BuiltCommitmentTransact
        LDKBuiltCommitmentTransaction this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKTransaction ret_var = BuiltCommitmentTransaction_get_transaction(&this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -28352,6 +33181,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BuiltCommitmentTransaction_1se
        LDKBuiltCommitmentTransaction this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKTransaction val_ref;
        val_ref.datalen = (*env)->GetArrayLength(env, val);
        val_ref.data = MALLOC(val_ref.datalen, "LDKTransaction Bytes");
@@ -28364,6 +33194,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_BuiltCommitmentTransact
        LDKBuiltCommitmentTransaction this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *BuiltCommitmentTransaction_get_txid(&this_ptr_conv));
        return ret_arr;
@@ -28373,6 +33204,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BuiltCommitmentTransaction_1se
        LDKBuiltCommitmentTransaction this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -28392,6 +33224,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BuiltCommitmentTransaction_
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28399,14 +33232,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BuiltCommitmentTransaction_
        return ret_ref;
 }
 
+static inline uint64_t BuiltCommitmentTransaction_clone_ptr(LDKBuiltCommitmentTransaction *NONNULL_PTR arg) {
+       LDKBuiltCommitmentTransaction ret_var = BuiltCommitmentTransaction_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BuiltCommitmentTransaction_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKBuiltCommitmentTransaction arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = BuiltCommitmentTransaction_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BuiltCommitmentTransaction_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKBuiltCommitmentTransaction orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKBuiltCommitmentTransaction ret_var = BuiltCommitmentTransaction_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28418,6 +33274,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_BuiltCommitmentTransact
        LDKBuiltCommitmentTransaction obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = BuiltCommitmentTransaction_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -28439,6 +33296,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_BuiltCommitmentTransact
        LDKBuiltCommitmentTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKu8slice funding_redeemscript_ref;
        funding_redeemscript_ref.datalen = (*env)->GetArrayLength(env, funding_redeemscript);
        funding_redeemscript_ref.data = (*env)->GetByteArrayElements (env, funding_redeemscript, NULL);
@@ -28452,6 +33310,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_BuiltCommitmentTransact
        LDKBuiltCommitmentTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char funding_key_arr[32];
        CHECK((*env)->GetArrayLength(env, funding_key) == 32);
        (*env)->GetByteArrayRegion(env, funding_key, 0, 32, funding_key_arr);
@@ -28469,17 +33328,41 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ClosingTransaction_1free(JNIEn
        LDKClosingTransaction this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ClosingTransaction_free(this_obj_conv);
 }
 
+static inline uint64_t ClosingTransaction_clone_ptr(LDKClosingTransaction *NONNULL_PTR arg) {
+       LDKClosingTransaction ret_var = ClosingTransaction_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClosingTransaction_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKClosingTransaction arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ClosingTransaction_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClosingTransaction_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKClosingTransaction orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKClosingTransaction ret_var = ClosingTransaction_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28491,6 +33374,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClosingTransaction_1hash(JN
        LDKClosingTransaction o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = ClosingTransaction_hash(&o_conv);
        return ret_val;
 }
@@ -28507,11 +33391,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClosingTransaction_1new(JNI
        LDKOutPoint funding_outpoint_conv;
        funding_outpoint_conv.inner = (void*)(funding_outpoint & (~1));
        funding_outpoint_conv.is_owned = (funding_outpoint & 1) || (funding_outpoint == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_outpoint_conv);
        funding_outpoint_conv = OutPoint_clone(&funding_outpoint_conv);
        LDKClosingTransaction ret_var = ClosingTransaction_new(to_holder_value_sat, to_counterparty_value_sat, to_holder_script_ref, to_counterparty_script_ref, funding_outpoint_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28523,10 +33409,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClosingTransaction_1trust(J
        LDKClosingTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKTrustedClosingTransaction ret_var = ClosingTransaction_trust(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28538,9 +33426,11 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClosingTransaction_1verify(
        LDKClosingTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKOutPoint funding_outpoint_conv;
        funding_outpoint_conv.inner = (void*)(funding_outpoint & (~1));
        funding_outpoint_conv.is_owned = (funding_outpoint & 1) || (funding_outpoint == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_outpoint_conv);
        funding_outpoint_conv = OutPoint_clone(&funding_outpoint_conv);
        LDKCResult_TrustedClosingTransactionNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_TrustedClosingTransactionNoneZ), "LDKCResult_TrustedClosingTransactionNoneZ");
        *ret_conv = ClosingTransaction_verify(&this_arg_conv, funding_outpoint_conv);
@@ -28551,6 +33441,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClosingTransaction_1to_1hol
        LDKClosingTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = ClosingTransaction_to_holder_value_sat(&this_arg_conv);
        return ret_val;
 }
@@ -28559,6 +33450,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ClosingTransaction_1to_1cou
        LDKClosingTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = ClosingTransaction_to_counterparty_value_sat(&this_arg_conv);
        return ret_val;
 }
@@ -28567,6 +33459,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ClosingTransaction_1to_
        LDKClosingTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKu8slice ret_var = ClosingTransaction_to_holder_script(&this_arg_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -28577,6 +33470,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ClosingTransaction_1to_
        LDKClosingTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKu8slice ret_var = ClosingTransaction_to_counterparty_script(&this_arg_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -28587,6 +33481,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_TrustedClosingTransaction_1fre
        LDKTrustedClosingTransaction this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        TrustedClosingTransaction_free(this_obj_conv);
 }
 
@@ -28594,6 +33489,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_TrustedClosingTransacti
        LDKTrustedClosingTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKTransaction ret_var = TrustedClosingTransaction_built_transaction(&this_arg_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -28605,6 +33501,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_TrustedClosingTransacti
        LDKTrustedClosingTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKu8slice funding_redeemscript_ref;
        funding_redeemscript_ref.datalen = (*env)->GetArrayLength(env, funding_redeemscript);
        funding_redeemscript_ref.data = (*env)->GetByteArrayElements (env, funding_redeemscript, NULL);
@@ -28618,6 +33515,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_TrustedClosingTransacti
        LDKTrustedClosingTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char funding_key_arr[32];
        CHECK((*env)->GetArrayLength(env, funding_key) == 32);
        (*env)->GetByteArrayRegion(env, funding_key, 0, 32, funding_key_arr);
@@ -28635,17 +33533,41 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CommitmentTransaction_1free(JN
        LDKCommitmentTransaction this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        CommitmentTransaction_free(this_obj_conv);
 }
 
+static inline uint64_t CommitmentTransaction_clone_ptr(LDKCommitmentTransaction *NONNULL_PTR arg) {
+       LDKCommitmentTransaction ret_var = CommitmentTransaction_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CommitmentTransaction_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKCommitmentTransaction arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = CommitmentTransaction_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CommitmentTransaction_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKCommitmentTransaction orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKCommitmentTransaction ret_var = CommitmentTransaction_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28657,6 +33579,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_CommitmentTransaction_1
        LDKCommitmentTransaction obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = CommitmentTransaction_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -28678,6 +33601,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CommitmentTransaction_1comm
        LDKCommitmentTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = CommitmentTransaction_commitment_number(&this_arg_conv);
        return ret_val;
 }
@@ -28686,6 +33610,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CommitmentTransaction_1to_1
        LDKCommitmentTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = CommitmentTransaction_to_broadcaster_value_sat(&this_arg_conv);
        return ret_val;
 }
@@ -28694,6 +33619,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CommitmentTransaction_1to_1
        LDKCommitmentTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = CommitmentTransaction_to_countersignatory_value_sat(&this_arg_conv);
        return ret_val;
 }
@@ -28702,6 +33628,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_CommitmentTransaction_1feer
        LDKCommitmentTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int32_t ret_val = CommitmentTransaction_feerate_per_kw(&this_arg_conv);
        return ret_val;
 }
@@ -28710,10 +33637,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CommitmentTransaction_1trus
        LDKCommitmentTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKTrustedCommitmentTransaction ret_var = CommitmentTransaction_trust(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28725,15 +33654,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_CommitmentTransaction_1veri
        LDKCommitmentTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKDirectedChannelTransactionParameters channel_parameters_conv;
        channel_parameters_conv.inner = (void*)(channel_parameters & (~1));
        channel_parameters_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_parameters_conv);
        LDKChannelPublicKeys broadcaster_keys_conv;
        broadcaster_keys_conv.inner = (void*)(broadcaster_keys & (~1));
        broadcaster_keys_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(broadcaster_keys_conv);
        LDKChannelPublicKeys countersignatory_keys_conv;
        countersignatory_keys_conv.inner = (void*)(countersignatory_keys & (~1));
        countersignatory_keys_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(countersignatory_keys_conv);
        LDKCResult_TrustedCommitmentTransactionNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_TrustedCommitmentTransactionNoneZ), "LDKCResult_TrustedCommitmentTransactionNoneZ");
        *ret_conv = CommitmentTransaction_verify(&this_arg_conv, &channel_parameters_conv, &broadcaster_keys_conv, &countersignatory_keys_conv);
        return (uint64_t)ret_conv;
@@ -28743,6 +33676,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_TrustedCommitmentTransaction_1
        LDKTrustedCommitmentTransaction this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        TrustedCommitmentTransaction_free(this_obj_conv);
 }
 
@@ -28750,6 +33684,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_TrustedCommitmentTransa
        LDKTrustedCommitmentTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, TrustedCommitmentTransaction_txid(&this_arg_conv).data);
        return ret_arr;
@@ -28759,10 +33694,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_TrustedCommitmentTransactio
        LDKTrustedCommitmentTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKBuiltCommitmentTransaction ret_var = TrustedCommitmentTransaction_built_transaction(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28774,10 +33711,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_TrustedCommitmentTransactio
        LDKTrustedCommitmentTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKTxCreationKeys ret_var = TrustedCommitmentTransaction_keys(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28789,6 +33728,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_TrustedCommitmentTransactio
        LDKTrustedCommitmentTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char htlc_base_key_arr[32];
        CHECK((*env)->GetArrayLength(env, htlc_base_key) == 32);
        (*env)->GetByteArrayRegion(env, htlc_base_key, 0, 32, htlc_base_key_arr);
@@ -28796,6 +33736,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_TrustedCommitmentTransactio
        LDKDirectedChannelTransactionParameters channel_parameters_conv;
        channel_parameters_conv.inner = (void*)(channel_parameters & (~1));
        channel_parameters_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_parameters_conv);
        LDKCResult_CVec_SignatureZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_SignatureZNoneZ), "LDKCResult_CVec_SignatureZNoneZ");
        *ret_conv = TrustedCommitmentTransaction_get_htlc_sigs(&this_arg_conv, htlc_base_key_ref, &channel_parameters_conv);
        return (uint64_t)ret_conv;
@@ -28816,9 +33757,11 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_InitFeatures_1eq(JNIEnv *e
        LDKInitFeatures a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKInitFeatures b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = InitFeatures_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -28827,9 +33770,11 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_NodeFeatures_1eq(JNIEnv *e
        LDKNodeFeatures a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKNodeFeatures b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = NodeFeatures_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -28838,9 +33783,11 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelFeatures_1eq(JNIEnv
        LDKChannelFeatures a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKChannelFeatures b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = ChannelFeatures_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -28849,21 +33796,46 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_InvoiceFeatures_1eq(JNIEnv
        LDKInvoiceFeatures a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKInvoiceFeatures b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = InvoiceFeatures_eq(&a_conv, &b_conv);
        return ret_val;
 }
 
+static inline uint64_t InitFeatures_clone_ptr(LDKInitFeatures *NONNULL_PTR arg) {
+       LDKInitFeatures ret_var = InitFeatures_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InitFeatures_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKInitFeatures arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = InitFeatures_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InitFeatures_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKInitFeatures orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKInitFeatures ret_var = InitFeatures_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28871,14 +33843,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InitFeatures_1clone(JNIEnv
        return ret_ref;
 }
 
+static inline uint64_t NodeFeatures_clone_ptr(LDKNodeFeatures *NONNULL_PTR arg) {
+       LDKNodeFeatures ret_var = NodeFeatures_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeFeatures_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKNodeFeatures arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = NodeFeatures_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeFeatures_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKNodeFeatures orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKNodeFeatures ret_var = NodeFeatures_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28886,14 +33881,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeFeatures_1clone(JNIEnv
        return ret_ref;
 }
 
+static inline uint64_t ChannelFeatures_clone_ptr(LDKChannelFeatures *NONNULL_PTR arg) {
+       LDKChannelFeatures ret_var = ChannelFeatures_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelFeatures_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKChannelFeatures arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChannelFeatures_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelFeatures_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKChannelFeatures orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChannelFeatures ret_var = ChannelFeatures_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28901,14 +33919,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelFeatures_1clone(JNIE
        return ret_ref;
 }
 
+static inline uint64_t InvoiceFeatures_clone_ptr(LDKInvoiceFeatures *NONNULL_PTR arg) {
+       LDKInvoiceFeatures ret_var = InvoiceFeatures_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceFeatures_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKInvoiceFeatures arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = InvoiceFeatures_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceFeatures_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKInvoiceFeatures orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKInvoiceFeatures ret_var = InvoiceFeatures_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28920,6 +33961,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InitFeatures_1free(JNIEnv *env
        LDKInitFeatures this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        InitFeatures_free(this_obj_conv);
 }
 
@@ -28927,6 +33969,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeFeatures_1free(JNIEnv *env
        LDKNodeFeatures this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        NodeFeatures_free(this_obj_conv);
 }
 
@@ -28934,6 +33977,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelFeatures_1free(JNIEnv *
        LDKChannelFeatures this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelFeatures_free(this_obj_conv);
 }
 
@@ -28941,6 +33985,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InvoiceFeatures_1free(JNIEnv *
        LDKInvoiceFeatures this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        InvoiceFeatures_free(this_obj_conv);
 }
 
@@ -28949,6 +33994,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InitFeatures_1empty(JNIEnv
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28961,6 +34007,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InitFeatures_1known(JNIEnv
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28972,6 +34019,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_InitFeatures_1requires_1un
        LDKInitFeatures this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        jboolean ret_val = InitFeatures_requires_unknown_bits(&this_arg_conv);
        return ret_val;
 }
@@ -28981,6 +34029,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeFeatures_1empty(JNIEnv
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28993,6 +34042,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeFeatures_1known(JNIEnv
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29004,6 +34054,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_NodeFeatures_1requires_1un
        LDKNodeFeatures this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        jboolean ret_val = NodeFeatures_requires_unknown_bits(&this_arg_conv);
        return ret_val;
 }
@@ -29013,6 +34064,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelFeatures_1empty(JNIE
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29025,6 +34077,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelFeatures_1known(JNIE
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29036,6 +34089,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelFeatures_1requires_
        LDKChannelFeatures this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        jboolean ret_val = ChannelFeatures_requires_unknown_bits(&this_arg_conv);
        return ret_val;
 }
@@ -29045,6 +34099,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceFeatures_1empty(JNIE
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29057,6 +34112,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceFeatures_1known(JNIE
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29068,6 +34124,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_InvoiceFeatures_1requires_
        LDKInvoiceFeatures this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        jboolean ret_val = InvoiceFeatures_requires_unknown_bits(&this_arg_conv);
        return ret_val;
 }
@@ -29076,6 +34133,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_InitFeatures_1supports_1pa
        LDKInitFeatures this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        jboolean ret_val = InitFeatures_supports_payment_secret(&this_arg_conv);
        return ret_val;
 }
@@ -29084,6 +34142,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_NodeFeatures_1supports_1pa
        LDKNodeFeatures this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        jboolean ret_val = NodeFeatures_supports_payment_secret(&this_arg_conv);
        return ret_val;
 }
@@ -29092,6 +34151,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_InvoiceFeatures_1supports_
        LDKInvoiceFeatures this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        jboolean ret_val = InvoiceFeatures_supports_payment_secret(&this_arg_conv);
        return ret_val;
 }
@@ -29100,6 +34160,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InitFeatures_1write(JNI
        LDKInitFeatures obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = InitFeatures_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -29111,6 +34172,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NodeFeatures_1write(JNI
        LDKNodeFeatures obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = NodeFeatures_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -29122,6 +34184,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelFeatures_1write(
        LDKChannelFeatures obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ChannelFeatures_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -29133,6 +34196,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InvoiceFeatures_1write(
        LDKInvoiceFeatures obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = InvoiceFeatures_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -29184,17 +34248,41 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ShutdownScript_1free(JNIEnv *e
        LDKShutdownScript this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ShutdownScript_free(this_obj_conv);
 }
 
+static inline uint64_t ShutdownScript_clone_ptr(LDKShutdownScript *NONNULL_PTR arg) {
+       LDKShutdownScript ret_var = ShutdownScript_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ShutdownScript_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKShutdownScript arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ShutdownScript_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ShutdownScript_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKShutdownScript orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKShutdownScript ret_var = ShutdownScript_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29206,6 +34294,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InvalidShutdownScript_1free(JN
        LDKInvalidShutdownScript this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        InvalidShutdownScript_free(this_obj_conv);
 }
 
@@ -29213,6 +34302,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_InvalidShutdownScript_1
        LDKInvalidShutdownScript this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKu8slice ret_var = InvalidShutdownScript_get_script(&this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -29223,6 +34313,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InvalidShutdownScript_1set_1sc
        LDKInvalidShutdownScript this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_u8Z val_ref;
        val_ref.datalen = (*env)->GetArrayLength(env, val);
        val_ref.data = MALLOC(val_ref.datalen, "LDKCVec_u8Z Bytes");
@@ -29239,6 +34330,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvalidShutdownScript_1new(
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29246,14 +34338,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvalidShutdownScript_1new(
        return ret_ref;
 }
 
+static inline uint64_t InvalidShutdownScript_clone_ptr(LDKInvalidShutdownScript *NONNULL_PTR arg) {
+       LDKInvalidShutdownScript ret_var = InvalidShutdownScript_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvalidShutdownScript_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKInvalidShutdownScript arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = InvalidShutdownScript_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvalidShutdownScript_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKInvalidShutdownScript orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKInvalidShutdownScript ret_var = InvalidShutdownScript_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29265,6 +34380,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ShutdownScript_1write(J
        LDKShutdownScript obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ShutdownScript_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -29291,6 +34407,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ShutdownScript_1new_1p2wpkh
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29307,6 +34424,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ShutdownScript_1new_1p2wsh(
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29328,6 +34446,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ShutdownScript_1into_1i
        LDKShutdownScript this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = (this_arg & 1) || (this_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv = ShutdownScript_clone(&this_arg_conv);
        LDKCVec_u8Z ret_var = ShutdownScript_into_inner(this_arg_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
@@ -29340,6 +34459,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ShutdownScript_1as_1leg
        LDKShutdownScript this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, ShutdownScript_as_legacy_pubkey(&this_arg_conv).compressed_form);
        return ret_arr;
@@ -29349,9 +34469,11 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ShutdownScript_1is_1compat
        LDKShutdownScript this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKInitFeatures features_conv;
        features_conv.inner = (void*)(features & (~1));
        features_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_conv);
        jboolean ret_val = ShutdownScript_is_compatible(&this_arg_conv, &features_conv);
        return ret_val;
 }
@@ -29365,6 +34487,19 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CustomMessageReader_1free(JNIE
        CustomMessageReader_free(this_ptr_conv);
 }
 
+static inline uint64_t Type_clone_ptr(LDKType *NONNULL_PTR arg) {
+       LDKType* ret_ret = MALLOC(sizeof(LDKType), "LDKType");
+       *ret_ret = Type_clone(arg);
+       return (uint64_t)ret_ret;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Type_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       void* arg_ptr = (void*)(((uint64_t)arg) & ~1);
+       if (!(arg & 1)) { CHECK_ACCESS(arg_ptr); }
+       LDKType* arg_conv = (LDKType*)arg_ptr;
+       int64_t ret_val = Type_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Type_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        void* orig_ptr = (void*)(((uint64_t)orig) & ~1);
        if (!(orig & 1)) { CHECK_ACCESS(orig_ptr); }
@@ -29396,6 +34531,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LockableScore_1free(JNIEnv *en
        LDKLockableScore this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        LockableScore_free(this_obj_conv);
 }
 
@@ -29411,6 +34547,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_LockableScore_1new(JNIEnv *
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29422,6 +34559,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_LockableScore_1write(JN
        LDKLockableScore obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = LockableScore_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -29433,17 +34571,41 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeId_1free(JNIEnv *env, jcla
        LDKNodeId this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        NodeId_free(this_obj_conv);
 }
 
+static inline uint64_t NodeId_clone_ptr(LDKNodeId *NONNULL_PTR arg) {
+       LDKNodeId ret_var = NodeId_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeId_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKNodeId arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = NodeId_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeId_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKNodeId orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKNodeId ret_var = NodeId_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29459,6 +34621,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeId_1from_1pubkey(JNIEnv
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29470,6 +34633,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NodeId_1as_1slice(JNIEn
        LDKNodeId this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKu8slice ret_var = NodeId_as_slice(&this_arg_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -29480,6 +34644,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeId_1hash(JNIEnv *env, j
        LDKNodeId o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = NodeId_hash(&o_conv);
        return ret_val;
 }
@@ -29488,6 +34653,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NodeId_1write(JNIEnv *e
        LDKNodeId obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = NodeId_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -29509,17 +34675,41 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1free(JNIEnv *env
        LDKNetworkGraph this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        NetworkGraph_free(this_obj_conv);
 }
 
+static inline uint64_t NetworkGraph_clone_ptr(LDKNetworkGraph *NONNULL_PTR arg) {
+       LDKNetworkGraph ret_var = NetworkGraph_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKNetworkGraph arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = NetworkGraph_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKNetworkGraph orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKNetworkGraph ret_var = NetworkGraph_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29531,6 +34721,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ReadOnlyNetworkGraph_1free(JNI
        LDKReadOnlyNetworkGraph this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ReadOnlyNetworkGraph_free(this_obj_conv);
 }
 
@@ -29543,6 +34734,18 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NetworkUpdate_1free(JNIEnv *en
        NetworkUpdate_free(this_ptr_conv);
 }
 
+static inline uint64_t NetworkUpdate_clone_ptr(LDKNetworkUpdate *NONNULL_PTR arg) {
+       LDKNetworkUpdate *ret_copy = MALLOC(sizeof(LDKNetworkUpdate), "LDKNetworkUpdate");
+       *ret_copy = NetworkUpdate_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkUpdate_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKNetworkUpdate* arg_conv = (LDKNetworkUpdate*)arg;
+       int64_t ret_val = NetworkUpdate_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkUpdate_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKNetworkUpdate* orig_conv = (LDKNetworkUpdate*)orig;
        LDKNetworkUpdate *ret_copy = MALLOC(sizeof(LDKNetworkUpdate), "LDKNetworkUpdate");
@@ -29555,6 +34758,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkUpdate_1channel_1upd
        LDKChannelUpdate msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = ChannelUpdate_clone(&msg_conv);
        LDKNetworkUpdate *ret_copy = MALLOC(sizeof(LDKNetworkUpdate), "LDKNetworkUpdate");
        *ret_copy = NetworkUpdate_channel_update_message(msg_conv);
@@ -29588,10 +34792,21 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NetworkUpdate_1write(JN
        return ret_arr;
 }
 
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkUpdate_1read(JNIEnv *env, jclass clz, int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = (*env)->GetArrayLength(env, ser);
+       ser_ref.data = (*env)->GetByteArrayElements (env, ser, NULL);
+       LDKCResult_COption_NetworkUpdateZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_NetworkUpdateZDecodeErrorZ), "LDKCResult_COption_NetworkUpdateZDecodeErrorZ");
+       *ret_conv = NetworkUpdate_read(ser_ref);
+       (*env)->ReleaseByteArrayElements(env, ser, (int8_t*)ser_ref.data, 0);
+       return (uint64_t)ret_conv;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetGraphMsgHandler_1as_1EventHandler(JNIEnv *env, jclass clz, int64_t this_arg) {
        LDKNetGraphMsgHandler this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKEventHandler* ret_ret = MALLOC(sizeof(LDKEventHandler), "LDKEventHandler");
        *ret_ret = NetGraphMsgHandler_as_EventHandler(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -29601,6 +34816,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NetGraphMsgHandler_1free(JNIEn
        LDKNetGraphMsgHandler this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        NetGraphMsgHandler_free(this_obj_conv);
 }
 
@@ -29608,6 +34824,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetGraphMsgHandler_1new(JNI
        LDKNetworkGraph network_graph_conv;
        network_graph_conv.inner = (void*)(network_graph & (~1));
        network_graph_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
        void* chain_access_ptr = (void*)(((uint64_t)chain_access) & ~1);
        CHECK_ACCESS(chain_access_ptr);
        LDKCOption_AccessZ chain_access_conv = *(LDKCOption_AccessZ*)(chain_access_ptr);
@@ -29630,6 +34847,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetGraphMsgHandler_1new(JNI
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29641,6 +34859,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NetGraphMsgHandler_1add_1chain
        LDKNetGraphMsgHandler this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        void* chain_access_ptr = (void*)(((uint64_t)chain_access) & ~1);
        CHECK_ACCESS(chain_access_ptr);
        LDKCOption_AccessZ chain_access_conv = *(LDKCOption_AccessZ*)(chain_access_ptr);
@@ -29659,6 +34878,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetGraphMsgHandler_1as_1Rou
        LDKNetGraphMsgHandler this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKRoutingMessageHandler* ret_ret = MALLOC(sizeof(LDKRoutingMessageHandler), "LDKRoutingMessageHandler");
        *ret_ret = NetGraphMsgHandler_as_RoutingMessageHandler(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -29668,6 +34888,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetGraphMsgHandler_1as_1Mes
        LDKNetGraphMsgHandler this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKMessageSendEventsProvider* ret_ret = MALLOC(sizeof(LDKMessageSendEventsProvider), "LDKMessageSendEventsProvider");
        *ret_ret = NetGraphMsgHandler_as_MessageSendEventsProvider(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -29677,6 +34898,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DirectionalChannelInfo_1free(J
        LDKDirectionalChannelInfo this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        DirectionalChannelInfo_free(this_obj_conv);
 }
 
@@ -29684,6 +34906,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_DirectionalChannelInfo_1get
        LDKDirectionalChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = DirectionalChannelInfo_get_last_update(&this_ptr_conv);
        return ret_val;
 }
@@ -29692,6 +34915,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DirectionalChannelInfo_1set_1l
        LDKDirectionalChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        DirectionalChannelInfo_set_last_update(&this_ptr_conv, val);
 }
 
@@ -29699,6 +34923,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_DirectionalChannelInfo_1ge
        LDKDirectionalChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        jboolean ret_val = DirectionalChannelInfo_get_enabled(&this_ptr_conv);
        return ret_val;
 }
@@ -29707,6 +34932,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DirectionalChannelInfo_1set_1e
        LDKDirectionalChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        DirectionalChannelInfo_set_enabled(&this_ptr_conv, val);
 }
 
@@ -29714,6 +34940,7 @@ JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_DirectionalChannelInfo_1get
        LDKDirectionalChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = DirectionalChannelInfo_get_cltv_expiry_delta(&this_ptr_conv);
        return ret_val;
 }
@@ -29722,6 +34949,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DirectionalChannelInfo_1set_1c
        LDKDirectionalChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        DirectionalChannelInfo_set_cltv_expiry_delta(&this_ptr_conv, val);
 }
 
@@ -29729,6 +34957,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DirectionalChannelInfo_1get
        LDKDirectionalChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = DirectionalChannelInfo_get_htlc_minimum_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -29737,6 +34966,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DirectionalChannelInfo_1set_1h
        LDKDirectionalChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        DirectionalChannelInfo_set_htlc_minimum_msat(&this_ptr_conv, val);
 }
 
@@ -29744,6 +34974,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DirectionalChannelInfo_1get
        LDKDirectionalChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
        *ret_copy = DirectionalChannelInfo_get_htlc_maximum_msat(&this_ptr_conv);
        uint64_t ret_ref = (uint64_t)ret_copy;
@@ -29754,6 +34985,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DirectionalChannelInfo_1set_1h
        LDKDirectionalChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
@@ -29765,10 +34997,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DirectionalChannelInfo_1get
        LDKDirectionalChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKRoutingFees ret_var = DirectionalChannelInfo_get_fees(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29780,9 +35014,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DirectionalChannelInfo_1set_1f
        LDKDirectionalChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKRoutingFees val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = RoutingFees_clone(&val_conv);
        DirectionalChannelInfo_set_fees(&this_ptr_conv, val_conv);
 }
@@ -29791,11 +35027,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DirectionalChannelInfo_1get
        LDKDirectionalChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelUpdate ret_var = DirectionalChannelInfo_get_last_update_message(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -29808,9 +35046,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DirectionalChannelInfo_1set_1l
        LDKDirectionalChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelUpdate val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = ChannelUpdate_clone(&val_conv);
        DirectionalChannelInfo_set_last_update_message(&this_ptr_conv, val_conv);
 }
@@ -29823,15 +35063,18 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DirectionalChannelInfo_1new
        LDKRoutingFees fees_arg_conv;
        fees_arg_conv.inner = (void*)(fees_arg & (~1));
        fees_arg_conv.is_owned = (fees_arg & 1) || (fees_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(fees_arg_conv);
        fees_arg_conv = RoutingFees_clone(&fees_arg_conv);
        LDKChannelUpdate last_update_message_arg_conv;
        last_update_message_arg_conv.inner = (void*)(last_update_message_arg & (~1));
        last_update_message_arg_conv.is_owned = (last_update_message_arg & 1) || (last_update_message_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(last_update_message_arg_conv);
        last_update_message_arg_conv = ChannelUpdate_clone(&last_update_message_arg_conv);
        LDKDirectionalChannelInfo ret_var = DirectionalChannelInfo_new(last_update_arg, enabled_arg, cltv_expiry_delta_arg, htlc_minimum_msat_arg, htlc_maximum_msat_arg_conv, fees_arg_conv, last_update_message_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29839,14 +35082,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DirectionalChannelInfo_1new
        return ret_ref;
 }
 
+static inline uint64_t DirectionalChannelInfo_clone_ptr(LDKDirectionalChannelInfo *NONNULL_PTR arg) {
+       LDKDirectionalChannelInfo ret_var = DirectionalChannelInfo_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DirectionalChannelInfo_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKDirectionalChannelInfo arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = DirectionalChannelInfo_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DirectionalChannelInfo_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKDirectionalChannelInfo orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKDirectionalChannelInfo ret_var = DirectionalChannelInfo_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29858,6 +35124,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_DirectionalChannelInfo_
        LDKDirectionalChannelInfo obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = DirectionalChannelInfo_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -29879,6 +35146,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1free(JNIEnv *env,
        LDKChannelInfo this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelInfo_free(this_obj_conv);
 }
 
@@ -29886,10 +35154,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1get_1features(
        LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelFeatures ret_var = ChannelInfo_get_features(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29901,9 +35171,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1set_1features(JNI
        LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelFeatures val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = ChannelFeatures_clone(&val_conv);
        ChannelInfo_set_features(&this_ptr_conv, val_conv);
 }
@@ -29912,10 +35184,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1get_1node_1one
        LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNodeId ret_var = ChannelInfo_get_node_one(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29927,9 +35201,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1set_1node_1one(JN
        LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNodeId val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = NodeId_clone(&val_conv);
        ChannelInfo_set_node_one(&this_ptr_conv, val_conv);
 }
@@ -29938,11 +35214,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1get_1one_1to_1
        LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKDirectionalChannelInfo ret_var = ChannelInfo_get_one_to_two(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -29955,9 +35233,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1set_1one_1to_1two
        LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKDirectionalChannelInfo val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = DirectionalChannelInfo_clone(&val_conv);
        ChannelInfo_set_one_to_two(&this_ptr_conv, val_conv);
 }
@@ -29966,10 +35246,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1get_1node_1two
        LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNodeId ret_var = ChannelInfo_get_node_two(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29981,9 +35263,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1set_1node_1two(JN
        LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNodeId val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = NodeId_clone(&val_conv);
        ChannelInfo_set_node_two(&this_ptr_conv, val_conv);
 }
@@ -29992,11 +35276,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1get_1two_1to_1
        LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKDirectionalChannelInfo ret_var = ChannelInfo_get_two_to_one(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -30009,9 +35295,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1set_1two_1to_1one
        LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKDirectionalChannelInfo val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = DirectionalChannelInfo_clone(&val_conv);
        ChannelInfo_set_two_to_one(&this_ptr_conv, val_conv);
 }
@@ -30020,6 +35308,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1get_1capacity_
        LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
        *ret_copy = ChannelInfo_get_capacity_sats(&this_ptr_conv);
        uint64_t ret_ref = (uint64_t)ret_copy;
@@ -30030,6 +35319,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1set_1capacity_1sa
        LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
@@ -30041,11 +35331,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1get_1announcem
        LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelAnnouncement ret_var = ChannelInfo_get_announcement_message(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -30058,9 +35350,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1set_1announcement
        LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelAnnouncement val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = ChannelAnnouncement_clone(&val_conv);
        ChannelInfo_set_announcement_message(&this_ptr_conv, val_conv);
 }
@@ -30069,22 +35363,27 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1new(JNIEnv *en
        LDKChannelFeatures features_arg_conv;
        features_arg_conv.inner = (void*)(features_arg & (~1));
        features_arg_conv.is_owned = (features_arg & 1) || (features_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_arg_conv);
        features_arg_conv = ChannelFeatures_clone(&features_arg_conv);
        LDKNodeId node_one_arg_conv;
        node_one_arg_conv.inner = (void*)(node_one_arg & (~1));
        node_one_arg_conv.is_owned = (node_one_arg & 1) || (node_one_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_one_arg_conv);
        node_one_arg_conv = NodeId_clone(&node_one_arg_conv);
        LDKDirectionalChannelInfo one_to_two_arg_conv;
        one_to_two_arg_conv.inner = (void*)(one_to_two_arg & (~1));
        one_to_two_arg_conv.is_owned = (one_to_two_arg & 1) || (one_to_two_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(one_to_two_arg_conv);
        one_to_two_arg_conv = DirectionalChannelInfo_clone(&one_to_two_arg_conv);
        LDKNodeId node_two_arg_conv;
        node_two_arg_conv.inner = (void*)(node_two_arg & (~1));
        node_two_arg_conv.is_owned = (node_two_arg & 1) || (node_two_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_two_arg_conv);
        node_two_arg_conv = NodeId_clone(&node_two_arg_conv);
        LDKDirectionalChannelInfo two_to_one_arg_conv;
        two_to_one_arg_conv.inner = (void*)(two_to_one_arg & (~1));
        two_to_one_arg_conv.is_owned = (two_to_one_arg & 1) || (two_to_one_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(two_to_one_arg_conv);
        two_to_one_arg_conv = DirectionalChannelInfo_clone(&two_to_one_arg_conv);
        void* capacity_sats_arg_ptr = (void*)(((uint64_t)capacity_sats_arg) & ~1);
        CHECK_ACCESS(capacity_sats_arg_ptr);
@@ -30093,11 +35392,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1new(JNIEnv *en
        LDKChannelAnnouncement announcement_message_arg_conv;
        announcement_message_arg_conv.inner = (void*)(announcement_message_arg & (~1));
        announcement_message_arg_conv.is_owned = (announcement_message_arg & 1) || (announcement_message_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(announcement_message_arg_conv);
        announcement_message_arg_conv = ChannelAnnouncement_clone(&announcement_message_arg_conv);
        LDKChannelInfo ret_var = ChannelInfo_new(features_arg_conv, node_one_arg_conv, one_to_two_arg_conv, node_two_arg_conv, two_to_one_arg_conv, capacity_sats_arg_conv, announcement_message_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -30105,14 +35406,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1new(JNIEnv *en
        return ret_ref;
 }
 
+static inline uint64_t ChannelInfo_clone_ptr(LDKChannelInfo *NONNULL_PTR arg) {
+       LDKChannelInfo ret_var = ChannelInfo_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKChannelInfo arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChannelInfo_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKChannelInfo orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChannelInfo ret_var = ChannelInfo_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -30124,6 +35448,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1write(JNIE
        LDKChannelInfo obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ChannelInfo_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -30145,6 +35470,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RoutingFees_1free(JNIEnv *env,
        LDKRoutingFees this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        RoutingFees_free(this_obj_conv);
 }
 
@@ -30152,6 +35478,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_RoutingFees_1get_1base_1msa
        LDKRoutingFees this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = RoutingFees_get_base_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -30160,6 +35487,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RoutingFees_1set_1base_1msat(J
        LDKRoutingFees this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        RoutingFees_set_base_msat(&this_ptr_conv, val);
 }
 
@@ -30167,6 +35495,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_RoutingFees_1get_1proportio
        LDKRoutingFees this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = RoutingFees_get_proportional_millionths(&this_ptr_conv);
        return ret_val;
 }
@@ -30175,6 +35504,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RoutingFees_1set_1proportional
        LDKRoutingFees this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        RoutingFees_set_proportional_millionths(&this_ptr_conv, val);
 }
 
@@ -30183,6 +35513,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RoutingFees_1new(JNIEnv *en
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -30194,21 +35525,46 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_RoutingFees_1eq(JNIEnv *en
        LDKRoutingFees a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKRoutingFees b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = RoutingFees_eq(&a_conv, &b_conv);
        return ret_val;
 }
 
+static inline uint64_t RoutingFees_clone_ptr(LDKRoutingFees *NONNULL_PTR arg) {
+       LDKRoutingFees ret_var = RoutingFees_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RoutingFees_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKRoutingFees arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = RoutingFees_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RoutingFees_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKRoutingFees orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKRoutingFees ret_var = RoutingFees_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -30220,6 +35576,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RoutingFees_1hash(JNIEnv *e
        LDKRoutingFees o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = RoutingFees_hash(&o_conv);
        return ret_val;
 }
@@ -30228,6 +35585,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_RoutingFees_1write(JNIE
        LDKRoutingFees obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = RoutingFees_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -30249,6 +35607,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1free(JNI
        LDKNodeAnnouncementInfo this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        NodeAnnouncementInfo_free(this_obj_conv);
 }
 
@@ -30256,10 +35615,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1get_1
        LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNodeFeatures ret_var = NodeAnnouncementInfo_get_features(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -30271,9 +35632,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1set_1fea
        LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNodeFeatures val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = NodeFeatures_clone(&val_conv);
        NodeAnnouncementInfo_set_features(&this_ptr_conv, val_conv);
 }
@@ -30282,6 +35645,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1get_1
        LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = NodeAnnouncementInfo_get_last_update(&this_ptr_conv);
        return ret_val;
 }
@@ -30290,6 +35654,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1set_1las
        LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        NodeAnnouncementInfo_set_last_update(&this_ptr_conv, val);
 }
 
@@ -30297,6 +35662,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1g
        LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 3);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 3, *NodeAnnouncementInfo_get_rgb(&this_ptr_conv));
        return ret_arr;
@@ -30306,6 +35672,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1set_1rgb
        LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThreeBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 3);
        (*env)->GetByteArrayRegion(env, val, 0, 3, val_ref.data);
@@ -30316,6 +35683,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1g
        LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *NodeAnnouncementInfo_get_alias(&this_ptr_conv));
        return ret_arr;
@@ -30325,6 +35693,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1set_1ali
        LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 32);
        (*env)->GetByteArrayRegion(env, val, 0, 32, val_ref.data);
@@ -30335,6 +35704,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1set_1add
        LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_NetAddressZ val_constr;
        val_constr.datalen = (*env)->GetArrayLength(env, val);
        if (val_constr.datalen > 0)
@@ -30358,11 +35728,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1get_1
        LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNodeAnnouncement ret_var = NodeAnnouncementInfo_get_announcement_message(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -30375,9 +35747,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1set_1ann
        LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNodeAnnouncement val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = NodeAnnouncement_clone(&val_conv);
        NodeAnnouncementInfo_set_announcement_message(&this_ptr_conv, val_conv);
 }
@@ -30386,6 +35760,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1new(J
        LDKNodeFeatures features_arg_conv;
        features_arg_conv.inner = (void*)(features_arg & (~1));
        features_arg_conv.is_owned = (features_arg & 1) || (features_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_arg_conv);
        features_arg_conv = NodeFeatures_clone(&features_arg_conv);
        LDKThreeBytes rgb_arg_ref;
        CHECK((*env)->GetArrayLength(env, rgb_arg) == 3);
@@ -30411,11 +35786,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1new(J
        LDKNodeAnnouncement announcement_message_arg_conv;
        announcement_message_arg_conv.inner = (void*)(announcement_message_arg & (~1));
        announcement_message_arg_conv.is_owned = (announcement_message_arg & 1) || (announcement_message_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(announcement_message_arg_conv);
        announcement_message_arg_conv = NodeAnnouncement_clone(&announcement_message_arg_conv);
        LDKNodeAnnouncementInfo ret_var = NodeAnnouncementInfo_new(features_arg_conv, last_update_arg, rgb_arg_ref, alias_arg_ref, addresses_arg_constr, announcement_message_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -30423,14 +35800,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1new(J
        return ret_ref;
 }
 
+static inline uint64_t NodeAnnouncementInfo_clone_ptr(LDKNodeAnnouncementInfo *NONNULL_PTR arg) {
+       LDKNodeAnnouncementInfo ret_var = NodeAnnouncementInfo_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKNodeAnnouncementInfo arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = NodeAnnouncementInfo_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKNodeAnnouncementInfo orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKNodeAnnouncementInfo ret_var = NodeAnnouncementInfo_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -30442,6 +35842,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1w
        LDKNodeAnnouncementInfo obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = NodeAnnouncementInfo_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -30463,6 +35864,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeInfo_1free(JNIEnv *env, jc
        LDKNodeInfo this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        NodeInfo_free(this_obj_conv);
 }
 
@@ -30470,6 +35872,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeInfo_1set_1channels(JNIEnv
        LDKNodeInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_u64Z val_constr;
        val_constr.datalen = (*env)->GetArrayLength(env, val);
        if (val_constr.datalen > 0)
@@ -30489,11 +35892,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeInfo_1get_1lowest_1inbo
        LDKNodeInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKRoutingFees ret_var = NodeInfo_get_lowest_inbound_channel_fees(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -30506,9 +35911,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeInfo_1set_1lowest_1inbound
        LDKNodeInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKRoutingFees val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = RoutingFees_clone(&val_conv);
        NodeInfo_set_lowest_inbound_channel_fees(&this_ptr_conv, val_conv);
 }
@@ -30517,11 +35924,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeInfo_1get_1announcement
        LDKNodeInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNodeAnnouncementInfo ret_var = NodeInfo_get_announcement_info(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -30534,9 +35943,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeInfo_1set_1announcement_1i
        LDKNodeInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNodeAnnouncementInfo val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = NodeAnnouncementInfo_clone(&val_conv);
        NodeInfo_set_announcement_info(&this_ptr_conv, val_conv);
 }
@@ -30557,15 +35968,18 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeInfo_1new(JNIEnv *env,
        LDKRoutingFees lowest_inbound_channel_fees_arg_conv;
        lowest_inbound_channel_fees_arg_conv.inner = (void*)(lowest_inbound_channel_fees_arg & (~1));
        lowest_inbound_channel_fees_arg_conv.is_owned = (lowest_inbound_channel_fees_arg & 1) || (lowest_inbound_channel_fees_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(lowest_inbound_channel_fees_arg_conv);
        lowest_inbound_channel_fees_arg_conv = RoutingFees_clone(&lowest_inbound_channel_fees_arg_conv);
        LDKNodeAnnouncementInfo announcement_info_arg_conv;
        announcement_info_arg_conv.inner = (void*)(announcement_info_arg & (~1));
        announcement_info_arg_conv.is_owned = (announcement_info_arg & 1) || (announcement_info_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(announcement_info_arg_conv);
        announcement_info_arg_conv = NodeAnnouncementInfo_clone(&announcement_info_arg_conv);
        LDKNodeInfo ret_var = NodeInfo_new(channels_arg_constr, lowest_inbound_channel_fees_arg_conv, announcement_info_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -30573,14 +35987,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeInfo_1new(JNIEnv *env,
        return ret_ref;
 }
 
+static inline uint64_t NodeInfo_clone_ptr(LDKNodeInfo *NONNULL_PTR arg) {
+       LDKNodeInfo ret_var = NodeInfo_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeInfo_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKNodeInfo arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = NodeInfo_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NodeInfo_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKNodeInfo orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKNodeInfo ret_var = NodeInfo_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -30592,6 +36029,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NodeInfo_1write(JNIEnv
        LDKNodeInfo obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = NodeInfo_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -30613,6 +36051,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1write(JNI
        LDKNetworkGraph obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = NetworkGraph_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -30638,6 +36077,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1new(JNIEnv *e
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -30649,10 +36089,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1read_1only(JN
        LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKReadOnlyNetworkGraph ret_var = NetworkGraph_read_only(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -30664,9 +36106,11 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1update_1node_
        LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKNodeAnnouncement msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
        *ret_conv = NetworkGraph_update_node_from_announcement(&this_arg_conv, &msg_conv);
        return (uint64_t)ret_conv;
@@ -30676,9 +36120,11 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1update_1node_
        LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKUnsignedNodeAnnouncement msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
        *ret_conv = NetworkGraph_update_node_from_unsigned_announcement(&this_arg_conv, &msg_conv);
        return (uint64_t)ret_conv;
@@ -30688,9 +36134,11 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1update_1chann
        LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKChannelAnnouncement msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        void* chain_access_ptr = (void*)(((uint64_t)chain_access) & ~1);
        CHECK_ACCESS(chain_access_ptr);
        LDKCOption_AccessZ chain_access_conv = *(LDKCOption_AccessZ*)(chain_access_ptr);
@@ -30711,9 +36159,11 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1update_1chann
        LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKUnsignedChannelAnnouncement msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        void* chain_access_ptr = (void*)(((uint64_t)chain_access) & ~1);
        CHECK_ACCESS(chain_access_ptr);
        LDKCOption_AccessZ chain_access_conv = *(LDKCOption_AccessZ*)(chain_access_ptr);
@@ -30734,6 +36184,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1close_1channel_1
        LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        NetworkGraph_close_channel_from_update(&this_arg_conv, short_channel_id, is_permanent);
 }
 
@@ -30741,6 +36192,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1fail_1node(JNIEn
        LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKPublicKey _node_id_ref;
        CHECK((*env)->GetArrayLength(env, _node_id) == 33);
        (*env)->GetByteArrayRegion(env, _node_id, 0, 33, _node_id_ref.compressed_form);
@@ -30751,9 +36203,11 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1update_1chann
        LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKChannelUpdate msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
        *ret_conv = NetworkGraph_update_channel(&this_arg_conv, &msg_conv);
        return (uint64_t)ret_conv;
@@ -30763,9 +36217,11 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1update_1chann
        LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKUnsignedChannelUpdate msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
        *ret_conv = NetworkGraph_update_channel_unsigned(&this_arg_conv, &msg_conv);
        return (uint64_t)ret_conv;
@@ -30775,6 +36231,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ReadOnlyNetworkGraph_1get_1
        LDKReadOnlyNetworkGraph this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKPublicKey pubkey_ref;
        CHECK((*env)->GetArrayLength(env, pubkey) == 33);
        (*env)->GetByteArrayRegion(env, pubkey, 0, 33, pubkey_ref.compressed_form);
@@ -30788,6 +36245,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHop_1free(JNIEnv *env, jc
        LDKRouteHop this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        RouteHop_free(this_obj_conv);
 }
 
@@ -30795,6 +36253,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_RouteHop_1get_1pubkey(J
        LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, RouteHop_get_pubkey(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -30804,6 +36263,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHop_1set_1pubkey(JNIEnv *
        LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -30814,10 +36274,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1get_1node_1featur
        LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNodeFeatures ret_var = RouteHop_get_node_features(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -30829,9 +36291,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHop_1set_1node_1features(
        LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNodeFeatures val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = NodeFeatures_clone(&val_conv);
        RouteHop_set_node_features(&this_ptr_conv, val_conv);
 }
@@ -30840,6 +36304,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1get_1short_1chann
        LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = RouteHop_get_short_channel_id(&this_ptr_conv);
        return ret_val;
 }
@@ -30848,6 +36313,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHop_1set_1short_1channel_
        LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        RouteHop_set_short_channel_id(&this_ptr_conv, val);
 }
 
@@ -30855,10 +36321,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1get_1channel_1fea
        LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelFeatures ret_var = RouteHop_get_channel_features(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -30870,9 +36338,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHop_1set_1channel_1featur
        LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelFeatures val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = ChannelFeatures_clone(&val_conv);
        RouteHop_set_channel_features(&this_ptr_conv, val_conv);
 }
@@ -30881,6 +36351,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1get_1fee_1msat(JN
        LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = RouteHop_get_fee_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -30889,6 +36360,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHop_1set_1fee_1msat(JNIEn
        LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        RouteHop_set_fee_msat(&this_ptr_conv, val);
 }
 
@@ -30896,6 +36368,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1get_1cltv_1expiry
        LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = RouteHop_get_cltv_expiry_delta(&this_ptr_conv);
        return ret_val;
 }
@@ -30904,6 +36377,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHop_1set_1cltv_1expiry_1d
        LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        RouteHop_set_cltv_expiry_delta(&this_ptr_conv, val);
 }
 
@@ -30914,15 +36388,18 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1new(JNIEnv *env,
        LDKNodeFeatures node_features_arg_conv;
        node_features_arg_conv.inner = (void*)(node_features_arg & (~1));
        node_features_arg_conv.is_owned = (node_features_arg & 1) || (node_features_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_features_arg_conv);
        node_features_arg_conv = NodeFeatures_clone(&node_features_arg_conv);
        LDKChannelFeatures channel_features_arg_conv;
        channel_features_arg_conv.inner = (void*)(channel_features_arg & (~1));
        channel_features_arg_conv.is_owned = (channel_features_arg & 1) || (channel_features_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_features_arg_conv);
        channel_features_arg_conv = ChannelFeatures_clone(&channel_features_arg_conv);
        LDKRouteHop ret_var = RouteHop_new(pubkey_arg_ref, node_features_arg_conv, short_channel_id_arg, channel_features_arg_conv, fee_msat_arg, cltv_expiry_delta_arg);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -30930,14 +36407,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1new(JNIEnv *env,
        return ret_ref;
 }
 
+static inline uint64_t RouteHop_clone_ptr(LDKRouteHop *NONNULL_PTR arg) {
+       LDKRouteHop ret_var = RouteHop_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKRouteHop arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = RouteHop_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKRouteHop orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKRouteHop ret_var = RouteHop_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -30949,6 +36449,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHop_1hash(JNIEnv *env,
        LDKRouteHop o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = RouteHop_hash(&o_conv);
        return ret_val;
 }
@@ -30957,9 +36458,11 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_RouteHop_1eq(JNIEnv *env,
        LDKRouteHop a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKRouteHop b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = RouteHop_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -30968,6 +36471,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_RouteHop_1write(JNIEnv
        LDKRouteHop obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = RouteHop_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -30989,6 +36493,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Route_1free(JNIEnv *env, jclas
        LDKRoute this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        Route_free(this_obj_conv);
 }
 
@@ -30996,6 +36501,7 @@ JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_Route_1get_1paths(JNIE
        LDKRoute this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_CVec_RouteHopZZ ret_var = Route_get_paths(&this_ptr_conv);
        jobjectArray ret_arr = NULL;
        ret_arr = (*env)->NewObjectArray(env, ret_var.datalen, arr_of_J_clz, NULL);
@@ -31010,6 +36516,7 @@ JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_Route_1get_1paths(JNIE
                        uint64_t ret_conv_12_conv_10_ref = 0;
                        CHECK((((uint64_t)ret_conv_12_conv_10_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&ret_conv_12_conv_10_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_12_conv_10_var);
                        ret_conv_12_conv_10_ref = (uint64_t)ret_conv_12_conv_10_var.inner;
                        if (ret_conv_12_conv_10_var.is_owned) {
                                ret_conv_12_conv_10_ref |= 1;
@@ -31029,6 +36536,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Route_1set_1paths(JNIEnv *env,
        LDKRoute this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_CVec_RouteHopZZ val_constr;
        val_constr.datalen = (*env)->GetArrayLength(env, val);
        if (val_constr.datalen > 0)
@@ -31049,6 +36557,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Route_1set_1paths(JNIEnv *env,
                        LDKRouteHop val_conv_12_conv_10_conv;
                        val_conv_12_conv_10_conv.inner = (void*)(val_conv_12_conv_10 & (~1));
                        val_conv_12_conv_10_conv.is_owned = (val_conv_12_conv_10 & 1) || (val_conv_12_conv_10 == 0);
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_12_conv_10_conv);
                        val_conv_12_conv_10_conv = RouteHop_clone(&val_conv_12_conv_10_conv);
                        val_conv_12_constr.data[k] = val_conv_12_conv_10_conv;
                }
@@ -31062,11 +36571,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Route_1get_1payee(JNIEnv *e
        LDKRoute this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPayee ret_var = Route_get_payee(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -31079,9 +36590,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Route_1set_1payee(JNIEnv *env,
        LDKRoute this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPayee val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = Payee_clone(&val_conv);
        Route_set_payee(&this_ptr_conv, val_conv);
 }
@@ -31107,6 +36620,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Route_1new(JNIEnv *env, jcl
                        LDKRouteHop paths_arg_conv_12_conv_10_conv;
                        paths_arg_conv_12_conv_10_conv.inner = (void*)(paths_arg_conv_12_conv_10 & (~1));
                        paths_arg_conv_12_conv_10_conv.is_owned = (paths_arg_conv_12_conv_10 & 1) || (paths_arg_conv_12_conv_10 == 0);
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(paths_arg_conv_12_conv_10_conv);
                        paths_arg_conv_12_conv_10_conv = RouteHop_clone(&paths_arg_conv_12_conv_10_conv);
                        paths_arg_conv_12_constr.data[k] = paths_arg_conv_12_conv_10_conv;
                }
@@ -31116,11 +36630,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Route_1new(JNIEnv *env, jcl
        LDKPayee payee_arg_conv;
        payee_arg_conv.inner = (void*)(payee_arg & (~1));
        payee_arg_conv.is_owned = (payee_arg & 1) || (payee_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(payee_arg_conv);
        payee_arg_conv = Payee_clone(&payee_arg_conv);
        LDKRoute ret_var = Route_new(paths_arg_constr, payee_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -31128,14 +36644,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Route_1new(JNIEnv *env, jcl
        return ret_ref;
 }
 
+static inline uint64_t Route_clone_ptr(LDKRoute *NONNULL_PTR arg) {
+       LDKRoute ret_var = Route_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Route_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKRoute arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = Route_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Route_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKRoute orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKRoute ret_var = Route_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -31147,6 +36686,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Route_1hash(JNIEnv *env, jc
        LDKRoute o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = Route_hash(&o_conv);
        return ret_val;
 }
@@ -31155,9 +36695,11 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Route_1eq(JNIEnv *env, jcl
        LDKRoute a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKRoute b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = Route_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -31166,6 +36708,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Route_1get_1total_1fees(JNI
        LDKRoute this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = Route_get_total_fees(&this_arg_conv);
        return ret_val;
 }
@@ -31174,6 +36717,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Route_1get_1total_1amount(J
        LDKRoute this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = Route_get_total_amount(&this_arg_conv);
        return ret_val;
 }
@@ -31182,6 +36726,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Route_1write(JNIEnv *en
        LDKRoute obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = Route_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -31203,6 +36748,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteParameters_1free(JNIEnv *
        LDKRouteParameters this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        RouteParameters_free(this_obj_conv);
 }
 
@@ -31210,10 +36756,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteParameters_1get_1payee
        LDKRouteParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPayee ret_var = RouteParameters_get_payee(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -31225,9 +36773,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteParameters_1set_1payee(JN
        LDKRouteParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPayee val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = Payee_clone(&val_conv);
        RouteParameters_set_payee(&this_ptr_conv, val_conv);
 }
@@ -31236,6 +36786,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteParameters_1get_1final
        LDKRouteParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = RouteParameters_get_final_value_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -31244,6 +36795,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteParameters_1set_1final_1v
        LDKRouteParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        RouteParameters_set_final_value_msat(&this_ptr_conv, val);
 }
 
@@ -31251,6 +36803,7 @@ JNIEXPORT int32_t JNICALL Java_org_ldk_impl_bindings_RouteParameters_1get_1final
        LDKRouteParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = RouteParameters_get_final_cltv_expiry_delta(&this_ptr_conv);
        return ret_val;
 }
@@ -31259,6 +36812,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteParameters_1set_1final_1c
        LDKRouteParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        RouteParameters_set_final_cltv_expiry_delta(&this_ptr_conv, val);
 }
 
@@ -31266,11 +36820,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteParameters_1new(JNIEnv
        LDKPayee payee_arg_conv;
        payee_arg_conv.inner = (void*)(payee_arg & (~1));
        payee_arg_conv.is_owned = (payee_arg & 1) || (payee_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(payee_arg_conv);
        payee_arg_conv = Payee_clone(&payee_arg_conv);
        LDKRouteParameters ret_var = RouteParameters_new(payee_arg_conv, final_value_msat_arg, final_cltv_expiry_delta_arg);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -31278,14 +36834,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteParameters_1new(JNIEnv
        return ret_ref;
 }
 
+static inline uint64_t RouteParameters_clone_ptr(LDKRouteParameters *NONNULL_PTR arg) {
+       LDKRouteParameters ret_var = RouteParameters_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteParameters_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKRouteParameters arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = RouteParameters_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteParameters_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKRouteParameters orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKRouteParameters ret_var = RouteParameters_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -31297,6 +36876,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_RouteParameters_1write(
        LDKRouteParameters obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = RouteParameters_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -31318,6 +36898,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Payee_1free(JNIEnv *env, jclas
        LDKPayee this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        Payee_free(this_obj_conv);
 }
 
@@ -31325,6 +36906,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Payee_1get_1pubkey(JNIE
        LDKPayee this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, Payee_get_pubkey(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -31334,6 +36916,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Payee_1set_1pubkey(JNIEnv *env
        LDKPayee this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -31344,11 +36927,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Payee_1get_1features(JNIEnv
        LDKPayee this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKInvoiceFeatures ret_var = Payee_get_features(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -31361,9 +36946,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Payee_1set_1features(JNIEnv *e
        LDKPayee this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKInvoiceFeatures val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = InvoiceFeatures_clone(&val_conv);
        Payee_set_features(&this_ptr_conv, val_conv);
 }
@@ -31372,6 +36959,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_Payee_1get_1route_1hin
        LDKPayee this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_RouteHintZ ret_var = Payee_get_route_hints(&this_ptr_conv);
        int64_tArray ret_arr = NULL;
        ret_arr = (*env)->NewLongArray(env, ret_var.datalen);
@@ -31381,6 +36969,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_Payee_1get_1route_1hin
                uint64_t ret_conv_11_ref = 0;
                CHECK((((uint64_t)ret_conv_11_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_conv_11_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_11_var);
                ret_conv_11_ref = (uint64_t)ret_conv_11_var.inner;
                if (ret_conv_11_var.is_owned) {
                        ret_conv_11_ref |= 1;
@@ -31396,6 +36985,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Payee_1set_1route_1hints(JNIEn
        LDKPayee this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_RouteHintZ val_constr;
        val_constr.datalen = (*env)->GetArrayLength(env, val);
        if (val_constr.datalen > 0)
@@ -31408,6 +36998,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Payee_1set_1route_1hints(JNIEn
                LDKRouteHint val_conv_11_conv;
                val_conv_11_conv.inner = (void*)(val_conv_11 & (~1));
                val_conv_11_conv.is_owned = (val_conv_11 & 1) || (val_conv_11 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_11_conv);
                val_conv_11_conv = RouteHint_clone(&val_conv_11_conv);
                val_constr.data[l] = val_conv_11_conv;
        }
@@ -31419,6 +37010,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Payee_1get_1expiry_1time(JN
        LDKPayee this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
        *ret_copy = Payee_get_expiry_time(&this_ptr_conv);
        uint64_t ret_ref = (uint64_t)ret_copy;
@@ -31429,6 +37021,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Payee_1set_1expiry_1time(JNIEn
        LDKPayee this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
@@ -31443,6 +37036,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Payee_1new(JNIEnv *env, jcl
        LDKInvoiceFeatures features_arg_conv;
        features_arg_conv.inner = (void*)(features_arg & (~1));
        features_arg_conv.is_owned = (features_arg & 1) || (features_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_arg_conv);
        features_arg_conv = InvoiceFeatures_clone(&features_arg_conv);
        LDKCVec_RouteHintZ route_hints_arg_constr;
        route_hints_arg_constr.datalen = (*env)->GetArrayLength(env, route_hints_arg);
@@ -31456,6 +37050,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Payee_1new(JNIEnv *env, jcl
                LDKRouteHint route_hints_arg_conv_11_conv;
                route_hints_arg_conv_11_conv.inner = (void*)(route_hints_arg_conv_11 & (~1));
                route_hints_arg_conv_11_conv.is_owned = (route_hints_arg_conv_11 & 1) || (route_hints_arg_conv_11 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(route_hints_arg_conv_11_conv);
                route_hints_arg_conv_11_conv = RouteHint_clone(&route_hints_arg_conv_11_conv);
                route_hints_arg_constr.data[l] = route_hints_arg_conv_11_conv;
        }
@@ -31468,6 +37063,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Payee_1new(JNIEnv *env, jcl
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -31475,14 +37071,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Payee_1new(JNIEnv *env, jcl
        return ret_ref;
 }
 
+static inline uint64_t Payee_clone_ptr(LDKPayee *NONNULL_PTR arg) {
+       LDKPayee ret_var = Payee_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Payee_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKPayee arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = Payee_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Payee_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKPayee orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKPayee ret_var = Payee_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -31494,6 +37113,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Payee_1hash(JNIEnv *env, jc
        LDKPayee o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = Payee_hash(&o_conv);
        return ret_val;
 }
@@ -31502,9 +37122,11 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Payee_1eq(JNIEnv *env, jcl
        LDKPayee a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKPayee b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = Payee_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -31513,6 +37135,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Payee_1write(JNIEnv *en
        LDKPayee obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = Payee_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -31538,6 +37161,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Payee_1from_1node_1id(JNIEn
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -31553,6 +37177,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Payee_1for_1keysend(JNIEnv
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -31564,6 +37189,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHint_1free(JNIEnv *env, j
        LDKRouteHint this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        RouteHint_free(this_obj_conv);
 }
 
@@ -31571,6 +37197,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_RouteHint_1get_1a(JNIE
        LDKRouteHint this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_RouteHintHopZ ret_var = RouteHint_get_a(&this_ptr_conv);
        int64_tArray ret_arr = NULL;
        ret_arr = (*env)->NewLongArray(env, ret_var.datalen);
@@ -31580,6 +37207,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_RouteHint_1get_1a(JNIE
                uint64_t ret_conv_14_ref = 0;
                CHECK((((uint64_t)ret_conv_14_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_conv_14_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_14_var);
                ret_conv_14_ref = (uint64_t)ret_conv_14_var.inner;
                if (ret_conv_14_var.is_owned) {
                        ret_conv_14_ref |= 1;
@@ -31595,6 +37223,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHint_1set_1a(JNIEnv *env,
        LDKRouteHint this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_RouteHintHopZ val_constr;
        val_constr.datalen = (*env)->GetArrayLength(env, val);
        if (val_constr.datalen > 0)
@@ -31607,6 +37236,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHint_1set_1a(JNIEnv *env,
                LDKRouteHintHop val_conv_14_conv;
                val_conv_14_conv.inner = (void*)(val_conv_14 & (~1));
                val_conv_14_conv.is_owned = (val_conv_14 & 1) || (val_conv_14 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_14_conv);
                val_conv_14_conv = RouteHintHop_clone(&val_conv_14_conv);
                val_constr.data[o] = val_conv_14_conv;
        }
@@ -31627,6 +37257,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHint_1new(JNIEnv *env,
                LDKRouteHintHop a_arg_conv_14_conv;
                a_arg_conv_14_conv.inner = (void*)(a_arg_conv_14 & (~1));
                a_arg_conv_14_conv.is_owned = (a_arg_conv_14 & 1) || (a_arg_conv_14 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(a_arg_conv_14_conv);
                a_arg_conv_14_conv = RouteHintHop_clone(&a_arg_conv_14_conv);
                a_arg_constr.data[o] = a_arg_conv_14_conv;
        }
@@ -31635,6 +37266,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHint_1new(JNIEnv *env,
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -31642,14 +37274,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHint_1new(JNIEnv *env,
        return ret_ref;
 }
 
+static inline uint64_t RouteHint_clone_ptr(LDKRouteHint *NONNULL_PTR arg) {
+       LDKRouteHint ret_var = RouteHint_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHint_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKRouteHint arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = RouteHint_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHint_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKRouteHint orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKRouteHint ret_var = RouteHint_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -31661,6 +37316,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHint_1hash(JNIEnv *env
        LDKRouteHint o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = RouteHint_hash(&o_conv);
        return ret_val;
 }
@@ -31669,9 +37325,11 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_RouteHint_1eq(JNIEnv *env,
        LDKRouteHint a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKRouteHint b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = RouteHint_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -31680,6 +37338,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_RouteHint_1write(JNIEnv
        LDKRouteHint obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = RouteHint_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -31701,6 +37360,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1free(JNIEnv *env
        LDKRouteHintHop this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        RouteHintHop_free(this_obj_conv);
 }
 
@@ -31708,6 +37368,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1get_1src_
        LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, RouteHintHop_get_src_node_id(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -31717,6 +37378,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1set_1src_1node_1
        LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -31727,6 +37389,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1get_1short_1c
        LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = RouteHintHop_get_short_channel_id(&this_ptr_conv);
        return ret_val;
 }
@@ -31735,6 +37398,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1set_1short_1chan
        LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        RouteHintHop_set_short_channel_id(&this_ptr_conv, val);
 }
 
@@ -31742,10 +37406,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1get_1fees(JNI
        LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKRoutingFees ret_var = RouteHintHop_get_fees(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -31757,9 +37423,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1set_1fees(JNIEnv
        LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKRoutingFees val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = RoutingFees_clone(&val_conv);
        RouteHintHop_set_fees(&this_ptr_conv, val_conv);
 }
@@ -31768,6 +37436,7 @@ JNIEXPORT int16_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1get_1cltv_1ex
        LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = RouteHintHop_get_cltv_expiry_delta(&this_ptr_conv);
        return ret_val;
 }
@@ -31776,6 +37445,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1set_1cltv_1expir
        LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        RouteHintHop_set_cltv_expiry_delta(&this_ptr_conv, val);
 }
 
@@ -31783,6 +37453,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1get_1htlc_1mi
        LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
        *ret_copy = RouteHintHop_get_htlc_minimum_msat(&this_ptr_conv);
        uint64_t ret_ref = (uint64_t)ret_copy;
@@ -31793,6 +37464,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1set_1htlc_1minim
        LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
@@ -31804,6 +37476,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1get_1htlc_1ma
        LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
        *ret_copy = RouteHintHop_get_htlc_maximum_msat(&this_ptr_conv);
        uint64_t ret_ref = (uint64_t)ret_copy;
@@ -31814,6 +37487,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1set_1htlc_1maxim
        LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
@@ -31828,6 +37502,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1new(JNIEnv *e
        LDKRoutingFees fees_arg_conv;
        fees_arg_conv.inner = (void*)(fees_arg & (~1));
        fees_arg_conv.is_owned = (fees_arg & 1) || (fees_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(fees_arg_conv);
        fees_arg_conv = RoutingFees_clone(&fees_arg_conv);
        void* htlc_minimum_msat_arg_ptr = (void*)(((uint64_t)htlc_minimum_msat_arg) & ~1);
        CHECK_ACCESS(htlc_minimum_msat_arg_ptr);
@@ -31841,6 +37516,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1new(JNIEnv *e
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -31848,14 +37524,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1new(JNIEnv *e
        return ret_ref;
 }
 
+static inline uint64_t RouteHintHop_clone_ptr(LDKRouteHintHop *NONNULL_PTR arg) {
+       LDKRouteHintHop ret_var = RouteHintHop_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKRouteHintHop arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = RouteHintHop_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKRouteHintHop orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKRouteHintHop ret_var = RouteHintHop_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -31867,6 +37566,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1hash(JNIEnv *
        LDKRouteHintHop o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = RouteHintHop_hash(&o_conv);
        return ret_val;
 }
@@ -31875,9 +37575,11 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1eq(JNIEnv *e
        LDKRouteHintHop a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKRouteHintHop b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = RouteHintHop_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -31886,6 +37588,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1write(JNI
        LDKRouteHintHop obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = RouteHintHop_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -31910,9 +37613,11 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_find_1route(JNIEnv *env, jc
        LDKRouteParameters params_conv;
        params_conv.inner = (void*)(params & (~1));
        params_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(params_conv);
        LDKNetworkGraph network_conv;
        network_conv.inner = (void*)(network & (~1));
        network_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_conv);
        LDKCVec_ChannelDetailsZ first_hops_constr;
        LDKCVec_ChannelDetailsZ *first_hops_ptr = NULL;
        if (first_hops != NULL) {
@@ -31927,6 +37632,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_find_1route(JNIEnv *env, jc
                        LDKChannelDetails first_hops_conv_16_conv;
                        first_hops_conv_16_conv.inner = (void*)(first_hops_conv_16 & (~1));
                        first_hops_conv_16_conv.is_owned = (first_hops_conv_16 & 1) || (first_hops_conv_16 == 0);
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(first_hops_conv_16_conv);
                        first_hops_constr.data[q] = first_hops_conv_16_conv;
                }
                (*env)->ReleaseLongArrayElements(env, first_hops, first_hops_vals, 0);
@@ -31952,6 +37658,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Scorer_1free(JNIEnv *env, jcla
        LDKScorer this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        Scorer_free(this_obj_conv);
 }
 
@@ -31959,6 +37666,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ScoringParameters_1free(JNIEnv
        LDKScoringParameters this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ScoringParameters_free(this_obj_conv);
 }
 
@@ -31966,6 +37674,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ScoringParameters_1get_1bas
        LDKScoringParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ScoringParameters_get_base_penalty_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -31974,6 +37683,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ScoringParameters_1set_1base_1
        LDKScoringParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ScoringParameters_set_base_penalty_msat(&this_ptr_conv, val);
 }
 
@@ -31981,6 +37691,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ScoringParameters_1get_1fai
        LDKScoringParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ScoringParameters_get_failure_penalty_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -31989,6 +37700,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ScoringParameters_1set_1failur
        LDKScoringParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ScoringParameters_set_failure_penalty_msat(&this_ptr_conv, val);
 }
 
@@ -31996,6 +37708,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ScoringParameters_1get_1fai
        LDKScoringParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ScoringParameters_get_failure_penalty_half_life(&this_ptr_conv);
        return ret_val;
 }
@@ -32004,6 +37717,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ScoringParameters_1set_1failur
        LDKScoringParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ScoringParameters_set_failure_penalty_half_life(&this_ptr_conv, val);
 }
 
@@ -32012,6 +37726,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ScoringParameters_1new(JNIE
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -32023,6 +37738,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_ScoringParameters_1writ
        LDKScoringParameters obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ScoringParameters_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -32044,11 +37760,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Scorer_1new(JNIEnv *env, jc
        LDKScoringParameters params_conv;
        params_conv.inner = (void*)(params & (~1));
        params_conv.is_owned = (params & 1) || (params == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(params_conv);
        // Warning: we need a move here but no clone is available for LDKScoringParameters
        LDKScorer ret_var = Scorer_new(params_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -32061,6 +37779,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Scorer_1default(JNIEnv *env
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -32073,6 +37792,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ScoringParameters_1default(
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -32084,6 +37804,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Scorer_1as_1Score(JNIEnv *e
        LDKScorer this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKScore* ret_ret = MALLOC(sizeof(LDKScore), "LDKScore");
        *ret_ret = Scorer_as_Score(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -32093,6 +37814,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Scorer_1write(JNIEnv *e
        LDKScorer obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = Scorer_write(&obj_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, ret_var.datalen);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, ret_var.datalen, ret_var.data);
@@ -32114,6 +37836,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_FilesystemPersister_1free(JNIE
        LDKFilesystemPersister this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        FilesystemPersister_free(this_obj_conv);
 }
 
@@ -32123,6 +37846,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FilesystemPersister_1new(JN
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -32134,6 +37858,7 @@ JNIEXPORT jstring JNICALL Java_org_ldk_impl_bindings_FilesystemPersister_1get_1d
        LDKFilesystemPersister this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKStr ret_str = FilesystemPersister_get_data_dir(&this_arg_conv);
        jstring ret_conv = str_ref_to_java(env, ret_str.chars, ret_str.len);
        Str_free(ret_str);
@@ -32145,6 +37870,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FilesystemPersister_1persis
        LDKChannelManager manager_conv;
        manager_conv.inner = (void*)(manager & (~1));
        manager_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(manager_conv);
        LDKCResult_NoneErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneErrorZ), "LDKCResult_NoneErrorZ");
        *ret_conv = FilesystemPersister_persist_manager(data_dir_conv, &manager_conv);
        return (uint64_t)ret_conv;
@@ -32154,6 +37880,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FilesystemPersister_1read_1
        LDKFilesystemPersister this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        void* keys_manager_ptr = (void*)(((uint64_t)keys_manager) & ~1);
        CHECK_ACCESS(keys_manager_ptr);
        LDKKeysInterface keys_manager_conv = *(LDKKeysInterface*)(keys_manager_ptr);
@@ -32170,6 +37897,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_FilesystemPersister_1as_1Pe
        LDKFilesystemPersister this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKPersist* ret_ret = MALLOC(sizeof(LDKPersist), "LDKPersist");
        *ret_ret = FilesystemPersister_as_Persist(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -32179,6 +37907,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BackgroundProcessor_1free(JNIE
        LDKBackgroundProcessor this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        BackgroundProcessor_free(this_obj_conv);
 }
 
@@ -32209,15 +37938,19 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BackgroundProcessor_1start(
        LDKChainMonitor chain_monitor_conv;
        chain_monitor_conv.inner = (void*)(chain_monitor & (~1));
        chain_monitor_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(chain_monitor_conv);
        LDKChannelManager channel_manager_conv;
        channel_manager_conv.inner = (void*)(channel_manager & (~1));
        channel_manager_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_manager_conv);
        LDKNetGraphMsgHandler net_graph_msg_handler_conv;
        net_graph_msg_handler_conv.inner = (void*)(net_graph_msg_handler & (~1));
        net_graph_msg_handler_conv.is_owned = (net_graph_msg_handler & 1) || (net_graph_msg_handler == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(net_graph_msg_handler_conv);
        LDKPeerManager peer_manager_conv;
        peer_manager_conv.inner = (void*)(peer_manager & (~1));
        peer_manager_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(peer_manager_conv);
        void* logger_ptr = (void*)(((uint64_t)logger) & ~1);
        CHECK_ACCESS(logger_ptr);
        LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
@@ -32229,6 +37962,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BackgroundProcessor_1start(
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -32240,6 +37974,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BackgroundProcessor_1join(J
        LDKBackgroundProcessor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = (this_arg & 1) || (this_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        // Warning: we need a move here but no clone is available for LDKBackgroundProcessor
        LDKCResult_NoneErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneErrorZ), "LDKCResult_NoneErrorZ");
        *ret_conv = BackgroundProcessor_join(this_arg_conv);
@@ -32250,6 +37985,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_BackgroundProcessor_1stop(J
        LDKBackgroundProcessor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = (this_arg & 1) || (this_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        // Warning: we need a move here but no clone is available for LDKBackgroundProcessor
        LDKCResult_NoneErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneErrorZ), "LDKCResult_NoneErrorZ");
        *ret_conv = BackgroundProcessor_stop(this_arg_conv);
@@ -32264,6 +38000,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Invoice_1free(JNIEnv *env, jcl
        LDKInvoice this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        Invoice_free(this_obj_conv);
 }
 
@@ -32271,21 +38008,46 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Invoice_1eq(JNIEnv *env, j
        LDKInvoice a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKInvoice b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = Invoice_eq(&a_conv, &b_conv);
        return ret_val;
 }
 
+static inline uint64_t Invoice_clone_ptr(LDKInvoice *NONNULL_PTR arg) {
+       LDKInvoice ret_var = Invoice_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Invoice_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKInvoice arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = Invoice_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Invoice_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKInvoice orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKInvoice ret_var = Invoice_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -32297,6 +38059,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_SignedRawInvoice_1free(JNIEnv
        LDKSignedRawInvoice this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        SignedRawInvoice_free(this_obj_conv);
 }
 
@@ -32304,21 +38067,46 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_SignedRawInvoice_1eq(JNIEn
        LDKSignedRawInvoice a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKSignedRawInvoice b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = SignedRawInvoice_eq(&a_conv, &b_conv);
        return ret_val;
 }
 
+static inline uint64_t SignedRawInvoice_clone_ptr(LDKSignedRawInvoice *NONNULL_PTR arg) {
+       LDKSignedRawInvoice ret_var = SignedRawInvoice_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SignedRawInvoice_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKSignedRawInvoice arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = SignedRawInvoice_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SignedRawInvoice_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKSignedRawInvoice orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKSignedRawInvoice ret_var = SignedRawInvoice_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -32330,6 +38118,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RawInvoice_1free(JNIEnv *env,
        LDKRawInvoice this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        RawInvoice_free(this_obj_conv);
 }
 
@@ -32337,10 +38126,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RawInvoice_1get_1data(JNIEn
        LDKRawInvoice this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKRawDataPart ret_var = RawInvoice_get_data(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -32352,9 +38143,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RawInvoice_1set_1data(JNIEnv *
        LDKRawInvoice this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKRawDataPart val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = RawDataPart_clone(&val_conv);
        RawInvoice_set_data(&this_ptr_conv, val_conv);
 }
@@ -32363,21 +38156,46 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_RawInvoice_1eq(JNIEnv *env
        LDKRawInvoice a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKRawInvoice b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = RawInvoice_eq(&a_conv, &b_conv);
        return ret_val;
 }
 
+static inline uint64_t RawInvoice_clone_ptr(LDKRawInvoice *NONNULL_PTR arg) {
+       LDKRawInvoice ret_var = RawInvoice_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RawInvoice_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKRawInvoice arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = RawInvoice_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RawInvoice_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKRawInvoice orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKRawInvoice ret_var = RawInvoice_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -32389,6 +38207,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RawDataPart_1free(JNIEnv *env,
        LDKRawDataPart this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        RawDataPart_free(this_obj_conv);
 }
 
@@ -32396,10 +38215,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RawDataPart_1get_1timestamp
        LDKRawDataPart this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPositiveTimestamp ret_var = RawDataPart_get_timestamp(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -32411,9 +38232,11 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RawDataPart_1set_1timestamp(JN
        LDKRawDataPart this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPositiveTimestamp val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = PositiveTimestamp_clone(&val_conv);
        RawDataPart_set_timestamp(&this_ptr_conv, val_conv);
 }
@@ -32422,21 +38245,46 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_RawDataPart_1eq(JNIEnv *en
        LDKRawDataPart a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKRawDataPart b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = RawDataPart_eq(&a_conv, &b_conv);
        return ret_val;
 }
 
+static inline uint64_t RawDataPart_clone_ptr(LDKRawDataPart *NONNULL_PTR arg) {
+       LDKRawDataPart ret_var = RawDataPart_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RawDataPart_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKRawDataPart arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = RawDataPart_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RawDataPart_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKRawDataPart orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKRawDataPart ret_var = RawDataPart_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -32448,6 +38296,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PositiveTimestamp_1free(JNIEnv
        LDKPositiveTimestamp this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        PositiveTimestamp_free(this_obj_conv);
 }
 
@@ -32455,21 +38304,46 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_PositiveTimestamp_1eq(JNIE
        LDKPositiveTimestamp a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKPositiveTimestamp b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = PositiveTimestamp_eq(&a_conv, &b_conv);
        return ret_val;
 }
 
+static inline uint64_t PositiveTimestamp_clone_ptr(LDKPositiveTimestamp *NONNULL_PTR arg) {
+       LDKPositiveTimestamp ret_var = PositiveTimestamp_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PositiveTimestamp_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKPositiveTimestamp arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = PositiveTimestamp_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PositiveTimestamp_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKPositiveTimestamp orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKPositiveTimestamp ret_var = PositiveTimestamp_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -32564,17 +38438,41 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Sha256_1free(JNIEnv *env, jcla
        LDKSha256 this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        Sha256_free(this_obj_conv);
 }
 
+static inline uint64_t Sha256_clone_ptr(LDKSha256 *NONNULL_PTR arg) {
+       LDKSha256 ret_var = Sha256_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Sha256_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKSha256 arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = Sha256_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Sha256_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKSha256 orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKSha256 ret_var = Sha256_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -32586,6 +38484,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Sha256_1hash(JNIEnv *env, j
        LDKSha256 o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = Sha256_hash(&o_conv);
        return ret_val;
 }
@@ -32594,9 +38493,11 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Sha256_1eq(JNIEnv *env, jc
        LDKSha256 a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKSha256 b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = Sha256_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -32605,17 +38506,41 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Description_1free(JNIEnv *env,
        LDKDescription this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        Description_free(this_obj_conv);
 }
 
+static inline uint64_t Description_clone_ptr(LDKDescription *NONNULL_PTR arg) {
+       LDKDescription ret_var = Description_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Description_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKDescription arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = Description_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Description_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKDescription orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKDescription ret_var = Description_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -32627,6 +38552,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Description_1hash(JNIEnv *e
        LDKDescription o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = Description_hash(&o_conv);
        return ret_val;
 }
@@ -32635,9 +38561,11 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Description_1eq(JNIEnv *en
        LDKDescription a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKDescription b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = Description_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -32646,6 +38574,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PayeePubKey_1free(JNIEnv *env,
        LDKPayeePubKey this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        PayeePubKey_free(this_obj_conv);
 }
 
@@ -32653,6 +38582,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_PayeePubKey_1get_1a(JNI
        LDKPayeePubKey this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, PayeePubKey_get_a(&this_ptr_conv).compressed_form);
        return ret_arr;
@@ -32662,6 +38592,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PayeePubKey_1set_1a(JNIEnv *en
        LDKPayeePubKey this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK((*env)->GetArrayLength(env, val) == 33);
        (*env)->GetByteArrayRegion(env, val, 0, 33, val_ref.compressed_form);
@@ -32676,6 +38607,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PayeePubKey_1new(JNIEnv *en
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -32683,14 +38615,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PayeePubKey_1new(JNIEnv *en
        return ret_ref;
 }
 
+static inline uint64_t PayeePubKey_clone_ptr(LDKPayeePubKey *NONNULL_PTR arg) {
+       LDKPayeePubKey ret_var = PayeePubKey_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PayeePubKey_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKPayeePubKey arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = PayeePubKey_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PayeePubKey_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKPayeePubKey orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKPayeePubKey ret_var = PayeePubKey_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -32702,6 +38657,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PayeePubKey_1hash(JNIEnv *e
        LDKPayeePubKey o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = PayeePubKey_hash(&o_conv);
        return ret_val;
 }
@@ -32710,9 +38666,11 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_PayeePubKey_1eq(JNIEnv *en
        LDKPayeePubKey a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKPayeePubKey b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = PayeePubKey_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -32721,17 +38679,41 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ExpiryTime_1free(JNIEnv *env,
        LDKExpiryTime this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ExpiryTime_free(this_obj_conv);
 }
 
+static inline uint64_t ExpiryTime_clone_ptr(LDKExpiryTime *NONNULL_PTR arg) {
+       LDKExpiryTime ret_var = ExpiryTime_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ExpiryTime_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKExpiryTime arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ExpiryTime_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ExpiryTime_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKExpiryTime orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKExpiryTime ret_var = ExpiryTime_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -32743,6 +38725,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ExpiryTime_1hash(JNIEnv *en
        LDKExpiryTime o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = ExpiryTime_hash(&o_conv);
        return ret_val;
 }
@@ -32751,9 +38734,11 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ExpiryTime_1eq(JNIEnv *env
        LDKExpiryTime a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKExpiryTime b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = ExpiryTime_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -32762,6 +38747,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MinFinalCltvExpiry_1free(JNIEn
        LDKMinFinalCltvExpiry this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        MinFinalCltvExpiry_free(this_obj_conv);
 }
 
@@ -32769,6 +38755,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MinFinalCltvExpiry_1get_1a(
        LDKMinFinalCltvExpiry this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = MinFinalCltvExpiry_get_a(&this_ptr_conv);
        return ret_val;
 }
@@ -32777,6 +38764,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MinFinalCltvExpiry_1set_1a(JNI
        LDKMinFinalCltvExpiry this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        MinFinalCltvExpiry_set_a(&this_ptr_conv, val);
 }
 
@@ -32785,6 +38773,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MinFinalCltvExpiry_1new(JNI
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -32792,14 +38781,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MinFinalCltvExpiry_1new(JNI
        return ret_ref;
 }
 
+static inline uint64_t MinFinalCltvExpiry_clone_ptr(LDKMinFinalCltvExpiry *NONNULL_PTR arg) {
+       LDKMinFinalCltvExpiry ret_var = MinFinalCltvExpiry_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MinFinalCltvExpiry_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKMinFinalCltvExpiry arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = MinFinalCltvExpiry_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MinFinalCltvExpiry_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKMinFinalCltvExpiry orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKMinFinalCltvExpiry ret_var = MinFinalCltvExpiry_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -32811,6 +38823,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_MinFinalCltvExpiry_1hash(JN
        LDKMinFinalCltvExpiry o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = MinFinalCltvExpiry_hash(&o_conv);
        return ret_val;
 }
@@ -32819,9 +38832,11 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_MinFinalCltvExpiry_1eq(JNI
        LDKMinFinalCltvExpiry a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKMinFinalCltvExpiry b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = MinFinalCltvExpiry_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -32835,6 +38850,18 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Fallback_1free(JNIEnv *env, jc
        Fallback_free(this_ptr_conv);
 }
 
+static inline uint64_t Fallback_clone_ptr(LDKFallback *NONNULL_PTR arg) {
+       LDKFallback *ret_copy = MALLOC(sizeof(LDKFallback), "LDKFallback");
+       *ret_copy = Fallback_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Fallback_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKFallback* arg_conv = (LDKFallback*)arg;
+       int64_t ret_val = Fallback_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Fallback_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKFallback* orig_conv = (LDKFallback*)orig;
        LDKFallback *ret_copy = MALLOC(sizeof(LDKFallback), "LDKFallback");
@@ -32892,17 +38919,41 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InvoiceSignature_1free(JNIEnv
        LDKInvoiceSignature this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        InvoiceSignature_free(this_obj_conv);
 }
 
+static inline uint64_t InvoiceSignature_clone_ptr(LDKInvoiceSignature *NONNULL_PTR arg) {
+       LDKInvoiceSignature ret_var = InvoiceSignature_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceSignature_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKInvoiceSignature arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = InvoiceSignature_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoiceSignature_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKInvoiceSignature orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKInvoiceSignature ret_var = InvoiceSignature_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -32914,9 +38965,11 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_InvoiceSignature_1eq(JNIEn
        LDKInvoiceSignature a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKInvoiceSignature b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = InvoiceSignature_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -32925,17 +38978,41 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PrivateRoute_1free(JNIEnv *env
        LDKPrivateRoute this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        PrivateRoute_free(this_obj_conv);
 }
 
+static inline uint64_t PrivateRoute_clone_ptr(LDKPrivateRoute *NONNULL_PTR arg) {
+       LDKPrivateRoute ret_var = PrivateRoute_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PrivateRoute_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKPrivateRoute arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = PrivateRoute_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PrivateRoute_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKPrivateRoute orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKPrivateRoute ret_var = PrivateRoute_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -32947,6 +39024,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PrivateRoute_1hash(JNIEnv *
        LDKPrivateRoute o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = PrivateRoute_hash(&o_conv);
        return ret_val;
 }
@@ -32955,9 +39033,11 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_PrivateRoute_1eq(JNIEnv *e
        LDKPrivateRoute a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKPrivateRoute b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = PrivateRoute_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -32966,6 +39046,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SignedRawInvoice_1into_1par
        LDKSignedRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = (this_arg & 1) || (this_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv = SignedRawInvoice_clone(&this_arg_conv);
        LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ* ret_conv = MALLOC(sizeof(LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ), "LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ");
        *ret_conv = SignedRawInvoice_into_parts(this_arg_conv);
@@ -32976,10 +39057,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SignedRawInvoice_1raw_1invo
        LDKSignedRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKRawInvoice ret_var = SignedRawInvoice_raw_invoice(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -32991,6 +39074,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_SignedRawInvoice_1hash(
        LDKSignedRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *SignedRawInvoice_hash(&this_arg_conv));
        return ret_arr;
@@ -33000,10 +39084,12 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SignedRawInvoice_1signature
        LDKSignedRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKInvoiceSignature ret_var = SignedRawInvoice_signature(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -33015,6 +39101,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SignedRawInvoice_1recover_1
        LDKSignedRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCResult_PayeePubKeyErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PayeePubKeyErrorZ), "LDKCResult_PayeePubKeyErrorZ");
        *ret_conv = SignedRawInvoice_recover_payee_pub_key(&this_arg_conv);
        return (uint64_t)ret_conv;
@@ -33024,6 +39111,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_SignedRawInvoice_1check_1s
        LDKSignedRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        jboolean ret_val = SignedRawInvoice_check_signature(&this_arg_conv);
        return ret_val;
 }
@@ -33032,6 +39120,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_RawInvoice_1hash(JNIEnv
        LDKRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, RawInvoice_hash(&this_arg_conv).data);
        return ret_arr;
@@ -33041,11 +39130,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RawInvoice_1payment_1hash(J
        LDKRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKSha256 ret_var = RawInvoice_payment_hash(&this_arg_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -33058,11 +39149,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RawInvoice_1description(JNI
        LDKRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKDescription ret_var = RawInvoice_description(&this_arg_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -33075,11 +39168,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RawInvoice_1payee_1pub_1key
        LDKRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKPayeePubKey ret_var = RawInvoice_payee_pub_key(&this_arg_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -33092,11 +39187,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RawInvoice_1description_1ha
        LDKRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKSha256 ret_var = RawInvoice_description_hash(&this_arg_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -33109,11 +39206,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RawInvoice_1expiry_1time(JN
        LDKRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKExpiryTime ret_var = RawInvoice_expiry_time(&this_arg_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -33126,11 +39225,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RawInvoice_1min_1final_1clt
        LDKRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKMinFinalCltvExpiry ret_var = RawInvoice_min_final_cltv_expiry(&this_arg_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -33143,6 +39244,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_RawInvoice_1payment_1se
        LDKRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, RawInvoice_payment_secret(&this_arg_conv).data);
        return ret_arr;
@@ -33152,11 +39254,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RawInvoice_1features(JNIEnv
        LDKRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKInvoiceFeatures ret_var = RawInvoice_features(&this_arg_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -33169,6 +39273,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_RawInvoice_1private_1r
        LDKRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCVec_PrivateRouteZ ret_var = RawInvoice_private_routes(&this_arg_conv);
        int64_tArray ret_arr = NULL;
        ret_arr = (*env)->NewLongArray(env, ret_var.datalen);
@@ -33178,6 +39283,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_RawInvoice_1private_1r
                uint64_t ret_conv_14_ref = 0;
                CHECK((((uint64_t)ret_conv_14_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_conv_14_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_14_var);
                ret_conv_14_ref = (uint64_t)ret_conv_14_var.inner;
                if (ret_conv_14_var.is_owned) {
                        ret_conv_14_ref |= 1;
@@ -33193,6 +39299,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RawInvoice_1amount_1pico_1b
        LDKRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
        *ret_copy = RawInvoice_amount_pico_btc(&this_arg_conv);
        uint64_t ret_ref = (uint64_t)ret_copy;
@@ -33203,6 +39310,7 @@ JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_RawInvoice_1currency(JNIEnv
        LDKRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        jclass ret_conv = LDKCurrency_to_java(env, RawInvoice_currency(&this_arg_conv));
        return ret_conv;
 }
@@ -33223,6 +39331,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PositiveTimestamp_1as_1unix
        LDKPositiveTimestamp this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = PositiveTimestamp_as_unix_timestamp(&this_arg_conv);
        return ret_val;
 }
@@ -33231,6 +39340,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PositiveTimestamp_1as_1time
        LDKPositiveTimestamp this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = PositiveTimestamp_as_time(&this_arg_conv);
        return ret_val;
 }
@@ -33239,11 +39349,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Invoice_1into_1signed_1raw(
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = (this_arg & 1) || (this_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv = Invoice_clone(&this_arg_conv);
        LDKSignedRawInvoice ret_var = Invoice_into_signed_raw(this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -33255,6 +39367,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Invoice_1check_1signature(J
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCResult_NoneSemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneSemanticErrorZ), "LDKCResult_NoneSemanticErrorZ");
        *ret_conv = Invoice_check_signature(&this_arg_conv);
        return (uint64_t)ret_conv;
@@ -33264,6 +39377,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Invoice_1from_1signed(JNIEn
        LDKSignedRawInvoice signed_invoice_conv;
        signed_invoice_conv.inner = (void*)(signed_invoice & (~1));
        signed_invoice_conv.is_owned = (signed_invoice & 1) || (signed_invoice == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(signed_invoice_conv);
        signed_invoice_conv = SignedRawInvoice_clone(&signed_invoice_conv);
        LDKCResult_InvoiceSemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceSemanticErrorZ), "LDKCResult_InvoiceSemanticErrorZ");
        *ret_conv = Invoice_from_signed(signed_invoice_conv);
@@ -33274,6 +39388,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Invoice_1timestamp(JNIEnv *
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = Invoice_timestamp(&this_arg_conv);
        return ret_val;
 }
@@ -33282,6 +39397,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Invoice_1payment_1hash(
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *Invoice_payment_hash(&this_arg_conv));
        return ret_arr;
@@ -33291,6 +39407,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Invoice_1payee_1pub_1ke
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, Invoice_payee_pub_key(&this_arg_conv).compressed_form);
        return ret_arr;
@@ -33300,6 +39417,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Invoice_1payment_1secre
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 32);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 32, *Invoice_payment_secret(&this_arg_conv));
        return ret_arr;
@@ -33309,11 +39427,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Invoice_1features(JNIEnv *e
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKInvoiceFeatures ret_var = Invoice_features(&this_arg_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -33326,6 +39446,7 @@ JNIEXPORT int8_tArray JNICALL Java_org_ldk_impl_bindings_Invoice_1recover_1payee
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int8_tArray ret_arr = (*env)->NewByteArray(env, 33);
        (*env)->SetByteArrayRegion(env, ret_arr, 0, 33, Invoice_recover_payee_pub_key(&this_arg_conv).compressed_form);
        return ret_arr;
@@ -33335,6 +39456,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Invoice_1expiry_1time(JNIEn
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = Invoice_expiry_time(&this_arg_conv);
        return ret_val;
 }
@@ -33343,6 +39465,7 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Invoice_1is_1expired(JNIEn
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        jboolean ret_val = Invoice_is_expired(&this_arg_conv);
        return ret_val;
 }
@@ -33351,6 +39474,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Invoice_1min_1final_1cltv_1
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = Invoice_min_final_cltv_expiry(&this_arg_conv);
        return ret_val;
 }
@@ -33359,6 +39483,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_Invoice_1private_1rout
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCVec_PrivateRouteZ ret_var = Invoice_private_routes(&this_arg_conv);
        int64_tArray ret_arr = NULL;
        ret_arr = (*env)->NewLongArray(env, ret_var.datalen);
@@ -33368,6 +39493,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_Invoice_1private_1rout
                uint64_t ret_conv_14_ref = 0;
                CHECK((((uint64_t)ret_conv_14_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_conv_14_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_14_var);
                ret_conv_14_ref = (uint64_t)ret_conv_14_var.inner;
                if (ret_conv_14_var.is_owned) {
                        ret_conv_14_ref |= 1;
@@ -33383,6 +39509,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_Invoice_1route_1hints(
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCVec_RouteHintZ ret_var = Invoice_route_hints(&this_arg_conv);
        int64_tArray ret_arr = NULL;
        ret_arr = (*env)->NewLongArray(env, ret_var.datalen);
@@ -33392,6 +39519,7 @@ JNIEXPORT int64_tArray JNICALL Java_org_ldk_impl_bindings_Invoice_1route_1hints(
                uint64_t ret_conv_11_ref = 0;
                CHECK((((uint64_t)ret_conv_11_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_conv_11_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_11_var);
                ret_conv_11_ref = (uint64_t)ret_conv_11_var.inner;
                if (ret_conv_11_var.is_owned) {
                        ret_conv_11_ref |= 1;
@@ -33407,6 +39535,7 @@ JNIEXPORT jclass JNICALL Java_org_ldk_impl_bindings_Invoice_1currency(JNIEnv *en
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        jclass ret_conv = LDKCurrency_to_java(env, Invoice_currency(&this_arg_conv));
        return ret_conv;
 }
@@ -33415,6 +39544,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_Invoice_1amount_1milli_1sat
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
        *ret_copy = Invoice_amount_milli_satoshis(&this_arg_conv);
        uint64_t ret_ref = (uint64_t)ret_copy;
@@ -33432,6 +39562,7 @@ JNIEXPORT jstring JNICALL Java_org_ldk_impl_bindings_Description_1into_1inner(JN
        LDKDescription this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = (this_arg & 1) || (this_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv = Description_clone(&this_arg_conv);
        LDKStr ret_str = Description_into_inner(this_arg_conv);
        jstring ret_conv = str_ref_to_java(env, ret_str.chars, ret_str.len);
@@ -33455,6 +39586,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ExpiryTime_1as_1seconds(JNI
        LDKExpiryTime this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = ExpiryTime_as_seconds(&this_arg_conv);
        return ret_val;
 }
@@ -33463,6 +39595,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ExpiryTime_1as_1duration(JN
        LDKExpiryTime this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = ExpiryTime_as_duration(&this_arg_conv);
        return ret_val;
 }
@@ -33471,6 +39604,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PrivateRoute_1new(JNIEnv *e
        LDKRouteHint hops_conv;
        hops_conv.inner = (void*)(hops & (~1));
        hops_conv.is_owned = (hops & 1) || (hops == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(hops_conv);
        hops_conv = RouteHint_clone(&hops_conv);
        LDKCResult_PrivateRouteCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PrivateRouteCreationErrorZ), "LDKCResult_PrivateRouteCreationErrorZ");
        *ret_conv = PrivateRoute_new(hops_conv);
@@ -33481,11 +39615,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PrivateRoute_1into_1inner(J
        LDKPrivateRoute this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = (this_arg & 1) || (this_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv = PrivateRoute_clone(&this_arg_conv);
        LDKRouteHint ret_var = PrivateRoute_into_inner(this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -33614,6 +39750,18 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_SignOrCreationError_1free(JNIE
        SignOrCreationError_free(this_ptr_conv);
 }
 
+static inline uint64_t SignOrCreationError_clone_ptr(LDKSignOrCreationError *NONNULL_PTR arg) {
+       LDKSignOrCreationError *ret_copy = MALLOC(sizeof(LDKSignOrCreationError), "LDKSignOrCreationError");
+       *ret_copy = SignOrCreationError_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SignOrCreationError_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKSignOrCreationError* arg_conv = (LDKSignOrCreationError*)arg;
+       int64_t ret_val = SignOrCreationError_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_SignOrCreationError_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKSignOrCreationError* orig_conv = (LDKSignOrCreationError*)orig;
        LDKSignOrCreationError *ret_copy = MALLOC(sizeof(LDKSignOrCreationError), "LDKSignOrCreationError");
@@ -33656,6 +39804,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InvoicePayer_1free(JNIEnv *env
        LDKInvoicePayer this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        InvoicePayer_free(this_obj_conv);
 }
 
@@ -33681,6 +39830,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RetryAttempts_1free(JNIEnv *en
        LDKRetryAttempts this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        RetryAttempts_free(this_obj_conv);
 }
 
@@ -33688,6 +39838,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RetryAttempts_1get_1a(JNIEn
        LDKRetryAttempts this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = RetryAttempts_get_a(&this_ptr_conv);
        return ret_val;
 }
@@ -33696,6 +39847,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RetryAttempts_1set_1a(JNIEnv *
        LDKRetryAttempts this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        RetryAttempts_set_a(&this_ptr_conv, val);
 }
 
@@ -33704,6 +39856,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RetryAttempts_1new(JNIEnv *
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -33711,14 +39864,37 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RetryAttempts_1new(JNIEnv *
        return ret_ref;
 }
 
+static inline uint64_t RetryAttempts_clone_ptr(LDKRetryAttempts *NONNULL_PTR arg) {
+       LDKRetryAttempts ret_var = RetryAttempts_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RetryAttempts_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKRetryAttempts arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = RetryAttempts_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RetryAttempts_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKRetryAttempts orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKRetryAttempts ret_var = RetryAttempts_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -33730,9 +39906,11 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_RetryAttempts_1eq(JNIEnv *
        LDKRetryAttempts a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKRetryAttempts b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = RetryAttempts_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -33741,6 +39919,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_RetryAttempts_1hash(JNIEnv
        LDKRetryAttempts o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = RetryAttempts_hash(&o_conv);
        return ret_val;
 }
@@ -33754,6 +39933,18 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentError_1free(JNIEnv *env
        PaymentError_free(this_ptr_conv);
 }
 
+static inline uint64_t PaymentError_clone_ptr(LDKPaymentError *NONNULL_PTR arg) {
+       LDKPaymentError *ret_copy = MALLOC(sizeof(LDKPaymentError), "LDKPaymentError");
+       *ret_copy = PaymentError_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentError_1clone_1ptr(JNIEnv *env, jclass clz, int64_t arg) {
+       LDKPaymentError* arg_conv = (LDKPaymentError*)arg;
+       int64_t ret_val = PaymentError_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentError_1clone(JNIEnv *env, jclass clz, int64_t orig) {
        LDKPaymentError* orig_conv = (LDKPaymentError*)orig;
        LDKPaymentError *ret_copy = MALLOC(sizeof(LDKPaymentError), "LDKPaymentError");
@@ -33774,6 +39965,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_PaymentError_1routing(JNIEn
        LDKLightningError a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = (a & 1) || (a == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv = LightningError_clone(&a_conv);
        LDKPaymentError *ret_copy = MALLOC(sizeof(LDKPaymentError), "LDKPaymentError");
        *ret_copy = PaymentError_routing(a_conv);
@@ -33810,6 +40002,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoicePayer_1new(JNIEnv *e
        LDKLockableScore scorer_conv;
        scorer_conv.inner = (void*)(scorer & (~1));
        scorer_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(scorer_conv);
        void* logger_ptr = (void*)(((uint64_t)logger) & ~1);
        CHECK_ACCESS(logger_ptr);
        LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
@@ -33827,11 +40020,13 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoicePayer_1new(JNIEnv *e
        LDKRetryAttempts retry_attempts_conv;
        retry_attempts_conv.inner = (void*)(retry_attempts & (~1));
        retry_attempts_conv.is_owned = (retry_attempts & 1) || (retry_attempts == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(retry_attempts_conv);
        retry_attempts_conv = RetryAttempts_clone(&retry_attempts_conv);
        LDKInvoicePayer ret_var = InvoicePayer_new(payer_conv, router_conv, &scorer_conv, logger_conv, event_handler_conv, retry_attempts_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -33843,9 +40038,11 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoicePayer_1pay_1invoice(
        LDKInvoicePayer this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKInvoice invoice_conv;
        invoice_conv.inner = (void*)(invoice & (~1));
        invoice_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(invoice_conv);
        LDKCResult_PaymentIdPaymentErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentIdPaymentErrorZ), "LDKCResult_PaymentIdPaymentErrorZ");
        *ret_conv = InvoicePayer_pay_invoice(&this_arg_conv, &invoice_conv);
        return (uint64_t)ret_conv;
@@ -33855,9 +40052,11 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoicePayer_1pay_1zero_1va
        LDKInvoicePayer this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKInvoice invoice_conv;
        invoice_conv.inner = (void*)(invoice & (~1));
        invoice_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(invoice_conv);
        LDKCResult_PaymentIdPaymentErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentIdPaymentErrorZ), "LDKCResult_PaymentIdPaymentErrorZ");
        *ret_conv = InvoicePayer_pay_zero_value_invoice(&this_arg_conv, &invoice_conv, amount_msats);
        return (uint64_t)ret_conv;
@@ -33867,6 +40066,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InvoicePayer_1remove_1cached_1
        LDKInvoicePayer this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char payment_hash_arr[32];
        CHECK((*env)->GetArrayLength(env, payment_hash) == 32);
        (*env)->GetByteArrayRegion(env, payment_hash, 0, 32, payment_hash_arr);
@@ -33878,6 +40078,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_InvoicePayer_1as_1EventHand
        LDKInvoicePayer this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKEventHandler* ret_ret = MALLOC(sizeof(LDKEventHandler), "LDKEventHandler");
        *ret_ret = InvoicePayer_as_EventHandler(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -33887,6 +40088,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_create_1invoice_1from_1chan
        LDKChannelManager channelmanager_conv;
        channelmanager_conv.inner = (void*)(channelmanager & (~1));
        channelmanager_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channelmanager_conv);
        void* keys_manager_ptr = (void*)(((uint64_t)keys_manager) & ~1);
        CHECK_ACCESS(keys_manager_ptr);
        LDKKeysInterface keys_manager_conv = *(LDKKeysInterface*)(keys_manager_ptr);
@@ -33909,6 +40111,7 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DefaultRouter_1free(JNIEnv *en
        LDKDefaultRouter this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        DefaultRouter_free(this_obj_conv);
 }
 
@@ -33916,6 +40119,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DefaultRouter_1new(JNIEnv *
        LDKNetworkGraph network_graph_conv;
        network_graph_conv.inner = (void*)(network_graph & (~1));
        network_graph_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
        void* logger_ptr = (void*)(((uint64_t)logger) & ~1);
        CHECK_ACCESS(logger_ptr);
        LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
@@ -33927,6 +40131,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DefaultRouter_1new(JNIEnv *
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -33938,6 +40143,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_DefaultRouter_1as_1Router(J
        LDKDefaultRouter this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKRouter* ret_ret = MALLOC(sizeof(LDKRouter), "LDKRouter");
        *ret_ret = DefaultRouter_as_Router(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -33947,6 +40153,7 @@ JNIEXPORT int64_t JNICALL Java_org_ldk_impl_bindings_ChannelManager_1as_1Payer(J
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKPayer* ret_ret = MALLOC(sizeof(LDKPayer), "LDKPayer");
        *ret_ret = ChannelManager_as_Payer(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -33977,6 +40184,7 @@ JNIEXPORT jstring JNICALL Java_org_ldk_impl_bindings_Invoice_1to_1str(JNIEnv *en
        LDKInvoice o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        LDKStr ret_str = Invoice_to_str(&o_conv);
        jstring ret_conv = str_ref_to_java(env, ret_str.chars, ret_str.len);
        Str_free(ret_str);
@@ -33987,6 +40195,7 @@ JNIEXPORT jstring JNICALL Java_org_ldk_impl_bindings_SignedRawInvoice_1to_1str(J
        LDKSignedRawInvoice o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        LDKStr ret_str = SignedRawInvoice_to_str(&o_conv);
        jstring ret_conv = str_ref_to_java(env, ret_str.chars, ret_str.len);
        Str_free(ret_str);
index bef74b1b3f4c264f36a2dc4cbe083ef109a1d0f7..450eae034d7a3d467b610f8949a2223b8d76d1ed 100644 (file)
@@ -135,14 +135,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_vec_1slice_1len
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_new_1empty_1slice_1vec
   (JNIEnv *, jclass);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCVec_u8Z_new
- * Signature: ([B)J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCVec_1u8Z_1new
-  (JNIEnv *, jclass, jbyteArray);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    TxOut_get_script_pubkey
@@ -159,14 +151,6 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_TxOut_1get_1script_1pubk
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_TxOut_1get_1value
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_SecretKeyErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SecretKeyErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_SecretKeyErrorZ_get_ok
@@ -183,14 +167,6 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SecretKeyErr
 JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SecretKeyErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_PublicKeyErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PublicKeyErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_PublicKeyErrorZ_get_ok
@@ -207,14 +183,6 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PublicKeyErr
 JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PublicKeyErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_TxCreationKeysDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TxCreationKeysDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_TxCreationKeysDecodeErrorZ_get_ok
@@ -231,14 +199,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TxCreationKeysDec
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TxCreationKeysDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_ChannelPublicKeysDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelPublicKeysDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_ChannelPublicKeysDecodeErrorZ_get_ok
@@ -255,14 +215,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelPublicKeys
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelPublicKeysDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_TxCreationKeysErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TxCreationKeysErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_TxCreationKeysErrorZ_get_ok
@@ -287,14 +239,6 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TxCreationKeysE
 JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1u32Z_1ref_1from_1ptr
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_HTLCOutputInCommitmentDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1HTLCOutputInCommitmentDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_HTLCOutputInCommitmentDecodeErrorZ_get_ok
@@ -311,14 +255,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1HTLCOutputInCommi
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1HTLCOutputInCommitmentDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CounterpartyChannelTransactionParametersDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ_get_ok
@@ -335,14 +271,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CounterpartyChann
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CounterpartyChannelTransactionParametersDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_ChannelTransactionParametersDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelTransactionParametersDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_ChannelTransactionParametersDecodeErrorZ_get_ok
@@ -359,14 +287,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelTransactio
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelTransactionParametersDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_HolderCommitmentTransactionDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1HolderCommitmentTransactionDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_HolderCommitmentTransactionDecodeErrorZ_get_ok
@@ -383,14 +303,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1HolderCommitmentT
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1HolderCommitmentTransactionDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_BuiltCommitmentTransactionDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1BuiltCommitmentTransactionDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_BuiltCommitmentTransactionDecodeErrorZ_get_ok
@@ -407,14 +319,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1BuiltCommitmentTr
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1BuiltCommitmentTransactionDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_TrustedClosingTransactionNoneZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TrustedClosingTransactionNoneZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_TrustedClosingTransactionNoneZ_get_ok
@@ -431,14 +335,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TrustedClosingTra
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TrustedClosingTransactionNoneZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_CommitmentTransactionDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CommitmentTransactionDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_CommitmentTransactionDecodeErrorZ_get_ok
@@ -455,14 +351,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CommitmentTransac
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CommitmentTransactionDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_TrustedCommitmentTransactionNoneZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TrustedCommitmentTransactionNoneZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_TrustedCommitmentTransactionNoneZ_get_ok
@@ -479,14 +367,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TrustedCommitment
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TrustedCommitmentTransactionNoneZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_CVec_SignatureZNoneZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CVec_1SignatureZNoneZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_CVec_SignatureZNoneZ_get_ok
@@ -503,14 +383,6 @@ JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CVec_1Sign
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CVec_1SignatureZNoneZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_ShutdownScriptDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ShutdownScriptDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_ShutdownScriptDecodeErrorZ_get_ok
@@ -527,14 +399,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ShutdownScriptDec
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ShutdownScriptDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_ShutdownScriptInvalidShutdownScriptZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ShutdownScriptInvalidShutdownScriptZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_ShutdownScriptInvalidShutdownScriptZ_get_ok
@@ -551,14 +415,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ShutdownScriptInv
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ShutdownScriptInvalidShutdownScriptZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_NoneErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_NoneErrorZ_get_ok
@@ -575,14 +431,6 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneErrorZ_1get_1o
 JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_RouteHopDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteHopDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_RouteHopDecodeErrorZ_get_ok
@@ -599,22 +447,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteHopDecodeErr
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteHopDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCVec_RouteHopZ_new
- * Signature: ([J)J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCVec_1RouteHopZ_1new
-  (JNIEnv *, jclass, jlongArray);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_RouteDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_RouteDecodeErrorZ_get_ok
@@ -631,14 +463,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteDecodeErrorZ
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_RouteParametersDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteParametersDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_RouteParametersDecodeErrorZ_get_ok
@@ -655,14 +479,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteParametersDe
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteParametersDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCVec_RouteHintZ_new
- * Signature: ([J)J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCVec_1RouteHintZ_1new
-  (JNIEnv *, jclass, jlongArray);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCOption_u64Z_ref_from_ptr
@@ -671,14 +487,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCVec_1RouteHintZ_1new
 JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1u64Z_1ref_1from_1ptr
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_PayeeDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PayeeDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_PayeeDecodeErrorZ_get_ok
@@ -695,22 +503,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PayeeDecodeErrorZ
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PayeeDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCVec_RouteHintHopZ_new
- * Signature: ([J)J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCVec_1RouteHintHopZ_1new
-  (JNIEnv *, jclass, jlongArray);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_RouteHintDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteHintDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_RouteHintDecodeErrorZ_get_ok
@@ -727,14 +519,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteHintDecodeEr
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteHintDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_RouteHintHopDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteHintHopDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_RouteHintHopDecodeErrorZ_get_ok
@@ -751,22 +535,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteHintHopDecod
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteHintHopDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCVec_ChannelDetailsZ_new
- * Signature: ([J)J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCVec_1ChannelDetailsZ_1new
-  (JNIEnv *, jclass, jlongArray);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_RouteLightningErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteLightningErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_RouteLightningErrorZ_get_ok
@@ -783,14 +551,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteLightningErr
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RouteLightningErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_TxOutAccessErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TxOutAccessErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_TxOutAccessErrorZ_get_ok
@@ -823,22 +583,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1usizeTransactionZ_1g
 JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1usizeTransactionZ_1get_1b
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCVec_C2Tuple_usizeTransactionZZ_new
- * Signature: ([J)J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCVec_1C2Tuple_1usizeTransactionZZ_1new
-  (JNIEnv *, jclass, jlongArray);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_NoneChannelMonitorUpdateErrZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneChannelMonitorUpdateErrZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_NoneChannelMonitorUpdateErrZ_get_ok
@@ -863,14 +607,6 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneChannelMoni
 JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMonitorEvent_1ref_1from_1ptr
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCVec_MonitorEventZ_new
- * Signature: ([J)J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCVec_1MonitorEventZ_1new
-  (JNIEnv *, jclass, jlongArray);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCOption_C2Tuple_usizeTransactionZZ_ref_from_ptr
@@ -881,210 +617,210 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1C2Tuple_1usizeT
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKNetworkUpdate_ref_from_ptr
- * Signature: (J)Lorg/ldk/impl/bindings/LDKNetworkUpdate;
+ * Method:    LDKClosureReason_ref_from_ptr
+ * Signature: (J)Lorg/ldk/impl/bindings/LDKClosureReason;
  */
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKNetworkUpdate_1ref_1from_1ptr
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKClosureReason_1ref_1from_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKCOption_NetworkUpdateZ_ref_from_ptr
- * Signature: (J)Lorg/ldk/impl/bindings/LDKCOption_NetworkUpdateZ;
+ * Method:    LDKCOption_ClosureReasonZ_ref_from_ptr
+ * Signature: (J)Lorg/ldk/impl/bindings/LDKCOption_ClosureReasonZ;
  */
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1NetworkUpdateZ_1ref_1from_1ptr
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1ClosureReasonZ_1ref_1from_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKSpendableOutputDescriptor_ref_from_ptr
- * Signature: (J)Lorg/ldk/impl/bindings/LDKSpendableOutputDescriptor;
+ * Method:    LDKCResult_COption_ClosureReasonZDecodeErrorZ_get_ok
+ * Signature: (J)J
  */
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKSpendableOutputDescriptor_1ref_1from_1ptr
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1COption_1ClosureReasonZDecodeErrorZ_1get_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKCVec_SpendableOutputDescriptorZ_new
- * Signature: ([J)J
+ * Method:    LDKCResult_COption_ClosureReasonZDecodeErrorZ_get_err
+ * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCVec_1SpendableOutputDescriptorZ_1new
-  (JNIEnv *, jclass, jlongArray);
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1COption_1ClosureReasonZDecodeErrorZ_1get_1err
+  (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKErrorAction_ref_from_ptr
- * Signature: (J)Lorg/ldk/impl/bindings/LDKErrorAction;
+ * Method:    LDKNetworkUpdate_ref_from_ptr
+ * Signature: (J)Lorg/ldk/impl/bindings/LDKNetworkUpdate;
  */
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKErrorAction_1ref_1from_1ptr
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKNetworkUpdate_1ref_1from_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKMessageSendEvent_ref_from_ptr
- * Signature: (J)Lorg/ldk/impl/bindings/LDKMessageSendEvent;
+ * Method:    LDKCOption_NetworkUpdateZ_ref_from_ptr
+ * Signature: (J)Lorg/ldk/impl/bindings/LDKCOption_NetworkUpdateZ;
  */
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMessageSendEvent_1ref_1from_1ptr
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1NetworkUpdateZ_1ref_1from_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKCVec_MessageSendEventZ_new
- * Signature: ([J)J
+ * Method:    LDKSpendableOutputDescriptor_ref_from_ptr
+ * Signature: (J)Lorg/ldk/impl/bindings/LDKSpendableOutputDescriptor;
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCVec_1MessageSendEventZ_1new
-  (JNIEnv *, jclass, jlongArray);
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKSpendableOutputDescriptor_1ref_1from_1ptr
+  (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_InitFeaturesDecodeErrorZ_result_ok
- * Signature: (J)Z
+ * Method:    LDKPaymentPurpose_ref_from_ptr
+ * Signature: (J)Lorg/ldk/impl/bindings/LDKPaymentPurpose;
  */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InitFeaturesDecodeErrorZ_1result_1ok
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKPaymentPurpose_1ref_1from_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_InitFeaturesDecodeErrorZ_get_ok
- * Signature: (J)J
+ * Method:    LDKEvent_ref_from_ptr
+ * Signature: (J)Lorg/ldk/impl/bindings/LDKEvent;
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InitFeaturesDecodeErrorZ_1get_1ok
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKEvent_1ref_1from_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_InitFeaturesDecodeErrorZ_get_err
- * Signature: (J)J
+ * Method:    LDKCOption_EventZ_ref_from_ptr
+ * Signature: (J)Lorg/ldk/impl/bindings/LDKCOption_EventZ;
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InitFeaturesDecodeErrorZ_1get_1err
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1EventZ_1ref_1from_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_NodeFeaturesDecodeErrorZ_result_ok
- * Signature: (J)Z
+ * Method:    LDKCResult_COption_EventZDecodeErrorZ_get_ok
+ * Signature: (J)J
  */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeFeaturesDecodeErrorZ_1result_1ok
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1COption_1EventZDecodeErrorZ_1get_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_NodeFeaturesDecodeErrorZ_get_ok
+ * Method:    LDKCResult_COption_EventZDecodeErrorZ_get_err
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeFeaturesDecodeErrorZ_1get_1ok
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1COption_1EventZDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_NodeFeaturesDecodeErrorZ_get_err
- * Signature: (J)J
+ * Method:    LDKErrorAction_ref_from_ptr
+ * Signature: (J)Lorg/ldk/impl/bindings/LDKErrorAction;
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeFeaturesDecodeErrorZ_1get_1err
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKErrorAction_1ref_1from_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_ChannelFeaturesDecodeErrorZ_result_ok
- * Signature: (J)Z
+ * Method:    LDKMessageSendEvent_ref_from_ptr
+ * Signature: (J)Lorg/ldk/impl/bindings/LDKMessageSendEvent;
  */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelFeaturesDecodeErrorZ_1result_1ok
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKMessageSendEvent_1ref_1from_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_ChannelFeaturesDecodeErrorZ_get_ok
+ * Method:    LDKCResult_InitFeaturesDecodeErrorZ_get_ok
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelFeaturesDecodeErrorZ_1get_1ok
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InitFeaturesDecodeErrorZ_1get_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_ChannelFeaturesDecodeErrorZ_get_err
+ * Method:    LDKCResult_InitFeaturesDecodeErrorZ_get_err
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelFeaturesDecodeErrorZ_1get_1err
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InitFeaturesDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_InvoiceFeaturesDecodeErrorZ_result_ok
- * Signature: (J)Z
+ * Method:    LDKCResult_NodeFeaturesDecodeErrorZ_get_ok
+ * Signature: (J)J
  */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InvoiceFeaturesDecodeErrorZ_1result_1ok
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeFeaturesDecodeErrorZ_1get_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_InvoiceFeaturesDecodeErrorZ_get_ok
+ * Method:    LDKCResult_NodeFeaturesDecodeErrorZ_get_err
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InvoiceFeaturesDecodeErrorZ_1get_1ok
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeFeaturesDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_InvoiceFeaturesDecodeErrorZ_get_err
+ * Method:    LDKCResult_ChannelFeaturesDecodeErrorZ_get_ok
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InvoiceFeaturesDecodeErrorZ_1get_1err
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelFeaturesDecodeErrorZ_1get_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_ScoringParametersDecodeErrorZ_result_ok
- * Signature: (J)Z
+ * Method:    LDKCResult_ChannelFeaturesDecodeErrorZ_get_err
+ * Signature: (J)J
  */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ScoringParametersDecodeErrorZ_1result_1ok
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelFeaturesDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_ScoringParametersDecodeErrorZ_get_ok
+ * Method:    LDKCResult_InvoiceFeaturesDecodeErrorZ_get_ok
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ScoringParametersDecodeErrorZ_1get_1ok
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InvoiceFeaturesDecodeErrorZ_1get_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_ScoringParametersDecodeErrorZ_get_err
+ * Method:    LDKCResult_InvoiceFeaturesDecodeErrorZ_get_err
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ScoringParametersDecodeErrorZ_1get_1err
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InvoiceFeaturesDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_ScorerDecodeErrorZ_result_ok
- * Signature: (J)Z
+ * Method:    LDKCResult_ScoringParametersDecodeErrorZ_get_ok
+ * Signature: (J)J
  */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ScorerDecodeErrorZ_1result_1ok
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ScoringParametersDecodeErrorZ_1get_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_ScorerDecodeErrorZ_get_ok
+ * Method:    LDKCResult_ScoringParametersDecodeErrorZ_get_err
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ScorerDecodeErrorZ_1get_1ok
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ScoringParametersDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_ScorerDecodeErrorZ_get_err
+ * Method:    LDKCResult_ScorerDecodeErrorZ_get_ok
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ScorerDecodeErrorZ_1get_1err
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ScorerDecodeErrorZ_1get_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ_result_ok
- * Signature: (J)Z
+ * Method:    LDKCResult_ScorerDecodeErrorZ_get_err
+ * Signature: (J)J
  */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1DelayedPaymentOutputDescriptorDecodeErrorZ_1result_1ok
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ScorerDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -1103,14 +839,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1DelayedPaymentOut
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1DelayedPaymentOutputDescriptorDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1StaticPaymentOutputDescriptorDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ_get_ok
@@ -1127,14 +855,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1StaticPaymentOutp
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1StaticPaymentOutputDescriptorDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_SpendableOutputDescriptorDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SpendableOutputDescriptorDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_SpendableOutputDescriptorDecodeErrorZ_get_ok
@@ -1151,14 +871,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SpendableOutputDe
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SpendableOutputDescriptorDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_NoneNoneZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneNoneZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_NoneNoneZ_get_ok
@@ -1191,14 +903,6 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1SignatureCVec_1
 JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1SignatureCVec_1SignatureZZ_1get_1b
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1C2Tuple_1SignatureCVec_1SignatureZZNoneZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_get_ok
@@ -1215,14 +919,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1C2Tuple_1Signatur
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1C2Tuple_1SignatureCVec_1SignatureZZNoneZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_SignatureNoneZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SignatureNoneZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_SignatureNoneZ_get_ok
@@ -1383,14 +1079,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKSign_1get_1BaseSign
 JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_Sign_1write
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_SignDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SignDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_SignDecodeErrorZ_get_ok
@@ -1407,14 +1095,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SignDecodeErrorZ_
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SignDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_RecoverableSignatureNoneZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RecoverableSignatureNoneZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_RecoverableSignatureNoneZ_get_ok
@@ -1431,14 +1111,6 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RecoverableS
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RecoverableSignatureNoneZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_CVec_CVec_u8ZZNoneZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CVec_1CVec_1u8ZZNoneZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_CVec_CVec_u8ZZNoneZ_get_ok
@@ -1455,14 +1127,6 @@ JNIEXPORT jobjectArray JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CVec_1CVec
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CVec_1CVec_1u8ZZNoneZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_InMemorySignerDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InMemorySignerDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_InMemorySignerDecodeErrorZ_get_ok
@@ -1479,22 +1143,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InMemorySignerDec
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InMemorySignerDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCVec_TxOutZ_new
- * Signature: ([J)J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCVec_1TxOutZ_1new
-  (JNIEnv *, jclass, jlongArray);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_TransactionNoneZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1TransactionNoneZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_TransactionNoneZ_get_ok
@@ -1527,22 +1175,6 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChanne
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelMonitorZ_1get_1b
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCVec_C2Tuple_BlockHashChannelMonitorZZ_new
- * Signature: ([J)J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCVec_1C2Tuple_1BlockHashChannelMonitorZZ_1new
-  (JNIEnv *, jclass, jlongArray);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CVec_1C2Tuple_1BlockHashChannelMonitorZZErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_get_ok
@@ -1575,14 +1207,6 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1u16Z_1ref_1from
 JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKAPIError_1ref_1from_1ptr
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_NoneAPIErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneAPIErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_NoneAPIErrorZ_get_ok
@@ -1599,30 +1223,6 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneAPIErrorZ_1get
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneAPIErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCVec_CResult_NoneAPIErrorZZ_new
- * Signature: ([J)J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCVec_1CResult_1NoneAPIErrorZZ_1new
-  (JNIEnv *, jclass, jlongArray);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCVec_APIErrorZ_new
- * Signature: ([J)J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCVec_1APIErrorZ_1new
-  (JNIEnv *, jclass, jlongArray);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult__u832APIErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1_1u832APIErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult__u832APIErrorZ_get_ok
@@ -1647,14 +1247,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1_1u832APIErrorZ_1
 JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKPaymentSendFailure_1ref_1from_1ptr
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_PaymentIdPaymentSendFailureZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PaymentIdPaymentSendFailureZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_PaymentIdPaymentSendFailureZ_get_ok
@@ -1671,14 +1263,6 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PaymentIdPay
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PaymentIdPaymentSendFailureZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_NonePaymentSendFailureZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NonePaymentSendFailureZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_NonePaymentSendFailureZ_get_ok
@@ -1711,14 +1295,6 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PaymentHashPaym
 JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PaymentHashPaymentIdZ_1get_1b
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1C2Tuple_1PaymentHashPaymentIdZPaymentSendFailureZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_get_ok
@@ -1743,14 +1319,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1C2Tuple_1PaymentH
 JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKNetAddress_1ref_1from_1ptr
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCVec_NetAddressZ_new
- * Signature: ([J)J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCVec_1NetAddressZ_1new
-  (JNIEnv *, jclass, jlongArray);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    C2Tuple_PaymentHashPaymentSecretZ_get_a
@@ -1767,14 +1335,6 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PaymentHashPaym
 JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PaymentHashPaymentSecretZ_1get_1b
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_PaymentSecretAPIErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PaymentSecretAPIErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_PaymentSecretAPIErrorZ_get_ok
@@ -1791,14 +1351,6 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PaymentSecre
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PaymentSecretAPIErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCVec_ChannelMonitorZ_new
- * Signature: ([J)J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCVec_1ChannelMonitorZ_1new
-  (JNIEnv *, jclass, jlongArray);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKWatch_new
@@ -1951,14 +1503,6 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChanne
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelManagerZ_1get_1b
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1C2Tuple_1BlockHashChannelManagerZDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_get_ok
@@ -1975,14 +1519,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1C2Tuple_1BlockHas
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1C2Tuple_1BlockHashChannelManagerZDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_ChannelConfigDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelConfigDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_ChannelConfigDecodeErrorZ_get_ok
@@ -1999,14 +1535,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelConfigDeco
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelConfigDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_OutPointDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1OutPointDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_OutPointDecodeErrorZ_get_ok
@@ -2063,14 +1591,6 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_Type_1write
 JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1TypeZ_1ref_1from_1ptr
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_COption_TypeZDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1COption_1TypeZDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_COption_TypeZDecodeErrorZ_get_ok
@@ -2095,14 +1615,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1COption_1TypeZDec
 JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKPaymentError_1ref_1from_1ptr
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_PaymentIdPaymentErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PaymentIdPaymentErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_PaymentIdPaymentErrorZ_get_ok
@@ -2119,14 +1631,6 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PaymentIdPay
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PaymentIdPaymentErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_SiPrefixNoneZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SiPrefixNoneZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_SiPrefixNoneZ_get_ok
@@ -2143,14 +1647,6 @@ JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SiPrefixNoneZ_1
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SiPrefixNoneZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_InvoiceNoneZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InvoiceNoneZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_InvoiceNoneZ_get_ok
@@ -2167,14 +1663,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InvoiceNoneZ_1get
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InvoiceNoneZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_SignedRawInvoiceNoneZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1SignedRawInvoiceNoneZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_SignedRawInvoiceNoneZ_get_ok
@@ -2215,14 +1703,6 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_C3Tuple_1RawInvoice_1u83
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C3Tuple_1RawInvoice_1u832InvoiceSignatureZ_1get_1c
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_PayeePubKeyErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PayeePubKeyErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_PayeePubKeyErrorZ_get_ok
@@ -2239,22 +1719,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PayeePubKeyErrorZ
 JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PayeePubKeyErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCVec_PrivateRouteZ_new
- * Signature: ([J)J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCVec_1PrivateRouteZ_1new
-  (JNIEnv *, jclass, jlongArray);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_PositiveTimestampCreationErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PositiveTimestampCreationErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_PositiveTimestampCreationErrorZ_get_ok
@@ -2271,14 +1735,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PositiveTimestamp
 JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PositiveTimestampCreationErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_NoneSemanticErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneSemanticErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_NoneSemanticErrorZ_get_ok
@@ -2295,14 +1751,6 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneSemanticErrorZ
 JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneSemanticErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_InvoiceSemanticErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InvoiceSemanticErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_InvoiceSemanticErrorZ_get_ok
@@ -2319,14 +1767,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InvoiceSemanticEr
 JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InvoiceSemanticErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_DescriptionCreationErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1DescriptionCreationErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_DescriptionCreationErrorZ_get_ok
@@ -2343,14 +1783,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1DescriptionCreati
 JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCResult_1DescriptionCreationErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_ExpiryTimeCreationErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ExpiryTimeCreationErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_ExpiryTimeCreationErrorZ_get_ok
@@ -2367,14 +1799,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ExpiryTimeCreatio
 JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ExpiryTimeCreationErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_PrivateRouteCreationErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PrivateRouteCreationErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_PrivateRouteCreationErrorZ_get_ok
@@ -2391,14 +1815,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PrivateRouteCreat
 JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PrivateRouteCreationErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_StringErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1StringErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_StringErrorZ_get_ok
@@ -2415,14 +1831,6 @@ JNIEXPORT jstring JNICALL Java_org_ldk_impl_bindings_LDKCResult_1StringErrorZ_1g
 JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCResult_1StringErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_ChannelMonitorUpdateDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelMonitorUpdateDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_ChannelMonitorUpdateDecodeErrorZ_get_ok
@@ -2441,34 +1849,42 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelMonitorUpd
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_HTLCUpdateDecodeErrorZ_result_ok
- * Signature: (J)Z
+ * Method:    LDKCOption_MonitorEventZ_ref_from_ptr
+ * Signature: (J)Lorg/ldk/impl/bindings/LDKCOption_MonitorEventZ;
  */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1HTLCUpdateDecodeErrorZ_1result_1ok
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1MonitorEventZ_1ref_1from_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_HTLCUpdateDecodeErrorZ_get_ok
+ * Method:    LDKCResult_COption_MonitorEventZDecodeErrorZ_get_ok
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1HTLCUpdateDecodeErrorZ_1get_1ok
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1COption_1MonitorEventZDecodeErrorZ_1get_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_HTLCUpdateDecodeErrorZ_get_err
+ * Method:    LDKCResult_COption_MonitorEventZDecodeErrorZ_get_err
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1HTLCUpdateDecodeErrorZ_1get_1err
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1COption_1MonitorEventZDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_NoneMonitorUpdateErrorZ_result_ok
- * Signature: (J)Z
+ * Method:    LDKCResult_HTLCUpdateDecodeErrorZ_get_ok
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1HTLCUpdateDecodeErrorZ_1get_1ok
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    LDKCResult_HTLCUpdateDecodeErrorZ_get_err
+ * Signature: (J)J
  */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneMonitorUpdateErrorZ_1result_1ok
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1HTLCUpdateDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -2519,14 +1935,6 @@ JNIEXPORT jint JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32ScriptZ_1get_1a
 JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32ScriptZ_1get_1b
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCVec_C2Tuple_u32ScriptZZ_new
- * Signature: ([J)J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCVec_1C2Tuple_1u32ScriptZZ_1new
-  (JNIEnv *, jclass, jlongArray);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_get_a
@@ -2543,46 +1951,6 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2Tup
 JNIEXPORT jlongArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2Tuple_1u32ScriptZZZ_1get_1b
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ_new
- * Signature: ([J)J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCVec_1C2Tuple_1TxidCVec_1C2Tuple_1u32ScriptZZZZ_1new
-  (JNIEnv *, jclass, jlongArray);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKPaymentPurpose_ref_from_ptr
- * Signature: (J)Lorg/ldk/impl/bindings/LDKPaymentPurpose;
- */
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKPaymentPurpose_1ref_1from_1ptr
-  (JNIEnv *, jclass, jlong);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKClosureReason_ref_from_ptr
- * Signature: (J)Lorg/ldk/impl/bindings/LDKClosureReason;
- */
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKClosureReason_1ref_1from_1ptr
-  (JNIEnv *, jclass, jlong);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKEvent_ref_from_ptr
- * Signature: (J)Lorg/ldk/impl/bindings/LDKEvent;
- */
-JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKEvent_1ref_1from_1ptr
-  (JNIEnv *, jclass, jlong);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCVec_EventZ_new
- * Signature: ([J)J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCVec_1EventZ_1new
-  (JNIEnv *, jclass, jlongArray);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    C2Tuple_u32TxOutZ_get_a
@@ -2599,14 +1967,6 @@ JNIEXPORT jint JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32TxOutZ_1get_1a
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32TxOutZ_1get_1b
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCVec_C2Tuple_u32TxOutZZ_new
- * Signature: ([J)J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCVec_1C2Tuple_1u32TxOutZZ_1new
-  (JNIEnv *, jclass, jlongArray);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_get_a
@@ -2623,14 +1983,6 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2Tup
 JNIEXPORT jlongArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2Tuple_1u32TxOutZZZ_1get_1b
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ_new
- * Signature: ([J)J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCVec_1C2Tuple_1TxidCVec_1C2Tuple_1u32TxOutZZZZ_1new
-  (JNIEnv *, jclass, jlongArray);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKBalance_ref_from_ptr
@@ -2639,22 +1991,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCVec_1C2Tuple_1TxidCVec_1C
 JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKBalance_1ref_1from_1ptr
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCVec_BalanceZ_new
- * Signature: ([J)J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCVec_1BalanceZ_1new
-  (JNIEnv *, jclass, jlongArray);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1C2Tuple_1BlockHashChannelMonitorZDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_get_ok
@@ -2671,14 +2007,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1C2Tuple_1BlockHas
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1C2Tuple_1BlockHashChannelMonitorZDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_NoneLightningErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NoneLightningErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_NoneLightningErrorZ_get_ok
@@ -2711,22 +2039,6 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyTypeZ_
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyTypeZ_1get_1b
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCVec_C2Tuple_PublicKeyTypeZZ_new
- * Signature: ([J)J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCVec_1C2Tuple_1PublicKeyTypeZZ_1new
-  (JNIEnv *, jclass, jlongArray);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_boolLightningErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1boolLightningErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_boolLightningErrorZ_get_ok
@@ -2767,30 +2079,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C3Tuple_1ChannelAnnouncementC
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C3Tuple_1ChannelAnnouncementChannelUpdateChannelUpdateZ_1get_1c
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ_new
- * Signature: ([J)J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCVec_1C3Tuple_1ChannelAnnouncementChannelUpdateChannelUpdateZZ_1new
-  (JNIEnv *, jclass, jlongArray);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCVec_NodeAnnouncementZ_new
- * Signature: ([J)J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCVec_1NodeAnnouncementZ_1new
-  (JNIEnv *, jclass, jlongArray);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_CVec_u8ZPeerHandleErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CVec_1u8ZPeerHandleErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_CVec_u8ZPeerHandleErrorZ_get_ok
@@ -2807,14 +2095,6 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CVec_1u8ZPee
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CVec_1u8ZPeerHandleErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_NonePeerHandleErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NonePeerHandleErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_NonePeerHandleErrorZ_get_ok
@@ -2833,50 +2113,50 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NonePeerHandleErr
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_boolPeerHandleErrorZ_result_ok
+ * Method:    LDKCResult_boolPeerHandleErrorZ_get_ok
  * Signature: (J)Z
  */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1boolPeerHandleErrorZ_1result_1ok
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1boolPeerHandleErrorZ_1get_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_boolPeerHandleErrorZ_get_ok
- * Signature: (J)Z
+ * Method:    LDKCResult_boolPeerHandleErrorZ_get_err
+ * Signature: (J)J
  */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1boolPeerHandleErrorZ_1get_1ok
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1boolPeerHandleErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_boolPeerHandleErrorZ_get_err
+ * Method:    LDKCResult_NodeIdDecodeErrorZ_get_ok
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1boolPeerHandleErrorZ_1get_1err
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeIdDecodeErrorZ_1get_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_NodeIdDecodeErrorZ_result_ok
- * Signature: (J)Z
+ * Method:    LDKCResult_NodeIdDecodeErrorZ_get_err
+ * Signature: (J)J
  */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeIdDecodeErrorZ_1result_1ok
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeIdDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_NodeIdDecodeErrorZ_get_ok
+ * Method:    LDKCResult_COption_NetworkUpdateZDecodeErrorZ_get_ok
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeIdDecodeErrorZ_1get_1ok
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1COption_1NetworkUpdateZDecodeErrorZ_1get_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_NodeIdDecodeErrorZ_get_err
+ * Method:    LDKCResult_COption_NetworkUpdateZDecodeErrorZ_get_err
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeIdDecodeErrorZ_1get_1err
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1COption_1NetworkUpdateZDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -2903,14 +2183,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Access_1get_1utxo
 JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1AccessZ_1ref_1from_1ptr
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_DirectionalChannelInfoDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1DirectionalChannelInfoDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_DirectionalChannelInfoDecodeErrorZ_get_ok
@@ -2927,14 +2199,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1DirectionalChanne
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1DirectionalChannelInfoDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_ChannelInfoDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelInfoDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_ChannelInfoDecodeErrorZ_get_ok
@@ -2951,14 +2215,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelInfoDecode
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelInfoDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_RoutingFeesDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RoutingFeesDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_RoutingFeesDecodeErrorZ_get_ok
@@ -2975,14 +2231,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RoutingFeesDecode
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RoutingFeesDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_NodeAnnouncementInfoDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeAnnouncementInfoDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_NodeAnnouncementInfoDecodeErrorZ_get_ok
@@ -2999,22 +2247,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeAnnouncementI
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeAnnouncementInfoDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCVec_u64Z_new
- * Signature: ([J)J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCVec_1u64Z_1new
-  (JNIEnv *, jclass, jlongArray);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_NodeInfoDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeInfoDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_NodeInfoDecodeErrorZ_get_ok
@@ -3031,14 +2263,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeInfoDecodeErr
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeInfoDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_NetworkGraphDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NetworkGraphDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_NetworkGraphDecodeErrorZ_get_ok
@@ -3063,14 +2287,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NetworkGraphDecod
 JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1CVec_1NetAddressZZ_1ref_1from_1ptr
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_NetAddressDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NetAddressDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_NetAddressDecodeErrorZ_get_ok
@@ -3089,92 +2305,36 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NetAddressDecodeE
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKCVec_UpdateAddHTLCZ_new
- * Signature: ([J)J
+ * Method:    LDKCResult_AcceptChannelDecodeErrorZ_get_ok
+ * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCVec_1UpdateAddHTLCZ_1new
-  (JNIEnv *, jclass, jlongArray);
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1AcceptChannelDecodeErrorZ_1get_1ok
+  (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKCVec_UpdateFulfillHTLCZ_new
- * Signature: ([J)J
+ * Method:    LDKCResult_AcceptChannelDecodeErrorZ_get_err
+ * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCVec_1UpdateFulfillHTLCZ_1new
-  (JNIEnv *, jclass, jlongArray);
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1AcceptChannelDecodeErrorZ_1get_1err
+  (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKCVec_UpdateFailHTLCZ_new
- * Signature: ([J)J
+ * Method:    LDKCResult_AnnouncementSignaturesDecodeErrorZ_get_ok
+ * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCVec_1UpdateFailHTLCZ_1new
-  (JNIEnv *, jclass, jlongArray);
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1AnnouncementSignaturesDecodeErrorZ_1get_1ok
+  (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    LDKCVec_UpdateFailMalformedHTLCZ_new
- * Signature: ([J)J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCVec_1UpdateFailMalformedHTLCZ_1new
-  (JNIEnv *, jclass, jlongArray);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_AcceptChannelDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1AcceptChannelDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_AcceptChannelDecodeErrorZ_get_ok
- * Signature: (J)J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1AcceptChannelDecodeErrorZ_1get_1ok
-  (JNIEnv *, jclass, jlong);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_AcceptChannelDecodeErrorZ_get_err
- * Signature: (J)J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1AcceptChannelDecodeErrorZ_1get_1err
-  (JNIEnv *, jclass, jlong);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_AnnouncementSignaturesDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1AnnouncementSignaturesDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_AnnouncementSignaturesDecodeErrorZ_get_ok
- * Signature: (J)J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1AnnouncementSignaturesDecodeErrorZ_1get_1ok
-  (JNIEnv *, jclass, jlong);
-
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_AnnouncementSignaturesDecodeErrorZ_get_err
- * Signature: (J)J
+ * Method:    LDKCResult_AnnouncementSignaturesDecodeErrorZ_get_err
+ * Signature: (J)J
  */
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1AnnouncementSignaturesDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_ChannelReestablishDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelReestablishDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_ChannelReestablishDecodeErrorZ_get_ok
@@ -3191,14 +2351,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelReestablis
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelReestablishDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_ClosingSignedDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ClosingSignedDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_ClosingSignedDecodeErrorZ_get_ok
@@ -3215,14 +2367,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ClosingSignedDeco
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ClosingSignedDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_ClosingSignedFeeRangeDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ClosingSignedFeeRangeDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_ClosingSignedFeeRangeDecodeErrorZ_get_ok
@@ -3239,14 +2383,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ClosingSignedFeeR
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ClosingSignedFeeRangeDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_CommitmentSignedDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CommitmentSignedDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_CommitmentSignedDecodeErrorZ_get_ok
@@ -3263,14 +2399,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CommitmentSignedD
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1CommitmentSignedDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_FundingCreatedDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1FundingCreatedDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_FundingCreatedDecodeErrorZ_get_ok
@@ -3287,14 +2415,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1FundingCreatedDec
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1FundingCreatedDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_FundingSignedDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1FundingSignedDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_FundingSignedDecodeErrorZ_get_ok
@@ -3311,14 +2431,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1FundingSignedDeco
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1FundingSignedDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_FundingLockedDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1FundingLockedDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_FundingLockedDecodeErrorZ_get_ok
@@ -3335,14 +2447,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1FundingLockedDeco
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1FundingLockedDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_InitDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InitDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_InitDecodeErrorZ_get_ok
@@ -3359,14 +2463,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InitDecodeErrorZ_
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InitDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_OpenChannelDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1OpenChannelDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_OpenChannelDecodeErrorZ_get_ok
@@ -3383,14 +2479,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1OpenChannelDecode
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1OpenChannelDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_RevokeAndACKDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RevokeAndACKDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_RevokeAndACKDecodeErrorZ_get_ok
@@ -3407,14 +2495,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RevokeAndACKDecod
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1RevokeAndACKDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_ShutdownDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ShutdownDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_ShutdownDecodeErrorZ_get_ok
@@ -3431,14 +2511,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ShutdownDecodeErr
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ShutdownDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_UpdateFailHTLCDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UpdateFailHTLCDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_UpdateFailHTLCDecodeErrorZ_get_ok
@@ -3455,14 +2527,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UpdateFailHTLCDec
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UpdateFailHTLCDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UpdateFailMalformedHTLCDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ_get_ok
@@ -3479,14 +2543,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UpdateFailMalform
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UpdateFailMalformedHTLCDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_UpdateFeeDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UpdateFeeDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_UpdateFeeDecodeErrorZ_get_ok
@@ -3503,14 +2559,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UpdateFeeDecodeEr
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UpdateFeeDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_UpdateFulfillHTLCDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UpdateFulfillHTLCDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_UpdateFulfillHTLCDecodeErrorZ_get_ok
@@ -3527,14 +2575,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UpdateFulfillHTLC
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UpdateFulfillHTLCDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_UpdateAddHTLCDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UpdateAddHTLCDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_UpdateAddHTLCDecodeErrorZ_get_ok
@@ -3551,14 +2591,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UpdateAddHTLCDeco
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UpdateAddHTLCDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_PingDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PingDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_PingDecodeErrorZ_get_ok
@@ -3575,14 +2607,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PingDecodeErrorZ_
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PingDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_PongDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PongDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_PongDecodeErrorZ_get_ok
@@ -3599,14 +2623,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PongDecodeErrorZ_
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1PongDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UnsignedChannelAnnouncementDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ_get_ok
@@ -3623,14 +2639,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UnsignedChannelAn
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UnsignedChannelAnnouncementDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_ChannelAnnouncementDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelAnnouncementDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_ChannelAnnouncementDecodeErrorZ_get_ok
@@ -3647,14 +2655,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelAnnounceme
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelAnnouncementDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_UnsignedChannelUpdateDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UnsignedChannelUpdateDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_UnsignedChannelUpdateDecodeErrorZ_get_ok
@@ -3671,14 +2671,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UnsignedChannelUp
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UnsignedChannelUpdateDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_ChannelUpdateDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelUpdateDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_ChannelUpdateDecodeErrorZ_get_ok
@@ -3695,14 +2687,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelUpdateDeco
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ChannelUpdateDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_ErrorMessageDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ErrorMessageDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_ErrorMessageDecodeErrorZ_get_ok
@@ -3719,14 +2703,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ErrorMessageDecod
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ErrorMessageDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UnsignedNodeAnnouncementDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ_get_ok
@@ -3743,14 +2719,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UnsignedNodeAnnou
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1UnsignedNodeAnnouncementDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_NodeAnnouncementDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeAnnouncementDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_NodeAnnouncementDecodeErrorZ_get_ok
@@ -3767,14 +2735,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeAnnouncementD
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1NodeAnnouncementDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_QueryShortChannelIdsDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1QueryShortChannelIdsDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_QueryShortChannelIdsDecodeErrorZ_get_ok
@@ -3791,14 +2751,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1QueryShortChannel
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1QueryShortChannelIdsDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ReplyShortChannelIdsEndDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ_get_ok
@@ -3815,14 +2767,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ReplyShortChannel
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ReplyShortChannelIdsEndDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_QueryChannelRangeDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1QueryChannelRangeDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_QueryChannelRangeDecodeErrorZ_get_ok
@@ -3839,14 +2783,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1QueryChannelRange
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1QueryChannelRangeDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_ReplyChannelRangeDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ReplyChannelRangeDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_ReplyChannelRangeDecodeErrorZ_get_ok
@@ -3863,14 +2799,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ReplyChannelRange
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1ReplyChannelRangeDecodeErrorZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_GossipTimestampFilterDecodeErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1GossipTimestampFilterDecodeErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_GossipTimestampFilterDecodeErrorZ_get_ok
@@ -3895,14 +2823,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1GossipTimestampFi
 JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKSignOrCreationError_1ref_1from_1ptr
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_InvoiceSignOrCreationErrorZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1InvoiceSignOrCreationErrorZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_InvoiceSignOrCreationErrorZ_get_ok
@@ -3951,14 +2871,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Filter_1register_1output
 JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_LDKCOption_1FilterZ_1ref_1from_1ptr
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCResult_LockedChannelMonitorNoneZ_result_ok
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_LDKCResult_1LockedChannelMonitorNoneZ_1result_1ok
-  (JNIEnv *, jclass, jlong);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKCResult_LockedChannelMonitorNoneZ_get_ok
@@ -3975,14 +2887,6 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCResult_1LockedChannelMoni
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LDKCResult_1LockedChannelMonitorNoneZ_1get_1err
   (JNIEnv *, jclass, jlong);
 
-/*
- * Class:     org_ldk_impl_bindings
- * Method:    LDKCVec_OutPointZ_new
- * Signature: ([J)J
- */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LDKCVec_1OutPointZ_1new
-  (JNIEnv *, jclass, jlongArray);
-
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LDKMessageSendEventsProvider_new
@@ -4623,6 +3527,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_TxOut_1new
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_TxOut_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    TxOut_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_TxOut_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    TxOut_clone
@@ -4655,6 +3567,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SecretKeyErrorZ_1ok
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SecretKeyErrorZ_1err
   (JNIEnv *, jclass, jobject);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_SecretKeyErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1SecretKeyErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_SecretKeyErrorZ_free
@@ -4681,12 +3601,28 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeyErrorZ_1err
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PublicKeyErrorZ_free
- * Signature: (J)V
+ * Method:    CResult_PublicKeyErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeyErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_PublicKeyErrorZ_free
+ * Signature: (J)V
  */
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeyErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_PublicKeyErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PublicKeyErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_PublicKeyErrorZ_clone
@@ -4711,6 +3647,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1TxCreationKeysDecode
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1TxCreationKeysDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_TxCreationKeysDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1TxCreationKeysDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_TxCreationKeysDecodeErrorZ_free
@@ -4719,6 +3663,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1TxCreationKeysDecode
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1TxCreationKeysDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_TxCreationKeysDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1TxCreationKeysDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_TxCreationKeysDecodeErrorZ_clone
@@ -4743,6 +3695,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelPublicKeysDec
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelPublicKeysDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ChannelPublicKeysDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelPublicKeysDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_ChannelPublicKeysDecodeErrorZ_free
@@ -4751,6 +3711,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelPublicKeysDec
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelPublicKeysDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ChannelPublicKeysDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelPublicKeysDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_ChannelPublicKeysDecodeErrorZ_clone
@@ -4775,6 +3743,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1TxCreationKeysErrorZ
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1TxCreationKeysErrorZ_1err
   (JNIEnv *, jclass, jobject);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_TxCreationKeysErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1TxCreationKeysErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_TxCreationKeysErrorZ_free
@@ -4783,6 +3759,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1TxCreationKeysErrorZ
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1TxCreationKeysErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_TxCreationKeysErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1TxCreationKeysErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_TxCreationKeysErrorZ_clone
@@ -4815,6 +3799,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1u32Z_1none
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1u32Z_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    COption_u32Z_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1u32Z_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    COption_u32Z_clone
@@ -4839,6 +3831,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCOutputInCommitme
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCOutputInCommitmentDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_HTLCOutputInCommitmentDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCOutputInCommitmentDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_HTLCOutputInCommitmentDecodeErrorZ_free
@@ -4847,6 +3847,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCOutputInCommitme
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCOutputInCommitmentDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_HTLCOutputInCommitmentDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCOutputInCommitmentDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_HTLCOutputInCommitmentDecodeErrorZ_clone
@@ -4871,6 +3879,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CounterpartyChannelT
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CounterpartyChannelTransactionParametersDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1CounterpartyChannelTransactionParametersDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_free
@@ -4879,6 +3895,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CounterpartyChannelT
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CounterpartyChannelTransactionParametersDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CounterpartyChannelTransactionParametersDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_clone
@@ -4903,6 +3927,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelTransactionPa
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelTransactionParametersDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ChannelTransactionParametersDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelTransactionParametersDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_ChannelTransactionParametersDecodeErrorZ_free
@@ -4911,6 +3943,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelTransactionPa
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelTransactionParametersDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ChannelTransactionParametersDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelTransactionParametersDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_ChannelTransactionParametersDecodeErrorZ_clone
@@ -4943,6 +3983,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1HolderCommitmentTran
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1HolderCommitmentTransactionDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_HolderCommitmentTransactionDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1HolderCommitmentTransactionDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_HolderCommitmentTransactionDecodeErrorZ_free
@@ -4951,6 +3999,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1HolderCommitmentTran
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1HolderCommitmentTransactionDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_HolderCommitmentTransactionDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1HolderCommitmentTransactionDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_HolderCommitmentTransactionDecodeErrorZ_clone
@@ -4975,6 +4031,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1BuiltCommitmentTrans
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1BuiltCommitmentTransactionDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_BuiltCommitmentTransactionDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1BuiltCommitmentTransactionDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_BuiltCommitmentTransactionDecodeErrorZ_free
@@ -4983,6 +4047,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1BuiltCommitmentTrans
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1BuiltCommitmentTransactionDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_BuiltCommitmentTransactionDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1BuiltCommitmentTransactionDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_BuiltCommitmentTransactionDecodeErrorZ_clone
@@ -5007,6 +4079,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1TrustedClosingTransa
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1TrustedClosingTransactionNoneZ_1err
   (JNIEnv *, jclass);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_TrustedClosingTransactionNoneZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1TrustedClosingTransactionNoneZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_TrustedClosingTransactionNoneZ_free
@@ -5031,6 +4111,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CommitmentTransactio
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CommitmentTransactionDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_CommitmentTransactionDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1CommitmentTransactionDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_CommitmentTransactionDecodeErrorZ_free
@@ -5039,6 +4127,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CommitmentTransactio
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CommitmentTransactionDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_CommitmentTransactionDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CommitmentTransactionDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_CommitmentTransactionDecodeErrorZ_clone
@@ -5063,6 +4159,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1TrustedCommitmentTra
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1TrustedCommitmentTransactionNoneZ_1err
   (JNIEnv *, jclass);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_TrustedCommitmentTransactionNoneZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1TrustedCommitmentTransactionNoneZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_TrustedCommitmentTransactionNoneZ_free
@@ -5087,6 +4191,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1SignatureZNone
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1SignatureZNoneZ_1err
   (JNIEnv *, jclass);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_CVec_SignatureZNoneZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1SignatureZNoneZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_CVec_SignatureZNoneZ_free
@@ -5095,6 +4207,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1SignatureZNone
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1SignatureZNoneZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_CVec_SignatureZNoneZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1SignatureZNoneZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_CVec_SignatureZNoneZ_clone
@@ -5119,6 +4239,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownScriptDecode
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownScriptDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ShutdownScriptDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownScriptDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_ShutdownScriptDecodeErrorZ_free
@@ -5127,6 +4255,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownScriptDecode
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownScriptDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ShutdownScriptDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownScriptDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_ShutdownScriptDecodeErrorZ_clone
@@ -5151,6 +4287,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownScriptInvali
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownScriptInvalidShutdownScriptZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ShutdownScriptInvalidShutdownScriptZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownScriptInvalidShutdownScriptZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_ShutdownScriptInvalidShutdownScriptZ_free
@@ -5159,6 +4303,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownScriptInvali
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownScriptInvalidShutdownScriptZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ShutdownScriptInvalidShutdownScriptZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownScriptInvalidShutdownScriptZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_ShutdownScriptInvalidShutdownScriptZ_clone
@@ -5183,6 +4335,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NoneErrorZ_1ok
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NoneErrorZ_1err
   (JNIEnv *, jclass, jobject);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_NoneErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NoneErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_NoneErrorZ_free
@@ -5191,6 +4351,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NoneErrorZ_1err
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_NoneErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NoneErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_NoneErrorZ_clone
@@ -5215,6 +4383,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1RouteHopDecodeErrorZ
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1RouteHopDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_RouteHopDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1RouteHopDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_RouteHopDecodeErrorZ_free
@@ -5223,6 +4399,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1RouteHopDecodeErrorZ
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RouteHopDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_RouteHopDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1RouteHopDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_RouteHopDecodeErrorZ_clone
@@ -5263,6 +4447,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1RouteDecodeErrorZ_1o
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1RouteDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_RouteDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1RouteDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_RouteDecodeErrorZ_free
@@ -5271,6 +4463,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1RouteDecodeErrorZ_1e
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RouteDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_RouteDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1RouteDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_RouteDecodeErrorZ_clone
@@ -5295,6 +4495,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1RouteParametersDecod
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1RouteParametersDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_RouteParametersDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1RouteParametersDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_RouteParametersDecodeErrorZ_free
@@ -5303,6 +4511,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1RouteParametersDecod
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RouteParametersDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_RouteParametersDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1RouteParametersDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_RouteParametersDecodeErrorZ_clone
@@ -5343,6 +4559,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1u64Z_1none
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1u64Z_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    COption_u64Z_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1u64Z_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    COption_u64Z_clone
@@ -5367,6 +4591,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PayeeDecodeErrorZ_1o
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PayeeDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_PayeeDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PayeeDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_PayeeDecodeErrorZ_free
@@ -5375,6 +4607,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PayeeDecodeErrorZ_1e
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PayeeDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_PayeeDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PayeeDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_PayeeDecodeErrorZ_clone
@@ -5407,6 +4647,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1RouteHintDecodeError
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1RouteHintDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_RouteHintDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1RouteHintDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_RouteHintDecodeErrorZ_free
@@ -5415,6 +4663,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1RouteHintDecodeError
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RouteHintDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_RouteHintDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1RouteHintDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_RouteHintDecodeErrorZ_clone
@@ -5441,12 +4697,28 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1RouteHintHopDecodeEr
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_RouteHintHopDecodeErrorZ_free
- * Signature: (J)V
+ * Method:    CResult_RouteHintHopDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1RouteHintHopDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_RouteHintHopDecodeErrorZ_free
+ * Signature: (J)V
  */
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RouteHintHopDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_RouteHintHopDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1RouteHintHopDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_RouteHintHopDecodeErrorZ_clone
@@ -5479,6 +4751,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1RouteLightningErrorZ
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1RouteLightningErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_RouteLightningErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1RouteLightningErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_RouteLightningErrorZ_free
@@ -5487,6 +4767,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1RouteLightningErrorZ
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RouteLightningErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_RouteLightningErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1RouteLightningErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_RouteLightningErrorZ_clone
@@ -5511,6 +4799,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1TxOutAccessErrorZ_1o
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1TxOutAccessErrorZ_1err
   (JNIEnv *, jclass, jobject);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_TxOutAccessErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1TxOutAccessErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_TxOutAccessErrorZ_free
@@ -5519,6 +4815,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1TxOutAccessErrorZ_1e
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1TxOutAccessErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_TxOutAccessErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1TxOutAccessErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_TxOutAccessErrorZ_clone
@@ -5527,6 +4831,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1TxOutAccessErrorZ_1fr
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1TxOutAccessErrorZ_1clone
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    C2Tuple_usizeTransactionZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1usizeTransactionZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    C2Tuple_usizeTransactionZ_clone
@@ -5583,6 +4895,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NoneChannelMonitorUp
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NoneChannelMonitorUpdateErrZ_1err
   (JNIEnv *, jclass, jobject);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_NoneChannelMonitorUpdateErrZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NoneChannelMonitorUpdateErrZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_NoneChannelMonitorUpdateErrZ_free
@@ -5591,6 +4911,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NoneChannelMonitorUp
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneChannelMonitorUpdateErrZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_NoneChannelMonitorUpdateErrZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NoneChannelMonitorUpdateErrZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_NoneChannelMonitorUpdateErrZ_clone
@@ -5631,6 +4959,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1C2Tuple_1usizeTransa
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1C2Tuple_1usizeTransactionZZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    COption_C2Tuple_usizeTransactionZZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1C2Tuple_1usizeTransactionZZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    COption_C2Tuple_usizeTransactionZZ_clone
@@ -5639,6 +4975,94 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1C2Tuple_1usizeTransac
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1C2Tuple_1usizeTransactionZZ_1clone
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    COption_ClosureReasonZ_some
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1ClosureReasonZ_1some
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    COption_ClosureReasonZ_none
+ * Signature: ()J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1ClosureReasonZ_1none
+  (JNIEnv *, jclass);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    COption_ClosureReasonZ_free
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1ClosureReasonZ_1free
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    COption_ClosureReasonZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1ClosureReasonZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    COption_ClosureReasonZ_clone
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1ClosureReasonZ_1clone
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_COption_ClosureReasonZDecodeErrorZ_ok
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1ClosureReasonZDecodeErrorZ_1ok
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_COption_ClosureReasonZDecodeErrorZ_err
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1ClosureReasonZDecodeErrorZ_1err
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_COption_ClosureReasonZDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1ClosureReasonZDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_COption_ClosureReasonZDecodeErrorZ_free
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1ClosureReasonZDecodeErrorZ_1free
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_COption_ClosureReasonZDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1ClosureReasonZDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_COption_ClosureReasonZDecodeErrorZ_clone
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1ClosureReasonZDecodeErrorZ_1clone
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    COption_NetworkUpdateZ_some
@@ -5663,6 +5087,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1NetworkUpdateZ_1none
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1NetworkUpdateZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    COption_NetworkUpdateZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1NetworkUpdateZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    COption_NetworkUpdateZ_clone
@@ -5679,6 +5111,94 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1NetworkUpdateZ_1clon
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1SpendableOutputDescriptorZ_1free
   (JNIEnv *, jclass, jlongArray);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    COption_EventZ_some
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1EventZ_1some
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    COption_EventZ_none
+ * Signature: ()J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1EventZ_1none
+  (JNIEnv *, jclass);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    COption_EventZ_free
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1EventZ_1free
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    COption_EventZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1EventZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    COption_EventZ_clone
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1EventZ_1clone
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_COption_EventZDecodeErrorZ_ok
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1EventZDecodeErrorZ_1ok
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_COption_EventZDecodeErrorZ_err
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1EventZDecodeErrorZ_1err
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_COption_EventZDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1EventZDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_COption_EventZDecodeErrorZ_free
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1EventZDecodeErrorZ_1free
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_COption_EventZDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1EventZDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_COption_EventZDecodeErrorZ_clone
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1EventZDecodeErrorZ_1clone
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CVec_MessageSendEventZ_free
@@ -5703,6 +5223,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1InitFeaturesDecodeEr
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1InitFeaturesDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_InitFeaturesDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1InitFeaturesDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_InitFeaturesDecodeErrorZ_free
@@ -5727,6 +5255,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NodeFeaturesDecodeEr
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NodeFeaturesDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_NodeFeaturesDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NodeFeaturesDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_NodeFeaturesDecodeErrorZ_free
@@ -5751,6 +5287,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelFeaturesDecod
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelFeaturesDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ChannelFeaturesDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelFeaturesDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_ChannelFeaturesDecodeErrorZ_free
@@ -5775,6 +5319,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceFeaturesDecod
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceFeaturesDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_InvoiceFeaturesDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceFeaturesDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_InvoiceFeaturesDecodeErrorZ_free
@@ -5799,6 +5351,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ScoringParametersDec
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ScoringParametersDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ScoringParametersDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ScoringParametersDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_ScoringParametersDecodeErrorZ_free
@@ -5823,6 +5383,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ScorerDecodeErrorZ_1
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ScorerDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ScorerDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ScorerDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_ScorerDecodeErrorZ_free
@@ -5847,6 +5415,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1DelayedPaymentOutput
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1DelayedPaymentOutputDescriptorDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1DelayedPaymentOutputDescriptorDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_free
@@ -5855,6 +5431,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1DelayedPaymentOutput
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1DelayedPaymentOutputDescriptorDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1DelayedPaymentOutputDescriptorDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_clone
@@ -5879,6 +5463,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1StaticPaymentOutputD
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1StaticPaymentOutputDescriptorDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_StaticPaymentOutputDescriptorDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1StaticPaymentOutputDescriptorDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_StaticPaymentOutputDescriptorDecodeErrorZ_free
@@ -5889,15 +5481,23 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1StaticPaymentOutputDe
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_StaticPaymentOutputDescriptorDecodeErrorZ_clone
+ * Method:    CResult_StaticPaymentOutputDescriptorDecodeErrorZ_clone_ptr
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1StaticPaymentOutputDescriptorDecodeErrorZ_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1StaticPaymentOutputDescriptorDecodeErrorZ_1clone_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_SpendableOutputDescriptorDecodeErrorZ_ok
+ * Method:    CResult_StaticPaymentOutputDescriptorDecodeErrorZ_clone
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1StaticPaymentOutputDescriptorDecodeErrorZ_1clone
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_SpendableOutputDescriptorDecodeErrorZ_ok
  * Signature: (J)J
  */
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SpendableOutputDescriptorDecodeErrorZ_1ok
@@ -5911,6 +5511,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SpendableOutputDescr
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SpendableOutputDescriptorDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_SpendableOutputDescriptorDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1SpendableOutputDescriptorDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_SpendableOutputDescriptorDecodeErrorZ_free
@@ -5919,6 +5527,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SpendableOutputDescr
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SpendableOutputDescriptorDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_SpendableOutputDescriptorDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SpendableOutputDescriptorDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_SpendableOutputDescriptorDecodeErrorZ_clone
@@ -5943,6 +5559,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NoneNoneZ_1ok
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NoneNoneZ_1err
   (JNIEnv *, jclass);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_NoneNoneZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NoneNoneZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_NoneNoneZ_free
@@ -5951,6 +5575,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NoneNoneZ_1err
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneNoneZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_NoneNoneZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NoneNoneZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_NoneNoneZ_clone
@@ -5959,6 +5591,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneNoneZ_1free
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NoneNoneZ_1clone
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    C2Tuple_SignatureCVec_SignatureZZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1SignatureCVec_1SignatureZZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    C2Tuple_SignatureCVec_SignatureZZ_clone
@@ -5999,6 +5639,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1SignatureCV
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1SignatureCVec_1SignatureZZNoneZ_1err
   (JNIEnv *, jclass);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1SignatureCVec_1SignatureZZNoneZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_free
@@ -6007,6 +5655,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1SignatureCV
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1SignatureCVec_1SignatureZZNoneZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1SignatureCVec_1SignatureZZNoneZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone
@@ -6031,6 +5687,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SignatureNoneZ_1ok
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SignatureNoneZ_1err
   (JNIEnv *, jclass);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_SignatureNoneZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1SignatureNoneZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_SignatureNoneZ_free
@@ -6039,6 +5703,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SignatureNoneZ_1err
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SignatureNoneZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_SignatureNoneZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SignatureNoneZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_SignatureNoneZ_clone
@@ -6063,6 +5735,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SignDecodeErrorZ_1ok
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SignDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_SignDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1SignDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_SignDecodeErrorZ_free
@@ -6071,6 +5751,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SignDecodeErrorZ_1er
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SignDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_SignDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SignDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_SignDecodeErrorZ_clone
@@ -6103,6 +5791,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1RecoverableSignature
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1RecoverableSignatureNoneZ_1err
   (JNIEnv *, jclass);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_RecoverableSignatureNoneZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1RecoverableSignatureNoneZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_RecoverableSignatureNoneZ_free
@@ -6111,6 +5807,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1RecoverableSignature
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RecoverableSignatureNoneZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_RecoverableSignatureNoneZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1RecoverableSignatureNoneZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_RecoverableSignatureNoneZ_clone
@@ -6143,6 +5847,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1CVec_1u8ZZNone
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1CVec_1u8ZZNoneZ_1err
   (JNIEnv *, jclass);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_CVec_CVec_u8ZZNoneZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1CVec_1u8ZZNoneZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_CVec_CVec_u8ZZNoneZ_free
@@ -6151,6 +5863,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1CVec_1u8ZZNone
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1CVec_1u8ZZNoneZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_CVec_CVec_u8ZZNoneZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1CVec_1u8ZZNoneZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_CVec_CVec_u8ZZNoneZ_clone
@@ -6175,6 +5895,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1InMemorySignerDecode
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1InMemorySignerDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_InMemorySignerDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1InMemorySignerDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_InMemorySignerDecodeErrorZ_free
@@ -6183,6 +5911,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1InMemorySignerDecode
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1InMemorySignerDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_InMemorySignerDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1InMemorySignerDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_InMemorySignerDecodeErrorZ_clone
@@ -6215,6 +5951,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1TransactionNoneZ_1ok
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1TransactionNoneZ_1err
   (JNIEnv *, jclass);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_TransactionNoneZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1TransactionNoneZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_TransactionNoneZ_free
@@ -6223,6 +5967,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1TransactionNoneZ_1er
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1TransactionNoneZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_TransactionNoneZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1TransactionNoneZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_TransactionNoneZ_clone
@@ -6231,6 +5983,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1TransactionNoneZ_1fre
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1TransactionNoneZ_1clone
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    C2Tuple_BlockHashChannelMonitorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelMonitorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    C2Tuple_BlockHashChannelMonitorZ_clone
@@ -6279,6 +6039,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1Block
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1BlockHashChannelMonitorZZErrorZ_1err
   (JNIEnv *, jclass, jobject);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1BlockHashChannelMonitorZZErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_free
@@ -6287,6 +6055,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1Block
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1BlockHashChannelMonitorZZErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1C2Tuple_1BlockHashChannelMonitorZZErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_clone
@@ -6319,6 +6095,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1u16Z_1none
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1u16Z_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    COption_u16Z_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1u16Z_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    COption_u16Z_clone
@@ -6343,6 +6127,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NoneAPIErrorZ_1ok
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NoneAPIErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_NoneAPIErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NoneAPIErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_NoneAPIErrorZ_free
@@ -6351,6 +6143,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NoneAPIErrorZ_1err
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneAPIErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_NoneAPIErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NoneAPIErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_NoneAPIErrorZ_clone
@@ -6391,6 +6191,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1_1u832APIErrorZ_1ok
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1_1u832APIErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult__u832APIErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1_1u832APIErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult__u832APIErrorZ_free
@@ -6399,6 +6207,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1_1u832APIErrorZ_1err
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1_1u832APIErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult__u832APIErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1_1u832APIErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult__u832APIErrorZ_clone
@@ -6423,6 +6239,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentSend
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentSendFailureZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_PaymentIdPaymentSendFailureZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentSendFailureZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_PaymentIdPaymentSendFailureZ_free
@@ -6431,6 +6255,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentSend
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentSendFailureZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_PaymentIdPaymentSendFailureZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentSendFailureZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_PaymentIdPaymentSendFailureZ_clone
@@ -6455,6 +6287,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NonePaymentSendFailu
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NonePaymentSendFailureZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_NonePaymentSendFailureZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NonePaymentSendFailureZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_NonePaymentSendFailureZ_free
@@ -6463,6 +6303,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NonePaymentSendFailu
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NonePaymentSendFailureZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_NonePaymentSendFailureZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NonePaymentSendFailureZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_NonePaymentSendFailureZ_clone
@@ -6471,6 +6319,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NonePaymentSendFailur
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NonePaymentSendFailureZ_1clone
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    C2Tuple_PaymentHashPaymentIdZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PaymentHashPaymentIdZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    C2Tuple_PaymentHashPaymentIdZ_clone
@@ -6511,6 +6367,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHash
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentIdZPaymentSendFailureZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentIdZPaymentSendFailureZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_free
@@ -6519,6 +6383,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHash
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentIdZPaymentSendFailureZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHashPaymentIdZPaymentSendFailureZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_clone
@@ -6535,6 +6407,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1PaymentHash
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1NetAddressZ_1free
   (JNIEnv *, jclass, jlongArray);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    C2Tuple_PaymentHashPaymentSecretZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PaymentHashPaymentSecretZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    C2Tuple_PaymentHashPaymentSecretZ_clone
@@ -6575,6 +6455,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentSecretAPIErro
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentSecretAPIErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_PaymentSecretAPIErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentSecretAPIErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_PaymentSecretAPIErrorZ_free
@@ -6583,6 +6471,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentSecretAPIErro
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentSecretAPIErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_PaymentSecretAPIErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentSecretAPIErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_PaymentSecretAPIErrorZ_clone
@@ -6631,6 +6527,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashCh
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelManagerZDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelManagerZDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_free
@@ -6655,6 +6559,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelConfigDecodeE
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelConfigDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ChannelConfigDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelConfigDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_ChannelConfigDecodeErrorZ_free
@@ -6663,6 +6575,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelConfigDecodeE
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelConfigDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ChannelConfigDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelConfigDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_ChannelConfigDecodeErrorZ_clone
@@ -6687,6 +6607,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1OutPointDecodeErrorZ
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1OutPointDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_OutPointDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1OutPointDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_OutPointDecodeErrorZ_free
@@ -6697,7 +6625,15 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1OutPointDecodeErrorZ_
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_OutPointDecodeErrorZ_clone
+ * Method:    CResult_OutPointDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1OutPointDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_OutPointDecodeErrorZ_clone
  * Signature: (J)J
  */
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1OutPointDecodeErrorZ_1clone
@@ -6727,6 +6663,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1TypeZ_1none
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1TypeZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    COption_TypeZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1TypeZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    COption_TypeZ_clone
@@ -6751,6 +6695,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1TypeZDecode
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1TypeZDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_COption_TypeZDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1TypeZDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_COption_TypeZDecodeErrorZ_free
@@ -6759,6 +6711,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1TypeZDecode
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1TypeZDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_COption_TypeZDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1TypeZDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_COption_TypeZDecodeErrorZ_clone
@@ -6783,6 +6743,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentErro
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_PaymentIdPaymentErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_PaymentIdPaymentErrorZ_free
@@ -6791,6 +6759,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentErro
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_PaymentIdPaymentErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PaymentIdPaymentErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_PaymentIdPaymentErrorZ_clone
@@ -6815,6 +6791,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SiPrefixNoneZ_1ok
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SiPrefixNoneZ_1err
   (JNIEnv *, jclass);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_SiPrefixNoneZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1SiPrefixNoneZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_SiPrefixNoneZ_free
@@ -6823,6 +6807,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SiPrefixNoneZ_1err
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SiPrefixNoneZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_SiPrefixNoneZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SiPrefixNoneZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_SiPrefixNoneZ_clone
@@ -6847,6 +6839,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceNoneZ_1ok
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceNoneZ_1err
   (JNIEnv *, jclass);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_InvoiceNoneZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceNoneZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_InvoiceNoneZ_free
@@ -6855,6 +6855,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceNoneZ_1err
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceNoneZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_InvoiceNoneZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceNoneZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_InvoiceNoneZ_clone
@@ -6879,6 +6887,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SignedRawInvoiceNone
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SignedRawInvoiceNoneZ_1err
   (JNIEnv *, jclass);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_SignedRawInvoiceNoneZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1SignedRawInvoiceNoneZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_SignedRawInvoiceNoneZ_free
@@ -6887,6 +6903,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SignedRawInvoiceNone
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SignedRawInvoiceNoneZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_SignedRawInvoiceNoneZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SignedRawInvoiceNoneZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_SignedRawInvoiceNoneZ_clone
@@ -6895,6 +6919,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1SignedRawInvoiceNoneZ
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1SignedRawInvoiceNoneZ_1clone
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    C3Tuple_RawInvoice_u832InvoiceSignatureZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C3Tuple_1RawInvoice_1u832InvoiceSignatureZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    C3Tuple_RawInvoice_u832InvoiceSignatureZ_clone
@@ -6935,6 +6967,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeyErrorZ_1o
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeyErrorZ_1err
   (JNIEnv *, jclass, jobject);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_PayeePubKeyErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeyErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_PayeePubKeyErrorZ_free
@@ -6943,6 +6983,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeyErrorZ_1e
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeyErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_PayeePubKeyErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PayeePubKeyErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_PayeePubKeyErrorZ_clone
@@ -6975,6 +7023,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PositiveTimestampCre
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PositiveTimestampCreationErrorZ_1err
   (JNIEnv *, jclass, jobject);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_PositiveTimestampCreationErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PositiveTimestampCreationErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_PositiveTimestampCreationErrorZ_free
@@ -6983,6 +7039,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PositiveTimestampCre
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PositiveTimestampCreationErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_PositiveTimestampCreationErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PositiveTimestampCreationErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_PositiveTimestampCreationErrorZ_clone
@@ -7007,6 +7071,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NoneSemanticErrorZ_1
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NoneSemanticErrorZ_1err
   (JNIEnv *, jclass, jobject);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_NoneSemanticErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NoneSemanticErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_NoneSemanticErrorZ_free
@@ -7015,6 +7087,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NoneSemanticErrorZ_1
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneSemanticErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_NoneSemanticErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NoneSemanticErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_NoneSemanticErrorZ_clone
@@ -7039,6 +7119,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceSemanticError
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceSemanticErrorZ_1err
   (JNIEnv *, jclass, jobject);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_InvoiceSemanticErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceSemanticErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_InvoiceSemanticErrorZ_free
@@ -7047,6 +7135,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceSemanticError
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceSemanticErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_InvoiceSemanticErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceSemanticErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_InvoiceSemanticErrorZ_clone
@@ -7071,6 +7167,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1DescriptionCreationE
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1DescriptionCreationErrorZ_1err
   (JNIEnv *, jclass, jobject);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_DescriptionCreationErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1DescriptionCreationErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_DescriptionCreationErrorZ_free
@@ -7079,6 +7183,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1DescriptionCreationE
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1DescriptionCreationErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_DescriptionCreationErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1DescriptionCreationErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_DescriptionCreationErrorZ_clone
@@ -7103,6 +7215,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ExpiryTimeCreationEr
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ExpiryTimeCreationErrorZ_1err
   (JNIEnv *, jclass, jobject);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ExpiryTimeCreationErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ExpiryTimeCreationErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_ExpiryTimeCreationErrorZ_free
@@ -7111,100 +7231,236 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ExpiryTimeCreationEr
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ExpiryTimeCreationErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ExpiryTimeCreationErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ExpiryTimeCreationErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_ExpiryTimeCreationErrorZ_clone
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ExpiryTimeCreationErrorZ_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ExpiryTimeCreationErrorZ_1clone
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_PrivateRouteCreationErrorZ_ok
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PrivateRouteCreationErrorZ_1ok
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_PrivateRouteCreationErrorZ_err
+ * Signature: (Lorg/ldk/enums/CreationError;)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PrivateRouteCreationErrorZ_1err
+  (JNIEnv *, jclass, jobject);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_PrivateRouteCreationErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PrivateRouteCreationErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_PrivateRouteCreationErrorZ_free
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PrivateRouteCreationErrorZ_1free
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_PrivateRouteCreationErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PrivateRouteCreationErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_PrivateRouteCreationErrorZ_clone
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PrivateRouteCreationErrorZ_1clone
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_StringErrorZ_ok
+ * Signature: (Ljava/lang/String;)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1StringErrorZ_1ok
+  (JNIEnv *, jclass, jstring);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_StringErrorZ_err
+ * Signature: (Lorg/ldk/enums/Secp256k1Error;)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1StringErrorZ_1err
+  (JNIEnv *, jclass, jobject);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_StringErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1StringErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_StringErrorZ_free
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1StringErrorZ_1free
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ChannelMonitorUpdateDecodeErrorZ_ok
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelMonitorUpdateDecodeErrorZ_1ok
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ChannelMonitorUpdateDecodeErrorZ_err
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelMonitorUpdateDecodeErrorZ_1err
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ChannelMonitorUpdateDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelMonitorUpdateDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ChannelMonitorUpdateDecodeErrorZ_free
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelMonitorUpdateDecodeErrorZ_1free
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ChannelMonitorUpdateDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelMonitorUpdateDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ChannelMonitorUpdateDecodeErrorZ_clone
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelMonitorUpdateDecodeErrorZ_1clone
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PrivateRouteCreationErrorZ_ok
+ * Method:    COption_MonitorEventZ_some
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PrivateRouteCreationErrorZ_1ok
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1MonitorEventZ_1some
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PrivateRouteCreationErrorZ_err
- * Signature: (Lorg/ldk/enums/CreationError;)J
+ * Method:    COption_MonitorEventZ_none
+ * Signature: ()J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PrivateRouteCreationErrorZ_1err
-  (JNIEnv *, jclass, jobject);
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1MonitorEventZ_1none
+  (JNIEnv *, jclass);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PrivateRouteCreationErrorZ_free
+ * Method:    COption_MonitorEventZ_free
  * Signature: (J)V
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PrivateRouteCreationErrorZ_1free
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1MonitorEventZ_1free
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_PrivateRouteCreationErrorZ_clone
+ * Method:    COption_MonitorEventZ_clone_ptr
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PrivateRouteCreationErrorZ_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1MonitorEventZ_1clone_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_StringErrorZ_ok
- * Signature: (Ljava/lang/String;)J
+ * Method:    COption_MonitorEventZ_clone
+ * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1StringErrorZ_1ok
-  (JNIEnv *, jclass, jstring);
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1MonitorEventZ_1clone
+  (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_StringErrorZ_err
- * Signature: (Lorg/ldk/enums/Secp256k1Error;)J
+ * Method:    CResult_COption_MonitorEventZDecodeErrorZ_ok
+ * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1StringErrorZ_1err
-  (JNIEnv *, jclass, jobject);
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1MonitorEventZDecodeErrorZ_1ok
+  (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_StringErrorZ_free
- * Signature: (J)V
+ * Method:    CResult_COption_MonitorEventZDecodeErrorZ_err
+ * Signature: (J)J
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1StringErrorZ_1free
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1MonitorEventZDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_ChannelMonitorUpdateDecodeErrorZ_ok
- * Signature: (J)J
+ * Method:    CResult_COption_MonitorEventZDecodeErrorZ_is_ok
+ * Signature: (J)Z
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelMonitorUpdateDecodeErrorZ_1ok
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1MonitorEventZDecodeErrorZ_1is_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_ChannelMonitorUpdateDecodeErrorZ_err
- * Signature: (J)J
+ * Method:    CResult_COption_MonitorEventZDecodeErrorZ_free
+ * Signature: (J)V
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelMonitorUpdateDecodeErrorZ_1err
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1MonitorEventZDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_ChannelMonitorUpdateDecodeErrorZ_free
- * Signature: (J)V
+ * Method:    CResult_COption_MonitorEventZDecodeErrorZ_clone_ptr
+ * Signature: (J)J
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelMonitorUpdateDecodeErrorZ_1free
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1MonitorEventZDecodeErrorZ_1clone_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_ChannelMonitorUpdateDecodeErrorZ_clone
+ * Method:    CResult_COption_MonitorEventZDecodeErrorZ_clone
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelMonitorUpdateDecodeErrorZ_1clone
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1MonitorEventZDecodeErrorZ_1clone
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -7223,6 +7479,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCUpdateDecodeErro
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCUpdateDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_HTLCUpdateDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCUpdateDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_HTLCUpdateDecodeErrorZ_free
@@ -7231,6 +7495,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCUpdateDecodeErro
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCUpdateDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_HTLCUpdateDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1HTLCUpdateDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_HTLCUpdateDecodeErrorZ_clone
@@ -7255,6 +7527,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NoneMonitorUpdateErr
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NoneMonitorUpdateErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_NoneMonitorUpdateErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NoneMonitorUpdateErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_NoneMonitorUpdateErrorZ_free
@@ -7263,6 +7543,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NoneMonitorUpdateErr
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneMonitorUpdateErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_NoneMonitorUpdateErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NoneMonitorUpdateErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_NoneMonitorUpdateErrorZ_clone
@@ -7271,6 +7559,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneMonitorUpdateErro
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NoneMonitorUpdateErrorZ_1clone
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    C2Tuple_OutPointScriptZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1OutPointScriptZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    C2Tuple_OutPointScriptZ_clone
@@ -7295,6 +7591,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1OutPointScriptZ_1new
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1OutPointScriptZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    C2Tuple_u32ScriptZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32ScriptZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    C2Tuple_u32ScriptZ_clone
@@ -7327,6 +7631,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32ScriptZ_1free
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1u32ScriptZZ_1free
   (JNIEnv *, jclass, jlongArray);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2Tuple_1u32ScriptZZZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_clone
@@ -7375,6 +7687,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1EventZ_1free
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1TransactionZ_1free
   (JNIEnv *, jclass, jobjectArray);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    C2Tuple_u32TxOutZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32TxOutZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    C2Tuple_u32TxOutZ_clone
@@ -7407,6 +7727,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_C2Tuple_1u32TxOutZ_1free
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1C2Tuple_1u32TxOutZZ_1free
   (JNIEnv *, jclass, jlongArray);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1TxidCVec_1C2Tuple_1u32TxOutZZZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_clone
@@ -7463,6 +7791,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashCh
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelMonitorZDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelMonitorZDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_free
@@ -7471,6 +7807,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashCh
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelMonitorZDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1C2Tuple_1BlockHashChannelMonitorZDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_clone
@@ -7495,6 +7839,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NoneLightningErrorZ_
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NoneLightningErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_NoneLightningErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NoneLightningErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_NoneLightningErrorZ_free
@@ -7503,6 +7855,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NoneLightningErrorZ_
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneLightningErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_NoneLightningErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NoneLightningErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_NoneLightningErrorZ_clone
@@ -7511,6 +7871,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NoneLightningErrorZ_1
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NoneLightningErrorZ_1clone
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    C2Tuple_PublicKeyTypeZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1PublicKeyTypeZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    C2Tuple_PublicKeyTypeZ_clone
@@ -7559,6 +7927,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1boolLightningErrorZ_
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1boolLightningErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_boolLightningErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1boolLightningErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_boolLightningErrorZ_free
@@ -7567,6 +7943,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1boolLightningErrorZ_
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1boolLightningErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_boolLightningErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1boolLightningErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_boolLightningErrorZ_clone
@@ -7575,6 +7959,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1boolLightningErrorZ_1
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1boolLightningErrorZ_1clone
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C3Tuple_1ChannelAnnouncementChannelUpdateChannelUpdateZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_clone
@@ -7639,6 +8031,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZPeerHandleE
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZPeerHandleErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_CVec_u8ZPeerHandleErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZPeerHandleErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_CVec_u8ZPeerHandleErrorZ_free
@@ -7647,6 +8047,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZPeerHandleE
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZPeerHandleErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_CVec_u8ZPeerHandleErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CVec_1u8ZPeerHandleErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_CVec_u8ZPeerHandleErrorZ_clone
@@ -7671,6 +8079,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NonePeerHandleErrorZ
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NonePeerHandleErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_NonePeerHandleErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NonePeerHandleErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_NonePeerHandleErrorZ_free
@@ -7679,6 +8095,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NonePeerHandleErrorZ
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NonePeerHandleErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_NonePeerHandleErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NonePeerHandleErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_NonePeerHandleErrorZ_clone
@@ -7703,6 +8127,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1boolPeerHandleErrorZ
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1boolPeerHandleErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_boolPeerHandleErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1boolPeerHandleErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_boolPeerHandleErrorZ_free
@@ -7711,6 +8143,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1boolPeerHandleErrorZ
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1boolPeerHandleErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_boolPeerHandleErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1boolPeerHandleErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_boolPeerHandleErrorZ_clone
@@ -7735,6 +8175,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NodeIdDecodeErrorZ_1
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NodeIdDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_NodeIdDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NodeIdDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_NodeIdDecodeErrorZ_free
@@ -7743,6 +8191,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NodeIdDecodeErrorZ_1
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NodeIdDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_NodeIdDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NodeIdDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_NodeIdDecodeErrorZ_clone
@@ -7751,6 +8207,54 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NodeIdDecodeErrorZ_1f
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NodeIdDecodeErrorZ_1clone
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_COption_NetworkUpdateZDecodeErrorZ_ok
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1NetworkUpdateZDecodeErrorZ_1ok
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_COption_NetworkUpdateZDecodeErrorZ_err
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1NetworkUpdateZDecodeErrorZ_1err
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_COption_NetworkUpdateZDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1NetworkUpdateZDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_COption_NetworkUpdateZDecodeErrorZ_free
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1NetworkUpdateZDecodeErrorZ_1free
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_COption_NetworkUpdateZDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1NetworkUpdateZDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_COption_NetworkUpdateZDecodeErrorZ_clone
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1COption_1NetworkUpdateZDecodeErrorZ_1clone
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    COption_AccessZ_some
@@ -7791,6 +8295,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1DirectionalChannelIn
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1DirectionalChannelInfoDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_DirectionalChannelInfoDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1DirectionalChannelInfoDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_DirectionalChannelInfoDecodeErrorZ_free
@@ -7799,6 +8311,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1DirectionalChannelIn
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1DirectionalChannelInfoDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_DirectionalChannelInfoDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1DirectionalChannelInfoDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_DirectionalChannelInfoDecodeErrorZ_clone
@@ -7825,10 +8345,26 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelInfoDecodeErr
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    CResult_ChannelInfoDecodeErrorZ_free
- * Signature: (J)V
+ * Method:    CResult_ChannelInfoDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelInfoDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ChannelInfoDecodeErrorZ_free
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelInfoDecodeErrorZ_1free
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ChannelInfoDecodeErrorZ_clone_ptr
+ * Signature: (J)J
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelInfoDecodeErrorZ_1free
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelInfoDecodeErrorZ_1clone_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -7855,6 +8391,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1RoutingFeesDecodeErr
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1RoutingFeesDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_RoutingFeesDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1RoutingFeesDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_RoutingFeesDecodeErrorZ_free
@@ -7863,6 +8407,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1RoutingFeesDecodeErr
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RoutingFeesDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_RoutingFeesDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1RoutingFeesDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_RoutingFeesDecodeErrorZ_clone
@@ -7887,6 +8439,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NodeAnnouncementInfo
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NodeAnnouncementInfoDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_NodeAnnouncementInfoDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NodeAnnouncementInfoDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_NodeAnnouncementInfoDecodeErrorZ_free
@@ -7895,6 +8455,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NodeAnnouncementInfo
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NodeAnnouncementInfoDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_NodeAnnouncementInfoDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NodeAnnouncementInfoDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_NodeAnnouncementInfoDecodeErrorZ_clone
@@ -7927,6 +8495,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NodeInfoDecodeErrorZ
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NodeInfoDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_NodeInfoDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NodeInfoDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_NodeInfoDecodeErrorZ_free
@@ -7935,6 +8511,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NodeInfoDecodeErrorZ
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NodeInfoDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_NodeInfoDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NodeInfoDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_NodeInfoDecodeErrorZ_clone
@@ -7959,6 +8543,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NetworkGraphDecodeEr
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NetworkGraphDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_NetworkGraphDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NetworkGraphDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_NetworkGraphDecodeErrorZ_free
@@ -7967,6 +8559,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NetworkGraphDecodeEr
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NetworkGraphDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_NetworkGraphDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NetworkGraphDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_NetworkGraphDecodeErrorZ_clone
@@ -7999,6 +8599,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1NetAddressZZ_1
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1NetAddressZZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    COption_CVec_NetAddressZZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_COption_1CVec_1NetAddressZZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    COption_CVec_NetAddressZZ_clone
@@ -8023,6 +8631,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NetAddressDecodeErro
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NetAddressDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_NetAddressDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NetAddressDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_NetAddressDecodeErrorZ_free
@@ -8031,6 +8647,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NetAddressDecodeErro
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NetAddressDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_NetAddressDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NetAddressDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_NetAddressDecodeErrorZ_clone
@@ -8087,6 +8711,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1AcceptChannelDecodeE
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1AcceptChannelDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_AcceptChannelDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1AcceptChannelDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_AcceptChannelDecodeErrorZ_free
@@ -8095,6 +8727,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1AcceptChannelDecodeE
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1AcceptChannelDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_AcceptChannelDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1AcceptChannelDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_AcceptChannelDecodeErrorZ_clone
@@ -8119,6 +8759,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1AnnouncementSignatur
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1AnnouncementSignaturesDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_AnnouncementSignaturesDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1AnnouncementSignaturesDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_AnnouncementSignaturesDecodeErrorZ_free
@@ -8127,6 +8775,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1AnnouncementSignatur
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1AnnouncementSignaturesDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_AnnouncementSignaturesDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1AnnouncementSignaturesDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_AnnouncementSignaturesDecodeErrorZ_clone
@@ -8151,6 +8807,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelReestablishDe
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelReestablishDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ChannelReestablishDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelReestablishDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_ChannelReestablishDecodeErrorZ_free
@@ -8159,6 +8823,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelReestablishDe
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelReestablishDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ChannelReestablishDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelReestablishDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_ChannelReestablishDecodeErrorZ_clone
@@ -8183,6 +8855,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ClosingSignedDecodeE
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ClosingSignedDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ClosingSignedDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ClosingSignedDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_ClosingSignedDecodeErrorZ_free
@@ -8191,6 +8871,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ClosingSignedDecodeE
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ClosingSignedDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ClosingSignedDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ClosingSignedDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_ClosingSignedDecodeErrorZ_clone
@@ -8215,6 +8903,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ClosingSignedFeeRang
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ClosingSignedFeeRangeDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ClosingSignedFeeRangeDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ClosingSignedFeeRangeDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_ClosingSignedFeeRangeDecodeErrorZ_free
@@ -8223,6 +8919,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ClosingSignedFeeRang
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ClosingSignedFeeRangeDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ClosingSignedFeeRangeDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ClosingSignedFeeRangeDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_ClosingSignedFeeRangeDecodeErrorZ_clone
@@ -8247,6 +8951,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CommitmentSignedDeco
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CommitmentSignedDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_CommitmentSignedDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1CommitmentSignedDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_CommitmentSignedDecodeErrorZ_free
@@ -8255,6 +8967,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CommitmentSignedDeco
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1CommitmentSignedDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_CommitmentSignedDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1CommitmentSignedDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_CommitmentSignedDecodeErrorZ_clone
@@ -8279,6 +8999,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1FundingCreatedDecode
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1FundingCreatedDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_FundingCreatedDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1FundingCreatedDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_FundingCreatedDecodeErrorZ_free
@@ -8287,6 +9015,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1FundingCreatedDecode
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1FundingCreatedDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_FundingCreatedDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1FundingCreatedDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_FundingCreatedDecodeErrorZ_clone
@@ -8311,6 +9047,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1FundingSignedDecodeE
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1FundingSignedDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_FundingSignedDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1FundingSignedDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_FundingSignedDecodeErrorZ_free
@@ -8319,6 +9063,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1FundingSignedDecodeE
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1FundingSignedDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_FundingSignedDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1FundingSignedDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_FundingSignedDecodeErrorZ_clone
@@ -8343,6 +9095,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1FundingLockedDecodeE
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1FundingLockedDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_FundingLockedDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1FundingLockedDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_FundingLockedDecodeErrorZ_free
@@ -8351,6 +9111,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1FundingLockedDecodeE
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1FundingLockedDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_FundingLockedDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1FundingLockedDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_FundingLockedDecodeErrorZ_clone
@@ -8375,6 +9143,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1InitDecodeErrorZ_1ok
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1InitDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_InitDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1InitDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_InitDecodeErrorZ_free
@@ -8383,6 +9159,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1InitDecodeErrorZ_1er
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1InitDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_InitDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1InitDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_InitDecodeErrorZ_clone
@@ -8407,6 +9191,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1OpenChannelDecodeErr
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1OpenChannelDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_OpenChannelDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1OpenChannelDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_OpenChannelDecodeErrorZ_free
@@ -8415,6 +9207,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1OpenChannelDecodeErr
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1OpenChannelDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_OpenChannelDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1OpenChannelDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_OpenChannelDecodeErrorZ_clone
@@ -8439,6 +9239,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1RevokeAndACKDecodeEr
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1RevokeAndACKDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_RevokeAndACKDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1RevokeAndACKDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_RevokeAndACKDecodeErrorZ_free
@@ -8447,6 +9255,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1RevokeAndACKDecodeEr
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1RevokeAndACKDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_RevokeAndACKDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1RevokeAndACKDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_RevokeAndACKDecodeErrorZ_clone
@@ -8471,6 +9287,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownDecodeErrorZ
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ShutdownDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_ShutdownDecodeErrorZ_free
@@ -8479,6 +9303,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownDecodeErrorZ
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ShutdownDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ShutdownDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_ShutdownDecodeErrorZ_clone
@@ -8503,6 +9335,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFailHTLCDecode
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFailHTLCDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_UpdateFailHTLCDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFailHTLCDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_UpdateFailHTLCDecodeErrorZ_free
@@ -8511,6 +9351,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFailHTLCDecode
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFailHTLCDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_UpdateFailHTLCDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFailHTLCDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_UpdateFailHTLCDecodeErrorZ_clone
@@ -8535,6 +9383,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFailMalformedH
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFailMalformedHTLCDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_UpdateFailMalformedHTLCDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFailMalformedHTLCDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_UpdateFailMalformedHTLCDecodeErrorZ_free
@@ -8543,6 +9399,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFailMalformedH
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFailMalformedHTLCDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_UpdateFailMalformedHTLCDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFailMalformedHTLCDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_UpdateFailMalformedHTLCDecodeErrorZ_clone
@@ -8564,7 +9428,15 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFeeDecodeError
  * Method:    CResult_UpdateFeeDecodeErrorZ_err
  * Signature: (J)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFeeDecodeErrorZ_1err
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFeeDecodeErrorZ_1err
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_UpdateFeeDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFeeDecodeErrorZ_1is_1ok
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -8575,6 +9447,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFeeDecodeError
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFeeDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_UpdateFeeDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFeeDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_UpdateFeeDecodeErrorZ_clone
@@ -8599,6 +9479,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFulfillHTLCDec
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFulfillHTLCDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_UpdateFulfillHTLCDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFulfillHTLCDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_UpdateFulfillHTLCDecodeErrorZ_free
@@ -8607,6 +9495,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFulfillHTLCDec
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFulfillHTLCDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_UpdateFulfillHTLCDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateFulfillHTLCDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_UpdateFulfillHTLCDecodeErrorZ_clone
@@ -8631,6 +9527,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateAddHTLCDecodeE
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateAddHTLCDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_UpdateAddHTLCDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateAddHTLCDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_UpdateAddHTLCDecodeErrorZ_free
@@ -8639,6 +9543,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateAddHTLCDecodeE
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateAddHTLCDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_UpdateAddHTLCDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1UpdateAddHTLCDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_UpdateAddHTLCDecodeErrorZ_clone
@@ -8663,6 +9575,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PingDecodeErrorZ_1ok
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PingDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_PingDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PingDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_PingDecodeErrorZ_free
@@ -8671,6 +9591,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PingDecodeErrorZ_1er
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PingDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_PingDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PingDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_PingDecodeErrorZ_clone
@@ -8695,6 +9623,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PongDecodeErrorZ_1ok
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PongDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_PongDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1PongDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_PongDecodeErrorZ_free
@@ -8703,6 +9639,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PongDecodeErrorZ_1er
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1PongDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_PongDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1PongDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_PongDecodeErrorZ_clone
@@ -8727,6 +9671,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedChannelAnnou
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedChannelAnnouncementDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_UnsignedChannelAnnouncementDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedChannelAnnouncementDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_UnsignedChannelAnnouncementDecodeErrorZ_free
@@ -8735,6 +9687,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedChannelAnnou
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedChannelAnnouncementDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_UnsignedChannelAnnouncementDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedChannelAnnouncementDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_UnsignedChannelAnnouncementDecodeErrorZ_clone
@@ -8759,6 +9719,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelAnnouncementD
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelAnnouncementDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ChannelAnnouncementDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelAnnouncementDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_ChannelAnnouncementDecodeErrorZ_free
@@ -8767,6 +9735,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelAnnouncementD
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelAnnouncementDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ChannelAnnouncementDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelAnnouncementDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_ChannelAnnouncementDecodeErrorZ_clone
@@ -8791,6 +9767,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedChannelUpdat
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedChannelUpdateDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_UnsignedChannelUpdateDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedChannelUpdateDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_UnsignedChannelUpdateDecodeErrorZ_free
@@ -8799,6 +9783,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedChannelUpdat
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedChannelUpdateDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_UnsignedChannelUpdateDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedChannelUpdateDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_UnsignedChannelUpdateDecodeErrorZ_clone
@@ -8823,6 +9815,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelUpdateDecodeE
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelUpdateDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ChannelUpdateDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelUpdateDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_ChannelUpdateDecodeErrorZ_free
@@ -8831,6 +9831,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelUpdateDecodeE
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelUpdateDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ChannelUpdateDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ChannelUpdateDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_ChannelUpdateDecodeErrorZ_clone
@@ -8855,6 +9863,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ErrorMessageDecodeEr
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ErrorMessageDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ErrorMessageDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ErrorMessageDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_ErrorMessageDecodeErrorZ_free
@@ -8863,6 +9879,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ErrorMessageDecodeEr
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ErrorMessageDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ErrorMessageDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ErrorMessageDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_ErrorMessageDecodeErrorZ_clone
@@ -8887,6 +9911,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedNodeAnnounce
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedNodeAnnouncementDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_UnsignedNodeAnnouncementDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedNodeAnnouncementDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_UnsignedNodeAnnouncementDecodeErrorZ_free
@@ -8895,6 +9927,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedNodeAnnounce
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedNodeAnnouncementDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_UnsignedNodeAnnouncementDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1UnsignedNodeAnnouncementDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_UnsignedNodeAnnouncementDecodeErrorZ_clone
@@ -8919,6 +9959,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NodeAnnouncementDeco
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NodeAnnouncementDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_NodeAnnouncementDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1NodeAnnouncementDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_NodeAnnouncementDecodeErrorZ_free
@@ -8927,6 +9975,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NodeAnnouncementDeco
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1NodeAnnouncementDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_NodeAnnouncementDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1NodeAnnouncementDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_NodeAnnouncementDecodeErrorZ_clone
@@ -8951,6 +10007,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1QueryShortChannelIds
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1QueryShortChannelIdsDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_QueryShortChannelIdsDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1QueryShortChannelIdsDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_QueryShortChannelIdsDecodeErrorZ_free
@@ -8959,6 +10023,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1QueryShortChannelIds
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1QueryShortChannelIdsDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_QueryShortChannelIdsDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1QueryShortChannelIdsDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_QueryShortChannelIdsDecodeErrorZ_clone
@@ -8983,6 +10055,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ReplyShortChannelIds
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ReplyShortChannelIdsEndDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ReplyShortChannelIdsEndDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ReplyShortChannelIdsEndDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_ReplyShortChannelIdsEndDecodeErrorZ_free
@@ -8991,6 +10071,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ReplyShortChannelIds
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ReplyShortChannelIdsEndDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ReplyShortChannelIdsEndDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ReplyShortChannelIdsEndDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_ReplyShortChannelIdsEndDecodeErrorZ_clone
@@ -9015,6 +10103,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1QueryChannelRangeDec
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1QueryChannelRangeDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_QueryChannelRangeDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1QueryChannelRangeDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_QueryChannelRangeDecodeErrorZ_free
@@ -9023,6 +10119,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1QueryChannelRangeDec
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1QueryChannelRangeDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_QueryChannelRangeDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1QueryChannelRangeDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_QueryChannelRangeDecodeErrorZ_clone
@@ -9047,6 +10151,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ReplyChannelRangeDec
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ReplyChannelRangeDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ReplyChannelRangeDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1ReplyChannelRangeDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_ReplyChannelRangeDecodeErrorZ_free
@@ -9055,6 +10167,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ReplyChannelRangeDec
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1ReplyChannelRangeDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_ReplyChannelRangeDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1ReplyChannelRangeDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_ReplyChannelRangeDecodeErrorZ_clone
@@ -9079,6 +10199,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1GossipTimestampFilte
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1GossipTimestampFilterDecodeErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_GossipTimestampFilterDecodeErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1GossipTimestampFilterDecodeErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_GossipTimestampFilterDecodeErrorZ_free
@@ -9087,6 +10215,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1GossipTimestampFilte
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1GossipTimestampFilterDecodeErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_GossipTimestampFilterDecodeErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1GossipTimestampFilterDecodeErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_GossipTimestampFilterDecodeErrorZ_clone
@@ -9111,6 +10247,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceSignOrCreatio
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceSignOrCreationErrorZ_1err
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_InvoiceSignOrCreationErrorZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceSignOrCreationErrorZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_InvoiceSignOrCreationErrorZ_free
@@ -9119,6 +10263,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceSignOrCreatio
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceSignOrCreationErrorZ_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_InvoiceSignOrCreationErrorZ_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1InvoiceSignOrCreationErrorZ_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_InvoiceSignOrCreationErrorZ_clone
@@ -9167,6 +10319,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1LockedChannelMonitor
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CResult_1LockedChannelMonitorNoneZ_1err
   (JNIEnv *, jclass);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CResult_LockedChannelMonitorNoneZ_is_ok
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_CResult_1LockedChannelMonitorNoneZ_1is_1ok
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CResult_LockedChannelMonitorNoneZ_free
@@ -9191,6 +10351,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CVec_1OutPointZ_1free
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentPurpose_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    PaymentPurpose_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_PaymentPurpose_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    PaymentPurpose_clone
@@ -9223,6 +10391,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_PaymentPurpose_1spontaneous_1
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ClosureReason_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ClosureReason_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ClosureReason_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    ClosureReason_clone
@@ -9295,6 +10471,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ClosureReason_1outdated_1chan
 JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_ClosureReason_1write
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ClosureReason_read
+ * Signature: ([B)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ClosureReason_1read
+  (JNIEnv *, jclass, jbyteArray);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    Event_free
@@ -9303,6 +10487,14 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_ClosureReason_1write
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Event_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Event_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Event_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    Event_clone
@@ -9393,10 +10585,26 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_Event_1write
 
 /*
  * Class:     org_ldk_impl_bindings
- * Method:    MessageSendEvent_free
- * Signature: (J)V
+ * Method:    Event_read
+ * Signature: ([B)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Event_1read
+  (JNIEnv *, jclass, jbyteArray);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    MessageSendEvent_free
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MessageSendEvent_1free
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    MessageSendEvent_clone_ptr
+ * Signature: (J)J
  */
-JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MessageSendEvent_1free
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_MessageSendEvent_1clone_1ptr
   (JNIEnv *, jclass, jlong);
 
 /*
@@ -9591,6 +10799,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_EventHandler_1free
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_APIError_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    APIError_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_APIError_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    APIError_clone
@@ -9743,6 +10959,110 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Level_1hash
 JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_Level_1max
   (JNIEnv *, jclass);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Record_free
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Record_1free
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Record_get_level
+ * Signature: (J)Lorg/ldk/enums/Level;
+ */
+JNIEXPORT jobject JNICALL Java_org_ldk_impl_bindings_Record_1get_1level
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Record_set_level
+ * Signature: (JLorg/ldk/enums/Level;)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Record_1set_1level
+  (JNIEnv *, jclass, jlong, jobject);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Record_get_args
+ * Signature: (J)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_org_ldk_impl_bindings_Record_1get_1args
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Record_set_args
+ * Signature: (JLjava/lang/String;)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Record_1set_1args
+  (JNIEnv *, jclass, jlong, jstring);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Record_get_module_path
+ * Signature: (J)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_org_ldk_impl_bindings_Record_1get_1module_1path
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Record_set_module_path
+ * Signature: (JLjava/lang/String;)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Record_1set_1module_1path
+  (JNIEnv *, jclass, jlong, jstring);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Record_get_file
+ * Signature: (J)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_org_ldk_impl_bindings_Record_1get_1file
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Record_set_file
+ * Signature: (JLjava/lang/String;)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Record_1set_1file
+  (JNIEnv *, jclass, jlong, jstring);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Record_get_line
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_org_ldk_impl_bindings_Record_1get_1line
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Record_set_line
+ * Signature: (JI)V
+ */
+JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Record_1set_1line
+  (JNIEnv *, jclass, jlong, jint);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Record_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Record_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Record_clone
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Record_1clone
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    Logger_free
@@ -9815,6 +11135,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeConfig_1set_1o
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeConfig_1new
   (JNIEnv *, jclass, jint, jshort, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ChannelHandshakeConfig_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeConfig_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    ChannelHandshakeConfig_clone
@@ -9975,6 +11303,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeLimits_1set_1t
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeLimits_1new
   (JNIEnv *, jclass, jlong, jlong, jlong, jlong, jshort, jint, jboolean, jshort);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ChannelHandshakeLimits_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelHandshakeLimits_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    ChannelHandshakeLimits_clone
@@ -10119,6 +11455,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelConfig_1set_1force_1clo
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelConfig_1new
   (JNIEnv *, jclass, jint, jint, jshort, jboolean, jboolean, jlong, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ChannelConfig_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelConfig_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    ChannelConfig_clone
@@ -10231,6 +11575,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UserConfig_1set_1accept_1forwa
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_UserConfig_1new
   (JNIEnv *, jclass, jlong, jlong, jlong, jboolean);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    UserConfig_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_UserConfig_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    UserConfig_clone
@@ -10255,6 +11607,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_UserConfig_1default
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BestBlock_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    BestBlock_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_BestBlock_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    BestBlock_clone
@@ -10447,6 +11807,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_WatchedOutput_1set_1script_1pu
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_WatchedOutput_1new
   (JNIEnv *, jclass, jbyteArray, jlong, jbyteArray);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    WatchedOutput_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_WatchedOutput_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    WatchedOutput_clone
@@ -10527,6 +11895,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_FeeEstimator_1free
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MonitorUpdateId_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    MonitorUpdateId_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_MonitorUpdateId_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    MonitorUpdateId_clone
@@ -10671,6 +12047,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelMonitorUpdate_1get_1up
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMonitorUpdate_1set_1update_1id
   (JNIEnv *, jclass, jlong, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ChannelMonitorUpdate_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelMonitorUpdate_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    ChannelMonitorUpdate_clone
@@ -10727,6 +12111,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MonitorUpdateError_1set_1a
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_MonitorUpdateError_1new
   (JNIEnv *, jclass, jstring);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    MonitorUpdateError_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_MonitorUpdateError_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    MonitorUpdateError_clone
@@ -10743,6 +12135,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_MonitorUpdateError_1clone
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MonitorEvent_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    MonitorEvent_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_MonitorEvent_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    MonitorEvent_clone
@@ -10791,6 +12191,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_MonitorEvent_1update_1failed
 JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_MonitorEvent_1write
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    MonitorEvent_read
+ * Signature: ([B)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_MonitorEvent_1read
+  (JNIEnv *, jclass, jbyteArray);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    HTLCUpdate_free
@@ -10799,6 +12207,14 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_MonitorEvent_1write
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_HTLCUpdate_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    HTLCUpdate_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_HTLCUpdate_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    HTLCUpdate_clone
@@ -10831,6 +12247,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_HTLCUpdate_1read
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Balance_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Balance_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Balance_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    Balance_clone
@@ -10887,6 +12311,14 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Balance_1eq
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ChannelMonitor_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelMonitor_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    ChannelMonitor_clone
@@ -11087,6 +12519,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OutPoint_1set_1index
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_OutPoint_1new
   (JNIEnv *, jclass, jbyteArray, jshort);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    OutPoint_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_OutPoint_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    OutPoint_clone
@@ -11255,6 +12695,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1new
   (JNIEnv *, jclass, jlong, jbyteArray, jshort, jlong, jbyteArray, jbyteArray, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    DelayedPaymentOutputDescriptor_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_DelayedPaymentOutputDescriptor_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    DelayedPaymentOutputDescriptor_clone
@@ -11351,6 +12799,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1new
   (JNIEnv *, jclass, jlong, jlong, jbyteArray, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    StaticPaymentOutputDescriptor_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    StaticPaymentOutputDescriptor_clone
@@ -11383,6 +12839,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_StaticPaymentOutputDescriptor
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    SpendableOutputDescriptor_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    SpendableOutputDescriptor_clone
@@ -11439,6 +12903,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_SpendableOutputDescriptor_1re
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BaseSign_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Sign_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Sign_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    Sign_clone
@@ -11567,6 +13039,14 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1get_1com
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1set_1commitment_1seed
   (JNIEnv *, jclass, jlong, jbyteArray);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    InMemorySigner_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_InMemorySigner_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    InMemorySigner_clone
@@ -11775,6 +13255,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChainParameters_1set_1best_1bl
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChainParameters_1new
   (JNIEnv *, jclass, jobject, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ChainParameters_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChainParameters_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    ChainParameters_clone
@@ -11847,6 +13335,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CounterpartyForwardingInfo_1se
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CounterpartyForwardingInfo_1new
   (JNIEnv *, jclass, jint, jint, jshort);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CounterpartyForwardingInfo_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CounterpartyForwardingInfo_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CounterpartyForwardingInfo_clone
@@ -11935,6 +13431,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelCounterparty_1set_1forw
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelCounterparty_1new
   (JNIEnv *, jclass, jbyteArray, jlong, jlong, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ChannelCounterparty_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelCounterparty_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    ChannelCounterparty_clone
@@ -12199,6 +13703,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1set_1is_1publi
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1new
   (JNIEnv *, jclass, jbyteArray, jlong, jlong, jlong, jlong, jlong, jlong, jlong, jlong, jlong, jlong, jboolean, jboolean, jboolean, jboolean);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ChannelDetails_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    ChannelDetails_clone
@@ -12215,6 +13727,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelDetails_1clone
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentSendFailure_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    PaymentSendFailure_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_PaymentSendFailure_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    PaymentSendFailure_clone
@@ -12623,6 +14143,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_C2Tuple_1BlockHashChannelMana
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DecodeError_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    DecodeError_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_DecodeError_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    DecodeError_clone
@@ -12663,6 +14191,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Init_1set_1features
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Init_1new
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Init_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Init_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    Init_clone
@@ -12716,8 +14252,16 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ErrorMessage_1set_1data
  * Method:    ErrorMessage_new
  * Signature: ([BLjava/lang/String;)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ErrorMessage_1new
-  (JNIEnv *, jclass, jbyteArray, jstring);
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ErrorMessage_1new
+  (JNIEnv *, jclass, jbyteArray, jstring);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ErrorMessage_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ErrorMessage_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
@@ -12775,6 +14319,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Ping_1set_1byteslen
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Ping_1new
   (JNIEnv *, jclass, jshort, jshort);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Ping_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Ping_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    Ping_clone
@@ -12815,6 +14367,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Pong_1set_1byteslen
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Pong_1new
   (JNIEnv *, jclass, jshort);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Pong_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Pong_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    Pong_clone
@@ -13119,6 +14679,14 @@ JNIEXPORT jbyte JNICALL Java_org_ldk_impl_bindings_OpenChannel_1get_1channel_1fl
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_OpenChannel_1set_1channel_1flags
   (JNIEnv *, jclass, jlong, jbyte);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    OpenChannel_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_OpenChannel_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    OpenChannel_clone
@@ -13359,6 +14927,14 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1get_1firs
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1set_1first_1per_1commitment_1point
   (JNIEnv *, jclass, jlong, jbyteArray);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    AcceptChannel_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_AcceptChannel_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    AcceptChannel_clone
@@ -13447,6 +15023,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_FundingCreated_1set_1signature
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_FundingCreated_1new
   (JNIEnv *, jclass, jbyteArray, jbyteArray, jshort, jbyteArray);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    FundingCreated_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_FundingCreated_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    FundingCreated_clone
@@ -13503,6 +15087,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_FundingSigned_1set_1signature
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_FundingSigned_1new
   (JNIEnv *, jclass, jbyteArray, jbyteArray);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    FundingSigned_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_FundingSigned_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    FundingSigned_clone
@@ -13559,6 +15151,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_FundingLocked_1set_1next_1per_
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_FundingLocked_1new
   (JNIEnv *, jclass, jbyteArray, jbyteArray);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    FundingLocked_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_FundingLocked_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    FundingLocked_clone
@@ -13615,6 +15215,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Shutdown_1set_1scriptpubkey
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Shutdown_1new
   (JNIEnv *, jclass, jbyteArray, jbyteArray);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Shutdown_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Shutdown_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    Shutdown_clone
@@ -13671,6 +15279,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ClosingSignedFeeRange_1set_1ma
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ClosingSignedFeeRange_1new
   (JNIEnv *, jclass, jlong, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ClosingSignedFeeRange_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ClosingSignedFeeRange_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    ClosingSignedFeeRange_clone
@@ -13759,6 +15375,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ClosingSigned_1set_1fee_1range
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ClosingSigned_1new
   (JNIEnv *, jclass, jbyteArray, jlong, jbyteArray, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ClosingSigned_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ClosingSigned_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    ClosingSigned_clone
@@ -13855,6 +15479,14 @@ JNIEXPORT jint JNICALL Java_org_ldk_impl_bindings_UpdateAddHTLC_1get_1cltv_1expi
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UpdateAddHTLC_1set_1cltv_1expiry
   (JNIEnv *, jclass, jlong, jint);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    UpdateAddHTLC_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_UpdateAddHTLC_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    UpdateAddHTLC_clone
@@ -13927,6 +15559,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UpdateFulfillHTLC_1set_1paymen
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_UpdateFulfillHTLC_1new
   (JNIEnv *, jclass, jbyteArray, jlong, jbyteArray);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    UpdateFulfillHTLC_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_UpdateFulfillHTLC_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    UpdateFulfillHTLC_clone
@@ -13975,6 +15615,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_UpdateFailHTLC_1get_1htlc_1id
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UpdateFailHTLC_1set_1htlc_1id
   (JNIEnv *, jclass, jlong, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    UpdateFailHTLC_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_UpdateFailHTLC_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    UpdateFailHTLC_clone
@@ -14039,6 +15687,14 @@ JNIEXPORT jshort JNICALL Java_org_ldk_impl_bindings_UpdateFailMalformedHTLC_1get
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UpdateFailMalformedHTLC_1set_1failure_1code
   (JNIEnv *, jclass, jlong, jshort);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    UpdateFailMalformedHTLC_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_UpdateFailMalformedHTLC_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    UpdateFailMalformedHTLC_clone
@@ -14103,6 +15759,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CommitmentSigned_1set_1htlc_1s
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CommitmentSigned_1new
   (JNIEnv *, jclass, jbyteArray, jbyteArray, jobjectArray);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CommitmentSigned_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CommitmentSigned_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CommitmentSigned_clone
@@ -14175,6 +15839,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RevokeAndACK_1set_1next_1per_1
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_RevokeAndACK_1new
   (JNIEnv *, jclass, jbyteArray, jbyteArray, jbyteArray);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    RevokeAndACK_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_RevokeAndACK_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    RevokeAndACK_clone
@@ -14231,6 +15903,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UpdateFee_1set_1feerate_1per_1
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_UpdateFee_1new
   (JNIEnv *, jclass, jbyteArray, jint);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    UpdateFee_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_UpdateFee_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    UpdateFee_clone
@@ -14287,6 +15967,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DataLossProtect_1set_1my_1curr
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_DataLossProtect_1new
   (JNIEnv *, jclass, jbyteArray, jbyteArray);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    DataLossProtect_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_DataLossProtect_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    DataLossProtect_clone
@@ -14351,6 +16039,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelReestablish_1get_1next
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelReestablish_1set_1next_1remote_1commitment_1number
   (JNIEnv *, jclass, jlong, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ChannelReestablish_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelReestablish_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    ChannelReestablish_clone
@@ -14439,6 +16135,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_AnnouncementSignatures_1set_1b
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_AnnouncementSignatures_1new
   (JNIEnv *, jclass, jbyteArray, jlong, jbyteArray, jbyteArray);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    AnnouncementSignatures_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_AnnouncementSignatures_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    AnnouncementSignatures_clone
@@ -14455,6 +16159,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_AnnouncementSignatures_1clone
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NetAddress_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    NetAddress_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_NetAddress_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    NetAddress_clone
@@ -14607,6 +16319,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedNodeAnnouncement_1set_
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedNodeAnnouncement_1set_1addresses
   (JNIEnv *, jclass, jlong, jlongArray);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    UnsignedNodeAnnouncement_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_UnsignedNodeAnnouncement_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    UnsignedNodeAnnouncement_clone
@@ -14663,6 +16383,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncement_1set_1content
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_NodeAnnouncement_1new
   (JNIEnv *, jclass, jbyteArray, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    NodeAnnouncement_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_NodeAnnouncement_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    NodeAnnouncement_clone
@@ -14791,6 +16519,14 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_UnsignedChannelAnnouncem
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedChannelAnnouncement_1set_1bitcoin_1key_12
   (JNIEnv *, jclass, jlong, jbyteArray);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    UnsignedChannelAnnouncement_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_UnsignedChannelAnnouncement_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    UnsignedChannelAnnouncement_clone
@@ -14895,6 +16631,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelAnnouncement_1set_1cont
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelAnnouncement_1new
   (JNIEnv *, jclass, jbyteArray, jbyteArray, jbyteArray, jbyteArray, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ChannelAnnouncement_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelAnnouncement_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    ChannelAnnouncement_clone
@@ -15039,6 +16783,14 @@ JNIEXPORT jint JNICALL Java_org_ldk_impl_bindings_UnsignedChannelUpdate_1get_1fe
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_UnsignedChannelUpdate_1set_1fee_1proportional_1millionths
   (JNIEnv *, jclass, jlong, jint);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    UnsignedChannelUpdate_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_UnsignedChannelUpdate_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    UnsignedChannelUpdate_clone
@@ -15095,6 +16847,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelUpdate_1set_1contents
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelUpdate_1new
   (JNIEnv *, jclass, jbyteArray, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ChannelUpdate_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelUpdate_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    ChannelUpdate_clone
@@ -15167,6 +16927,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_QueryChannelRange_1set_1number
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_QueryChannelRange_1new
   (JNIEnv *, jclass, jbyteArray, jint, jint);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    QueryChannelRange_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_QueryChannelRange_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    QueryChannelRange_clone
@@ -15263,6 +17031,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ReplyChannelRange_1set_1short_
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ReplyChannelRange_1new
   (JNIEnv *, jclass, jbyteArray, jint, jint, jboolean, jlongArray);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ReplyChannelRange_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ReplyChannelRange_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    ReplyChannelRange_clone
@@ -15311,6 +17087,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_QueryShortChannelIds_1set_1sho
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_QueryShortChannelIds_1new
   (JNIEnv *, jclass, jbyteArray, jlongArray);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    QueryShortChannelIds_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_QueryShortChannelIds_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    QueryShortChannelIds_clone
@@ -15367,6 +17151,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ReplyShortChannelIdsEnd_1set_1
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ReplyShortChannelIdsEnd_1new
   (JNIEnv *, jclass, jbyteArray, jboolean);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ReplyShortChannelIdsEnd_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ReplyShortChannelIdsEnd_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    ReplyShortChannelIdsEnd_clone
@@ -15439,6 +17231,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_GossipTimestampFilter_1set_1ti
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_GossipTimestampFilter_1new
   (JNIEnv *, jclass, jbyteArray, jint, jint);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    GossipTimestampFilter_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_GossipTimestampFilter_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    GossipTimestampFilter_clone
@@ -15455,6 +17255,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_GossipTimestampFilter_1clone
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ErrorAction_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ErrorAction_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ErrorAction_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    ErrorAction_clone
@@ -15543,6 +17351,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_LightningError_1set_1action
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LightningError_1new
   (JNIEnv *, jclass, jstring, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    LightningError_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_LightningError_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    LightningError_clone
@@ -15663,6 +17479,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1set_1commitm
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1new
   (JNIEnv *, jclass, jlongArray, jlongArray, jlongArray, jlongArray, jlong, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CommitmentUpdate_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CommitmentUpdate_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CommitmentUpdate_clone
@@ -16343,6 +18167,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MessageHandler_1set_1route_1ha
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_MessageHandler_1new
   (JNIEnv *, jclass, jlong, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    SocketDescriptor_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_SocketDescriptor_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    SocketDescriptor_clone
@@ -16391,6 +18223,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PeerHandleError_1set_1no_1conn
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_PeerHandleError_1new
   (JNIEnv *, jclass, jboolean);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    PeerHandleError_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_PeerHandleError_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    PeerHandleError_clone
@@ -16639,6 +18479,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_TxCreationKeys_1set_1broadcast
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_TxCreationKeys_1new
   (JNIEnv *, jclass, jbyteArray, jbyteArray, jbyteArray, jbyteArray, jbyteArray);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    TxCreationKeys_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_TxCreationKeys_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    TxCreationKeys_clone
@@ -16759,6 +18607,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelPublicKeys_1set_1htlc_1
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelPublicKeys_1new
   (JNIEnv *, jclass, jbyteArray, jbyteArray, jbyteArray, jbyteArray, jbyteArray);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ChannelPublicKeys_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelPublicKeys_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    ChannelPublicKeys_clone
@@ -16903,6 +18759,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_HTLCOutputInCommitment_1set_1t
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_HTLCOutputInCommitment_1new
   (JNIEnv *, jclass, jboolean, jlong, jint, jbyteArray, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    HTLCOutputInCommitment_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_HTLCOutputInCommitment_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    HTLCOutputInCommitment_clone
@@ -17047,6 +18911,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelTransactionParameters_1
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelTransactionParameters_1new
   (JNIEnv *, jclass, jlong, jshort, jboolean, jlong, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ChannelTransactionParameters_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelTransactionParameters_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    ChannelTransactionParameters_clone
@@ -17100,8 +18972,16 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CounterpartyChannelTransaction
  * Method:    CounterpartyChannelTransactionParameters_new
  * Signature: (JS)J
  */
-JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CounterpartyChannelTransactionParameters_1new
-  (JNIEnv *, jclass, jlong, jshort);
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CounterpartyChannelTransactionParameters_1new
+  (JNIEnv *, jclass, jlong, jshort);
+
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CounterpartyChannelTransactionParameters_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CounterpartyChannelTransactionParameters_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
 
 /*
  * Class:     org_ldk_impl_bindings
@@ -17247,6 +19127,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_HolderCommitmentTransaction_1s
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_HolderCommitmentTransaction_1set_1counterparty_1htlc_1sigs
   (JNIEnv *, jclass, jlong, jobjectArray);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    HolderCommitmentTransaction_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_HolderCommitmentTransaction_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    HolderCommitmentTransaction_clone
@@ -17327,6 +19215,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_BuiltCommitmentTransaction_1se
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_BuiltCommitmentTransaction_1new
   (JNIEnv *, jclass, jbyteArray, jbyteArray);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    BuiltCommitmentTransaction_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_BuiltCommitmentTransaction_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    BuiltCommitmentTransaction_clone
@@ -17375,6 +19271,14 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_BuiltCommitmentTransacti
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ClosingTransaction_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ClosingTransaction_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ClosingTransaction_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    ClosingTransaction_clone
@@ -17487,6 +19391,14 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_TrustedClosingTransactio
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CommitmentTransaction_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    CommitmentTransaction_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_CommitmentTransaction_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    CommitmentTransaction_clone
@@ -17639,6 +19551,14 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ChannelFeatures_1eq
 JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_InvoiceFeatures_1eq
   (JNIEnv *, jclass, jlong, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    InitFeatures_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_InitFeatures_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    InitFeatures_clone
@@ -17647,6 +19567,14 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_InvoiceFeatures_1eq
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_InitFeatures_1clone
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    NodeFeatures_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_NodeFeatures_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    NodeFeatures_clone
@@ -17655,6 +19583,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_InitFeatures_1clone
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_NodeFeatures_1clone
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ChannelFeatures_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelFeatures_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    ChannelFeatures_clone
@@ -17663,6 +19599,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_NodeFeatures_1clone
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelFeatures_1clone
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    InvoiceFeatures_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_InvoiceFeatures_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    InvoiceFeatures_clone
@@ -17895,6 +19839,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_InvoiceFeatures_1read
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ShutdownScript_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ShutdownScript_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ShutdownScript_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    ShutdownScript_clone
@@ -17935,6 +19887,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InvalidShutdownScript_1set_1sc
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_InvalidShutdownScript_1new
   (JNIEnv *, jclass, jbyteArray);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    InvalidShutdownScript_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_InvalidShutdownScript_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    InvalidShutdownScript_clone
@@ -18015,6 +19975,14 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_ShutdownScript_1is_1compat
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_CustomMessageReader_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Type_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Type_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    Type_clone
@@ -18071,6 +20039,14 @@ JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_LockableScore_1write
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeId_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    NodeId_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_NodeId_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    NodeId_clone
@@ -18127,6 +20103,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_NodeId_1read
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    NetworkGraph_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_NetworkGraph_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    NetworkGraph_clone
@@ -18151,6 +20135,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ReadOnlyNetworkGraph_1free
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NetworkUpdate_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    NetworkUpdate_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_NetworkUpdate_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    NetworkUpdate_clone
@@ -18191,6 +20183,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_NetworkUpdate_1node_1failure
 JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_NetworkUpdate_1write
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    NetworkUpdate_read
+ * Signature: ([B)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_NetworkUpdate_1read
+  (JNIEnv *, jclass, jbyteArray);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    NetGraphMsgHandler_as_EventHandler
@@ -18367,6 +20367,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_DirectionalChannelInfo_1set_1l
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_DirectionalChannelInfo_1new
   (JNIEnv *, jclass, jint, jboolean, jshort, jlong, jlong, jlong, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    DirectionalChannelInfo_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_DirectionalChannelInfo_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    DirectionalChannelInfo_clone
@@ -18519,6 +20527,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1set_1announcement
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1new
   (JNIEnv *, jclass, jlong, jlong, jlong, jlong, jlong, jlong, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ChannelInfo_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ChannelInfo_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    ChannelInfo_clone
@@ -18599,6 +20615,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_RoutingFees_1new
 JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_RoutingFees_1eq
   (JNIEnv *, jclass, jlong, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    RoutingFees_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_RoutingFees_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    RoutingFees_clone
@@ -18735,6 +20759,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1set_1ann
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1new
   (JNIEnv *, jclass, jlong, jint, jbyteArray, jbyteArray, jlongArray, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    NodeAnnouncementInfo_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_NodeAnnouncementInfo_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    NodeAnnouncementInfo_clone
@@ -18815,6 +20847,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_NodeInfo_1set_1announcement_1i
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_NodeInfo_1new
   (JNIEnv *, jclass, jlongArray, jlong, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    NodeInfo_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_NodeInfo_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    NodeInfo_clone
@@ -19055,6 +21095,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHop_1set_1cltv_1expiry_1d
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_RouteHop_1new
   (JNIEnv *, jclass, jbyteArray, jlong, jlong, jlong, jlong, jint);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    RouteHop_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_RouteHop_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    RouteHop_clone
@@ -19143,6 +21191,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Route_1set_1payee
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Route_1new
   (JNIEnv *, jclass, jobjectArray, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Route_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Route_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    Route_clone
@@ -19263,6 +21319,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteParameters_1set_1final_1c
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_RouteParameters_1new
   (JNIEnv *, jclass, jlong, jlong, jint);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    RouteParameters_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_RouteParameters_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    RouteParameters_clone
@@ -19367,6 +21431,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Payee_1set_1expiry_1time
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Payee_1new
   (JNIEnv *, jclass, jbyteArray, jlong, jlongArray, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Payee_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Payee_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    Payee_clone
@@ -19455,6 +21527,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHint_1set_1a
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_RouteHint_1new
   (JNIEnv *, jclass, jlongArray);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    RouteHint_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_RouteHint_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    RouteHint_clone
@@ -19607,6 +21687,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1set_1htlc_1maxim
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1new
   (JNIEnv *, jclass, jbyteArray, jlong, jlong, jshort, jlong, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    RouteHintHop_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_RouteHintHop_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    RouteHintHop_clone
@@ -19903,6 +21991,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Invoice_1free
 JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Invoice_1eq
   (JNIEnv *, jclass, jlong, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Invoice_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Invoice_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    Invoice_clone
@@ -19927,6 +22023,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_SignedRawInvoice_1free
 JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_SignedRawInvoice_1eq
   (JNIEnv *, jclass, jlong, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    SignedRawInvoice_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_SignedRawInvoice_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    SignedRawInvoice_clone
@@ -19967,6 +22071,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RawInvoice_1set_1data
 JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_RawInvoice_1eq
   (JNIEnv *, jclass, jlong, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    RawInvoice_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_RawInvoice_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    RawInvoice_clone
@@ -20007,6 +22119,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RawDataPart_1set_1timestamp
 JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_RawDataPart_1eq
   (JNIEnv *, jclass, jlong, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    RawDataPart_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_RawDataPart_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    RawDataPart_clone
@@ -20031,6 +22151,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PositiveTimestamp_1free
 JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_PositiveTimestamp_1eq
   (JNIEnv *, jclass, jlong, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    PositiveTimestamp_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_PositiveTimestamp_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    PositiveTimestamp_clone
@@ -20167,6 +22295,14 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Currency_1eq
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Sha256_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Sha256_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Sha256_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    Sha256_clone
@@ -20199,6 +22335,14 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Sha256_1eq
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Description_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Description_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Description_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    Description_clone
@@ -20255,6 +22399,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PayeePubKey_1set_1a
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_PayeePubKey_1new
   (JNIEnv *, jclass, jbyteArray);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    PayeePubKey_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_PayeePubKey_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    PayeePubKey_clone
@@ -20287,6 +22439,14 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_PayeePubKey_1eq
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_ExpiryTime_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    ExpiryTime_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_ExpiryTime_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    ExpiryTime_clone
@@ -20343,6 +22503,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_MinFinalCltvExpiry_1set_1a
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_MinFinalCltvExpiry_1new
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    MinFinalCltvExpiry_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_MinFinalCltvExpiry_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    MinFinalCltvExpiry_clone
@@ -20375,6 +22543,14 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_MinFinalCltvExpiry_1eq
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_Fallback_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    Fallback_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_Fallback_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    Fallback_clone
@@ -20431,6 +22607,14 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_Fallback_1eq
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_InvoiceSignature_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    InvoiceSignature_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_InvoiceSignature_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    InvoiceSignature_clone
@@ -20455,6 +22639,14 @@ JNIEXPORT jboolean JNICALL Java_org_ldk_impl_bindings_InvoiceSignature_1eq
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PrivateRoute_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    PrivateRoute_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_PrivateRoute_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    PrivateRoute_clone
@@ -21015,6 +23207,14 @@ JNIEXPORT jstring JNICALL Java_org_ldk_impl_bindings_SemanticError_1to_1str
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_SignOrCreationError_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    SignOrCreationError_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_SignOrCreationError_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    SignOrCreationError_clone
@@ -21111,6 +23311,14 @@ JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_RetryAttempts_1set_1a
 JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_RetryAttempts_1new
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    RetryAttempts_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_RetryAttempts_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    RetryAttempts_clone
@@ -21143,6 +23351,14 @@ JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_RetryAttempts_1hash
 JNIEXPORT void JNICALL Java_org_ldk_impl_bindings_PaymentError_1free
   (JNIEnv *, jclass, jlong);
 
+/*
+ * Class:     org_ldk_impl_bindings
+ * Method:    PaymentError_clone_ptr
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_ldk_impl_bindings_PaymentError_1clone_1ptr
+  (JNIEnv *, jclass, jlong);
+
 /*
  * Class:     org_ldk_impl_bindings
  * Method:    PaymentError_clone
index a123b6e31b270cfcb1820b8adb62425ecf34e5bf..80c7cf61e1e5dd8bc6c986bdb8432fdbc8e40745 100644 (file)
@@ -7,6 +7,7 @@ import org.ldk.batteries.ChannelManagerConstructor;
 import org.ldk.batteries.NioPeerHandler;
 import org.ldk.enums.AccessError;
 import org.ldk.enums.Currency;
+import org.ldk.enums.Level;
 import org.ldk.enums.Network;
 import org.ldk.structs.*;
 import org.ldk.util.TwoTuple;
@@ -174,7 +175,7 @@ class HumanObjectPeerTestInstance {
         NetGraphMsgHandler route_handler;
         final Watch chain_watch;
         final HashSet<String> filter_additions;
-        final Option_FilterZ filter;
+        Option_FilterZ filter;
         ChannelManager chan_manager;
         PeerManager peer_manager;
         final HashMap<String, ChannelMonitor> monitors; // Wow I forgot just how terrible Java is - we can't put a byte array here.
@@ -201,7 +202,12 @@ class HumanObjectPeerTestInstance {
         }
 
         private Peer(Object _dummy, byte seed) {
-            logger = Logger.new_impl((String arg) -> System.out.println(seed + ": " + arg));
+            logger = Logger.new_impl((Record arg)->{
+                if (arg.get_level() == Level.LDKLevel_Error)
+                    System.err.println(seed + ": " + arg.get_module_path() + " - " + arg.get_args());
+                else
+                    System.out.println(seed + ": " + arg.get_module_path() + " - " + arg.get_args());
+            });
             fee_estimator = FeeEstimator.new_impl((confirmation_target -> 253));
             tx_broadcaster = BroadcasterInterface.new_impl(tx -> {
                 synchronized (broadcast_set) {
@@ -387,6 +393,7 @@ class HumanObjectPeerTestInstance {
             }
 
             this.node_id = chan_manager.get_our_node_id();
+            this.filter = null;
             bind_nio();
             System.gc();
         }
@@ -403,11 +410,13 @@ class HumanObjectPeerTestInstance {
                         filter_nullable = ((Option_FilterZ.Some) this.filter).some;
                     }
                     if (use_ignore_handler) {
-                        this.constructor = new ChannelManagerConstructor(serialized, monitors, this.keys_interface,
-                                this.fee_estimator, this.chain_monitor, filter_nullable, null, this.tx_broadcaster, this.logger);
+                        this.constructor = new ChannelManagerConstructor(serialized, monitors, UserConfig.with_default(),
+                                this.keys_interface, this.fee_estimator, this.chain_monitor, filter_nullable,
+                                null, this.tx_broadcaster, this.logger);
                     } else {
-                        this.constructor = new ChannelManagerConstructor(serialized, monitors, this.keys_interface,
-                                this.fee_estimator, this.chain_monitor, filter_nullable, this.router, this.tx_broadcaster, this.logger);
+                        this.constructor = new ChannelManagerConstructor(serialized, monitors, UserConfig.with_default(),
+                                this.keys_interface, this.fee_estimator, this.chain_monitor, filter_nullable,
+                                this.router, this.tx_broadcaster, this.logger);
                     }
                     LockableScore scorer = null;
                     if (use_invoice_payer) { scorer = LockableScore.of(Scorer.with_default().as_Score()); }
@@ -493,6 +502,7 @@ class HumanObjectPeerTestInstance {
                 // the ChannelSigner.
                 this.ptr_to = orig.chan_manager;
             }
+            this.filter = null;
         }
 
         TwoTuple_TxidCVec_C2Tuple_u32TxOutZZZ[] connect_block(Block b, int height, long expected_monitor_update_len) {
@@ -1021,6 +1031,8 @@ class HumanObjectPeerTestInstance {
 
         t.interrupt();
 
+        state.peer1.router.write();
+
         // Construct the only Option_Enum::Variant(OpaqueStruct) we have in the codebase as this used to cause double-frees:
         byte[] serd = new byte[] {(byte)0xd9,(byte)0x77,(byte)0xcb,(byte)0x9b,(byte)0x53,(byte)0xd9,(byte)0x3a,(byte)0x6f,(byte)0xf6,(byte)0x4b,(byte)0xb5,(byte)0xf1,(byte)0xe1,(byte)0x58,(byte)0xb4,(byte)0x09,(byte)0x4b,(byte)0x66,(byte)0xe7,(byte)0x98,(byte)0xfb,(byte)0x12,(byte)0x91,(byte)0x11,(byte)0x68,(byte)0xa3,(byte)0xcc,(byte)0xdf,(byte)0x80,(byte)0xa8,(byte)0x30,(byte)0x96,(byte)0x34,(byte)0x0a,(byte)0x6a,(byte)0x95,(byte)0xda,(byte)0x0a,(byte)0xe8,(byte)0xd9,(byte)0xf7,(byte)0x76,(byte)0x52,(byte)0x8e,(byte)0xec,(byte)0xdb,(byte)0xb7,(byte)0x47,(byte)0xeb,(byte)0x6b,(byte)0x54,(byte)0x54,(byte)0x95,(byte)0xa4,(byte)0x31,(byte)0x9e,(byte)0xd5,(byte)0x37,(byte)0x8e,(byte)0x35,(byte)0xb2,(byte)0x1e,(byte)0x07,(byte)0x3a,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x19,(byte)0xd6,(byte)0x68,(byte)0x9c,(byte)0x08,(byte)0x5a,(byte)0xe1,(byte)0x65,(byte)0x83,(byte)0x1e,(byte)0x93,(byte)0x4f,(byte)0xf7,(byte)0x63,(byte)0xae,(byte)0x46,(byte)0xa2,(byte)0xa6,(byte)0xc1,(byte)0x72,(byte)0xb3,(byte)0xf1,(byte)0xb6,(byte)0x0a,(byte)0x8c,(byte)0xe2,(byte)0x6f,(byte)0x00,(byte)0x08,(byte)0x3a,(byte)0x84,(byte)0x00,(byte)0x00,(byte)0x03,(byte)0x4d,(byte)0x01,(byte)0x34,(byte)0x13,(byte)0xa7,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x90,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x0f,(byte)0x42,(byte)0x40,(byte)0x00,(byte)0x00,(byte)0x27,(byte)0x10,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x14,};
         Result_ChannelUpdateDecodeErrorZ upd_msg = ChannelUpdate.read(serd);
index 90320d4bc32e1b806a872683dc760703bd1443da..ed01a847a3635e642a7bc95ba8081953920d4b9b 100644 (file)
@@ -3,12 +3,14 @@ package org.ldk;
 import org.junit.jupiter.api.Test;
 import org.ldk.impl.bindings;
 import org.ldk.enums.*;
+import org.ldk.structs.Record;
 
 public class ManualMsgHandlingPeerTest {
     @Test
     void test_message_handler() {
-        long logger = bindings.LDKLogger_new((String arg)->{
-            System.out.println(arg);
+        long logger = bindings.LDKLogger_new((long arg)->{
+            System.out.println(bindings.Record_get_args(arg));
+            bindings.Record_free(arg);
         });
         long chan_handler = bindings.LDKChannelMessageHandler_new(new bindings.LDKChannelMessageHandler() {
             @Override
index 8dc85de0d5c1eea676d3d9126dce32860639d05e..28b5c75e3dab42f0539ccd3fc21eaf1fe0dd7402 100644 (file)
@@ -35,17 +35,18 @@ public class PeerTest {
         bindings.LDKBroadcasterInterface broad_trait;
         bindings.LDKLogger log_trait;
         bindings.LDKWatch watcher;
-        ArrayList<Long> results_to_free;
 
         Peer(byte seed) {
-            this.log_trait = (String arg)-> System.out.println(seed + ": " + arg);
+            this.log_trait = (long arg) -> {
+                System.out.println(seed + ": " + bindings.Record_get_args(arg));
+                bindings.Record_free(arg);
+            };
             logger = bindings.LDKLogger_new(this.log_trait);
             this.fee_est = confirmation_target -> 0;
             this.fee_estimator = bindings.LDKFeeEstimator_new(this.fee_est);
             this.broad_trait = tx -> {
                 // We should broadcast
             };
-            this.results_to_free = new ArrayList<>();
             this.tx_broadcaster = bindings.LDKBroadcasterInterface_new(this.broad_trait);
             this.monitors = new HashMap<>();
             this.watcher = new bindings.LDKWatch() {
@@ -55,9 +56,7 @@ public class PeerTest {
                         assert monitors.put(Arrays.toString(bindings.OutPoint_get_txid(funding_txo)), monitor) == null;
                     }
                     bindings.OutPoint_free(funding_txo);
-                    long res = bindings.CResult_NoneChannelMonitorUpdateErrZ_ok();
-                    results_to_free.add(res);
-                    return res;
+                    return bindings.CResult_NoneChannelMonitorUpdateErrZ_ok();
                 }
 
                 @Override
@@ -66,14 +65,12 @@ public class PeerTest {
                         String txid = Arrays.toString(bindings.OutPoint_get_txid(funding_txo));
                         assert monitors.containsKey(txid);
                         long update_res = bindings.ChannelMonitor_update_monitor(monitors.get(txid), update, tx_broadcaster, fee_estimator, logger);
-                        assert bindings.LDKCResult_NoneMonitorUpdateErrorZ_result_ok(update_res);
+                        assert bindings.CResult_NoneMonitorUpdateErrorZ_is_ok(update_res);
                         bindings.CResult_NoneMonitorUpdateErrorZ_free(update_res);
                     }
                     bindings.OutPoint_free(funding_txo);
                     bindings.ChannelMonitorUpdate_free(update);
-                    long res = bindings.CResult_NoneChannelMonitorUpdateErrZ_ok();
-                    results_to_free.add(res);
-                    return res;
+                    return bindings.CResult_NoneChannelMonitorUpdateErrZ_ok();
                 }
 
                 @Override
@@ -154,9 +151,6 @@ public class PeerTest {
                     bindings.ChannelMonitor_free(mon);
                 }
             }
-            for (Long res : results_to_free) {
-                bindings.CResult_NoneChannelMonitorUpdateErrZ_free(res);
-            }
         }
     }
 
@@ -165,7 +159,7 @@ public class PeerTest {
     void do_read_event(ConcurrentLinkedQueue<Thread> list, long pm, long descriptor, byte[] arr) {
         Thread thread = new Thread(() -> {
             long res = bindings.PeerManager_read_event(pm, descriptor, arr);
-            assert bindings.LDKCResult_boolPeerHandleErrorZ_result_ok(res);
+            assert bindings.CResult_boolPeerHandleErrorZ_is_ok(res);
             //assert bindings.deref_bool(bindings.LDKCResult_boolPeerHandleErrorZ_get_inner(res));
             bindings.CResult_boolPeerHandleErrorZ_free(res);
         });
@@ -218,10 +212,10 @@ public class PeerTest {
         descriptor1.val = bindings.LDKSocketDescriptor_new(sock2);
 
         long init_vec = bindings.PeerManager_new_outbound_connection(peer1.peer_manager, peer2.node_id, descriptor1.val);
-        assert(bindings.LDKCResult_CVec_u8ZPeerHandleErrorZ_result_ok(init_vec));
+        assert(bindings.CResult_CVec_u8ZPeerHandleErrorZ_is_ok(init_vec));
 
         long con_res = bindings.PeerManager_new_inbound_connection(peer2.peer_manager, descriptor2);
-        assert(bindings.LDKCResult_NonePeerHandleErrorZ_result_ok(con_res));
+        assert(bindings.CResult_NonePeerHandleErrorZ_is_ok(con_res));
         bindings.CResult_NonePeerHandleErrorZ_free(con_res);
         do_read_event(list, peer2.peer_manager, descriptor2, bindings.LDKCResult_CVec_u8ZPeerHandleErrorZ_get_ok(init_vec));
         bindings.CResult_CVec_u8ZPeerHandleErrorZ_free(init_vec);
@@ -229,7 +223,7 @@ public class PeerTest {
         deliver_peer_messages(list, peer1.peer_manager, peer2.peer_manager);
 
         long cc_res = bindings.ChannelManager_create_channel(peer1.chan_manager, peer2.node_id, 10000, 1000, 42, 0);
-        assert bindings.LDKCResult_NoneAPIErrorZ_result_ok(cc_res);
+        assert bindings.CResult_NoneAPIErrorZ_is_ok(cc_res);
         bindings.CResult_NoneAPIErrorZ_free(cc_res);
 
         deliver_peer_messages(list, peer1.peer_manager, peer2.peer_manager);
@@ -299,12 +293,12 @@ public class PeerTest {
         bindings.Scorer_free(scorer);
 
         for (long chan : peer1_chans) bindings.ChannelDetails_free(chan);
-        assert bindings.LDKCResult_RouteLightningErrorZ_result_ok(route);
+        assert bindings.CResult_RouteLightningErrorZ_is_ok(route);
         long payment_res = bindings.ChannelManager_send_payment(peer1.chan_manager, bindings.LDKCResult_RouteLightningErrorZ_get_ok(route),
                 bindings.C2Tuple_PaymentHashPaymentSecretZ_get_a(inbound_payment), bindings.C2Tuple_PaymentHashPaymentSecretZ_get_b(inbound_payment));
         bindings.CResult_RouteLightningErrorZ_free(route);
         bindings.C2Tuple_PaymentHashPaymentSecretZ_free(inbound_payment);
-        assert bindings.LDKCResult_NonePaymentSendFailureZ_result_ok(payment_res);
+        assert bindings.CResult_NonePaymentSendFailureZ_is_ok(payment_res);
         bindings.CResult_NonePaymentSendFailureZ_free(payment_res);
 
         deliver_peer_messages(list, peer1.peer_manager, peer2.peer_manager);
index e738038d7ab8e066df6b516a242c6eff3d3e73a3..a86ed7200aefb684626532eba9cdac9a59133bca 100644 (file)
@@ -22,6 +22,7 @@ void free(void *ptr);
 #define DO_ASSERT(a) (void)(a)
 #define CHECK(a)
 #define CHECK_ACCESS(p)
+#define CHECK_INNER_FIELD_ACCESS_OR_NULL(v)
 
 // We assume that CVec_u8Z and u8slice are the same size and layout (and thus pointers to the two can be mixed)
 _Static_assert(sizeof(LDKCVec_u8Z) == sizeof(LDKu8slice), "Vec<u8> and [u8] need to have been mapped identically");
@@ -312,20 +313,6 @@ static inline int32_t LDKSiPrefix_to_js(LDKSiPrefix val) {
                default: abort();
        }
 }
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_u8Z_new(int8_tArray elems) {
-       LDKCVec_u8Z *ret = MALLOC(sizeof(LDKCVec_u8Z), "LDKCVec_u8Z");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(uint8_t) * ret->datalen, "LDKCVec_u8Z Data");
-               int8_t *java_elems = (int8_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       ret->data[i] = java_elems[i];
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_u8Z CVec_u8Z_clone(const LDKCVec_u8Z *orig) {
        LDKCVec_u8Z ret = { .data = MALLOC(sizeof(int8_t) * orig->datalen, "LDKCVec_u8Z clone bytes"), .datalen = orig->datalen };
        memcpy(ret.data, orig->data, sizeof(int8_t) * ret.datalen);
@@ -346,9 +333,6 @@ uint64_t TxOut_get_value (struct LDKTxOut* thing) { return thing->value;}int64_t
        return ret_val;
 }
 
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_SecretKeyErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_SecretKeyErrorZ*)arg)->result_ok;
-}
 int8_tArray  __attribute__((visibility("default"))) TS_LDKCResult_SecretKeyErrorZ_get_ok(uint32_t arg) {
        LDKCResult_SecretKeyErrorZ *val = (LDKCResult_SecretKeyErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -362,9 +346,6 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_SecretKeyErrorZ_g
        uint32_t err_conv = LDKSecp256k1Error_to_js((*val->contents.err));
        return err_conv;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_PublicKeyErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_PublicKeyErrorZ*)arg)->result_ok;
-}
 int8_tArray  __attribute__((visibility("default"))) TS_LDKCResult_PublicKeyErrorZ_get_ok(uint32_t arg) {
        LDKCResult_PublicKeyErrorZ *val = (LDKCResult_PublicKeyErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -378,9 +359,6 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_PublicKeyErrorZ_g
        uint32_t err_conv = LDKSecp256k1Error_to_js((*val->contents.err));
        return err_conv;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_TxCreationKeysDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_TxCreationKeysDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_TxCreationKeysDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_TxCreationKeysDecodeErrorZ *val = (LDKCResult_TxCreationKeysDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -388,6 +366,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_TxCreationKeysDec
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -398,12 +377,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_TxCreationKeysDec
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_ChannelPublicKeysDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_ChannelPublicKeysDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ChannelPublicKeysDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_ChannelPublicKeysDecodeErrorZ *val = (LDKCResult_ChannelPublicKeysDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -411,6 +388,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ChannelPublicKeys
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -421,12 +399,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ChannelPublicKeys
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_TxCreationKeysErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_TxCreationKeysErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_TxCreationKeysErrorZ_get_ok(uint32_t arg) {
        LDKCResult_TxCreationKeysErrorZ *val = (LDKCResult_TxCreationKeysErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -434,6 +410,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_TxCreationKeysErr
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -455,9 +432,6 @@ uint32_t __attribute__((visibility("default"))) TS_LDKCOption_u32Z_ref_from_ptr(
                default: abort();
        }
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_HTLCOutputInCommitmentDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_HTLCOutputInCommitmentDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_HTLCOutputInCommitmentDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_HTLCOutputInCommitmentDecodeErrorZ *val = (LDKCResult_HTLCOutputInCommitmentDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -465,6 +439,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_HTLCOutputInCommi
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -475,12 +450,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_HTLCOutputInCommi
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ *val = (LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -488,6 +461,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_CounterpartyChann
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -498,12 +472,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_CounterpartyChann
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_ChannelTransactionParametersDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_ChannelTransactionParametersDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ChannelTransactionParametersDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_ChannelTransactionParametersDecodeErrorZ *val = (LDKCResult_ChannelTransactionParametersDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -511,6 +483,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ChannelTransactio
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -521,12 +494,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ChannelTransactio
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_HolderCommitmentTransactionDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_HolderCommitmentTransactionDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_HolderCommitmentTransactionDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_HolderCommitmentTransactionDecodeErrorZ *val = (LDKCResult_HolderCommitmentTransactionDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -534,6 +505,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_HolderCommitmentT
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -544,12 +516,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_HolderCommitmentT
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_BuiltCommitmentTransactionDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_BuiltCommitmentTransactionDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_BuiltCommitmentTransactionDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_BuiltCommitmentTransactionDecodeErrorZ *val = (LDKCResult_BuiltCommitmentTransactionDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -557,6 +527,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_BuiltCommitmentTr
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -567,12 +538,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_BuiltCommitmentTr
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_TrustedClosingTransactionNoneZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_TrustedClosingTransactionNoneZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_TrustedClosingTransactionNoneZ_get_ok(uint32_t arg) {
        LDKCResult_TrustedClosingTransactionNoneZ *val = (LDKCResult_TrustedClosingTransactionNoneZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -580,6 +549,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_TrustedClosingTra
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -588,9 +558,6 @@ void  __attribute__((visibility("default"))) TS_LDKCResult_TrustedClosingTransac
        CHECK(!val->result_ok);
        return *val->contents.err;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_CommitmentTransactionDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_CommitmentTransactionDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_CommitmentTransactionDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_CommitmentTransactionDecodeErrorZ *val = (LDKCResult_CommitmentTransactionDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -598,6 +565,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_CommitmentTransac
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -608,12 +576,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_CommitmentTransac
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_TrustedCommitmentTransactionNoneZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_TrustedCommitmentTransactionNoneZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_TrustedCommitmentTransactionNoneZ_get_ok(uint32_t arg) {
        LDKCResult_TrustedCommitmentTransactionNoneZ *val = (LDKCResult_TrustedCommitmentTransactionNoneZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -621,6 +587,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_TrustedCommitment
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -629,9 +596,6 @@ void  __attribute__((visibility("default"))) TS_LDKCResult_TrustedCommitmentTran
        CHECK(!val->result_ok);
        return *val->contents.err;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_CVec_SignatureZNoneZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_CVec_SignatureZNoneZ*)arg)->result_ok;
-}
 ptrArray  __attribute__((visibility("default"))) TS_LDKCResult_CVec_SignatureZNoneZ_get_ok(uint32_t arg) {
        LDKCResult_CVec_SignatureZNoneZ *val = (LDKCResult_CVec_SignatureZNoneZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -652,9 +616,6 @@ void  __attribute__((visibility("default"))) TS_LDKCResult_CVec_SignatureZNoneZ_
        CHECK(!val->result_ok);
        return *val->contents.err;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_ShutdownScriptDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_ShutdownScriptDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ShutdownScriptDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_ShutdownScriptDecodeErrorZ *val = (LDKCResult_ShutdownScriptDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -662,6 +623,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ShutdownScriptDec
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -672,12 +634,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ShutdownScriptDec
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_ShutdownScriptInvalidShutdownScriptZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_ShutdownScriptInvalidShutdownScriptZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ShutdownScriptInvalidShutdownScriptZ_get_ok(uint32_t arg) {
        LDKCResult_ShutdownScriptInvalidShutdownScriptZ *val = (LDKCResult_ShutdownScriptInvalidShutdownScriptZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -685,6 +645,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ShutdownScriptInv
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -695,12 +656,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ShutdownScriptInv
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_NoneErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_NoneErrorZ*)arg)->result_ok;
-}
 void  __attribute__((visibility("default"))) TS_LDKCResult_NoneErrorZ_get_ok(uint32_t arg) {
        LDKCResult_NoneErrorZ *val = (LDKCResult_NoneErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -712,9 +671,6 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_NoneErrorZ_get_er
        uint32_t err_conv = LDKIOError_to_js((*val->contents.err));
        return err_conv;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_RouteHopDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_RouteHopDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_RouteHopDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_RouteHopDecodeErrorZ *val = (LDKCResult_RouteHopDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -722,6 +678,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_RouteHopDecodeErr
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -732,28 +689,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_RouteHopDecodeErr
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_RouteHopZ_new(uint32_tArray elems) {
-       LDKCVec_RouteHopZ *ret = MALLOC(sizeof(LDKCVec_RouteHopZ), "LDKCVec_RouteHopZ");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKRouteHop) * ret->datalen, "LDKCVec_RouteHopZ Data");
-               uint32_t *java_elems = (uint32_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       uint32_t arr_elem = java_elems[i];
-                       LDKRouteHop arr_elem_conv;
-                       arr_elem_conv.inner = (void*)(arr_elem & (~1));
-                       arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0);
-                       arr_elem_conv = RouteHop_clone(&arr_elem_conv);
-                       ret->data[i] = arr_elem_conv;
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_RouteHopZ CVec_RouteHopZ_clone(const LDKCVec_RouteHopZ *orig) {
        LDKCVec_RouteHopZ ret = { .data = MALLOC(sizeof(LDKRouteHop) * orig->datalen, "LDKCVec_RouteHopZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -768,9 +707,6 @@ static inline LDKCVec_CVec_RouteHopZZ CVec_CVec_RouteHopZZ_clone(const LDKCVec_C
        }
        return ret;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_RouteDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_RouteDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_RouteDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_RouteDecodeErrorZ *val = (LDKCResult_RouteDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -778,6 +714,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_RouteDecodeErrorZ
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -788,12 +725,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_RouteDecodeErrorZ
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_RouteParametersDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_RouteParametersDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_RouteParametersDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_RouteParametersDecodeErrorZ *val = (LDKCResult_RouteParametersDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -801,6 +736,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_RouteParametersDe
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -811,28 +747,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_RouteParametersDe
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_RouteHintZ_new(uint32_tArray elems) {
-       LDKCVec_RouteHintZ *ret = MALLOC(sizeof(LDKCVec_RouteHintZ), "LDKCVec_RouteHintZ");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKRouteHint) * ret->datalen, "LDKCVec_RouteHintZ Data");
-               uint32_t *java_elems = (uint32_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       uint32_t arr_elem = java_elems[i];
-                       LDKRouteHint arr_elem_conv;
-                       arr_elem_conv.inner = (void*)(arr_elem & (~1));
-                       arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0);
-                       arr_elem_conv = RouteHint_clone(&arr_elem_conv);
-                       ret->data[i] = arr_elem_conv;
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_RouteHintZ CVec_RouteHintZ_clone(const LDKCVec_RouteHintZ *orig) {
        LDKCVec_RouteHintZ ret = { .data = MALLOC(sizeof(LDKRouteHint) * orig->datalen, "LDKCVec_RouteHintZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -852,9 +770,6 @@ uint32_t __attribute__((visibility("default"))) TS_LDKCOption_u64Z_ref_from_ptr(
                default: abort();
        }
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_PayeeDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_PayeeDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_PayeeDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_PayeeDecodeErrorZ *val = (LDKCResult_PayeeDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -862,6 +777,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_PayeeDecodeErrorZ
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -872,28 +788,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_PayeeDecodeErrorZ
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_RouteHintHopZ_new(uint32_tArray elems) {
-       LDKCVec_RouteHintHopZ *ret = MALLOC(sizeof(LDKCVec_RouteHintHopZ), "LDKCVec_RouteHintHopZ");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKRouteHintHop) * ret->datalen, "LDKCVec_RouteHintHopZ Data");
-               uint32_t *java_elems = (uint32_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       uint32_t arr_elem = java_elems[i];
-                       LDKRouteHintHop arr_elem_conv;
-                       arr_elem_conv.inner = (void*)(arr_elem & (~1));
-                       arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0);
-                       arr_elem_conv = RouteHintHop_clone(&arr_elem_conv);
-                       ret->data[i] = arr_elem_conv;
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_RouteHintHopZ CVec_RouteHintHopZ_clone(const LDKCVec_RouteHintHopZ *orig) {
        LDKCVec_RouteHintHopZ ret = { .data = MALLOC(sizeof(LDKRouteHintHop) * orig->datalen, "LDKCVec_RouteHintHopZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -901,9 +799,6 @@ static inline LDKCVec_RouteHintHopZ CVec_RouteHintHopZ_clone(const LDKCVec_Route
        }
        return ret;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_RouteHintDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_RouteHintDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_RouteHintDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_RouteHintDecodeErrorZ *val = (LDKCResult_RouteHintDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -911,6 +806,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_RouteHintDecodeEr
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -921,12 +817,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_RouteHintDecodeEr
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_RouteHintHopDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_RouteHintHopDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_RouteHintHopDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_RouteHintHopDecodeErrorZ *val = (LDKCResult_RouteHintHopDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -934,6 +828,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_RouteHintHopDecod
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -944,28 +839,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_RouteHintHopDecod
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_ChannelDetailsZ_new(uint32_tArray elems) {
-       LDKCVec_ChannelDetailsZ *ret = MALLOC(sizeof(LDKCVec_ChannelDetailsZ), "LDKCVec_ChannelDetailsZ");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKChannelDetails) * ret->datalen, "LDKCVec_ChannelDetailsZ Data");
-               uint32_t *java_elems = (uint32_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       uint32_t arr_elem = java_elems[i];
-                       LDKChannelDetails arr_elem_conv;
-                       arr_elem_conv.inner = (void*)(arr_elem & (~1));
-                       arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0);
-                       arr_elem_conv = ChannelDetails_clone(&arr_elem_conv);
-                       ret->data[i] = arr_elem_conv;
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_ChannelDetailsZ CVec_ChannelDetailsZ_clone(const LDKCVec_ChannelDetailsZ *orig) {
        LDKCVec_ChannelDetailsZ ret = { .data = MALLOC(sizeof(LDKChannelDetails) * orig->datalen, "LDKCVec_ChannelDetailsZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -973,9 +850,6 @@ static inline LDKCVec_ChannelDetailsZ CVec_ChannelDetailsZ_clone(const LDKCVec_C
        }
        return ret;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_RouteLightningErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_RouteLightningErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_RouteLightningErrorZ_get_ok(uint32_t arg) {
        LDKCResult_RouteLightningErrorZ *val = (LDKCResult_RouteLightningErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -983,6 +857,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_RouteLightningErr
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -993,12 +868,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_RouteLightningErr
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_TxOutAccessErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_TxOutAccessErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_TxOutAccessErrorZ_get_ok(uint32_t arg) {
        LDKCResult_TxOutAccessErrorZ *val = (LDKCResult_TxOutAccessErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1032,25 +905,6 @@ int8_tArray  __attribute__((visibility("default"))) TS_C2Tuple_usizeTransactionZ
        return ret_arr;
 }
 
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_C2Tuple_usizeTransactionZZ_new(uint32_tArray elems) {
-       LDKCVec_C2Tuple_usizeTransactionZZ *ret = MALLOC(sizeof(LDKCVec_C2Tuple_usizeTransactionZZ), "LDKCVec_C2Tuple_usizeTransactionZZ");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKC2Tuple_usizeTransactionZ) * ret->datalen, "LDKCVec_C2Tuple_usizeTransactionZZ Data");
-               uint32_t *java_elems = (uint32_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       uint32_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKC2Tuple_usizeTransactionZ arr_elem_conv = *(LDKC2Tuple_usizeTransactionZ*)(arr_elem_ptr);
-                       arr_elem_conv = C2Tuple_usizeTransactionZ_clone((LDKC2Tuple_usizeTransactionZ*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_C2Tuple_usizeTransactionZZ CVec_C2Tuple_usizeTransactionZZ_clone(const LDKCVec_C2Tuple_usizeTransactionZZ *orig) {
        LDKCVec_C2Tuple_usizeTransactionZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_usizeTransactionZ) * orig->datalen, "LDKCVec_C2Tuple_usizeTransactionZZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -1065,9 +919,6 @@ static inline LDKCVec_TxidZ CVec_ThirtyTwoBytesZ_clone(const LDKCVec_TxidZ *orig
        }
        return ret;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_NoneChannelMonitorUpdateErrZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_NoneChannelMonitorUpdateErrZ*)arg)->result_ok;
-}
 void  __attribute__((visibility("default"))) TS_LDKCResult_NoneChannelMonitorUpdateErrZ_get_ok(uint32_t arg) {
        LDKCResult_NoneChannelMonitorUpdateErrZ *val = (LDKCResult_NoneChannelMonitorUpdateErrZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1087,6 +938,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKMonitorEvent_ref_from_ptr(
                        uint64_t htlc_event_ref = 0;
                        CHECK((((uint64_t)htlc_event_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&htlc_event_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(htlc_event_var);
                        htlc_event_ref = (uint64_t)htlc_event_var.inner & ~1;
                        return 0 /* LDKMonitorEvent - HTLCEvent */; (void) htlc_event_ref;
                }
@@ -1095,6 +947,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKMonitorEvent_ref_from_ptr(
                        uint64_t commitment_tx_confirmed_ref = 0;
                        CHECK((((uint64_t)commitment_tx_confirmed_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&commitment_tx_confirmed_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(commitment_tx_confirmed_var);
                        commitment_tx_confirmed_ref = (uint64_t)commitment_tx_confirmed_var.inner & ~1;
                        return 0 /* LDKMonitorEvent - CommitmentTxConfirmed */; (void) commitment_tx_confirmed_ref;
                }
@@ -1103,6 +956,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKMonitorEvent_ref_from_ptr(
                        uint64_t funding_txo_ref = 0;
                        CHECK((((uint64_t)funding_txo_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&funding_txo_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_txo_var);
                        funding_txo_ref = (uint64_t)funding_txo_var.inner & ~1;
                        return 0 /* LDKMonitorEvent - UpdateCompleted */; (void) funding_txo_ref; (void) obj->update_completed.monitor_update_id;
                }
@@ -1111,31 +965,13 @@ uint32_t __attribute__((visibility("default"))) TS_LDKMonitorEvent_ref_from_ptr(
                        uint64_t update_failed_ref = 0;
                        CHECK((((uint64_t)update_failed_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&update_failed_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_failed_var);
                        update_failed_ref = (uint64_t)update_failed_var.inner & ~1;
                        return 0 /* LDKMonitorEvent - UpdateFailed */; (void) update_failed_ref;
                }
                default: abort();
        }
 }
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_MonitorEventZ_new(uint32_tArray elems) {
-       LDKCVec_MonitorEventZ *ret = MALLOC(sizeof(LDKCVec_MonitorEventZ), "LDKCVec_MonitorEventZ");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKMonitorEvent) * ret->datalen, "LDKCVec_MonitorEventZ Data");
-               uint32_t *java_elems = (uint32_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       uint32_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKMonitorEvent arr_elem_conv = *(LDKMonitorEvent*)(arr_elem_ptr);
-                       arr_elem_conv = MonitorEvent_clone((LDKMonitorEvent*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_MonitorEventZ CVec_MonitorEventZ_clone(const LDKCVec_MonitorEventZ *orig) {
        LDKCVec_MonitorEventZ ret = { .data = MALLOC(sizeof(LDKMonitorEvent) * orig->datalen, "LDKCVec_MonitorEventZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -1158,6 +994,67 @@ uint32_t __attribute__((visibility("default"))) TS_LDKCOption_C2Tuple_usizeTrans
                default: abort();
        }
 }
+uint32_t __attribute__((visibility("default"))) TS_LDKClosureReason_ref_from_ptr(uint32_t ptr) {
+       LDKClosureReason *obj = (LDKClosureReason*)(ptr & ~1);
+       switch(obj->tag) {
+               case LDKClosureReason_CounterpartyForceClosed: {
+                       LDKStr peer_msg_str = obj->counterparty_force_closed.peer_msg;
+                       jstring peer_msg_conv = str_ref_to_ts(peer_msg_str.chars, peer_msg_str.len);
+                       return 0 /* LDKClosureReason - CounterpartyForceClosed */; (void) peer_msg_conv;
+               }
+               case LDKClosureReason_HolderForceClosed: {
+                       return 0 /* LDKClosureReason - HolderForceClosed */;
+               }
+               case LDKClosureReason_CooperativeClosure: {
+                       return 0 /* LDKClosureReason - CooperativeClosure */;
+               }
+               case LDKClosureReason_CommitmentTxConfirmed: {
+                       return 0 /* LDKClosureReason - CommitmentTxConfirmed */;
+               }
+               case LDKClosureReason_ProcessingError: {
+                       LDKStr err_str = obj->processing_error.err;
+                       jstring err_conv = str_ref_to_ts(err_str.chars, err_str.len);
+                       return 0 /* LDKClosureReason - ProcessingError */; (void) err_conv;
+               }
+               case LDKClosureReason_DisconnectedPeer: {
+                       return 0 /* LDKClosureReason - DisconnectedPeer */;
+               }
+               case LDKClosureReason_OutdatedChannelManager: {
+                       return 0 /* LDKClosureReason - OutdatedChannelManager */;
+               }
+               default: abort();
+       }
+}
+uint32_t __attribute__((visibility("default"))) TS_LDKCOption_ClosureReasonZ_ref_from_ptr(uint32_t ptr) {
+       LDKCOption_ClosureReasonZ *obj = (LDKCOption_ClosureReasonZ*)(ptr & ~1);
+       switch(obj->tag) {
+               case LDKCOption_ClosureReasonZ_Some: {
+                       uint64_t some_ref = ((uint64_t)&obj->some) | 1;
+                       return 0 /* LDKCOption_ClosureReasonZ - Some */; (void) some_ref;
+               }
+               case LDKCOption_ClosureReasonZ_None: {
+                       return 0 /* LDKCOption_ClosureReasonZ - None */;
+               }
+               default: abort();
+       }
+}
+uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_COption_ClosureReasonZDecodeErrorZ_get_ok(uint32_t arg) {
+       LDKCResult_COption_ClosureReasonZDecodeErrorZ *val = (LDKCResult_COption_ClosureReasonZDecodeErrorZ*)(arg & ~1);
+       CHECK(val->result_ok);
+       uint64_t res_ref = ((uint64_t)&(*val->contents.result)) | 1;
+       return res_ref;
+}
+uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_COption_ClosureReasonZDecodeErrorZ_get_err(uint32_t arg) {
+       LDKCResult_COption_ClosureReasonZDecodeErrorZ *val = (LDKCResult_COption_ClosureReasonZDecodeErrorZ*)(arg & ~1);
+       CHECK(!val->result_ok);
+       LDKDecodeError err_var = (*val->contents.err);
+       uint64_t err_ref = 0;
+       CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+       CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
+       err_ref = (uint64_t)err_var.inner & ~1;
+       return err_ref;
+}
 uint32_t __attribute__((visibility("default"))) TS_LDKNetworkUpdate_ref_from_ptr(uint32_t ptr) {
        LDKNetworkUpdate *obj = (LDKNetworkUpdate*)(ptr & ~1);
        switch(obj->tag) {
@@ -1166,6 +1063,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKNetworkUpdate_ref_from_ptr
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return 0 /* LDKNetworkUpdate - ChannelUpdateMessage */; (void) msg_ref;
                }
@@ -1201,6 +1099,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKSpendableOutputDescriptor_
                        uint64_t outpoint_ref = 0;
                        CHECK((((uint64_t)outpoint_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&outpoint_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_var);
                        outpoint_ref = (uint64_t)outpoint_var.inner & ~1;
                        uint64_t output_ref = ((uint64_t)&obj->static_output.output) | 1;
                        return 0 /* LDKSpendableOutputDescriptor - StaticOutput */; (void) outpoint_ref; (void) (uint64_t)output_ref;
@@ -1210,6 +1109,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKSpendableOutputDescriptor_
                        uint64_t delayed_payment_output_ref = 0;
                        CHECK((((uint64_t)delayed_payment_output_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&delayed_payment_output_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(delayed_payment_output_var);
                        delayed_payment_output_ref = (uint64_t)delayed_payment_output_var.inner & ~1;
                        return 0 /* LDKSpendableOutputDescriptor - DelayedPaymentOutput */; (void) delayed_payment_output_ref;
                }
@@ -1218,31 +1118,13 @@ uint32_t __attribute__((visibility("default"))) TS_LDKSpendableOutputDescriptor_
                        uint64_t static_payment_output_ref = 0;
                        CHECK((((uint64_t)static_payment_output_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&static_payment_output_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(static_payment_output_var);
                        static_payment_output_ref = (uint64_t)static_payment_output_var.inner & ~1;
                        return 0 /* LDKSpendableOutputDescriptor - StaticPaymentOutput */; (void) static_payment_output_ref;
                }
                default: abort();
        }
 }
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_SpendableOutputDescriptorZ_new(uint32_tArray elems) {
-       LDKCVec_SpendableOutputDescriptorZ *ret = MALLOC(sizeof(LDKCVec_SpendableOutputDescriptorZ), "LDKCVec_SpendableOutputDescriptorZ");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKSpendableOutputDescriptor) * ret->datalen, "LDKCVec_SpendableOutputDescriptorZ Data");
-               uint32_t *java_elems = (uint32_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       uint32_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKSpendableOutputDescriptor arr_elem_conv = *(LDKSpendableOutputDescriptor*)(arr_elem_ptr);
-                       arr_elem_conv = SpendableOutputDescriptor_clone((LDKSpendableOutputDescriptor*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_SpendableOutputDescriptorZ CVec_SpendableOutputDescriptorZ_clone(const LDKCVec_SpendableOutputDescriptorZ *orig) {
        LDKCVec_SpendableOutputDescriptorZ ret = { .data = MALLOC(sizeof(LDKSpendableOutputDescriptor) * orig->datalen, "LDKCVec_SpendableOutputDescriptorZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -1250,6 +1132,148 @@ static inline LDKCVec_SpendableOutputDescriptorZ CVec_SpendableOutputDescriptorZ
        }
        return ret;
 }
+uint32_t __attribute__((visibility("default"))) TS_LDKPaymentPurpose_ref_from_ptr(uint32_t ptr) {
+       LDKPaymentPurpose *obj = (LDKPaymentPurpose*)(ptr & ~1);
+       switch(obj->tag) {
+               case LDKPaymentPurpose_InvoicePayment: {
+                       int8_tArray payment_preimage_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
+                       memcpy((uint8_t*)(payment_preimage_arr + 4), obj->invoice_payment.payment_preimage.data, 32);
+                       int8_tArray payment_secret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
+                       memcpy((uint8_t*)(payment_secret_arr + 4), obj->invoice_payment.payment_secret.data, 32);
+                       return 0 /* LDKPaymentPurpose - InvoicePayment */; (void) payment_preimage_arr; (void) payment_secret_arr; (void) obj->invoice_payment.user_payment_id;
+               }
+               case LDKPaymentPurpose_SpontaneousPayment: {
+                       int8_tArray spontaneous_payment_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
+                       memcpy((uint8_t*)(spontaneous_payment_arr + 4), obj->spontaneous_payment.data, 32);
+                       return 0 /* LDKPaymentPurpose - SpontaneousPayment */; (void) spontaneous_payment_arr;
+               }
+               default: abort();
+       }
+}
+uint32_t __attribute__((visibility("default"))) TS_LDKEvent_ref_from_ptr(uint32_t ptr) {
+       LDKEvent *obj = (LDKEvent*)(ptr & ~1);
+       switch(obj->tag) {
+               case LDKEvent_FundingGenerationReady: {
+                       int8_tArray temporary_channel_id_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
+                       memcpy((uint8_t*)(temporary_channel_id_arr + 4), obj->funding_generation_ready.temporary_channel_id.data, 32);
+                       LDKCVec_u8Z output_script_var = obj->funding_generation_ready.output_script;
+                       int8_tArray output_script_arr = init_arr(output_script_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
+                       memcpy((uint8_t*)(output_script_arr + 4), output_script_var.data, output_script_var.datalen);
+                       return 0 /* LDKEvent - FundingGenerationReady */; (void) temporary_channel_id_arr; (void) obj->funding_generation_ready.channel_value_satoshis; (void) output_script_arr; (void) obj->funding_generation_ready.user_channel_id;
+               }
+               case LDKEvent_PaymentReceived: {
+                       int8_tArray payment_hash_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
+                       memcpy((uint8_t*)(payment_hash_arr + 4), obj->payment_received.payment_hash.data, 32);
+                       uint64_t purpose_ref = ((uint64_t)&obj->payment_received.purpose) | 1;
+                       return 0 /* LDKEvent - PaymentReceived */; (void) payment_hash_arr; (void) obj->payment_received.amt; (void) purpose_ref;
+               }
+               case LDKEvent_PaymentSent: {
+                       int8_tArray payment_id_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
+                       memcpy((uint8_t*)(payment_id_arr + 4), obj->payment_sent.payment_id.data, 32);
+                       int8_tArray payment_preimage_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
+                       memcpy((uint8_t*)(payment_preimage_arr + 4), obj->payment_sent.payment_preimage.data, 32);
+                       int8_tArray payment_hash_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
+                       memcpy((uint8_t*)(payment_hash_arr + 4), obj->payment_sent.payment_hash.data, 32);
+                       uint64_t fee_paid_msat_ref = ((uint64_t)&obj->payment_sent.fee_paid_msat) | 1;
+                       return 0 /* LDKEvent - PaymentSent */; (void) payment_id_arr; (void) payment_preimage_arr; (void) payment_hash_arr; (void) fee_paid_msat_ref;
+               }
+               case LDKEvent_PaymentPathFailed: {
+                       int8_tArray payment_id_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
+                       memcpy((uint8_t*)(payment_id_arr + 4), obj->payment_path_failed.payment_id.data, 32);
+                       int8_tArray payment_hash_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
+                       memcpy((uint8_t*)(payment_hash_arr + 4), obj->payment_path_failed.payment_hash.data, 32);
+                       uint64_t network_update_ref = ((uint64_t)&obj->payment_path_failed.network_update) | 1;
+                       LDKCVec_RouteHopZ path_var = obj->payment_path_failed.path;
+                       uint32_tArray path_arr = NULL;
+                       path_arr = init_arr(path_var.datalen, sizeof(uint32_t), "Native uint32_tArray Bytes");
+                       uint32_t *path_arr_ptr = (uint32_t*)(path_arr + 4);
+                       for (size_t k = 0; k < path_var.datalen; k++) {
+                               LDKRouteHop path_conv_10_var = path_var.data[k];
+                               uint64_t path_conv_10_ref = 0;
+                               CHECK((((uint64_t)path_conv_10_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+                               CHECK((((uint64_t)&path_conv_10_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                               CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv_10_var);
+                               path_conv_10_ref = (uint64_t)path_conv_10_var.inner & ~1;
+                               path_arr_ptr[k] = path_conv_10_ref;
+                       }
+                       
+                       uint64_t short_channel_id_ref = ((uint64_t)&obj->payment_path_failed.short_channel_id) | 1;
+                       LDKRouteParameters retry_var = obj->payment_path_failed.retry;
+                       uint64_t retry_ref = 0;
+                       if ((uint64_t)retry_var.inner > 4096) {
+                               CHECK((((uint64_t)retry_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+                               CHECK((((uint64_t)&retry_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(retry_var);
+                               retry_ref = (uint64_t)retry_var.inner & ~1;
+                       }
+                       return 0 /* LDKEvent - PaymentPathFailed */; (void) payment_id_arr; (void) payment_hash_arr; (void) obj->payment_path_failed.rejected_by_dest; (void) network_update_ref; (void) obj->payment_path_failed.all_paths_failed; (void) path_arr; (void) short_channel_id_ref; (void) retry_ref;
+               }
+               case LDKEvent_PendingHTLCsForwardable: {
+                       return 0 /* LDKEvent - PendingHTLCsForwardable */; (void) obj->pending_htl_cs_forwardable.time_forwardable;
+               }
+               case LDKEvent_SpendableOutputs: {
+                       LDKCVec_SpendableOutputDescriptorZ outputs_var = obj->spendable_outputs.outputs;
+                       uint32_tArray outputs_arr = NULL;
+                       outputs_arr = init_arr(outputs_var.datalen, sizeof(uint32_t), "Native uint32_tArray Bytes");
+                       uint32_t *outputs_arr_ptr = (uint32_t*)(outputs_arr + 4);
+                       for (size_t b = 0; b < outputs_var.datalen; b++) {
+                               uint64_t outputs_conv_27_ref = ((uint64_t)&outputs_var.data[b]) | 1;
+                               outputs_arr_ptr[b] = outputs_conv_27_ref;
+                       }
+                       
+                       return 0 /* LDKEvent - SpendableOutputs */; (void) outputs_arr;
+               }
+               case LDKEvent_PaymentForwarded: {
+                       uint64_t fee_earned_msat_ref = ((uint64_t)&obj->payment_forwarded.fee_earned_msat) | 1;
+                       return 0 /* LDKEvent - PaymentForwarded */; (void) fee_earned_msat_ref; (void) obj->payment_forwarded.claim_from_onchain_tx;
+               }
+               case LDKEvent_ChannelClosed: {
+                       int8_tArray channel_id_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
+                       memcpy((uint8_t*)(channel_id_arr + 4), obj->channel_closed.channel_id.data, 32);
+                       uint64_t reason_ref = ((uint64_t)&obj->channel_closed.reason) | 1;
+                       return 0 /* LDKEvent - ChannelClosed */; (void) channel_id_arr; (void) obj->channel_closed.user_channel_id; (void) reason_ref;
+               }
+               case LDKEvent_DiscardFunding: {
+                       int8_tArray channel_id_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
+                       memcpy((uint8_t*)(channel_id_arr + 4), obj->discard_funding.channel_id.data, 32);
+                       LDKTransaction transaction_var = obj->discard_funding.transaction;
+                       int8_tArray transaction_arr = init_arr(transaction_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
+                       memcpy((uint8_t*)(transaction_arr + 4), transaction_var.data, transaction_var.datalen);
+                       return 0 /* LDKEvent - DiscardFunding */; (void) channel_id_arr; (void) transaction_arr;
+               }
+               default: abort();
+       }
+}
+uint32_t __attribute__((visibility("default"))) TS_LDKCOption_EventZ_ref_from_ptr(uint32_t ptr) {
+       LDKCOption_EventZ *obj = (LDKCOption_EventZ*)(ptr & ~1);
+       switch(obj->tag) {
+               case LDKCOption_EventZ_Some: {
+                       uint64_t some_ref = ((uint64_t)&obj->some) | 1;
+                       return 0 /* LDKCOption_EventZ - Some */; (void) some_ref;
+               }
+               case LDKCOption_EventZ_None: {
+                       return 0 /* LDKCOption_EventZ - None */;
+               }
+               default: abort();
+       }
+}
+uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_COption_EventZDecodeErrorZ_get_ok(uint32_t arg) {
+       LDKCResult_COption_EventZDecodeErrorZ *val = (LDKCResult_COption_EventZDecodeErrorZ*)(arg & ~1);
+       CHECK(val->result_ok);
+       uint64_t res_ref = ((uint64_t)&(*val->contents.result)) | 1;
+       return res_ref;
+}
+uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_COption_EventZDecodeErrorZ_get_err(uint32_t arg) {
+       LDKCResult_COption_EventZDecodeErrorZ *val = (LDKCResult_COption_EventZDecodeErrorZ*)(arg & ~1);
+       CHECK(!val->result_ok);
+       LDKDecodeError err_var = (*val->contents.err);
+       uint64_t err_ref = 0;
+       CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+       CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
+       err_ref = (uint64_t)err_var.inner & ~1;
+       return err_ref;
+}
 uint32_t __attribute__((visibility("default"))) TS_LDKErrorAction_ref_from_ptr(uint32_t ptr) {
        LDKErrorAction *obj = (LDKErrorAction*)(ptr & ~1);
        switch(obj->tag) {
@@ -1259,6 +1283,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKErrorAction_ref_from_ptr(u
                        if ((uint64_t)msg_var.inner > 4096) {
                                CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                                CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                                msg_ref = (uint64_t)msg_var.inner & ~1;
                        }
                        return 0 /* LDKErrorAction - DisconnectPeer */; (void) msg_ref;
@@ -1275,6 +1300,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKErrorAction_ref_from_ptr(u
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return 0 /* LDKErrorAction - SendErrorMessage */; (void) msg_ref;
                }
@@ -1291,6 +1317,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKMessageSendEvent_ref_from_
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return 0 /* LDKMessageSendEvent - SendAcceptChannel */; (void) node_id_arr; (void) msg_ref;
                }
@@ -1301,6 +1328,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKMessageSendEvent_ref_from_
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return 0 /* LDKMessageSendEvent - SendOpenChannel */; (void) node_id_arr; (void) msg_ref;
                }
@@ -1311,6 +1339,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKMessageSendEvent_ref_from_
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return 0 /* LDKMessageSendEvent - SendFundingCreated */; (void) node_id_arr; (void) msg_ref;
                }
@@ -1321,6 +1350,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKMessageSendEvent_ref_from_
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return 0 /* LDKMessageSendEvent - SendFundingSigned */; (void) node_id_arr; (void) msg_ref;
                }
@@ -1331,6 +1361,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKMessageSendEvent_ref_from_
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return 0 /* LDKMessageSendEvent - SendFundingLocked */; (void) node_id_arr; (void) msg_ref;
                }
@@ -1341,6 +1372,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKMessageSendEvent_ref_from_
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return 0 /* LDKMessageSendEvent - SendAnnouncementSignatures */; (void) node_id_arr; (void) msg_ref;
                }
@@ -1351,6 +1383,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKMessageSendEvent_ref_from_
                        uint64_t updates_ref = 0;
                        CHECK((((uint64_t)updates_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&updates_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(updates_var);
                        updates_ref = (uint64_t)updates_var.inner & ~1;
                        return 0 /* LDKMessageSendEvent - UpdateHTLCs */; (void) node_id_arr; (void) updates_ref;
                }
@@ -1361,6 +1394,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKMessageSendEvent_ref_from_
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return 0 /* LDKMessageSendEvent - SendRevokeAndACK */; (void) node_id_arr; (void) msg_ref;
                }
@@ -1371,6 +1405,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKMessageSendEvent_ref_from_
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return 0 /* LDKMessageSendEvent - SendClosingSigned */; (void) node_id_arr; (void) msg_ref;
                }
@@ -1381,6 +1416,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKMessageSendEvent_ref_from_
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return 0 /* LDKMessageSendEvent - SendShutdown */; (void) node_id_arr; (void) msg_ref;
                }
@@ -1391,6 +1427,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKMessageSendEvent_ref_from_
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return 0 /* LDKMessageSendEvent - SendChannelReestablish */; (void) node_id_arr; (void) msg_ref;
                }
@@ -1399,11 +1436,13 @@ uint32_t __attribute__((visibility("default"))) TS_LDKMessageSendEvent_ref_from_
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        LDKChannelUpdate update_msg_var = obj->broadcast_channel_announcement.update_msg;
                        uint64_t update_msg_ref = 0;
                        CHECK((((uint64_t)update_msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&update_msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_msg_var);
                        update_msg_ref = (uint64_t)update_msg_var.inner & ~1;
                        return 0 /* LDKMessageSendEvent - BroadcastChannelAnnouncement */; (void) msg_ref; (void) update_msg_ref;
                }
@@ -1412,6 +1451,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKMessageSendEvent_ref_from_
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return 0 /* LDKMessageSendEvent - BroadcastNodeAnnouncement */; (void) msg_ref;
                }
@@ -1420,6 +1460,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKMessageSendEvent_ref_from_
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return 0 /* LDKMessageSendEvent - BroadcastChannelUpdate */; (void) msg_ref;
                }
@@ -1430,6 +1471,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKMessageSendEvent_ref_from_
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return 0 /* LDKMessageSendEvent - SendChannelUpdate */; (void) node_id_arr; (void) msg_ref;
                }
@@ -1446,6 +1488,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKMessageSendEvent_ref_from_
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return 0 /* LDKMessageSendEvent - SendChannelRangeQuery */; (void) node_id_arr; (void) msg_ref;
                }
@@ -1456,6 +1499,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKMessageSendEvent_ref_from_
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return 0 /* LDKMessageSendEvent - SendShortIdsQuery */; (void) node_id_arr; (void) msg_ref;
                }
@@ -1466,31 +1510,13 @@ uint32_t __attribute__((visibility("default"))) TS_LDKMessageSendEvent_ref_from_
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return 0 /* LDKMessageSendEvent - SendReplyChannelRange */; (void) node_id_arr; (void) msg_ref;
                }
                default: abort();
        }
 }
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_MessageSendEventZ_new(uint32_tArray elems) {
-       LDKCVec_MessageSendEventZ *ret = MALLOC(sizeof(LDKCVec_MessageSendEventZ), "LDKCVec_MessageSendEventZ");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKMessageSendEvent) * ret->datalen, "LDKCVec_MessageSendEventZ Data");
-               uint32_t *java_elems = (uint32_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       uint32_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKMessageSendEvent arr_elem_conv = *(LDKMessageSendEvent*)(arr_elem_ptr);
-                       arr_elem_conv = MessageSendEvent_clone((LDKMessageSendEvent*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_MessageSendEventZ CVec_MessageSendEventZ_clone(const LDKCVec_MessageSendEventZ *orig) {
        LDKCVec_MessageSendEventZ ret = { .data = MALLOC(sizeof(LDKMessageSendEvent) * orig->datalen, "LDKCVec_MessageSendEventZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -1498,9 +1524,6 @@ static inline LDKCVec_MessageSendEventZ CVec_MessageSendEventZ_clone(const LDKCV
        }
        return ret;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_InitFeaturesDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_InitFeaturesDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_InitFeaturesDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_InitFeaturesDecodeErrorZ *val = (LDKCResult_InitFeaturesDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1508,6 +1531,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_InitFeaturesDecod
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -1518,12 +1542,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_InitFeaturesDecod
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_NodeFeaturesDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_NodeFeaturesDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_NodeFeaturesDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_NodeFeaturesDecodeErrorZ *val = (LDKCResult_NodeFeaturesDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1531,6 +1553,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_NodeFeaturesDecod
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -1541,12 +1564,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_NodeFeaturesDecod
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_ChannelFeaturesDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_ChannelFeaturesDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ChannelFeaturesDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_ChannelFeaturesDecodeErrorZ *val = (LDKCResult_ChannelFeaturesDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1554,6 +1575,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ChannelFeaturesDe
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -1564,12 +1586,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ChannelFeaturesDe
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_InvoiceFeaturesDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_InvoiceFeaturesDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_InvoiceFeaturesDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_InvoiceFeaturesDecodeErrorZ *val = (LDKCResult_InvoiceFeaturesDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1577,6 +1597,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_InvoiceFeaturesDe
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -1587,12 +1608,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_InvoiceFeaturesDe
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_ScoringParametersDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_ScoringParametersDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ScoringParametersDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_ScoringParametersDecodeErrorZ *val = (LDKCResult_ScoringParametersDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1600,6 +1619,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ScoringParameters
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -1610,12 +1630,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ScoringParameters
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_ScorerDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_ScorerDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ScorerDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_ScorerDecodeErrorZ *val = (LDKCResult_ScorerDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1623,6 +1641,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ScorerDecodeError
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -1633,12 +1652,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ScorerDecodeError
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ *val = (LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1646,6 +1663,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_DelayedPaymentOut
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -1656,12 +1674,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_DelayedPaymentOut
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ *val = (LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1669,6 +1685,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_StaticPaymentOutp
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -1679,12 +1696,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_StaticPaymentOutp
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_SpendableOutputDescriptorDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_SpendableOutputDescriptorDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_SpendableOutputDescriptorDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_SpendableOutputDescriptorDecodeErrorZ *val = (LDKCResult_SpendableOutputDescriptorDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1698,12 +1713,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_SpendableOutputDe
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_NoneNoneZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_NoneNoneZ*)arg)->result_ok;
-}
 void  __attribute__((visibility("default"))) TS_LDKCResult_NoneNoneZ_get_ok(uint32_t arg) {
        LDKCResult_NoneNoneZ *val = (LDKCResult_NoneNoneZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1743,9 +1756,6 @@ ptrArray  __attribute__((visibility("default"))) TS_C2Tuple_SignatureCVec_Signat
        return ret_arr;
 }
 
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_get_ok(uint32_t arg) {
        LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ *val = (LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1759,9 +1769,6 @@ void  __attribute__((visibility("default"))) TS_LDKCResult_C2Tuple_SignatureCVec
        CHECK(!val->result_ok);
        return *val->contents.err;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_SignatureNoneZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_SignatureNoneZ*)arg)->result_ok;
-}
 int8_tArray  __attribute__((visibility("default"))) TS_LDKCResult_SignatureNoneZ_get_ok(uint32_t arg) {
        LDKCResult_SignatureNoneZ *val = (LDKCResult_SignatureNoneZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1832,6 +1839,7 @@ LDKCResult_NoneNoneZ validate_holder_commitment_LDKBaseSign_jcall(const void* th
        holder_tx_var = HolderCommitmentTransaction_clone(holder_tx);
        CHECK((((uint64_t)holder_tx_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&holder_tx_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(holder_tx_var);
        holder_tx_ref = (uint64_t)holder_tx_var.inner;
        if (holder_tx_var.is_owned) {
                holder_tx_ref |= 1;
@@ -1840,7 +1848,7 @@ LDKCResult_NoneNoneZ validate_holder_commitment_LDKBaseSign_jcall(const void* th
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneNoneZ ret_conv = *(LDKCResult_NoneNoneZ*)(ret_ptr);
-       ret_conv = CResult_NoneNoneZ_clone((LDKCResult_NoneNoneZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 LDKThirtyTwoBytes channel_keys_id_LDKBaseSign_jcall(const void* this_arg) {
@@ -1858,6 +1866,7 @@ LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ sign_counterparty_commitment_L
        commitment_tx_var = CommitmentTransaction_clone(commitment_tx);
        CHECK((((uint64_t)commitment_tx_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&commitment_tx_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(commitment_tx_var);
        commitment_tx_ref = (uint64_t)commitment_tx_var.inner;
        if (commitment_tx_var.is_owned) {
                commitment_tx_ref |= 1;
@@ -1866,7 +1875,7 @@ LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ sign_counterparty_commitment_L
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ ret_conv = *(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)(ret_ptr);
-       ret_conv = CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone((LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 LDKCResult_NoneNoneZ validate_counterparty_revocation_LDKBaseSign_jcall(const void* this_arg, uint64_t idx, const uint8_t (* secret)[32]) {
@@ -1877,7 +1886,7 @@ LDKCResult_NoneNoneZ validate_counterparty_revocation_LDKBaseSign_jcall(const vo
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneNoneZ ret_conv = *(LDKCResult_NoneNoneZ*)(ret_ptr);
-       ret_conv = CResult_NoneNoneZ_clone((LDKCResult_NoneNoneZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ sign_holder_commitment_and_htlcs_LDKBaseSign_jcall(const void* this_arg, const LDKHolderCommitmentTransaction * commitment_tx) {
@@ -1887,6 +1896,7 @@ LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ sign_holder_commitment_and_htl
        commitment_tx_var = HolderCommitmentTransaction_clone(commitment_tx);
        CHECK((((uint64_t)commitment_tx_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&commitment_tx_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(commitment_tx_var);
        commitment_tx_ref = (uint64_t)commitment_tx_var.inner;
        if (commitment_tx_var.is_owned) {
                commitment_tx_ref |= 1;
@@ -1895,7 +1905,7 @@ LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ sign_holder_commitment_and_htl
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ ret_conv = *(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)(ret_ptr);
-       ret_conv = CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone((LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 LDKCResult_SignatureNoneZ sign_justice_revoked_output_LDKBaseSign_jcall(const void* this_arg, LDKTransaction justice_tx, uintptr_t input, uint64_t amount, const uint8_t (* per_commitment_key)[32]) {
@@ -1910,7 +1920,7 @@ LDKCResult_SignatureNoneZ sign_justice_revoked_output_LDKBaseSign_jcall(const vo
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)(ret_ptr);
-       ret_conv = CResult_SignatureNoneZ_clone((LDKCResult_SignatureNoneZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 LDKCResult_SignatureNoneZ sign_justice_revoked_htlc_LDKBaseSign_jcall(const void* this_arg, LDKTransaction justice_tx, uintptr_t input, uint64_t amount, const uint8_t (* per_commitment_key)[32], const LDKHTLCOutputInCommitment * htlc) {
@@ -1926,6 +1936,7 @@ LDKCResult_SignatureNoneZ sign_justice_revoked_htlc_LDKBaseSign_jcall(const void
        htlc_var = HTLCOutputInCommitment_clone(htlc);
        CHECK((((uint64_t)htlc_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&htlc_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(htlc_var);
        htlc_ref = (uint64_t)htlc_var.inner;
        if (htlc_var.is_owned) {
                htlc_ref |= 1;
@@ -1934,7 +1945,7 @@ LDKCResult_SignatureNoneZ sign_justice_revoked_htlc_LDKBaseSign_jcall(const void
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)(ret_ptr);
-       ret_conv = CResult_SignatureNoneZ_clone((LDKCResult_SignatureNoneZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 LDKCResult_SignatureNoneZ sign_counterparty_htlc_transaction_LDKBaseSign_jcall(const void* this_arg, LDKTransaction htlc_tx, uintptr_t input, uint64_t amount, LDKPublicKey per_commitment_point, const LDKHTLCOutputInCommitment * htlc) {
@@ -1950,6 +1961,7 @@ LDKCResult_SignatureNoneZ sign_counterparty_htlc_transaction_LDKBaseSign_jcall(c
        htlc_var = HTLCOutputInCommitment_clone(htlc);
        CHECK((((uint64_t)htlc_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&htlc_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(htlc_var);
        htlc_ref = (uint64_t)htlc_var.inner;
        if (htlc_var.is_owned) {
                htlc_ref |= 1;
@@ -1958,7 +1970,7 @@ LDKCResult_SignatureNoneZ sign_counterparty_htlc_transaction_LDKBaseSign_jcall(c
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)(ret_ptr);
-       ret_conv = CResult_SignatureNoneZ_clone((LDKCResult_SignatureNoneZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 LDKCResult_SignatureNoneZ sign_closing_transaction_LDKBaseSign_jcall(const void* this_arg, const LDKClosingTransaction * closing_tx) {
@@ -1968,6 +1980,7 @@ LDKCResult_SignatureNoneZ sign_closing_transaction_LDKBaseSign_jcall(const void*
        closing_tx_var = ClosingTransaction_clone(closing_tx);
        CHECK((((uint64_t)closing_tx_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&closing_tx_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(closing_tx_var);
        closing_tx_ref = (uint64_t)closing_tx_var.inner;
        if (closing_tx_var.is_owned) {
                closing_tx_ref |= 1;
@@ -1976,7 +1989,7 @@ LDKCResult_SignatureNoneZ sign_closing_transaction_LDKBaseSign_jcall(const void*
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)(ret_ptr);
-       ret_conv = CResult_SignatureNoneZ_clone((LDKCResult_SignatureNoneZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 LDKCResult_SignatureNoneZ sign_channel_announcement_LDKBaseSign_jcall(const void* this_arg, const LDKUnsignedChannelAnnouncement * msg) {
@@ -1986,6 +1999,7 @@ LDKCResult_SignatureNoneZ sign_channel_announcement_LDKBaseSign_jcall(const void
        msg_var = UnsignedChannelAnnouncement_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -1994,7 +2008,7 @@ LDKCResult_SignatureNoneZ sign_channel_announcement_LDKBaseSign_jcall(const void
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)(ret_ptr);
-       ret_conv = CResult_SignatureNoneZ_clone((LDKCResult_SignatureNoneZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 void ready_channel_LDKBaseSign_jcall(void* this_arg, const LDKChannelTransactionParameters * channel_parameters) {
@@ -2004,6 +2018,7 @@ void ready_channel_LDKBaseSign_jcall(void* this_arg, const LDKChannelTransaction
        channel_parameters_var = ChannelTransactionParameters_clone(channel_parameters);
        CHECK((((uint64_t)channel_parameters_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&channel_parameters_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_parameters_var);
        channel_parameters_ref = (uint64_t)channel_parameters_var.inner;
        if (channel_parameters_var.is_owned) {
                channel_parameters_ref |= 1;
@@ -2022,7 +2037,7 @@ static inline LDKBaseSign LDKBaseSign_init (/*TODO: JS Object Reference */void*
        LDKChannelPublicKeys pubkeys_conv;
        pubkeys_conv.inner = (void*)(pubkeys & (~1));
        pubkeys_conv.is_owned = (pubkeys & 1) || (pubkeys == 0);
-       pubkeys_conv = ChannelPublicKeys_clone(&pubkeys_conv);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(pubkeys_conv);
 
        LDKBaseSign ret = {
                .this_arg = (void*) calls,
@@ -2075,6 +2090,7 @@ uint32_t  __attribute__((visibility("default"))) TS_BaseSign_validate_holder_com
        LDKHolderCommitmentTransaction holder_tx_conv;
        holder_tx_conv.inner = (void*)(holder_tx & (~1));
        holder_tx_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(holder_tx_conv);
        LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
        *ret_conv = (this_arg_conv->validate_holder_commitment)(this_arg_conv->this_arg, &holder_tx_conv);
        return (uint64_t)ret_conv;
@@ -2096,6 +2112,7 @@ uint32_t  __attribute__((visibility("default"))) TS_BaseSign_sign_counterparty_c
        LDKCommitmentTransaction commitment_tx_conv;
        commitment_tx_conv.inner = (void*)(commitment_tx & (~1));
        commitment_tx_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(commitment_tx_conv);
        LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ), "LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ");
        *ret_conv = (this_arg_conv->sign_counterparty_commitment)(this_arg_conv->this_arg, &commitment_tx_conv);
        return (uint64_t)ret_conv;
@@ -2121,6 +2138,7 @@ uint32_t  __attribute__((visibility("default"))) TS_BaseSign_sign_holder_commitm
        LDKHolderCommitmentTransaction commitment_tx_conv;
        commitment_tx_conv.inner = (void*)(commitment_tx & (~1));
        commitment_tx_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(commitment_tx_conv);
        LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ), "LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ");
        *ret_conv = (this_arg_conv->sign_holder_commitment_and_htlcs)(this_arg_conv->this_arg, &commitment_tx_conv);
        return (uint64_t)ret_conv;
@@ -2160,6 +2178,7 @@ uint32_t  __attribute__((visibility("default"))) TS_BaseSign_sign_justice_revoke
        LDKHTLCOutputInCommitment htlc_conv;
        htlc_conv.inner = (void*)(htlc & (~1));
        htlc_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(htlc_conv);
        LDKCResult_SignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignatureNoneZ), "LDKCResult_SignatureNoneZ");
        *ret_conv = (this_arg_conv->sign_justice_revoked_htlc)(this_arg_conv->this_arg, justice_tx_ref, input, amount, per_commitment_key_ref, &htlc_conv);
        return (uint64_t)ret_conv;
@@ -2180,6 +2199,7 @@ uint32_t  __attribute__((visibility("default"))) TS_BaseSign_sign_counterparty_h
        LDKHTLCOutputInCommitment htlc_conv;
        htlc_conv.inner = (void*)(htlc & (~1));
        htlc_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(htlc_conv);
        LDKCResult_SignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignatureNoneZ), "LDKCResult_SignatureNoneZ");
        *ret_conv = (this_arg_conv->sign_counterparty_htlc_transaction)(this_arg_conv->this_arg, htlc_tx_ref, input, amount, per_commitment_point_ref, &htlc_conv);
        return (uint64_t)ret_conv;
@@ -2192,6 +2212,7 @@ uint32_t  __attribute__((visibility("default"))) TS_BaseSign_sign_closing_transa
        LDKClosingTransaction closing_tx_conv;
        closing_tx_conv.inner = (void*)(closing_tx & (~1));
        closing_tx_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(closing_tx_conv);
        LDKCResult_SignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignatureNoneZ), "LDKCResult_SignatureNoneZ");
        *ret_conv = (this_arg_conv->sign_closing_transaction)(this_arg_conv->this_arg, &closing_tx_conv);
        return (uint64_t)ret_conv;
@@ -2204,6 +2225,7 @@ uint32_t  __attribute__((visibility("default"))) TS_BaseSign_sign_channel_announ
        LDKUnsignedChannelAnnouncement msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        LDKCResult_SignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignatureNoneZ), "LDKCResult_SignatureNoneZ");
        *ret_conv = (this_arg_conv->sign_channel_announcement)(this_arg_conv->this_arg, &msg_conv);
        return (uint64_t)ret_conv;
@@ -2216,6 +2238,7 @@ void  __attribute__((visibility("default"))) TS_BaseSign_ready_channel(uint32_t
        LDKChannelTransactionParameters channel_parameters_conv;
        channel_parameters_conv.inner = (void*)(channel_parameters & (~1));
        channel_parameters_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_parameters_conv);
        (this_arg_conv->ready_channel)(this_arg_conv->this_arg, &channel_parameters_conv);
 }
 
@@ -2232,6 +2255,7 @@ uint32_t  __attribute__((visibility("default"))) TS_BaseSign_get_pubkeys(uint32_
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -2273,7 +2297,7 @@ static inline LDKSign LDKSign_init (/*TODO: JS Object Reference */void* o, /*TOD
        LDKChannelPublicKeys pubkeys_conv;
        pubkeys_conv.inner = (void*)(pubkeys & (~1));
        pubkeys_conv.is_owned = (pubkeys & 1) || (pubkeys == 0);
-       pubkeys_conv = ChannelPublicKeys_clone(&pubkeys_conv);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(pubkeys_conv);
 
        LDKSign ret = {
                .this_arg = (void*) calls,
@@ -2301,9 +2325,6 @@ int8_tArray  __attribute__((visibility("default"))) TS_Sign_write(uint32_t this_
        return ret_arr;
 }
 
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_SignDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_SignDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_SignDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_SignDecodeErrorZ *val = (LDKCResult_SignDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -2318,12 +2339,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_SignDecodeErrorZ_
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_RecoverableSignatureNoneZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_RecoverableSignatureNoneZ*)arg)->result_ok;
-}
 int8_tArray  __attribute__((visibility("default"))) TS_LDKCResult_RecoverableSignatureNoneZ_get_ok(uint32_t arg) {
        LDKCResult_RecoverableSignatureNoneZ *val = (LDKCResult_RecoverableSignatureNoneZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -2343,9 +2362,6 @@ static inline LDKCVec_CVec_u8ZZ CVec_CVec_u8ZZ_clone(const LDKCVec_CVec_u8ZZ *or
        }
        return ret;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_CVec_CVec_u8ZZNoneZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_CVec_CVec_u8ZZNoneZ*)arg)->result_ok;
-}
 ptrArray  __attribute__((visibility("default"))) TS_LDKCResult_CVec_CVec_u8ZZNoneZ_get_ok(uint32_t arg) {
        LDKCResult_CVec_CVec_u8ZZNoneZ *val = (LDKCResult_CVec_CVec_u8ZZNoneZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -2367,9 +2383,6 @@ void  __attribute__((visibility("default"))) TS_LDKCResult_CVec_CVec_u8ZZNoneZ_g
        CHECK(!val->result_ok);
        return *val->contents.err;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_InMemorySignerDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_InMemorySignerDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_InMemorySignerDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_InMemorySignerDecodeErrorZ *val = (LDKCResult_InMemorySignerDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -2377,6 +2390,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_InMemorySignerDec
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -2387,28 +2401,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_InMemorySignerDec
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_TxOutZ_new(uint32_tArray elems) {
-       LDKCVec_TxOutZ *ret = MALLOC(sizeof(LDKCVec_TxOutZ), "LDKCVec_TxOutZ");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKTxOut) * ret->datalen, "LDKCVec_TxOutZ Data");
-               uint32_t *java_elems = (uint32_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       uint32_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKTxOut arr_elem_conv = *(LDKTxOut*)(arr_elem_ptr);
-                       arr_elem_conv = TxOut_clone((LDKTxOut*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_TxOutZ CVec_TxOutZ_clone(const LDKCVec_TxOutZ *orig) {
        LDKCVec_TxOutZ ret = { .data = MALLOC(sizeof(LDKTxOut) * orig->datalen, "LDKCVec_TxOutZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -2416,9 +2412,6 @@ static inline LDKCVec_TxOutZ CVec_TxOutZ_clone(const LDKCVec_TxOutZ *orig) {
        }
        return ret;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_TransactionNoneZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_TransactionNoneZ*)arg)->result_ok;
-}
 int8_tArray  __attribute__((visibility("default"))) TS_LDKCResult_TransactionNoneZ_get_ok(uint32_t arg) {
        LDKCResult_TransactionNoneZ *val = (LDKCResult_TransactionNoneZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -2451,6 +2444,7 @@ uint32_t  __attribute__((visibility("default"))) TS_C2Tuple_BlockHashChannelMoni
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -2458,25 +2452,6 @@ uint32_t  __attribute__((visibility("default"))) TS_C2Tuple_BlockHashChannelMoni
        return ret_ref;
 }
 
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_C2Tuple_BlockHashChannelMonitorZZ_new(uint32_tArray elems) {
-       LDKCVec_C2Tuple_BlockHashChannelMonitorZZ *ret = MALLOC(sizeof(LDKCVec_C2Tuple_BlockHashChannelMonitorZZ), "LDKCVec_C2Tuple_BlockHashChannelMonitorZZ");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKC2Tuple_BlockHashChannelMonitorZ) * ret->datalen, "LDKCVec_C2Tuple_BlockHashChannelMonitorZZ Data");
-               uint32_t *java_elems = (uint32_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       uint32_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKC2Tuple_BlockHashChannelMonitorZ arr_elem_conv = *(LDKC2Tuple_BlockHashChannelMonitorZ*)(arr_elem_ptr);
-                       arr_elem_conv = C2Tuple_BlockHashChannelMonitorZ_clone((LDKC2Tuple_BlockHashChannelMonitorZ*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_C2Tuple_BlockHashChannelMonitorZZ CVec_C2Tuple_BlockHashChannelMonitorZZ_clone(const LDKCVec_C2Tuple_BlockHashChannelMonitorZZ *orig) {
        LDKCVec_C2Tuple_BlockHashChannelMonitorZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_BlockHashChannelMonitorZ) * orig->datalen, "LDKCVec_C2Tuple_BlockHashChannelMonitorZZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -2484,9 +2459,6 @@ static inline LDKCVec_C2Tuple_BlockHashChannelMonitorZZ CVec_C2Tuple_BlockHashCh
        }
        return ret;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ*)arg)->result_ok;
-}
 uint32_tArray  __attribute__((visibility("default"))) TS_LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_get_ok(uint32_t arg) {
        LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ *val = (LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -2552,15 +2524,13 @@ uint32_t __attribute__((visibility("default"))) TS_LDKAPIError_ref_from_ptr(uint
                        uint64_t script_ref = 0;
                        CHECK((((uint64_t)script_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&script_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(script_var);
                        script_ref = (uint64_t)script_var.inner & ~1;
                        return 0 /* LDKAPIError - IncompatibleShutdownScript */; (void) script_ref;
                }
                default: abort();
        }
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_NoneAPIErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_NoneAPIErrorZ*)arg)->result_ok;
-}
 void  __attribute__((visibility("default"))) TS_LDKCResult_NoneAPIErrorZ_get_ok(uint32_t arg) {
        LDKCResult_NoneAPIErrorZ *val = (LDKCResult_NoneAPIErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -2572,25 +2542,6 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_NoneAPIErrorZ_get
        uint64_t err_ref = ((uint64_t)&(*val->contents.err)) | 1;
        return err_ref;
 }
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_CResult_NoneAPIErrorZZ_new(uint32_tArray elems) {
-       LDKCVec_CResult_NoneAPIErrorZZ *ret = MALLOC(sizeof(LDKCVec_CResult_NoneAPIErrorZZ), "LDKCVec_CResult_NoneAPIErrorZZ");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKCResult_NoneAPIErrorZ) * ret->datalen, "LDKCVec_CResult_NoneAPIErrorZZ Data");
-               uint32_t *java_elems = (uint32_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       uint32_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKCResult_NoneAPIErrorZ arr_elem_conv = *(LDKCResult_NoneAPIErrorZ*)(arr_elem_ptr);
-                       arr_elem_conv = CResult_NoneAPIErrorZ_clone((LDKCResult_NoneAPIErrorZ*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_CResult_NoneAPIErrorZZ CVec_CResult_NoneAPIErrorZZ_clone(const LDKCVec_CResult_NoneAPIErrorZZ *orig) {
        LDKCVec_CResult_NoneAPIErrorZZ ret = { .data = MALLOC(sizeof(LDKCResult_NoneAPIErrorZ) * orig->datalen, "LDKCVec_CResult_NoneAPIErrorZZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -2598,25 +2549,6 @@ static inline LDKCVec_CResult_NoneAPIErrorZZ CVec_CResult_NoneAPIErrorZZ_clone(c
        }
        return ret;
 }
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_APIErrorZ_new(uint32_tArray elems) {
-       LDKCVec_APIErrorZ *ret = MALLOC(sizeof(LDKCVec_APIErrorZ), "LDKCVec_APIErrorZ");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKAPIError) * ret->datalen, "LDKCVec_APIErrorZ Data");
-               uint32_t *java_elems = (uint32_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       uint32_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKAPIError arr_elem_conv = *(LDKAPIError*)(arr_elem_ptr);
-                       arr_elem_conv = APIError_clone((LDKAPIError*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_APIErrorZ CVec_APIErrorZ_clone(const LDKCVec_APIErrorZ *orig) {
        LDKCVec_APIErrorZ ret = { .data = MALLOC(sizeof(LDKAPIError) * orig->datalen, "LDKCVec_APIErrorZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -2624,9 +2556,6 @@ static inline LDKCVec_APIErrorZ CVec_APIErrorZ_clone(const LDKCVec_APIErrorZ *or
        }
        return ret;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult__u832APIErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult__u832APIErrorZ*)arg)->result_ok;
-}
 int8_tArray  __attribute__((visibility("default"))) TS_LDKCResult__u832APIErrorZ_get_ok(uint32_t arg) {
        LDKCResult__u832APIErrorZ *val = (LDKCResult__u832APIErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -2690,6 +2619,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKPaymentSendFailure_ref_fro
                        if ((uint64_t)failed_paths_retry_var.inner > 4096) {
                                CHECK((((uint64_t)failed_paths_retry_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                                CHECK((((uint64_t)&failed_paths_retry_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(failed_paths_retry_var);
                                failed_paths_retry_ref = (uint64_t)failed_paths_retry_var.inner & ~1;
                        }
                        int8_tArray payment_id_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
@@ -2699,9 +2629,6 @@ uint32_t __attribute__((visibility("default"))) TS_LDKPaymentSendFailure_ref_fro
                default: abort();
        }
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_PaymentIdPaymentSendFailureZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_PaymentIdPaymentSendFailureZ*)arg)->result_ok;
-}
 int8_tArray  __attribute__((visibility("default"))) TS_LDKCResult_PaymentIdPaymentSendFailureZ_get_ok(uint32_t arg) {
        LDKCResult_PaymentIdPaymentSendFailureZ *val = (LDKCResult_PaymentIdPaymentSendFailureZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -2715,9 +2642,6 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_PaymentIdPaymentS
        uint64_t err_ref = ((uint64_t)&(*val->contents.err)) | 1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_NonePaymentSendFailureZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_NonePaymentSendFailureZ*)arg)->result_ok;
-}
 void  __attribute__((visibility("default"))) TS_LDKCResult_NonePaymentSendFailureZ_get_ok(uint32_t arg) {
        LDKCResult_NonePaymentSendFailureZ *val = (LDKCResult_NonePaymentSendFailureZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -2749,9 +2673,6 @@ int8_tArray  __attribute__((visibility("default"))) TS_C2Tuple_PaymentHashPaymen
        return ret_arr;
 }
 
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_get_ok(uint32_t arg) {
        LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ *val = (LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -2792,25 +2713,6 @@ uint32_t __attribute__((visibility("default"))) TS_LDKNetAddress_ref_from_ptr(ui
                default: abort();
        }
 }
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_NetAddressZ_new(uint32_tArray elems) {
-       LDKCVec_NetAddressZ *ret = MALLOC(sizeof(LDKCVec_NetAddressZ), "LDKCVec_NetAddressZ");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKNetAddress) * ret->datalen, "LDKCVec_NetAddressZ Data");
-               uint32_t *java_elems = (uint32_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       uint32_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKNetAddress arr_elem_conv = *(LDKNetAddress*)(arr_elem_ptr);
-                       arr_elem_conv = NetAddress_clone((LDKNetAddress*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_NetAddressZ CVec_NetAddressZ_clone(const LDKCVec_NetAddressZ *orig) {
        LDKCVec_NetAddressZ ret = { .data = MALLOC(sizeof(LDKNetAddress) * orig->datalen, "LDKCVec_NetAddressZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -2838,9 +2740,6 @@ int8_tArray  __attribute__((visibility("default"))) TS_C2Tuple_PaymentHashPaymen
        return ret_arr;
 }
 
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_PaymentSecretAPIErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_PaymentSecretAPIErrorZ*)arg)->result_ok;
-}
 int8_tArray  __attribute__((visibility("default"))) TS_LDKCResult_PaymentSecretAPIErrorZ_get_ok(uint32_t arg) {
        LDKCResult_PaymentSecretAPIErrorZ *val = (LDKCResult_PaymentSecretAPIErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -2854,25 +2753,6 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_PaymentSecretAPIE
        uint64_t err_ref = ((uint64_t)&(*val->contents.err)) | 1;
        return err_ref;
 }
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_ChannelMonitorZ_new(uint32_tArray elems) {
-       LDKCVec_ChannelMonitorZ *ret = MALLOC(sizeof(LDKCVec_ChannelMonitorZ), "LDKCVec_ChannelMonitorZ");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKChannelMonitor) * ret->datalen, "LDKCVec_ChannelMonitorZ Data");
-               uint32_t *java_elems = (uint32_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       uint32_t arr_elem = java_elems[i];
-                       LDKChannelMonitor arr_elem_conv;
-                       arr_elem_conv.inner = (void*)(arr_elem & (~1));
-                       arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0);
-                       arr_elem_conv = ChannelMonitor_clone(&arr_elem_conv);
-                       ret->data[i] = arr_elem_conv;
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_ChannelMonitorZ CVec_ChannelMonitorZ_clone(const LDKCVec_ChannelMonitorZ *orig) {
        LDKCVec_ChannelMonitorZ ret = { .data = MALLOC(sizeof(LDKChannelMonitor) * orig->datalen, "LDKCVec_ChannelMonitorZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -2901,6 +2781,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ watch_channel_LDKWatch_jcall(const void*
        uint64_t funding_txo_ref = 0;
        CHECK((((uint64_t)funding_txo_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&funding_txo_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_txo_var);
        funding_txo_ref = (uint64_t)funding_txo_var.inner;
        if (funding_txo_var.is_owned) {
                funding_txo_ref |= 1;
@@ -2909,6 +2790,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ watch_channel_LDKWatch_jcall(const void*
        uint64_t monitor_ref = 0;
        CHECK((((uint64_t)monitor_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&monitor_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(monitor_var);
        monitor_ref = (uint64_t)monitor_var.inner;
        if (monitor_var.is_owned) {
                monitor_ref |= 1;
@@ -2917,7 +2799,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ watch_channel_LDKWatch_jcall(const void*
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneChannelMonitorUpdateErrZ ret_conv = *(LDKCResult_NoneChannelMonitorUpdateErrZ*)(ret_ptr);
-       ret_conv = CResult_NoneChannelMonitorUpdateErrZ_clone((LDKCResult_NoneChannelMonitorUpdateErrZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 LDKCResult_NoneChannelMonitorUpdateErrZ update_channel_LDKWatch_jcall(const void* this_arg, LDKOutPoint funding_txo, LDKChannelMonitorUpdate update) {
@@ -2926,6 +2808,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ update_channel_LDKWatch_jcall(const void
        uint64_t funding_txo_ref = 0;
        CHECK((((uint64_t)funding_txo_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&funding_txo_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_txo_var);
        funding_txo_ref = (uint64_t)funding_txo_var.inner;
        if (funding_txo_var.is_owned) {
                funding_txo_ref |= 1;
@@ -2934,6 +2817,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ update_channel_LDKWatch_jcall(const void
        uint64_t update_ref = 0;
        CHECK((((uint64_t)update_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&update_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_var);
        update_ref = (uint64_t)update_var.inner;
        if (update_var.is_owned) {
                update_ref |= 1;
@@ -2942,7 +2826,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ update_channel_LDKWatch_jcall(const void
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneChannelMonitorUpdateErrZ ret_conv = *(LDKCResult_NoneChannelMonitorUpdateErrZ*)(ret_ptr);
-       ret_conv = CResult_NoneChannelMonitorUpdateErrZ_clone((LDKCResult_NoneChannelMonitorUpdateErrZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 LDKCVec_MonitorEventZ release_pending_monitor_events_LDKWatch_jcall(const void* this_arg) {
@@ -2960,7 +2844,7 @@ LDKCVec_MonitorEventZ release_pending_monitor_events_LDKWatch_jcall(const void*
                void* ret_conv_14_ptr = (void*)(((uint64_t)ret_conv_14) & ~1);
                CHECK_ACCESS(ret_conv_14_ptr);
                LDKMonitorEvent ret_conv_14_conv = *(LDKMonitorEvent*)(ret_conv_14_ptr);
-               ret_conv_14_conv = MonitorEvent_clone((LDKMonitorEvent*)(((uint64_t)ret_conv_14) & ~1));
+               FREE((void*)ret_conv_14);
                ret_constr.data[o] = ret_conv_14_conv;
        }
        return ret_constr;
@@ -2995,10 +2879,12 @@ uint32_t  __attribute__((visibility("default"))) TS_Watch_watch_channel(uint32_t
        LDKOutPoint funding_txo_conv;
        funding_txo_conv.inner = (void*)(funding_txo & (~1));
        funding_txo_conv.is_owned = (funding_txo & 1) || (funding_txo == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_txo_conv);
        funding_txo_conv = OutPoint_clone(&funding_txo_conv);
        LDKChannelMonitor monitor_conv;
        monitor_conv.inner = (void*)(monitor & (~1));
        monitor_conv.is_owned = (monitor & 1) || (monitor == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(monitor_conv);
        monitor_conv = ChannelMonitor_clone(&monitor_conv);
        LDKCResult_NoneChannelMonitorUpdateErrZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneChannelMonitorUpdateErrZ), "LDKCResult_NoneChannelMonitorUpdateErrZ");
        *ret_conv = (this_arg_conv->watch_channel)(this_arg_conv->this_arg, funding_txo_conv, monitor_conv);
@@ -3012,10 +2898,12 @@ uint32_t  __attribute__((visibility("default"))) TS_Watch_update_channel(uint32_
        LDKOutPoint funding_txo_conv;
        funding_txo_conv.inner = (void*)(funding_txo & (~1));
        funding_txo_conv.is_owned = (funding_txo & 1) || (funding_txo == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_txo_conv);
        funding_txo_conv = OutPoint_clone(&funding_txo_conv);
        LDKChannelMonitorUpdate update_conv;
        update_conv.inner = (void*)(update & (~1));
        update_conv.is_owned = (update & 1) || (update == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_conv);
        update_conv = ChannelMonitorUpdate_clone(&update_conv);
        LDKCResult_NoneChannelMonitorUpdateErrZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneChannelMonitorUpdateErrZ), "LDKCResult_NoneChannelMonitorUpdateErrZ");
        *ret_conv = (this_arg_conv->update_channel)(this_arg_conv->this_arg, funding_txo_conv, update_conv);
@@ -3139,7 +3027,7 @@ LDKShutdownScript get_shutdown_scriptpubkey_LDKKeysInterface_jcall(const void* t
        LDKShutdownScript ret_conv;
        ret_conv.inner = (void*)(ret & (~1));
        ret_conv.is_owned = (ret & 1) || (ret == 0);
-       ret_conv = ShutdownScript_clone(&ret_conv);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv);
        return ret_conv;
 }
 LDKSign get_channel_signer_LDKKeysInterface_jcall(const void* this_arg, bool inbound, uint64_t channel_value_satoshis) {
@@ -3148,7 +3036,7 @@ LDKSign get_channel_signer_LDKKeysInterface_jcall(const void* this_arg, bool inb
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKSign ret_conv = *(LDKSign*)(ret_ptr);
-       ret_conv = Sign_clone(&ret_conv);
+       FREE((void*)ret);
        return ret_conv;
 }
 LDKThirtyTwoBytes get_secure_random_bytes_LDKKeysInterface_jcall(const void* this_arg) {
@@ -3168,7 +3056,7 @@ LDKCResult_SignDecodeErrorZ read_chan_signer_LDKKeysInterface_jcall(const void*
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_SignDecodeErrorZ ret_conv = *(LDKCResult_SignDecodeErrorZ*)(ret_ptr);
-       ret_conv = CResult_SignDecodeErrorZ_clone((LDKCResult_SignDecodeErrorZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 LDKCResult_RecoverableSignatureNoneZ sign_invoice_LDKKeysInterface_jcall(const void* this_arg, LDKCVec_u8Z invoice_preimage) {
@@ -3181,7 +3069,7 @@ LDKCResult_RecoverableSignatureNoneZ sign_invoice_LDKKeysInterface_jcall(const v
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_RecoverableSignatureNoneZ ret_conv = *(LDKCResult_RecoverableSignatureNoneZ*)(ret_ptr);
-       ret_conv = CResult_RecoverableSignatureNoneZ_clone((LDKCResult_RecoverableSignatureNoneZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 static void LDKKeysInterface_JCalls_cloned(LDKKeysInterface* new_obj) {
@@ -3239,6 +3127,7 @@ uint32_t  __attribute__((visibility("default"))) TS_KeysInterface_get_shutdown_s
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -3346,11 +3235,19 @@ static void LDKLogger_JCalls_free(void* this_arg) {
                FREE(j_calls);
        }
 }
-void log_LDKLogger_jcall(const void* this_arg, const char* record) {
+void log_LDKLogger_jcall(const void* this_arg, const LDKRecord * record) {
        LDKLogger_JCalls *j_calls = (LDKLogger_JCalls*) this_arg;
-       const char* record_str = record;
-       jstring record_conv = str_ref_to_ts(record_str, strlen(record_str));
-       js_invoke_function_1(j_calls->log_meth, record_conv);
+       LDKRecord record_var = *record;
+       uint64_t record_ref = 0;
+       record_var = Record_clone(record);
+       CHECK((((uint64_t)record_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+       CHECK((((uint64_t)&record_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(record_var);
+       record_ref = (uint64_t)record_var.inner;
+       if (record_var.is_owned) {
+               record_ref |= 1;
+       }
+       js_invoke_function_1(j_calls->log_meth, record_ref);
 }
 static void LDKLogger_JCalls_cloned(LDKLogger* new_obj) {
        LDKLogger_JCalls *j_calls = (LDKLogger_JCalls*) new_obj->this_arg;
@@ -3392,13 +3289,11 @@ uint32_t  __attribute__((visibility("default"))) TS_C2Tuple_BlockHashChannelMana
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner & ~1;
        return ret_ref;
 }
 
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ *val = (LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3413,12 +3308,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_C2Tuple_BlockHash
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_ChannelConfigDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_ChannelConfigDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ChannelConfigDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_ChannelConfigDecodeErrorZ *val = (LDKCResult_ChannelConfigDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3426,6 +3319,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ChannelConfigDeco
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -3436,12 +3330,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ChannelConfigDeco
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_OutPointDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_OutPointDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_OutPointDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_OutPointDecodeErrorZ *val = (LDKCResult_OutPointDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3449,6 +3341,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_OutPointDecodeErr
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -3459,6 +3352,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_OutPointDecodeErr
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
@@ -3563,9 +3457,6 @@ uint32_t __attribute__((visibility("default"))) TS_LDKCOption_TypeZ_ref_from_ptr
                default: abort();
        }
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_COption_TypeZDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_COption_TypeZDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_COption_TypeZDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_COption_TypeZDecodeErrorZ *val = (LDKCResult_COption_TypeZDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3579,6 +3470,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_COption_TypeZDeco
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
@@ -3595,6 +3487,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKPaymentError_ref_from_ptr(
                        uint64_t routing_ref = 0;
                        CHECK((((uint64_t)routing_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&routing_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(routing_var);
                        routing_ref = (uint64_t)routing_var.inner & ~1;
                        return 0 /* LDKPaymentError - Routing */; (void) routing_ref;
                }
@@ -3605,9 +3498,6 @@ uint32_t __attribute__((visibility("default"))) TS_LDKPaymentError_ref_from_ptr(
                default: abort();
        }
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_PaymentIdPaymentErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_PaymentIdPaymentErrorZ*)arg)->result_ok;
-}
 int8_tArray  __attribute__((visibility("default"))) TS_LDKCResult_PaymentIdPaymentErrorZ_get_ok(uint32_t arg) {
        LDKCResult_PaymentIdPaymentErrorZ *val = (LDKCResult_PaymentIdPaymentErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3621,9 +3511,6 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_PaymentIdPaymentE
        uint64_t err_ref = ((uint64_t)&(*val->contents.err)) | 1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_SiPrefixNoneZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_SiPrefixNoneZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_SiPrefixNoneZ_get_ok(uint32_t arg) {
        LDKCResult_SiPrefixNoneZ *val = (LDKCResult_SiPrefixNoneZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3635,9 +3522,6 @@ void  __attribute__((visibility("default"))) TS_LDKCResult_SiPrefixNoneZ_get_err
        CHECK(!val->result_ok);
        return *val->contents.err;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_InvoiceNoneZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_InvoiceNoneZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_InvoiceNoneZ_get_ok(uint32_t arg) {
        LDKCResult_InvoiceNoneZ *val = (LDKCResult_InvoiceNoneZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3645,6 +3529,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_InvoiceNoneZ_get_
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -3653,9 +3538,6 @@ void  __attribute__((visibility("default"))) TS_LDKCResult_InvoiceNoneZ_get_err(
        CHECK(!val->result_ok);
        return *val->contents.err;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_SignedRawInvoiceNoneZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_SignedRawInvoiceNoneZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_SignedRawInvoiceNoneZ_get_ok(uint32_t arg) {
        LDKCResult_SignedRawInvoiceNoneZ *val = (LDKCResult_SignedRawInvoiceNoneZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3663,6 +3545,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_SignedRawInvoiceN
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -3680,6 +3563,7 @@ uint32_t  __attribute__((visibility("default"))) TS_C3Tuple_RawInvoice_u832Invoi
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -3706,6 +3590,7 @@ uint32_t  __attribute__((visibility("default"))) TS_C3Tuple_RawInvoice_u832Invoi
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -3713,9 +3598,6 @@ uint32_t  __attribute__((visibility("default"))) TS_C3Tuple_RawInvoice_u832Invoi
        return ret_ref;
 }
 
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_PayeePubKeyErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_PayeePubKeyErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_PayeePubKeyErrorZ_get_ok(uint32_t arg) {
        LDKCResult_PayeePubKeyErrorZ *val = (LDKCResult_PayeePubKeyErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3723,6 +3605,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_PayeePubKeyErrorZ
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -3732,25 +3615,6 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_PayeePubKeyErrorZ
        uint32_t err_conv = LDKSecp256k1Error_to_js((*val->contents.err));
        return err_conv;
 }
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_PrivateRouteZ_new(uint32_tArray elems) {
-       LDKCVec_PrivateRouteZ *ret = MALLOC(sizeof(LDKCVec_PrivateRouteZ), "LDKCVec_PrivateRouteZ");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKPrivateRoute) * ret->datalen, "LDKCVec_PrivateRouteZ Data");
-               uint32_t *java_elems = (uint32_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       uint32_t arr_elem = java_elems[i];
-                       LDKPrivateRoute arr_elem_conv;
-                       arr_elem_conv.inner = (void*)(arr_elem & (~1));
-                       arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0);
-                       arr_elem_conv = PrivateRoute_clone(&arr_elem_conv);
-                       ret->data[i] = arr_elem_conv;
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_PrivateRouteZ CVec_PrivateRouteZ_clone(const LDKCVec_PrivateRouteZ *orig) {
        LDKCVec_PrivateRouteZ ret = { .data = MALLOC(sizeof(LDKPrivateRoute) * orig->datalen, "LDKCVec_PrivateRouteZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -3758,9 +3622,6 @@ static inline LDKCVec_PrivateRouteZ CVec_PrivateRouteZ_clone(const LDKCVec_Priva
        }
        return ret;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_PositiveTimestampCreationErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_PositiveTimestampCreationErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_PositiveTimestampCreationErrorZ_get_ok(uint32_t arg) {
        LDKCResult_PositiveTimestampCreationErrorZ *val = (LDKCResult_PositiveTimestampCreationErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3768,6 +3629,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_PositiveTimestamp
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -3777,9 +3639,6 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_PositiveTimestamp
        uint32_t err_conv = LDKCreationError_to_js((*val->contents.err));
        return err_conv;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_NoneSemanticErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_NoneSemanticErrorZ*)arg)->result_ok;
-}
 void  __attribute__((visibility("default"))) TS_LDKCResult_NoneSemanticErrorZ_get_ok(uint32_t arg) {
        LDKCResult_NoneSemanticErrorZ *val = (LDKCResult_NoneSemanticErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3791,9 +3650,6 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_NoneSemanticError
        uint32_t err_conv = LDKSemanticError_to_js((*val->contents.err));
        return err_conv;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_InvoiceSemanticErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_InvoiceSemanticErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_InvoiceSemanticErrorZ_get_ok(uint32_t arg) {
        LDKCResult_InvoiceSemanticErrorZ *val = (LDKCResult_InvoiceSemanticErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3801,6 +3657,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_InvoiceSemanticEr
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -3810,9 +3667,6 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_InvoiceSemanticEr
        uint32_t err_conv = LDKSemanticError_to_js((*val->contents.err));
        return err_conv;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_DescriptionCreationErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_DescriptionCreationErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_DescriptionCreationErrorZ_get_ok(uint32_t arg) {
        LDKCResult_DescriptionCreationErrorZ *val = (LDKCResult_DescriptionCreationErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3820,6 +3674,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_DescriptionCreati
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -3829,9 +3684,6 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_DescriptionCreati
        uint32_t err_conv = LDKCreationError_to_js((*val->contents.err));
        return err_conv;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_ExpiryTimeCreationErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_ExpiryTimeCreationErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ExpiryTimeCreationErrorZ_get_ok(uint32_t arg) {
        LDKCResult_ExpiryTimeCreationErrorZ *val = (LDKCResult_ExpiryTimeCreationErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3839,6 +3691,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ExpiryTimeCreatio
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -3848,9 +3701,6 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ExpiryTimeCreatio
        uint32_t err_conv = LDKCreationError_to_js((*val->contents.err));
        return err_conv;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_PrivateRouteCreationErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_PrivateRouteCreationErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_PrivateRouteCreationErrorZ_get_ok(uint32_t arg) {
        LDKCResult_PrivateRouteCreationErrorZ *val = (LDKCResult_PrivateRouteCreationErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3858,6 +3708,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_PrivateRouteCreat
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -3867,9 +3718,6 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_PrivateRouteCreat
        uint32_t err_conv = LDKCreationError_to_js((*val->contents.err));
        return err_conv;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_StringErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_StringErrorZ*)arg)->result_ok;
-}
 jstring  __attribute__((visibility("default"))) TS_LDKCResult_StringErrorZ_get_ok(uint32_t arg) {
        LDKCResult_StringErrorZ *val = (LDKCResult_StringErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3883,9 +3731,6 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_StringErrorZ_get_
        uint32_t err_conv = LDKSecp256k1Error_to_js((*val->contents.err));
        return err_conv;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_ChannelMonitorUpdateDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_ChannelMonitorUpdateDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ChannelMonitorUpdateDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_ChannelMonitorUpdateDecodeErrorZ *val = (LDKCResult_ChannelMonitorUpdateDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3893,6 +3738,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ChannelMonitorUpd
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -3903,11 +3749,39 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ChannelMonitorUpd
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_HTLCUpdateDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_HTLCUpdateDecodeErrorZ*)arg)->result_ok;
+uint32_t __attribute__((visibility("default"))) TS_LDKCOption_MonitorEventZ_ref_from_ptr(uint32_t ptr) {
+       LDKCOption_MonitorEventZ *obj = (LDKCOption_MonitorEventZ*)(ptr & ~1);
+       switch(obj->tag) {
+               case LDKCOption_MonitorEventZ_Some: {
+                       uint64_t some_ref = ((uint64_t)&obj->some) | 1;
+                       return 0 /* LDKCOption_MonitorEventZ - Some */; (void) some_ref;
+               }
+               case LDKCOption_MonitorEventZ_None: {
+                       return 0 /* LDKCOption_MonitorEventZ - None */;
+               }
+               default: abort();
+       }
+}
+uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_COption_MonitorEventZDecodeErrorZ_get_ok(uint32_t arg) {
+       LDKCResult_COption_MonitorEventZDecodeErrorZ *val = (LDKCResult_COption_MonitorEventZDecodeErrorZ*)(arg & ~1);
+       CHECK(val->result_ok);
+       uint64_t res_ref = ((uint64_t)&(*val->contents.result)) | 1;
+       return res_ref;
+}
+uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_COption_MonitorEventZDecodeErrorZ_get_err(uint32_t arg) {
+       LDKCResult_COption_MonitorEventZDecodeErrorZ *val = (LDKCResult_COption_MonitorEventZDecodeErrorZ*)(arg & ~1);
+       CHECK(!val->result_ok);
+       LDKDecodeError err_var = (*val->contents.err);
+       uint64_t err_ref = 0;
+       CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+       CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
+       err_ref = (uint64_t)err_var.inner & ~1;
+       return err_ref;
 }
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_HTLCUpdateDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_HTLCUpdateDecodeErrorZ *val = (LDKCResult_HTLCUpdateDecodeErrorZ*)(arg & ~1);
@@ -3916,6 +3790,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_HTLCUpdateDecodeE
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -3926,12 +3801,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_HTLCUpdateDecodeE
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_NoneMonitorUpdateErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_NoneMonitorUpdateErrorZ*)arg)->result_ok;
-}
 void  __attribute__((visibility("default"))) TS_LDKCResult_NoneMonitorUpdateErrorZ_get_ok(uint32_t arg) {
        LDKCResult_NoneMonitorUpdateErrorZ *val = (LDKCResult_NoneMonitorUpdateErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3944,6 +3817,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_NoneMonitorUpdate
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
@@ -3956,6 +3830,7 @@ uint32_t  __attribute__((visibility("default"))) TS_C2Tuple_OutPointScriptZ_get_
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -3996,25 +3871,6 @@ int8_tArray  __attribute__((visibility("default"))) TS_C2Tuple_u32ScriptZ_get_b(
        return ret_arr;
 }
 
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_C2Tuple_u32ScriptZZ_new(uint32_tArray elems) {
-       LDKCVec_C2Tuple_u32ScriptZZ *ret = MALLOC(sizeof(LDKCVec_C2Tuple_u32ScriptZZ), "LDKCVec_C2Tuple_u32ScriptZZ");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKC2Tuple_u32ScriptZ) * ret->datalen, "LDKCVec_C2Tuple_u32ScriptZZ Data");
-               uint32_t *java_elems = (uint32_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       uint32_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKC2Tuple_u32ScriptZ arr_elem_conv = *(LDKC2Tuple_u32ScriptZ*)(arr_elem_ptr);
-                       arr_elem_conv = C2Tuple_u32ScriptZ_clone((LDKC2Tuple_u32ScriptZ*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_C2Tuple_u32ScriptZZ CVec_C2Tuple_u32ScriptZZ_clone(const LDKCVec_C2Tuple_u32ScriptZZ *orig) {
        LDKCVec_C2Tuple_u32ScriptZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_u32ScriptZ) * orig->datalen, "LDKCVec_C2Tuple_u32ScriptZZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -4051,25 +3907,6 @@ uint32_tArray  __attribute__((visibility("default"))) TS_C2Tuple_TxidCVec_C2Tupl
        return ret_arr;
 }
 
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ_new(uint32_tArray elems) {
-       LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ *ret = MALLOC(sizeof(LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ), "LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ) * ret->datalen, "LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ Data");
-               uint32_t *java_elems = (uint32_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       uint32_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ arr_elem_conv = *(LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ*)(arr_elem_ptr);
-                       arr_elem_conv = C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_clone((LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ CVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ_clone(const LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ *orig) {
        LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ) * orig->datalen, "LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -4077,166 +3914,6 @@ static inline LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ CVec_C2Tuple_TxidCV
        }
        return ret;
 }
-uint32_t __attribute__((visibility("default"))) TS_LDKPaymentPurpose_ref_from_ptr(uint32_t ptr) {
-       LDKPaymentPurpose *obj = (LDKPaymentPurpose*)(ptr & ~1);
-       switch(obj->tag) {
-               case LDKPaymentPurpose_InvoicePayment: {
-                       int8_tArray payment_preimage_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
-                       memcpy((uint8_t*)(payment_preimage_arr + 4), obj->invoice_payment.payment_preimage.data, 32);
-                       int8_tArray payment_secret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
-                       memcpy((uint8_t*)(payment_secret_arr + 4), obj->invoice_payment.payment_secret.data, 32);
-                       return 0 /* LDKPaymentPurpose - InvoicePayment */; (void) payment_preimage_arr; (void) payment_secret_arr; (void) obj->invoice_payment.user_payment_id;
-               }
-               case LDKPaymentPurpose_SpontaneousPayment: {
-                       int8_tArray spontaneous_payment_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
-                       memcpy((uint8_t*)(spontaneous_payment_arr + 4), obj->spontaneous_payment.data, 32);
-                       return 0 /* LDKPaymentPurpose - SpontaneousPayment */; (void) spontaneous_payment_arr;
-               }
-               default: abort();
-       }
-}
-uint32_t __attribute__((visibility("default"))) TS_LDKClosureReason_ref_from_ptr(uint32_t ptr) {
-       LDKClosureReason *obj = (LDKClosureReason*)(ptr & ~1);
-       switch(obj->tag) {
-               case LDKClosureReason_CounterpartyForceClosed: {
-                       LDKStr peer_msg_str = obj->counterparty_force_closed.peer_msg;
-                       jstring peer_msg_conv = str_ref_to_ts(peer_msg_str.chars, peer_msg_str.len);
-                       return 0 /* LDKClosureReason - CounterpartyForceClosed */; (void) peer_msg_conv;
-               }
-               case LDKClosureReason_HolderForceClosed: {
-                       return 0 /* LDKClosureReason - HolderForceClosed */;
-               }
-               case LDKClosureReason_CooperativeClosure: {
-                       return 0 /* LDKClosureReason - CooperativeClosure */;
-               }
-               case LDKClosureReason_CommitmentTxConfirmed: {
-                       return 0 /* LDKClosureReason - CommitmentTxConfirmed */;
-               }
-               case LDKClosureReason_ProcessingError: {
-                       LDKStr err_str = obj->processing_error.err;
-                       jstring err_conv = str_ref_to_ts(err_str.chars, err_str.len);
-                       return 0 /* LDKClosureReason - ProcessingError */; (void) err_conv;
-               }
-               case LDKClosureReason_DisconnectedPeer: {
-                       return 0 /* LDKClosureReason - DisconnectedPeer */;
-               }
-               case LDKClosureReason_OutdatedChannelManager: {
-                       return 0 /* LDKClosureReason - OutdatedChannelManager */;
-               }
-               default: abort();
-       }
-}
-uint32_t __attribute__((visibility("default"))) TS_LDKEvent_ref_from_ptr(uint32_t ptr) {
-       LDKEvent *obj = (LDKEvent*)(ptr & ~1);
-       switch(obj->tag) {
-               case LDKEvent_FundingGenerationReady: {
-                       int8_tArray temporary_channel_id_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
-                       memcpy((uint8_t*)(temporary_channel_id_arr + 4), obj->funding_generation_ready.temporary_channel_id.data, 32);
-                       LDKCVec_u8Z output_script_var = obj->funding_generation_ready.output_script;
-                       int8_tArray output_script_arr = init_arr(output_script_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
-                       memcpy((uint8_t*)(output_script_arr + 4), output_script_var.data, output_script_var.datalen);
-                       return 0 /* LDKEvent - FundingGenerationReady */; (void) temporary_channel_id_arr; (void) obj->funding_generation_ready.channel_value_satoshis; (void) output_script_arr; (void) obj->funding_generation_ready.user_channel_id;
-               }
-               case LDKEvent_PaymentReceived: {
-                       int8_tArray payment_hash_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
-                       memcpy((uint8_t*)(payment_hash_arr + 4), obj->payment_received.payment_hash.data, 32);
-                       uint64_t purpose_ref = ((uint64_t)&obj->payment_received.purpose) | 1;
-                       return 0 /* LDKEvent - PaymentReceived */; (void) payment_hash_arr; (void) obj->payment_received.amt; (void) purpose_ref;
-               }
-               case LDKEvent_PaymentSent: {
-                       int8_tArray payment_id_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
-                       memcpy((uint8_t*)(payment_id_arr + 4), obj->payment_sent.payment_id.data, 32);
-                       int8_tArray payment_preimage_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
-                       memcpy((uint8_t*)(payment_preimage_arr + 4), obj->payment_sent.payment_preimage.data, 32);
-                       int8_tArray payment_hash_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
-                       memcpy((uint8_t*)(payment_hash_arr + 4), obj->payment_sent.payment_hash.data, 32);
-                       uint64_t fee_paid_msat_ref = ((uint64_t)&obj->payment_sent.fee_paid_msat) | 1;
-                       return 0 /* LDKEvent - PaymentSent */; (void) payment_id_arr; (void) payment_preimage_arr; (void) payment_hash_arr; (void) fee_paid_msat_ref;
-               }
-               case LDKEvent_PaymentPathFailed: {
-                       int8_tArray payment_id_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
-                       memcpy((uint8_t*)(payment_id_arr + 4), obj->payment_path_failed.payment_id.data, 32);
-                       int8_tArray payment_hash_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
-                       memcpy((uint8_t*)(payment_hash_arr + 4), obj->payment_path_failed.payment_hash.data, 32);
-                       uint64_t network_update_ref = ((uint64_t)&obj->payment_path_failed.network_update) | 1;
-                       LDKCVec_RouteHopZ path_var = obj->payment_path_failed.path;
-                       uint32_tArray path_arr = NULL;
-                       path_arr = init_arr(path_var.datalen, sizeof(uint32_t), "Native uint32_tArray Bytes");
-                       uint32_t *path_arr_ptr = (uint32_t*)(path_arr + 4);
-                       for (size_t k = 0; k < path_var.datalen; k++) {
-                               LDKRouteHop path_conv_10_var = path_var.data[k];
-                               uint64_t path_conv_10_ref = 0;
-                               CHECK((((uint64_t)path_conv_10_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
-                               CHECK((((uint64_t)&path_conv_10_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
-                               path_conv_10_ref = (uint64_t)path_conv_10_var.inner & ~1;
-                               path_arr_ptr[k] = path_conv_10_ref;
-                       }
-                       
-                       uint64_t short_channel_id_ref = ((uint64_t)&obj->payment_path_failed.short_channel_id) | 1;
-                       LDKRouteParameters retry_var = obj->payment_path_failed.retry;
-                       uint64_t retry_ref = 0;
-                       if ((uint64_t)retry_var.inner > 4096) {
-                               CHECK((((uint64_t)retry_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
-                               CHECK((((uint64_t)&retry_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
-                               retry_ref = (uint64_t)retry_var.inner & ~1;
-                       }
-                       return 0 /* LDKEvent - PaymentPathFailed */; (void) payment_id_arr; (void) payment_hash_arr; (void) obj->payment_path_failed.rejected_by_dest; (void) network_update_ref; (void) obj->payment_path_failed.all_paths_failed; (void) path_arr; (void) short_channel_id_ref; (void) retry_ref;
-               }
-               case LDKEvent_PendingHTLCsForwardable: {
-                       return 0 /* LDKEvent - PendingHTLCsForwardable */; (void) obj->pending_htl_cs_forwardable.time_forwardable;
-               }
-               case LDKEvent_SpendableOutputs: {
-                       LDKCVec_SpendableOutputDescriptorZ outputs_var = obj->spendable_outputs.outputs;
-                       uint32_tArray outputs_arr = NULL;
-                       outputs_arr = init_arr(outputs_var.datalen, sizeof(uint32_t), "Native uint32_tArray Bytes");
-                       uint32_t *outputs_arr_ptr = (uint32_t*)(outputs_arr + 4);
-                       for (size_t b = 0; b < outputs_var.datalen; b++) {
-                               uint64_t outputs_conv_27_ref = ((uint64_t)&outputs_var.data[b]) | 1;
-                               outputs_arr_ptr[b] = outputs_conv_27_ref;
-                       }
-                       
-                       return 0 /* LDKEvent - SpendableOutputs */; (void) outputs_arr;
-               }
-               case LDKEvent_PaymentForwarded: {
-                       uint64_t fee_earned_msat_ref = ((uint64_t)&obj->payment_forwarded.fee_earned_msat) | 1;
-                       return 0 /* LDKEvent - PaymentForwarded */; (void) fee_earned_msat_ref; (void) obj->payment_forwarded.claim_from_onchain_tx;
-               }
-               case LDKEvent_ChannelClosed: {
-                       int8_tArray channel_id_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
-                       memcpy((uint8_t*)(channel_id_arr + 4), obj->channel_closed.channel_id.data, 32);
-                       uint64_t reason_ref = ((uint64_t)&obj->channel_closed.reason) | 1;
-                       return 0 /* LDKEvent - ChannelClosed */; (void) channel_id_arr; (void) obj->channel_closed.user_channel_id; (void) reason_ref;
-               }
-               case LDKEvent_DiscardFunding: {
-                       int8_tArray channel_id_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
-                       memcpy((uint8_t*)(channel_id_arr + 4), obj->discard_funding.channel_id.data, 32);
-                       LDKTransaction transaction_var = obj->discard_funding.transaction;
-                       int8_tArray transaction_arr = init_arr(transaction_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
-                       memcpy((uint8_t*)(transaction_arr + 4), transaction_var.data, transaction_var.datalen);
-                       return 0 /* LDKEvent - DiscardFunding */; (void) channel_id_arr; (void) transaction_arr;
-               }
-               default: abort();
-       }
-}
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_EventZ_new(uint32_tArray elems) {
-       LDKCVec_EventZ *ret = MALLOC(sizeof(LDKCVec_EventZ), "LDKCVec_EventZ");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKEvent) * ret->datalen, "LDKCVec_EventZ Data");
-               uint32_t *java_elems = (uint32_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       uint32_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKEvent arr_elem_conv = *(LDKEvent*)(arr_elem_ptr);
-                       arr_elem_conv = Event_clone((LDKEvent*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_EventZ CVec_EventZ_clone(const LDKCVec_EventZ *orig) {
        LDKCVec_EventZ ret = { .data = MALLOC(sizeof(LDKEvent) * orig->datalen, "LDKCVec_EventZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -4263,25 +3940,6 @@ uint32_t  __attribute__((visibility("default"))) TS_C2Tuple_u32TxOutZ_get_b(uint
        return (uint64_t)ret_ref;
 }
 
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_C2Tuple_u32TxOutZZ_new(uint32_tArray elems) {
-       LDKCVec_C2Tuple_u32TxOutZZ *ret = MALLOC(sizeof(LDKCVec_C2Tuple_u32TxOutZZ), "LDKCVec_C2Tuple_u32TxOutZZ");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKC2Tuple_u32TxOutZ) * ret->datalen, "LDKCVec_C2Tuple_u32TxOutZZ Data");
-               uint32_t *java_elems = (uint32_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       uint32_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKC2Tuple_u32TxOutZ arr_elem_conv = *(LDKC2Tuple_u32TxOutZ*)(arr_elem_ptr);
-                       arr_elem_conv = C2Tuple_u32TxOutZ_clone((LDKC2Tuple_u32TxOutZ*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_C2Tuple_u32TxOutZZ CVec_C2Tuple_u32TxOutZZ_clone(const LDKCVec_C2Tuple_u32TxOutZZ *orig) {
        LDKCVec_C2Tuple_u32TxOutZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_u32TxOutZ) * orig->datalen, "LDKCVec_C2Tuple_u32TxOutZZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -4318,25 +3976,6 @@ uint32_tArray  __attribute__((visibility("default"))) TS_C2Tuple_TxidCVec_C2Tupl
        return ret_arr;
 }
 
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ_new(uint32_tArray elems) {
-       LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ *ret = MALLOC(sizeof(LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ), "LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ) * ret->datalen, "LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ Data");
-               uint32_t *java_elems = (uint32_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       uint32_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ arr_elem_conv = *(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ*)(arr_elem_ptr);
-                       arr_elem_conv = C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_clone((LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ CVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ_clone(const LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ *orig) {
        LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ) * orig->datalen, "LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -4362,25 +4001,6 @@ uint32_t __attribute__((visibility("default"))) TS_LDKBalance_ref_from_ptr(uint3
                default: abort();
        }
 }
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_BalanceZ_new(uint32_tArray elems) {
-       LDKCVec_BalanceZ *ret = MALLOC(sizeof(LDKCVec_BalanceZ), "LDKCVec_BalanceZ");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKBalance) * ret->datalen, "LDKCVec_BalanceZ Data");
-               uint32_t *java_elems = (uint32_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       uint32_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKBalance arr_elem_conv = *(LDKBalance*)(arr_elem_ptr);
-                       arr_elem_conv = Balance_clone((LDKBalance*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_BalanceZ CVec_BalanceZ_clone(const LDKCVec_BalanceZ *orig) {
        LDKCVec_BalanceZ ret = { .data = MALLOC(sizeof(LDKBalance) * orig->datalen, "LDKCVec_BalanceZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -4388,9 +4008,6 @@ static inline LDKCVec_BalanceZ CVec_BalanceZ_clone(const LDKCVec_BalanceZ *orig)
        }
        return ret;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ *val = (LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -4406,12 +4023,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_C2Tuple_BlockHash
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_NoneLightningErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_NoneLightningErrorZ*)arg)->result_ok;
-}
 void  __attribute__((visibility("default"))) TS_LDKCResult_NoneLightningErrorZ_get_ok(uint32_t arg) {
        LDKCResult_NoneLightningErrorZ *val = (LDKCResult_NoneLightningErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -4424,6 +4039,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_NoneLightningErro
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
@@ -4447,25 +4063,6 @@ uint32_t  __attribute__((visibility("default"))) TS_C2Tuple_PublicKeyTypeZ_get_b
        return (uint64_t)ret_ret;
 }
 
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_C2Tuple_PublicKeyTypeZZ_new(uint32_tArray elems) {
-       LDKCVec_C2Tuple_PublicKeyTypeZZ *ret = MALLOC(sizeof(LDKCVec_C2Tuple_PublicKeyTypeZZ), "LDKCVec_C2Tuple_PublicKeyTypeZZ");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKC2Tuple_PublicKeyTypeZ) * ret->datalen, "LDKCVec_C2Tuple_PublicKeyTypeZZ Data");
-               uint32_t *java_elems = (uint32_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       uint32_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKC2Tuple_PublicKeyTypeZ arr_elem_conv = *(LDKC2Tuple_PublicKeyTypeZ*)(arr_elem_ptr);
-                       arr_elem_conv = C2Tuple_PublicKeyTypeZ_clone((LDKC2Tuple_PublicKeyTypeZ*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_C2Tuple_PublicKeyTypeZZ CVec_C2Tuple_PublicKeyTypeZZ_clone(const LDKCVec_C2Tuple_PublicKeyTypeZZ *orig) {
        LDKCVec_C2Tuple_PublicKeyTypeZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_PublicKeyTypeZ) * orig->datalen, "LDKCVec_C2Tuple_PublicKeyTypeZZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -4473,9 +4070,6 @@ static inline LDKCVec_C2Tuple_PublicKeyTypeZZ CVec_C2Tuple_PublicKeyTypeZZ_clone
        }
        return ret;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_boolLightningErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_boolLightningErrorZ*)arg)->result_ok;
-}
 jboolean  __attribute__((visibility("default"))) TS_LDKCResult_boolLightningErrorZ_get_ok(uint32_t arg) {
        LDKCResult_boolLightningErrorZ *val = (LDKCResult_boolLightningErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -4488,6 +4082,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_boolLightningErro
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
@@ -4500,6 +4095,7 @@ uint32_t  __attribute__((visibility("default"))) TS_C3Tuple_ChannelAnnouncementC
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -4516,6 +4112,7 @@ uint32_t  __attribute__((visibility("default"))) TS_C3Tuple_ChannelAnnouncementC
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -4532,6 +4129,7 @@ uint32_t  __attribute__((visibility("default"))) TS_C3Tuple_ChannelAnnouncementC
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -4539,25 +4137,6 @@ uint32_t  __attribute__((visibility("default"))) TS_C3Tuple_ChannelAnnouncementC
        return ret_ref;
 }
 
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ_new(uint32_tArray elems) {
-       LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ *ret = MALLOC(sizeof(LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ), "LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ) * ret->datalen, "LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ Data");
-               uint32_t *java_elems = (uint32_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       uint32_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ arr_elem_conv = *(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ*)(arr_elem_ptr);
-                       arr_elem_conv = C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_clone((LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ CVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ_clone(const LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ *orig) {
        LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ ret = { .data = MALLOC(sizeof(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ) * orig->datalen, "LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -4565,25 +4144,6 @@ static inline LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ CV
        }
        return ret;
 }
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_NodeAnnouncementZ_new(uint32_tArray elems) {
-       LDKCVec_NodeAnnouncementZ *ret = MALLOC(sizeof(LDKCVec_NodeAnnouncementZ), "LDKCVec_NodeAnnouncementZ");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKNodeAnnouncement) * ret->datalen, "LDKCVec_NodeAnnouncementZ Data");
-               uint32_t *java_elems = (uint32_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       uint32_t arr_elem = java_elems[i];
-                       LDKNodeAnnouncement arr_elem_conv;
-                       arr_elem_conv.inner = (void*)(arr_elem & (~1));
-                       arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0);
-                       arr_elem_conv = NodeAnnouncement_clone(&arr_elem_conv);
-                       ret->data[i] = arr_elem_conv;
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_NodeAnnouncementZ CVec_NodeAnnouncementZ_clone(const LDKCVec_NodeAnnouncementZ *orig) {
        LDKCVec_NodeAnnouncementZ ret = { .data = MALLOC(sizeof(LDKNodeAnnouncement) * orig->datalen, "LDKCVec_NodeAnnouncementZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -4591,9 +4151,6 @@ static inline LDKCVec_NodeAnnouncementZ CVec_NodeAnnouncementZ_clone(const LDKCV
        }
        return ret;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_CVec_u8ZPeerHandleErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_CVec_u8ZPeerHandleErrorZ*)arg)->result_ok;
-}
 int8_tArray  __attribute__((visibility("default"))) TS_LDKCResult_CVec_u8ZPeerHandleErrorZ_get_ok(uint32_t arg) {
        LDKCResult_CVec_u8ZPeerHandleErrorZ *val = (LDKCResult_CVec_u8ZPeerHandleErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -4609,12 +4166,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_CVec_u8ZPeerHandl
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_NonePeerHandleErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_NonePeerHandleErrorZ*)arg)->result_ok;
-}
 void  __attribute__((visibility("default"))) TS_LDKCResult_NonePeerHandleErrorZ_get_ok(uint32_t arg) {
        LDKCResult_NonePeerHandleErrorZ *val = (LDKCResult_NonePeerHandleErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -4627,12 +4182,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_NonePeerHandleErr
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_boolPeerHandleErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_boolPeerHandleErrorZ*)arg)->result_ok;
-}
 jboolean  __attribute__((visibility("default"))) TS_LDKCResult_boolPeerHandleErrorZ_get_ok(uint32_t arg) {
        LDKCResult_boolPeerHandleErrorZ *val = (LDKCResult_boolPeerHandleErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -4645,12 +4198,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_boolPeerHandleErr
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_NodeIdDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_NodeIdDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_NodeIdDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_NodeIdDecodeErrorZ *val = (LDKCResult_NodeIdDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -4658,6 +4209,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_NodeIdDecodeError
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -4668,6 +4220,24 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_NodeIdDecodeError
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
+       err_ref = (uint64_t)err_var.inner & ~1;
+       return err_ref;
+}
+uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_COption_NetworkUpdateZDecodeErrorZ_get_ok(uint32_t arg) {
+       LDKCResult_COption_NetworkUpdateZDecodeErrorZ *val = (LDKCResult_COption_NetworkUpdateZDecodeErrorZ*)(arg & ~1);
+       CHECK(val->result_ok);
+       uint64_t res_ref = ((uint64_t)&(*val->contents.result)) | 1;
+       return res_ref;
+}
+uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_COption_NetworkUpdateZDecodeErrorZ_get_err(uint32_t arg) {
+       LDKCResult_COption_NetworkUpdateZDecodeErrorZ *val = (LDKCResult_COption_NetworkUpdateZDecodeErrorZ*)(arg & ~1);
+       CHECK(!val->result_ok);
+       LDKDecodeError err_var = (*val->contents.err);
+       uint64_t err_ref = 0;
+       CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+       CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
@@ -4690,7 +4260,7 @@ LDKCResult_TxOutAccessErrorZ get_utxo_LDKAccess_jcall(const void* this_arg, cons
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_TxOutAccessErrorZ ret_conv = *(LDKCResult_TxOutAccessErrorZ*)(ret_ptr);
-       ret_conv = CResult_TxOutAccessErrorZ_clone((LDKCResult_TxOutAccessErrorZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 static void LDKAccess_JCalls_cloned(LDKAccess* new_obj) {
@@ -4742,9 +4312,6 @@ uint32_t __attribute__((visibility("default"))) TS_LDKCOption_AccessZ_ref_from_p
                default: abort();
        }
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_DirectionalChannelInfoDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_DirectionalChannelInfoDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_DirectionalChannelInfoDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_DirectionalChannelInfoDecodeErrorZ *val = (LDKCResult_DirectionalChannelInfoDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -4752,6 +4319,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_DirectionalChanne
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -4762,12 +4330,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_DirectionalChanne
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_ChannelInfoDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_ChannelInfoDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ChannelInfoDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_ChannelInfoDecodeErrorZ *val = (LDKCResult_ChannelInfoDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -4775,6 +4341,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ChannelInfoDecode
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -4785,12 +4352,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ChannelInfoDecode
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_RoutingFeesDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_RoutingFeesDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_RoutingFeesDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_RoutingFeesDecodeErrorZ *val = (LDKCResult_RoutingFeesDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -4798,6 +4363,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_RoutingFeesDecode
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -4808,12 +4374,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_RoutingFeesDecode
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_NodeAnnouncementInfoDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_NodeAnnouncementInfoDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_NodeAnnouncementInfoDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_NodeAnnouncementInfoDecodeErrorZ *val = (LDKCResult_NodeAnnouncementInfoDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -4821,6 +4385,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_NodeAnnouncementI
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -4831,31 +4396,15 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_NodeAnnouncementI
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_u64Z_new(int64_tArray elems) {
-       LDKCVec_u64Z *ret = MALLOC(sizeof(LDKCVec_u64Z), "LDKCVec_u64Z");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(uint64_t) * ret->datalen, "LDKCVec_u64Z Data");
-               int64_t *java_elems = (int64_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       ret->data[i] = java_elems[i];
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_u64Z CVec_u64Z_clone(const LDKCVec_u64Z *orig) {
        LDKCVec_u64Z ret = { .data = MALLOC(sizeof(int64_t) * orig->datalen, "LDKCVec_u64Z clone bytes"), .datalen = orig->datalen };
        memcpy(ret.data, orig->data, sizeof(int64_t) * ret.datalen);
        return ret;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_NodeInfoDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_NodeInfoDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_NodeInfoDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_NodeInfoDecodeErrorZ *val = (LDKCResult_NodeInfoDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -4863,6 +4412,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_NodeInfoDecodeErr
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -4873,12 +4423,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_NodeInfoDecodeErr
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_NetworkGraphDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_NetworkGraphDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_NetworkGraphDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_NetworkGraphDecodeErrorZ *val = (LDKCResult_NetworkGraphDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -4886,6 +4434,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_NetworkGraphDecod
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -4896,6 +4445,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_NetworkGraphDecod
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
@@ -4920,9 +4470,6 @@ uint32_t __attribute__((visibility("default"))) TS_LDKCOption_CVec_NetAddressZZ_
                default: abort();
        }
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_NetAddressDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_NetAddressDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_NetAddressDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_NetAddressDecodeErrorZ *val = (LDKCResult_NetAddressDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -4936,28 +4483,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_NetAddressDecodeE
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_UpdateAddHTLCZ_new(uint32_tArray elems) {
-       LDKCVec_UpdateAddHTLCZ *ret = MALLOC(sizeof(LDKCVec_UpdateAddHTLCZ), "LDKCVec_UpdateAddHTLCZ");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKUpdateAddHTLC) * ret->datalen, "LDKCVec_UpdateAddHTLCZ Data");
-               uint32_t *java_elems = (uint32_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       uint32_t arr_elem = java_elems[i];
-                       LDKUpdateAddHTLC arr_elem_conv;
-                       arr_elem_conv.inner = (void*)(arr_elem & (~1));
-                       arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0);
-                       arr_elem_conv = UpdateAddHTLC_clone(&arr_elem_conv);
-                       ret->data[i] = arr_elem_conv;
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_UpdateAddHTLCZ CVec_UpdateAddHTLCZ_clone(const LDKCVec_UpdateAddHTLCZ *orig) {
        LDKCVec_UpdateAddHTLCZ ret = { .data = MALLOC(sizeof(LDKUpdateAddHTLC) * orig->datalen, "LDKCVec_UpdateAddHTLCZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -4965,25 +4494,6 @@ static inline LDKCVec_UpdateAddHTLCZ CVec_UpdateAddHTLCZ_clone(const LDKCVec_Upd
        }
        return ret;
 }
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_UpdateFulfillHTLCZ_new(uint32_tArray elems) {
-       LDKCVec_UpdateFulfillHTLCZ *ret = MALLOC(sizeof(LDKCVec_UpdateFulfillHTLCZ), "LDKCVec_UpdateFulfillHTLCZ");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKUpdateFulfillHTLC) * ret->datalen, "LDKCVec_UpdateFulfillHTLCZ Data");
-               uint32_t *java_elems = (uint32_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       uint32_t arr_elem = java_elems[i];
-                       LDKUpdateFulfillHTLC arr_elem_conv;
-                       arr_elem_conv.inner = (void*)(arr_elem & (~1));
-                       arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0);
-                       arr_elem_conv = UpdateFulfillHTLC_clone(&arr_elem_conv);
-                       ret->data[i] = arr_elem_conv;
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_UpdateFulfillHTLCZ CVec_UpdateFulfillHTLCZ_clone(const LDKCVec_UpdateFulfillHTLCZ *orig) {
        LDKCVec_UpdateFulfillHTLCZ ret = { .data = MALLOC(sizeof(LDKUpdateFulfillHTLC) * orig->datalen, "LDKCVec_UpdateFulfillHTLCZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -4991,25 +4501,6 @@ static inline LDKCVec_UpdateFulfillHTLCZ CVec_UpdateFulfillHTLCZ_clone(const LDK
        }
        return ret;
 }
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_UpdateFailHTLCZ_new(uint32_tArray elems) {
-       LDKCVec_UpdateFailHTLCZ *ret = MALLOC(sizeof(LDKCVec_UpdateFailHTLCZ), "LDKCVec_UpdateFailHTLCZ");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKUpdateFailHTLC) * ret->datalen, "LDKCVec_UpdateFailHTLCZ Data");
-               uint32_t *java_elems = (uint32_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       uint32_t arr_elem = java_elems[i];
-                       LDKUpdateFailHTLC arr_elem_conv;
-                       arr_elem_conv.inner = (void*)(arr_elem & (~1));
-                       arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0);
-                       arr_elem_conv = UpdateFailHTLC_clone(&arr_elem_conv);
-                       ret->data[i] = arr_elem_conv;
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_UpdateFailHTLCZ CVec_UpdateFailHTLCZ_clone(const LDKCVec_UpdateFailHTLCZ *orig) {
        LDKCVec_UpdateFailHTLCZ ret = { .data = MALLOC(sizeof(LDKUpdateFailHTLC) * orig->datalen, "LDKCVec_UpdateFailHTLCZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -5017,25 +4508,6 @@ static inline LDKCVec_UpdateFailHTLCZ CVec_UpdateFailHTLCZ_clone(const LDKCVec_U
        }
        return ret;
 }
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_UpdateFailMalformedHTLCZ_new(uint32_tArray elems) {
-       LDKCVec_UpdateFailMalformedHTLCZ *ret = MALLOC(sizeof(LDKCVec_UpdateFailMalformedHTLCZ), "LDKCVec_UpdateFailMalformedHTLCZ");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKUpdateFailMalformedHTLC) * ret->datalen, "LDKCVec_UpdateFailMalformedHTLCZ Data");
-               uint32_t *java_elems = (uint32_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       uint32_t arr_elem = java_elems[i];
-                       LDKUpdateFailMalformedHTLC arr_elem_conv;
-                       arr_elem_conv.inner = (void*)(arr_elem & (~1));
-                       arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0);
-                       arr_elem_conv = UpdateFailMalformedHTLC_clone(&arr_elem_conv);
-                       ret->data[i] = arr_elem_conv;
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_UpdateFailMalformedHTLCZ CVec_UpdateFailMalformedHTLCZ_clone(const LDKCVec_UpdateFailMalformedHTLCZ *orig) {
        LDKCVec_UpdateFailMalformedHTLCZ ret = { .data = MALLOC(sizeof(LDKUpdateFailMalformedHTLC) * orig->datalen, "LDKCVec_UpdateFailMalformedHTLCZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -5043,9 +4515,6 @@ static inline LDKCVec_UpdateFailMalformedHTLCZ CVec_UpdateFailMalformedHTLCZ_clo
        }
        return ret;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_AcceptChannelDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_AcceptChannelDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_AcceptChannelDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_AcceptChannelDecodeErrorZ *val = (LDKCResult_AcceptChannelDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5053,6 +4522,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_AcceptChannelDeco
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5063,12 +4533,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_AcceptChannelDeco
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_AnnouncementSignaturesDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_AnnouncementSignaturesDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_AnnouncementSignaturesDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_AnnouncementSignaturesDecodeErrorZ *val = (LDKCResult_AnnouncementSignaturesDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5076,6 +4544,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_AnnouncementSigna
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5086,12 +4555,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_AnnouncementSigna
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_ChannelReestablishDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_ChannelReestablishDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ChannelReestablishDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_ChannelReestablishDecodeErrorZ *val = (LDKCResult_ChannelReestablishDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5099,6 +4566,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ChannelReestablis
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5109,12 +4577,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ChannelReestablis
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_ClosingSignedDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_ClosingSignedDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ClosingSignedDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_ClosingSignedDecodeErrorZ *val = (LDKCResult_ClosingSignedDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5122,6 +4588,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ClosingSignedDeco
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5132,12 +4599,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ClosingSignedDeco
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_ClosingSignedFeeRangeDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_ClosingSignedFeeRangeDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ClosingSignedFeeRangeDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_ClosingSignedFeeRangeDecodeErrorZ *val = (LDKCResult_ClosingSignedFeeRangeDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5145,6 +4610,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ClosingSignedFeeR
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5155,12 +4621,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ClosingSignedFeeR
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_CommitmentSignedDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_CommitmentSignedDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_CommitmentSignedDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_CommitmentSignedDecodeErrorZ *val = (LDKCResult_CommitmentSignedDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5168,6 +4632,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_CommitmentSignedD
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5178,12 +4643,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_CommitmentSignedD
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_FundingCreatedDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_FundingCreatedDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_FundingCreatedDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_FundingCreatedDecodeErrorZ *val = (LDKCResult_FundingCreatedDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5191,6 +4654,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_FundingCreatedDec
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5201,12 +4665,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_FundingCreatedDec
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_FundingSignedDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_FundingSignedDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_FundingSignedDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_FundingSignedDecodeErrorZ *val = (LDKCResult_FundingSignedDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5214,6 +4676,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_FundingSignedDeco
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5224,12 +4687,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_FundingSignedDeco
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_FundingLockedDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_FundingLockedDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_FundingLockedDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_FundingLockedDecodeErrorZ *val = (LDKCResult_FundingLockedDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5237,6 +4698,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_FundingLockedDeco
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5247,12 +4709,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_FundingLockedDeco
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_InitDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_InitDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_InitDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_InitDecodeErrorZ *val = (LDKCResult_InitDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5260,6 +4720,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_InitDecodeErrorZ_
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5270,12 +4731,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_InitDecodeErrorZ_
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_OpenChannelDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_OpenChannelDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_OpenChannelDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_OpenChannelDecodeErrorZ *val = (LDKCResult_OpenChannelDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5283,6 +4742,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_OpenChannelDecode
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5293,12 +4753,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_OpenChannelDecode
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_RevokeAndACKDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_RevokeAndACKDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_RevokeAndACKDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_RevokeAndACKDecodeErrorZ *val = (LDKCResult_RevokeAndACKDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5306,6 +4764,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_RevokeAndACKDecod
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5316,12 +4775,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_RevokeAndACKDecod
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_ShutdownDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_ShutdownDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ShutdownDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_ShutdownDecodeErrorZ *val = (LDKCResult_ShutdownDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5329,6 +4786,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ShutdownDecodeErr
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5339,12 +4797,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ShutdownDecodeErr
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_UpdateFailHTLCDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_UpdateFailHTLCDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_UpdateFailHTLCDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_UpdateFailHTLCDecodeErrorZ *val = (LDKCResult_UpdateFailHTLCDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5352,6 +4808,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_UpdateFailHTLCDec
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5362,12 +4819,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_UpdateFailHTLCDec
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ *val = (LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5375,6 +4830,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_UpdateFailMalform
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5385,12 +4841,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_UpdateFailMalform
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_UpdateFeeDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_UpdateFeeDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_UpdateFeeDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_UpdateFeeDecodeErrorZ *val = (LDKCResult_UpdateFeeDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5398,6 +4852,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_UpdateFeeDecodeEr
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5408,12 +4863,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_UpdateFeeDecodeEr
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_UpdateFulfillHTLCDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_UpdateFulfillHTLCDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_UpdateFulfillHTLCDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_UpdateFulfillHTLCDecodeErrorZ *val = (LDKCResult_UpdateFulfillHTLCDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5421,6 +4874,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_UpdateFulfillHTLC
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5431,12 +4885,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_UpdateFulfillHTLC
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_UpdateAddHTLCDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_UpdateAddHTLCDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_UpdateAddHTLCDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_UpdateAddHTLCDecodeErrorZ *val = (LDKCResult_UpdateAddHTLCDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5444,6 +4896,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_UpdateAddHTLCDeco
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5454,12 +4907,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_UpdateAddHTLCDeco
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_PingDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_PingDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_PingDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_PingDecodeErrorZ *val = (LDKCResult_PingDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5467,6 +4918,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_PingDecodeErrorZ_
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5477,12 +4929,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_PingDecodeErrorZ_
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_PongDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_PongDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_PongDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_PongDecodeErrorZ *val = (LDKCResult_PongDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5490,6 +4940,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_PongDecodeErrorZ_
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5500,12 +4951,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_PongDecodeErrorZ_
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ *val = (LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5513,6 +4962,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_UnsignedChannelAn
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5523,12 +4973,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_UnsignedChannelAn
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_ChannelAnnouncementDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_ChannelAnnouncementDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ChannelAnnouncementDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_ChannelAnnouncementDecodeErrorZ *val = (LDKCResult_ChannelAnnouncementDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5536,6 +4984,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ChannelAnnounceme
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5546,12 +4995,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ChannelAnnounceme
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_UnsignedChannelUpdateDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_UnsignedChannelUpdateDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_UnsignedChannelUpdateDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_UnsignedChannelUpdateDecodeErrorZ *val = (LDKCResult_UnsignedChannelUpdateDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5559,6 +5006,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_UnsignedChannelUp
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5569,12 +5017,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_UnsignedChannelUp
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_ChannelUpdateDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_ChannelUpdateDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ChannelUpdateDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_ChannelUpdateDecodeErrorZ *val = (LDKCResult_ChannelUpdateDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5582,6 +5028,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ChannelUpdateDeco
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5592,12 +5039,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ChannelUpdateDeco
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_ErrorMessageDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_ErrorMessageDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ErrorMessageDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_ErrorMessageDecodeErrorZ *val = (LDKCResult_ErrorMessageDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5605,6 +5050,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ErrorMessageDecod
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5615,12 +5061,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ErrorMessageDecod
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ *val = (LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5628,6 +5072,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_UnsignedNodeAnnou
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5638,12 +5083,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_UnsignedNodeAnnou
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_NodeAnnouncementDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_NodeAnnouncementDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_NodeAnnouncementDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_NodeAnnouncementDecodeErrorZ *val = (LDKCResult_NodeAnnouncementDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5651,6 +5094,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_NodeAnnouncementD
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5661,12 +5105,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_NodeAnnouncementD
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_QueryShortChannelIdsDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_QueryShortChannelIdsDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_QueryShortChannelIdsDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_QueryShortChannelIdsDecodeErrorZ *val = (LDKCResult_QueryShortChannelIdsDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5674,6 +5116,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_QueryShortChannel
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5684,12 +5127,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_QueryShortChannel
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ *val = (LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5697,6 +5138,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ReplyShortChannel
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5707,12 +5149,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ReplyShortChannel
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_QueryChannelRangeDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_QueryChannelRangeDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_QueryChannelRangeDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_QueryChannelRangeDecodeErrorZ *val = (LDKCResult_QueryChannelRangeDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5720,6 +5160,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_QueryChannelRange
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5730,12 +5171,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_QueryChannelRange
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_ReplyChannelRangeDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_ReplyChannelRangeDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ReplyChannelRangeDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_ReplyChannelRangeDecodeErrorZ *val = (LDKCResult_ReplyChannelRangeDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5743,6 +5182,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ReplyChannelRange
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5753,12 +5193,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ReplyChannelRange
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_GossipTimestampFilterDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_GossipTimestampFilterDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_GossipTimestampFilterDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_GossipTimestampFilterDecodeErrorZ *val = (LDKCResult_GossipTimestampFilterDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5766,6 +5204,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_GossipTimestampFi
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5776,6 +5215,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_GossipTimestampFi
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
@@ -5792,9 +5232,6 @@ uint32_t __attribute__((visibility("default"))) TS_LDKSignOrCreationError_ref_fr
                default: abort();
        }
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_InvoiceSignOrCreationErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_InvoiceSignOrCreationErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_InvoiceSignOrCreationErrorZ_get_ok(uint32_t arg) {
        LDKCResult_InvoiceSignOrCreationErrorZ *val = (LDKCResult_InvoiceSignOrCreationErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5802,6 +5239,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_InvoiceSignOrCrea
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5839,6 +5277,7 @@ LDKCOption_C2Tuple_usizeTransactionZZ register_output_LDKFilter_jcall(const void
        uint64_t output_ref = 0;
        CHECK((((uint64_t)output_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&output_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(output_var);
        output_ref = (uint64_t)output_var.inner;
        if (output_var.is_owned) {
                output_ref |= 1;
@@ -5847,7 +5286,7 @@ LDKCOption_C2Tuple_usizeTransactionZZ register_output_LDKFilter_jcall(const void
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCOption_C2Tuple_usizeTransactionZZ ret_conv = *(LDKCOption_C2Tuple_usizeTransactionZZ*)(ret_ptr);
-       ret_conv = COption_C2Tuple_usizeTransactionZZ_clone((LDKCOption_C2Tuple_usizeTransactionZZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 static void LDKFilter_JCalls_cloned(LDKFilter* new_obj) {
@@ -5893,6 +5332,7 @@ uint32_t  __attribute__((visibility("default"))) TS_Filter_register_output(uint3
        LDKWatchedOutput output_conv;
        output_conv.inner = (void*)(output & (~1));
        output_conv.is_owned = (output & 1) || (output == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(output_conv);
        output_conv = WatchedOutput_clone(&output_conv);
        LDKCOption_C2Tuple_usizeTransactionZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_usizeTransactionZZ), "LDKCOption_C2Tuple_usizeTransactionZZ");
        *ret_copy = (this_arg_conv->register_output)(this_arg_conv->this_arg, output_conv);
@@ -5915,9 +5355,6 @@ uint32_t __attribute__((visibility("default"))) TS_LDKCOption_FilterZ_ref_from_p
                default: abort();
        }
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_LockedChannelMonitorNoneZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_LockedChannelMonitorNoneZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_LockedChannelMonitorNoneZ_get_ok(uint32_t arg) {
        LDKCResult_LockedChannelMonitorNoneZ *val = (LDKCResult_LockedChannelMonitorNoneZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5925,6 +5362,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_LockedChannelMoni
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5933,25 +5371,6 @@ void  __attribute__((visibility("default"))) TS_LDKCResult_LockedChannelMonitorN
        CHECK(!val->result_ok);
        return *val->contents.err;
 }
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_OutPointZ_new(uint32_tArray elems) {
-       LDKCVec_OutPointZ *ret = MALLOC(sizeof(LDKCVec_OutPointZ), "LDKCVec_OutPointZ");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKOutPoint) * ret->datalen, "LDKCVec_OutPointZ Data");
-               uint32_t *java_elems = (uint32_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       uint32_t arr_elem = java_elems[i];
-                       LDKOutPoint arr_elem_conv;
-                       arr_elem_conv.inner = (void*)(arr_elem & (~1));
-                       arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0);
-                       arr_elem_conv = OutPoint_clone(&arr_elem_conv);
-                       ret->data[i] = arr_elem_conv;
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_OutPointZ CVec_OutPointZ_clone(const LDKCVec_OutPointZ *orig) {
        LDKCVec_OutPointZ ret = { .data = MALLOC(sizeof(LDKOutPoint) * orig->datalen, "LDKCVec_OutPointZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -5985,7 +5404,7 @@ LDKCVec_MessageSendEventZ get_and_clear_pending_msg_events_LDKMessageSendEventsP
                void* ret_conv_18_ptr = (void*)(((uint64_t)ret_conv_18) & ~1);
                CHECK_ACCESS(ret_conv_18_ptr);
                LDKMessageSendEvent ret_conv_18_conv = *(LDKMessageSendEvent*)(ret_conv_18_ptr);
-               ret_conv_18_conv = MessageSendEvent_clone((LDKMessageSendEvent*)(((uint64_t)ret_conv_18) & ~1));
+               FREE((void*)ret_conv_18);
                ret_constr.data[s] = ret_conv_18_conv;
        }
        return ret_constr;
@@ -6367,6 +5786,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ persist_new_channel_LDKPersist_jcall(con
        uint64_t channel_id_ref = 0;
        CHECK((((uint64_t)channel_id_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&channel_id_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_var);
        channel_id_ref = (uint64_t)channel_id_var.inner;
        if (channel_id_var.is_owned) {
                channel_id_ref |= 1;
@@ -6376,6 +5796,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ persist_new_channel_LDKPersist_jcall(con
        data_var = ChannelMonitor_clone(data);
        CHECK((((uint64_t)data_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&data_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(data_var);
        data_ref = (uint64_t)data_var.inner;
        if (data_var.is_owned) {
                data_ref |= 1;
@@ -6384,6 +5805,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ persist_new_channel_LDKPersist_jcall(con
        uint64_t update_id_ref = 0;
        CHECK((((uint64_t)update_id_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&update_id_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_id_var);
        update_id_ref = (uint64_t)update_id_var.inner;
        if (update_id_var.is_owned) {
                update_id_ref |= 1;
@@ -6392,7 +5814,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ persist_new_channel_LDKPersist_jcall(con
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneChannelMonitorUpdateErrZ ret_conv = *(LDKCResult_NoneChannelMonitorUpdateErrZ*)(ret_ptr);
-       ret_conv = CResult_NoneChannelMonitorUpdateErrZ_clone((LDKCResult_NoneChannelMonitorUpdateErrZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 LDKCResult_NoneChannelMonitorUpdateErrZ update_persisted_channel_LDKPersist_jcall(const void* this_arg, LDKOutPoint channel_id, const LDKChannelMonitorUpdate * update, const LDKChannelMonitor * data, LDKMonitorUpdateId update_id) {
@@ -6401,6 +5823,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ update_persisted_channel_LDKPersist_jcal
        uint64_t channel_id_ref = 0;
        CHECK((((uint64_t)channel_id_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&channel_id_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_var);
        channel_id_ref = (uint64_t)channel_id_var.inner;
        if (channel_id_var.is_owned) {
                channel_id_ref |= 1;
@@ -6411,6 +5834,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ update_persisted_channel_LDKPersist_jcal
                update_var = ChannelMonitorUpdate_clone(update);
                CHECK((((uint64_t)update_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&update_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_var);
                update_ref = (uint64_t)update_var.inner;
                if (update_var.is_owned) {
                        update_ref |= 1;
@@ -6421,6 +5845,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ update_persisted_channel_LDKPersist_jcal
        data_var = ChannelMonitor_clone(data);
        CHECK((((uint64_t)data_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&data_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(data_var);
        data_ref = (uint64_t)data_var.inner;
        if (data_var.is_owned) {
                data_ref |= 1;
@@ -6429,6 +5854,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ update_persisted_channel_LDKPersist_jcal
        uint64_t update_id_ref = 0;
        CHECK((((uint64_t)update_id_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&update_id_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_id_var);
        update_id_ref = (uint64_t)update_id_var.inner;
        if (update_id_var.is_owned) {
                update_id_ref |= 1;
@@ -6437,7 +5863,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ update_persisted_channel_LDKPersist_jcal
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneChannelMonitorUpdateErrZ ret_conv = *(LDKCResult_NoneChannelMonitorUpdateErrZ*)(ret_ptr);
-       ret_conv = CResult_NoneChannelMonitorUpdateErrZ_clone((LDKCResult_NoneChannelMonitorUpdateErrZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 static void LDKPersist_JCalls_cloned(LDKPersist* new_obj) {
@@ -6469,13 +5895,16 @@ uint32_t  __attribute__((visibility("default"))) TS_Persist_persist_new_channel(
        LDKOutPoint channel_id_conv;
        channel_id_conv.inner = (void*)(channel_id & (~1));
        channel_id_conv.is_owned = (channel_id & 1) || (channel_id == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_conv);
        channel_id_conv = OutPoint_clone(&channel_id_conv);
        LDKChannelMonitor data_conv;
        data_conv.inner = (void*)(data & (~1));
        data_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(data_conv);
        LDKMonitorUpdateId update_id_conv;
        update_id_conv.inner = (void*)(update_id & (~1));
        update_id_conv.is_owned = (update_id & 1) || (update_id == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_id_conv);
        update_id_conv = MonitorUpdateId_clone(&update_id_conv);
        LDKCResult_NoneChannelMonitorUpdateErrZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneChannelMonitorUpdateErrZ), "LDKCResult_NoneChannelMonitorUpdateErrZ");
        *ret_conv = (this_arg_conv->persist_new_channel)(this_arg_conv->this_arg, channel_id_conv, &data_conv, update_id_conv);
@@ -6489,16 +5918,20 @@ uint32_t  __attribute__((visibility("default"))) TS_Persist_update_persisted_cha
        LDKOutPoint channel_id_conv;
        channel_id_conv.inner = (void*)(channel_id & (~1));
        channel_id_conv.is_owned = (channel_id & 1) || (channel_id == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_conv);
        channel_id_conv = OutPoint_clone(&channel_id_conv);
        LDKChannelMonitorUpdate update_conv;
        update_conv.inner = (void*)(update & (~1));
        update_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_conv);
        LDKChannelMonitor data_conv;
        data_conv.inner = (void*)(data & (~1));
        data_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(data_conv);
        LDKMonitorUpdateId update_id_conv;
        update_id_conv.inner = (void*)(update_id & (~1));
        update_id_conv.is_owned = (update_id & 1) || (update_id == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_id_conv);
        update_id_conv = MonitorUpdateId_clone(&update_id_conv);
        LDKCResult_NoneChannelMonitorUpdateErrZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneChannelMonitorUpdateErrZ), "LDKCResult_NoneChannelMonitorUpdateErrZ");
        *ret_conv = (this_arg_conv->update_persisted_channel)(this_arg_conv->this_arg, channel_id_conv, &update_conv, &data_conv, update_id_conv);
@@ -6563,6 +5996,7 @@ void handle_open_channel_LDKChannelMessageHandler_jcall(const void* this_arg, LD
        uint64_t their_features_ref = 0;
        CHECK((((uint64_t)their_features_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&their_features_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(their_features_var);
        their_features_ref = (uint64_t)their_features_var.inner;
        if (their_features_var.is_owned) {
                their_features_ref |= 1;
@@ -6572,6 +6006,7 @@ void handle_open_channel_LDKChannelMessageHandler_jcall(const void* this_arg, LD
        msg_var = OpenChannel_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -6586,6 +6021,7 @@ void handle_accept_channel_LDKChannelMessageHandler_jcall(const void* this_arg,
        uint64_t their_features_ref = 0;
        CHECK((((uint64_t)their_features_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&their_features_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(their_features_var);
        their_features_ref = (uint64_t)their_features_var.inner;
        if (their_features_var.is_owned) {
                their_features_ref |= 1;
@@ -6595,6 +6031,7 @@ void handle_accept_channel_LDKChannelMessageHandler_jcall(const void* this_arg,
        msg_var = AcceptChannel_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -6610,6 +6047,7 @@ void handle_funding_created_LDKChannelMessageHandler_jcall(const void* this_arg,
        msg_var = FundingCreated_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -6625,6 +6063,7 @@ void handle_funding_signed_LDKChannelMessageHandler_jcall(const void* this_arg,
        msg_var = FundingSigned_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -6640,6 +6079,7 @@ void handle_funding_locked_LDKChannelMessageHandler_jcall(const void* this_arg,
        msg_var = FundingLocked_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -6655,6 +6095,7 @@ void handle_shutdown_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPub
        their_features_var = InitFeatures_clone(their_features);
        CHECK((((uint64_t)their_features_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&their_features_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(their_features_var);
        their_features_ref = (uint64_t)their_features_var.inner;
        if (their_features_var.is_owned) {
                their_features_ref |= 1;
@@ -6664,6 +6105,7 @@ void handle_shutdown_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPub
        msg_var = Shutdown_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -6679,6 +6121,7 @@ void handle_closing_signed_LDKChannelMessageHandler_jcall(const void* this_arg,
        msg_var = ClosingSigned_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -6694,6 +6137,7 @@ void handle_update_add_htlc_LDKChannelMessageHandler_jcall(const void* this_arg,
        msg_var = UpdateAddHTLC_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -6709,6 +6153,7 @@ void handle_update_fulfill_htlc_LDKChannelMessageHandler_jcall(const void* this_
        msg_var = UpdateFulfillHTLC_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -6724,6 +6169,7 @@ void handle_update_fail_htlc_LDKChannelMessageHandler_jcall(const void* this_arg
        msg_var = UpdateFailHTLC_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -6739,6 +6185,7 @@ void handle_update_fail_malformed_htlc_LDKChannelMessageHandler_jcall(const void
        msg_var = UpdateFailMalformedHTLC_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -6754,6 +6201,7 @@ void handle_commitment_signed_LDKChannelMessageHandler_jcall(const void* this_ar
        msg_var = CommitmentSigned_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -6769,6 +6217,7 @@ void handle_revoke_and_ack_LDKChannelMessageHandler_jcall(const void* this_arg,
        msg_var = RevokeAndACK_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -6784,6 +6233,7 @@ void handle_update_fee_LDKChannelMessageHandler_jcall(const void* this_arg, LDKP
        msg_var = UpdateFee_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -6799,6 +6249,7 @@ void handle_announcement_signatures_LDKChannelMessageHandler_jcall(const void* t
        msg_var = AnnouncementSignatures_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -6820,6 +6271,7 @@ void peer_connected_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPubl
        msg_var = Init_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -6835,6 +6287,7 @@ void handle_channel_reestablish_LDKChannelMessageHandler_jcall(const void* this_
        msg_var = ChannelReestablish_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -6850,6 +6303,7 @@ void handle_channel_update_LDKChannelMessageHandler_jcall(const void* this_arg,
        msg_var = ChannelUpdate_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -6865,6 +6319,7 @@ void handle_error_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublic
        msg_var = ErrorMessage_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -6924,10 +6379,12 @@ void  __attribute__((visibility("default"))) TS_ChannelMessageHandler_handle_ope
        LDKInitFeatures their_features_conv;
        their_features_conv.inner = (void*)(their_features & (~1));
        their_features_conv.is_owned = (their_features & 1) || (their_features == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(their_features_conv);
        their_features_conv = InitFeatures_clone(&their_features_conv);
        LDKOpenChannel msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_open_channel)(this_arg_conv->this_arg, their_node_id_ref, their_features_conv, &msg_conv);
 }
 
@@ -6941,10 +6398,12 @@ void  __attribute__((visibility("default"))) TS_ChannelMessageHandler_handle_acc
        LDKInitFeatures their_features_conv;
        their_features_conv.inner = (void*)(their_features & (~1));
        their_features_conv.is_owned = (their_features & 1) || (their_features == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(their_features_conv);
        their_features_conv = InitFeatures_clone(&their_features_conv);
        LDKAcceptChannel msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_accept_channel)(this_arg_conv->this_arg, their_node_id_ref, their_features_conv, &msg_conv);
 }
 
@@ -6958,6 +6417,7 @@ void  __attribute__((visibility("default"))) TS_ChannelMessageHandler_handle_fun
        LDKFundingCreated msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_funding_created)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -6971,6 +6431,7 @@ void  __attribute__((visibility("default"))) TS_ChannelMessageHandler_handle_fun
        LDKFundingSigned msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_funding_signed)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -6984,6 +6445,7 @@ void  __attribute__((visibility("default"))) TS_ChannelMessageHandler_handle_fun
        LDKFundingLocked msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_funding_locked)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -6997,9 +6459,11 @@ void  __attribute__((visibility("default"))) TS_ChannelMessageHandler_handle_shu
        LDKInitFeatures their_features_conv;
        their_features_conv.inner = (void*)(their_features & (~1));
        their_features_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(their_features_conv);
        LDKShutdown msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_shutdown)(this_arg_conv->this_arg, their_node_id_ref, &their_features_conv, &msg_conv);
 }
 
@@ -7013,6 +6477,7 @@ void  __attribute__((visibility("default"))) TS_ChannelMessageHandler_handle_clo
        LDKClosingSigned msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_closing_signed)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -7026,6 +6491,7 @@ void  __attribute__((visibility("default"))) TS_ChannelMessageHandler_handle_upd
        LDKUpdateAddHTLC msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_update_add_htlc)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -7039,6 +6505,7 @@ void  __attribute__((visibility("default"))) TS_ChannelMessageHandler_handle_upd
        LDKUpdateFulfillHTLC msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_update_fulfill_htlc)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -7052,6 +6519,7 @@ void  __attribute__((visibility("default"))) TS_ChannelMessageHandler_handle_upd
        LDKUpdateFailHTLC msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_update_fail_htlc)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -7065,6 +6533,7 @@ void  __attribute__((visibility("default"))) TS_ChannelMessageHandler_handle_upd
        LDKUpdateFailMalformedHTLC msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_update_fail_malformed_htlc)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -7078,6 +6547,7 @@ void  __attribute__((visibility("default"))) TS_ChannelMessageHandler_handle_com
        LDKCommitmentSigned msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_commitment_signed)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -7091,6 +6561,7 @@ void  __attribute__((visibility("default"))) TS_ChannelMessageHandler_handle_rev
        LDKRevokeAndACK msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_revoke_and_ack)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -7104,6 +6575,7 @@ void  __attribute__((visibility("default"))) TS_ChannelMessageHandler_handle_upd
        LDKUpdateFee msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_update_fee)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -7117,6 +6589,7 @@ void  __attribute__((visibility("default"))) TS_ChannelMessageHandler_handle_ann
        LDKAnnouncementSignatures msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_announcement_signatures)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -7140,6 +6613,7 @@ void  __attribute__((visibility("default"))) TS_ChannelMessageHandler_peer_conne
        LDKInit msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->peer_connected)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -7153,6 +6627,7 @@ void  __attribute__((visibility("default"))) TS_ChannelMessageHandler_handle_cha
        LDKChannelReestablish msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_channel_reestablish)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -7166,6 +6641,7 @@ void  __attribute__((visibility("default"))) TS_ChannelMessageHandler_handle_cha
        LDKChannelUpdate msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_channel_update)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -7179,6 +6655,7 @@ void  __attribute__((visibility("default"))) TS_ChannelMessageHandler_handle_err
        LDKErrorMessage msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_error)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -7219,6 +6696,7 @@ LDKCResult_boolLightningErrorZ handle_node_announcement_LDKRoutingMessageHandler
        msg_var = NodeAnnouncement_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -7227,7 +6705,7 @@ LDKCResult_boolLightningErrorZ handle_node_announcement_LDKRoutingMessageHandler
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_boolLightningErrorZ ret_conv = *(LDKCResult_boolLightningErrorZ*)(ret_ptr);
-       ret_conv = CResult_boolLightningErrorZ_clone((LDKCResult_boolLightningErrorZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 LDKCResult_boolLightningErrorZ handle_channel_announcement_LDKRoutingMessageHandler_jcall(const void* this_arg, const LDKChannelAnnouncement * msg) {
@@ -7237,6 +6715,7 @@ LDKCResult_boolLightningErrorZ handle_channel_announcement_LDKRoutingMessageHand
        msg_var = ChannelAnnouncement_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -7245,7 +6724,7 @@ LDKCResult_boolLightningErrorZ handle_channel_announcement_LDKRoutingMessageHand
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_boolLightningErrorZ ret_conv = *(LDKCResult_boolLightningErrorZ*)(ret_ptr);
-       ret_conv = CResult_boolLightningErrorZ_clone((LDKCResult_boolLightningErrorZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 LDKCResult_boolLightningErrorZ handle_channel_update_LDKRoutingMessageHandler_jcall(const void* this_arg, const LDKChannelUpdate * msg) {
@@ -7255,6 +6734,7 @@ LDKCResult_boolLightningErrorZ handle_channel_update_LDKRoutingMessageHandler_jc
        msg_var = ChannelUpdate_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -7263,7 +6743,7 @@ LDKCResult_boolLightningErrorZ handle_channel_update_LDKRoutingMessageHandler_jc
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_boolLightningErrorZ ret_conv = *(LDKCResult_boolLightningErrorZ*)(ret_ptr);
-       ret_conv = CResult_boolLightningErrorZ_clone((LDKCResult_boolLightningErrorZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ get_next_channel_announcements_LDKRoutingMessageHandler_jcall(const void* this_arg, uint64_t starting_point, uint8_t batch_amount) {
@@ -7281,7 +6761,7 @@ LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ get_next_channel
                void* ret_conv_59_ptr = (void*)(((uint64_t)ret_conv_59) & ~1);
                CHECK_ACCESS(ret_conv_59_ptr);
                LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ ret_conv_59_conv = *(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ*)(ret_conv_59_ptr);
-               ret_conv_59_conv = C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_clone((LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ*)(((uint64_t)ret_conv_59) & ~1));
+               FREE((void*)ret_conv_59);
                ret_constr.data[h] = ret_conv_59_conv;
        }
        return ret_constr;
@@ -7303,7 +6783,7 @@ LDKCVec_NodeAnnouncementZ get_next_node_announcements_LDKRoutingMessageHandler_j
                LDKNodeAnnouncement ret_conv_18_conv;
                ret_conv_18_conv.inner = (void*)(ret_conv_18 & (~1));
                ret_conv_18_conv.is_owned = (ret_conv_18 & 1) || (ret_conv_18 == 0);
-               ret_conv_18_conv = NodeAnnouncement_clone(&ret_conv_18_conv);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_18_conv);
                ret_constr.data[s] = ret_conv_18_conv;
        }
        return ret_constr;
@@ -7317,6 +6797,7 @@ void sync_routing_table_LDKRoutingMessageHandler_jcall(const void* this_arg, LDK
        init_var = Init_clone(init);
        CHECK((((uint64_t)init_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&init_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(init_var);
        init_ref = (uint64_t)init_var.inner;
        if (init_var.is_owned) {
                init_ref |= 1;
@@ -7331,6 +6812,7 @@ LDKCResult_NoneLightningErrorZ handle_reply_channel_range_LDKRoutingMessageHandl
        uint64_t msg_ref = 0;
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -7339,7 +6821,7 @@ LDKCResult_NoneLightningErrorZ handle_reply_channel_range_LDKRoutingMessageHandl
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneLightningErrorZ ret_conv = *(LDKCResult_NoneLightningErrorZ*)(ret_ptr);
-       ret_conv = CResult_NoneLightningErrorZ_clone((LDKCResult_NoneLightningErrorZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 LDKCResult_NoneLightningErrorZ handle_reply_short_channel_ids_end_LDKRoutingMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, LDKReplyShortChannelIdsEnd msg) {
@@ -7350,6 +6832,7 @@ LDKCResult_NoneLightningErrorZ handle_reply_short_channel_ids_end_LDKRoutingMess
        uint64_t msg_ref = 0;
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -7358,7 +6841,7 @@ LDKCResult_NoneLightningErrorZ handle_reply_short_channel_ids_end_LDKRoutingMess
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneLightningErrorZ ret_conv = *(LDKCResult_NoneLightningErrorZ*)(ret_ptr);
-       ret_conv = CResult_NoneLightningErrorZ_clone((LDKCResult_NoneLightningErrorZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 LDKCResult_NoneLightningErrorZ handle_query_channel_range_LDKRoutingMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, LDKQueryChannelRange msg) {
@@ -7369,6 +6852,7 @@ LDKCResult_NoneLightningErrorZ handle_query_channel_range_LDKRoutingMessageHandl
        uint64_t msg_ref = 0;
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -7377,7 +6861,7 @@ LDKCResult_NoneLightningErrorZ handle_query_channel_range_LDKRoutingMessageHandl
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneLightningErrorZ ret_conv = *(LDKCResult_NoneLightningErrorZ*)(ret_ptr);
-       ret_conv = CResult_NoneLightningErrorZ_clone((LDKCResult_NoneLightningErrorZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 LDKCResult_NoneLightningErrorZ handle_query_short_channel_ids_LDKRoutingMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, LDKQueryShortChannelIds msg) {
@@ -7388,6 +6872,7 @@ LDKCResult_NoneLightningErrorZ handle_query_short_channel_ids_LDKRoutingMessageH
        uint64_t msg_ref = 0;
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -7396,7 +6881,7 @@ LDKCResult_NoneLightningErrorZ handle_query_short_channel_ids_LDKRoutingMessageH
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneLightningErrorZ ret_conv = *(LDKCResult_NoneLightningErrorZ*)(ret_ptr);
-       ret_conv = CResult_NoneLightningErrorZ_clone((LDKCResult_NoneLightningErrorZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 static void LDKRoutingMessageHandler_JCalls_cloned(LDKRoutingMessageHandler* new_obj) {
@@ -7439,6 +6924,7 @@ uint32_t  __attribute__((visibility("default"))) TS_RoutingMessageHandler_handle
        LDKNodeAnnouncement msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        LDKCResult_boolLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_boolLightningErrorZ), "LDKCResult_boolLightningErrorZ");
        *ret_conv = (this_arg_conv->handle_node_announcement)(this_arg_conv->this_arg, &msg_conv);
        return (uint64_t)ret_conv;
@@ -7451,6 +6937,7 @@ uint32_t  __attribute__((visibility("default"))) TS_RoutingMessageHandler_handle
        LDKChannelAnnouncement msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        LDKCResult_boolLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_boolLightningErrorZ), "LDKCResult_boolLightningErrorZ");
        *ret_conv = (this_arg_conv->handle_channel_announcement)(this_arg_conv->this_arg, &msg_conv);
        return (uint64_t)ret_conv;
@@ -7463,6 +6950,7 @@ uint32_t  __attribute__((visibility("default"))) TS_RoutingMessageHandler_handle
        LDKChannelUpdate msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        LDKCResult_boolLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_boolLightningErrorZ), "LDKCResult_boolLightningErrorZ");
        *ret_conv = (this_arg_conv->handle_channel_update)(this_arg_conv->this_arg, &msg_conv);
        return (uint64_t)ret_conv;
@@ -7502,6 +6990,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_RoutingMessageHandler_g
                uint64_t ret_conv_18_ref = 0;
                CHECK((((uint64_t)ret_conv_18_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_conv_18_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_18_var);
                ret_conv_18_ref = (uint64_t)ret_conv_18_var.inner;
                if (ret_conv_18_var.is_owned) {
                        ret_conv_18_ref |= 1;
@@ -7523,6 +7012,7 @@ void  __attribute__((visibility("default"))) TS_RoutingMessageHandler_sync_routi
        LDKInit init_conv;
        init_conv.inner = (void*)(init & (~1));
        init_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(init_conv);
        (this_arg_conv->sync_routing_table)(this_arg_conv->this_arg, their_node_id_ref, &init_conv);
 }
 
@@ -7536,6 +7026,7 @@ uint32_t  __attribute__((visibility("default"))) TS_RoutingMessageHandler_handle
        LDKReplyChannelRange msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = ReplyChannelRange_clone(&msg_conv);
        LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
        *ret_conv = (this_arg_conv->handle_reply_channel_range)(this_arg_conv->this_arg, their_node_id_ref, msg_conv);
@@ -7552,6 +7043,7 @@ uint32_t  __attribute__((visibility("default"))) TS_RoutingMessageHandler_handle
        LDKReplyShortChannelIdsEnd msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = ReplyShortChannelIdsEnd_clone(&msg_conv);
        LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
        *ret_conv = (this_arg_conv->handle_reply_short_channel_ids_end)(this_arg_conv->this_arg, their_node_id_ref, msg_conv);
@@ -7568,6 +7060,7 @@ uint32_t  __attribute__((visibility("default"))) TS_RoutingMessageHandler_handle
        LDKQueryChannelRange msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = QueryChannelRange_clone(&msg_conv);
        LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
        *ret_conv = (this_arg_conv->handle_query_channel_range)(this_arg_conv->this_arg, their_node_id_ref, msg_conv);
@@ -7584,6 +7077,7 @@ uint32_t  __attribute__((visibility("default"))) TS_RoutingMessageHandler_handle
        LDKQueryShortChannelIds msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = QueryShortChannelIds_clone(&msg_conv);
        LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
        *ret_conv = (this_arg_conv->handle_query_short_channel_ids)(this_arg_conv->this_arg, their_node_id_ref, msg_conv);
@@ -7610,7 +7104,7 @@ LDKCResult_COption_TypeZDecodeErrorZ read_LDKCustomMessageReader_jcall(const voi
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_COption_TypeZDecodeErrorZ ret_conv = *(LDKCResult_COption_TypeZDecodeErrorZ*)(ret_ptr);
-       ret_conv = CResult_COption_TypeZDecodeErrorZ_clone((LDKCResult_COption_TypeZDecodeErrorZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 static void LDKCustomMessageReader_JCalls_cloned(LDKCustomMessageReader* new_obj) {
@@ -7670,7 +7164,7 @@ LDKCResult_NoneLightningErrorZ handle_custom_message_LDKCustomMessageHandler_jca
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneLightningErrorZ ret_conv = *(LDKCResult_NoneLightningErrorZ*)(ret_ptr);
-       ret_conv = CResult_NoneLightningErrorZ_clone((LDKCResult_NoneLightningErrorZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 LDKCVec_C2Tuple_PublicKeyTypeZZ get_and_clear_pending_msg_LDKCustomMessageHandler_jcall(const void* this_arg) {
@@ -7688,7 +7182,7 @@ LDKCVec_C2Tuple_PublicKeyTypeZZ get_and_clear_pending_msg_LDKCustomMessageHandle
                void* ret_conv_25_ptr = (void*)(((uint64_t)ret_conv_25) & ~1);
                CHECK_ACCESS(ret_conv_25_ptr);
                LDKC2Tuple_PublicKeyTypeZ ret_conv_25_conv = *(LDKC2Tuple_PublicKeyTypeZ*)(ret_conv_25_ptr);
-               ret_conv_25_conv = C2Tuple_PublicKeyTypeZ_clone((LDKC2Tuple_PublicKeyTypeZ*)(((uint64_t)ret_conv_25) & ~1));
+               FREE((void*)ret_conv_25);
                ret_constr.data[z] = ret_conv_25_conv;
        }
        return ret_constr;
@@ -7862,6 +7356,7 @@ uint64_t channel_penalty_msat_LDKScore_jcall(const void* this_arg, uint64_t shor
        source_var = NodeId_clone(source);
        CHECK((((uint64_t)source_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&source_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(source_var);
        source_ref = (uint64_t)source_var.inner;
        if (source_var.is_owned) {
                source_ref |= 1;
@@ -7871,6 +7366,7 @@ uint64_t channel_penalty_msat_LDKScore_jcall(const void* this_arg, uint64_t shor
        target_var = NodeId_clone(target);
        CHECK((((uint64_t)target_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&target_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(target_var);
        target_ref = (uint64_t)target_var.inner;
        if (target_var.is_owned) {
                target_ref |= 1;
@@ -7888,6 +7384,7 @@ void payment_path_failed_LDKScore_jcall(void* this_arg, LDKCVec_RouteHopZ path,
                uint64_t path_conv_10_ref = 0;
                CHECK((((uint64_t)path_conv_10_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&path_conv_10_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv_10_var);
                path_conv_10_ref = (uint64_t)path_conv_10_var.inner;
                if (path_conv_10_var.is_owned) {
                        path_conv_10_ref |= 1;
@@ -7937,9 +7434,11 @@ int64_t  __attribute__((visibility("default"))) TS_Score_channel_penalty_msat(ui
        LDKNodeId source_conv;
        source_conv.inner = (void*)(source & (~1));
        source_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(source_conv);
        LDKNodeId target_conv;
        target_conv.inner = (void*)(target & (~1));
        target_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(target_conv);
        int64_t ret_val = (this_arg_conv->channel_penalty_msat)(this_arg_conv->this_arg, short_channel_id, &source_conv, &target_conv);
        return ret_val;
 }
@@ -7960,6 +7459,7 @@ void  __attribute__((visibility("default"))) TS_Score_payment_path_failed(uint32
                LDKRouteHop path_conv_10_conv;
                path_conv_10_conv.inner = (void*)(path_conv_10 & (~1));
                path_conv_10_conv.is_owned = (path_conv_10 & 1) || (path_conv_10 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv_10_conv);
                path_conv_10_conv = RouteHop_clone(&path_conv_10_conv);
                path_constr.data[k] = path_conv_10_conv;
        }
@@ -7995,6 +7495,7 @@ LDKCResult_NoneErrorZ persist_manager_LDKChannelManagerPersister_jcall(const voi
        // Warning: we may need a move here but no clone is available for LDKChannelManager
        CHECK((((uint64_t)channel_manager_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&channel_manager_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_manager_var);
        channel_manager_ref = (uint64_t)channel_manager_var.inner;
        if (channel_manager_var.is_owned) {
                channel_manager_ref |= 1;
@@ -8003,7 +7504,7 @@ LDKCResult_NoneErrorZ persist_manager_LDKChannelManagerPersister_jcall(const voi
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneErrorZ ret_conv = *(LDKCResult_NoneErrorZ*)(ret_ptr);
-       ret_conv = CResult_NoneErrorZ_clone((LDKCResult_NoneErrorZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 static void LDKChannelManagerPersister_JCalls_cloned(LDKChannelManagerPersister* new_obj) {
@@ -8034,6 +7535,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelManagerPersister_pers
        LDKChannelManager channel_manager_conv;
        channel_manager_conv.inner = (void*)(channel_manager & (~1));
        channel_manager_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_manager_conv);
        LDKCResult_NoneErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneErrorZ), "LDKCResult_NoneErrorZ");
        *ret_conv = (this_arg_conv->persist_manager)(this_arg_conv->this_arg, &channel_manager_conv);
        return (uint64_t)ret_conv;
@@ -8102,7 +7604,7 @@ LDKCVec_ChannelDetailsZ first_hops_LDKPayer_jcall(const void* this_arg) {
                LDKChannelDetails ret_conv_16_conv;
                ret_conv_16_conv.inner = (void*)(ret_conv_16 & (~1));
                ret_conv_16_conv.is_owned = (ret_conv_16 & 1) || (ret_conv_16 == 0);
-               ret_conv_16_conv = ChannelDetails_clone(&ret_conv_16_conv);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_16_conv);
                ret_constr.data[q] = ret_conv_16_conv;
        }
        return ret_constr;
@@ -8114,6 +7616,7 @@ LDKCResult_PaymentIdPaymentSendFailureZ send_payment_LDKPayer_jcall(const void*
        route_var = Route_clone(route);
        CHECK((((uint64_t)route_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&route_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(route_var);
        route_ref = (uint64_t)route_var.inner;
        if (route_var.is_owned) {
                route_ref |= 1;
@@ -8126,7 +7629,7 @@ LDKCResult_PaymentIdPaymentSendFailureZ send_payment_LDKPayer_jcall(const void*
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_PaymentIdPaymentSendFailureZ ret_conv = *(LDKCResult_PaymentIdPaymentSendFailureZ*)(ret_ptr);
-       ret_conv = CResult_PaymentIdPaymentSendFailureZ_clone((LDKCResult_PaymentIdPaymentSendFailureZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 LDKCResult_NonePaymentSendFailureZ retry_payment_LDKPayer_jcall(const void* this_arg, const LDKRoute * route, LDKThirtyTwoBytes payment_id) {
@@ -8136,6 +7639,7 @@ LDKCResult_NonePaymentSendFailureZ retry_payment_LDKPayer_jcall(const void* this
        route_var = Route_clone(route);
        CHECK((((uint64_t)route_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&route_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(route_var);
        route_ref = (uint64_t)route_var.inner;
        if (route_var.is_owned) {
                route_ref |= 1;
@@ -8146,7 +7650,7 @@ LDKCResult_NonePaymentSendFailureZ retry_payment_LDKPayer_jcall(const void* this
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NonePaymentSendFailureZ ret_conv = *(LDKCResult_NonePaymentSendFailureZ*)(ret_ptr);
-       ret_conv = CResult_NonePaymentSendFailureZ_clone((LDKCResult_NonePaymentSendFailureZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 static void LDKPayer_JCalls_cloned(LDKPayer* new_obj) {
@@ -8195,6 +7699,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_Payer_first_hops(uint32
                uint64_t ret_conv_16_ref = 0;
                CHECK((((uint64_t)ret_conv_16_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_conv_16_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_16_var);
                ret_conv_16_ref = (uint64_t)ret_conv_16_var.inner;
                if (ret_conv_16_var.is_owned) {
                        ret_conv_16_ref |= 1;
@@ -8213,6 +7718,7 @@ uint32_t  __attribute__((visibility("default"))) TS_Payer_send_payment(uint32_t
        LDKRoute route_conv;
        route_conv.inner = (void*)(route & (~1));
        route_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(route_conv);
        LDKThirtyTwoBytes payment_hash_ref;
        CHECK(*((uint32_t*)payment_hash) == 32);
        memcpy(payment_hash_ref.data, (uint8_t*)(payment_hash + 4), 32);
@@ -8231,6 +7737,7 @@ uint32_t  __attribute__((visibility("default"))) TS_Payer_retry_payment(uint32_t
        LDKRoute route_conv;
        route_conv.inner = (void*)(route & (~1));
        route_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(route_conv);
        LDKThirtyTwoBytes payment_id_ref;
        CHECK(*((uint32_t*)payment_id) == 32);
        memcpy(payment_id_ref.data, (uint8_t*)(payment_id + 4), 32);
@@ -8259,6 +7766,7 @@ LDKCResult_RouteLightningErrorZ find_route_LDKRouter_jcall(const void* this_arg,
        params_var = RouteParameters_clone(params);
        CHECK((((uint64_t)params_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&params_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(params_var);
        params_ref = (uint64_t)params_var.inner;
        if (params_var.is_owned) {
                params_ref |= 1;
@@ -8274,6 +7782,7 @@ LDKCResult_RouteLightningErrorZ find_route_LDKRouter_jcall(const void* this_arg,
                        uint64_t first_hops_conv_16_ref = 0;
                        CHECK((((uint64_t)first_hops_conv_16_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&first_hops_conv_16_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(first_hops_conv_16_var);
                        first_hops_conv_16_ref = (uint64_t)first_hops_conv_16_var.inner;
                        if (first_hops_conv_16_var.is_owned) {
                                first_hops_conv_16_ref |= 1;
@@ -8288,7 +7797,7 @@ LDKCResult_RouteLightningErrorZ find_route_LDKRouter_jcall(const void* this_arg,
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_RouteLightningErrorZ ret_conv = *(LDKCResult_RouteLightningErrorZ*)(ret_ptr);
-       ret_conv = CResult_RouteLightningErrorZ_clone((LDKCResult_RouteLightningErrorZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 static void LDKRouter_JCalls_cloned(LDKRouter* new_obj) {
@@ -8322,6 +7831,7 @@ uint32_t  __attribute__((visibility("default"))) TS_Router_find_route(uint32_t t
        LDKRouteParameters params_conv;
        params_conv.inner = (void*)(params & (~1));
        params_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(params_conv);
        LDKCVec_ChannelDetailsZ first_hops_constr;
        LDKCVec_ChannelDetailsZ *first_hops_ptr = NULL;
        if (first_hops != 0) {
@@ -8336,6 +7846,7 @@ uint32_t  __attribute__((visibility("default"))) TS_Router_find_route(uint32_t t
                        LDKChannelDetails first_hops_conv_16_conv;
                        first_hops_conv_16_conv.inner = (void*)(first_hops_conv_16 & (~1));
                        first_hops_conv_16_conv.is_owned = (first_hops_conv_16 & 1) || (first_hops_conv_16 == 0);
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(first_hops_conv_16_conv);
                        first_hops_constr.data[q] = first_hops_conv_16_conv;
                }
                first_hops_ptr = &first_hops_constr;
@@ -8391,6 +7902,17 @@ void  __attribute__((visibility("default"))) TS_TxOut_free(uint32_t _res) {
        TxOut_free(_res_conv);
 }
 
+static inline uint64_t TxOut_clone_ptr(LDKTxOut *NONNULL_PTR arg) {
+       LDKTxOut* ret_ref = MALLOC(sizeof(LDKTxOut), "LDKTxOut");
+       *ret_ref = TxOut_clone(arg);
+       return (uint64_t)ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_TxOut_clone_ptr(uint32_t arg) {
+       LDKTxOut* arg_conv = (LDKTxOut*)(arg & ~1);
+       int64_t ret_val = TxOut_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_TxOut_clone(uint32_t orig) {
        LDKTxOut* orig_conv = (LDKTxOut*)(orig & ~1);
        LDKTxOut* ret_ref = MALLOC(sizeof(LDKTxOut), "LDKTxOut");
@@ -8419,6 +7941,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_SecretKeyErrorZ_err(
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_SecretKeyErrorZ_is_ok(uint32_t o) {
+       LDKCResult_SecretKeyErrorZ* o_conv = (LDKCResult_SecretKeyErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_SecretKeyErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_SecretKeyErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -8444,6 +7972,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_PublicKeyErrorZ_err(
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_PublicKeyErrorZ_is_ok(uint32_t o) {
+       LDKCResult_PublicKeyErrorZ* o_conv = (LDKCResult_PublicKeyErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_PublicKeyErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_PublicKeyErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -8453,6 +7987,17 @@ void  __attribute__((visibility("default"))) TS_CResult_PublicKeyErrorZ_free(uin
        CResult_PublicKeyErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_PublicKeyErrorZ_clone_ptr(LDKCResult_PublicKeyErrorZ *NONNULL_PTR arg) {
+       LDKCResult_PublicKeyErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PublicKeyErrorZ), "LDKCResult_PublicKeyErrorZ");
+       *ret_conv = CResult_PublicKeyErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_PublicKeyErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_PublicKeyErrorZ* arg_conv = (LDKCResult_PublicKeyErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_PublicKeyErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_PublicKeyErrorZ_clone(uint32_t orig) {
        LDKCResult_PublicKeyErrorZ* orig_conv = (LDKCResult_PublicKeyErrorZ*)(orig & ~1);
        LDKCResult_PublicKeyErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PublicKeyErrorZ), "LDKCResult_PublicKeyErrorZ");
@@ -8464,6 +8009,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_TxCreationKeysDecode
        LDKTxCreationKeys o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = TxCreationKeys_clone(&o_conv);
        LDKCResult_TxCreationKeysDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxCreationKeysDecodeErrorZ), "LDKCResult_TxCreationKeysDecodeErrorZ");
        *ret_conv = CResult_TxCreationKeysDecodeErrorZ_ok(o_conv);
@@ -8474,12 +8020,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_TxCreationKeysDecode
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_TxCreationKeysDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxCreationKeysDecodeErrorZ), "LDKCResult_TxCreationKeysDecodeErrorZ");
        *ret_conv = CResult_TxCreationKeysDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_TxCreationKeysDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_TxCreationKeysDecodeErrorZ* o_conv = (LDKCResult_TxCreationKeysDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_TxCreationKeysDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_TxCreationKeysDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -8489,6 +8042,17 @@ void  __attribute__((visibility("default"))) TS_CResult_TxCreationKeysDecodeErro
        CResult_TxCreationKeysDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_TxCreationKeysDecodeErrorZ_clone_ptr(LDKCResult_TxCreationKeysDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_TxCreationKeysDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxCreationKeysDecodeErrorZ), "LDKCResult_TxCreationKeysDecodeErrorZ");
+       *ret_conv = CResult_TxCreationKeysDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_TxCreationKeysDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_TxCreationKeysDecodeErrorZ* arg_conv = (LDKCResult_TxCreationKeysDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_TxCreationKeysDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_TxCreationKeysDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_TxCreationKeysDecodeErrorZ* orig_conv = (LDKCResult_TxCreationKeysDecodeErrorZ*)(orig & ~1);
        LDKCResult_TxCreationKeysDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxCreationKeysDecodeErrorZ), "LDKCResult_TxCreationKeysDecodeErrorZ");
@@ -8500,6 +8064,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ChannelPublicKeysDec
        LDKChannelPublicKeys o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ChannelPublicKeys_clone(&o_conv);
        LDKCResult_ChannelPublicKeysDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelPublicKeysDecodeErrorZ), "LDKCResult_ChannelPublicKeysDecodeErrorZ");
        *ret_conv = CResult_ChannelPublicKeysDecodeErrorZ_ok(o_conv);
@@ -8510,12 +8075,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ChannelPublicKeysDec
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ChannelPublicKeysDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelPublicKeysDecodeErrorZ), "LDKCResult_ChannelPublicKeysDecodeErrorZ");
        *ret_conv = CResult_ChannelPublicKeysDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_ChannelPublicKeysDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_ChannelPublicKeysDecodeErrorZ* o_conv = (LDKCResult_ChannelPublicKeysDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ChannelPublicKeysDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_ChannelPublicKeysDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -8525,6 +8097,17 @@ void  __attribute__((visibility("default"))) TS_CResult_ChannelPublicKeysDecodeE
        CResult_ChannelPublicKeysDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ChannelPublicKeysDecodeErrorZ_clone_ptr(LDKCResult_ChannelPublicKeysDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ChannelPublicKeysDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelPublicKeysDecodeErrorZ), "LDKCResult_ChannelPublicKeysDecodeErrorZ");
+       *ret_conv = CResult_ChannelPublicKeysDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_ChannelPublicKeysDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_ChannelPublicKeysDecodeErrorZ* arg_conv = (LDKCResult_ChannelPublicKeysDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ChannelPublicKeysDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_ChannelPublicKeysDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_ChannelPublicKeysDecodeErrorZ* orig_conv = (LDKCResult_ChannelPublicKeysDecodeErrorZ*)(orig & ~1);
        LDKCResult_ChannelPublicKeysDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelPublicKeysDecodeErrorZ), "LDKCResult_ChannelPublicKeysDecodeErrorZ");
@@ -8536,6 +8119,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_TxCreationKeysErrorZ
        LDKTxCreationKeys o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = TxCreationKeys_clone(&o_conv);
        LDKCResult_TxCreationKeysErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxCreationKeysErrorZ), "LDKCResult_TxCreationKeysErrorZ");
        *ret_conv = CResult_TxCreationKeysErrorZ_ok(o_conv);
@@ -8549,6 +8133,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_TxCreationKeysErrorZ
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_TxCreationKeysErrorZ_is_ok(uint32_t o) {
+       LDKCResult_TxCreationKeysErrorZ* o_conv = (LDKCResult_TxCreationKeysErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_TxCreationKeysErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_TxCreationKeysErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -8558,6 +8148,17 @@ void  __attribute__((visibility("default"))) TS_CResult_TxCreationKeysErrorZ_fre
        CResult_TxCreationKeysErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_TxCreationKeysErrorZ_clone_ptr(LDKCResult_TxCreationKeysErrorZ *NONNULL_PTR arg) {
+       LDKCResult_TxCreationKeysErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxCreationKeysErrorZ), "LDKCResult_TxCreationKeysErrorZ");
+       *ret_conv = CResult_TxCreationKeysErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_TxCreationKeysErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_TxCreationKeysErrorZ* arg_conv = (LDKCResult_TxCreationKeysErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_TxCreationKeysErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_TxCreationKeysErrorZ_clone(uint32_t orig) {
        LDKCResult_TxCreationKeysErrorZ* orig_conv = (LDKCResult_TxCreationKeysErrorZ*)(orig & ~1);
        LDKCResult_TxCreationKeysErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxCreationKeysErrorZ), "LDKCResult_TxCreationKeysErrorZ");
@@ -8588,6 +8189,18 @@ void  __attribute__((visibility("default"))) TS_COption_u32Z_free(uint32_t _res)
        COption_u32Z_free(_res_conv);
 }
 
+static inline uint64_t COption_u32Z_clone_ptr(LDKCOption_u32Z *NONNULL_PTR arg) {
+       LDKCOption_u32Z *ret_copy = MALLOC(sizeof(LDKCOption_u32Z), "LDKCOption_u32Z");
+       *ret_copy = COption_u32Z_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_COption_u32Z_clone_ptr(uint32_t arg) {
+       LDKCOption_u32Z* arg_conv = (LDKCOption_u32Z*)arg;
+       int64_t ret_val = COption_u32Z_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_COption_u32Z_clone(uint32_t orig) {
        LDKCOption_u32Z* orig_conv = (LDKCOption_u32Z*)orig;
        LDKCOption_u32Z *ret_copy = MALLOC(sizeof(LDKCOption_u32Z), "LDKCOption_u32Z");
@@ -8600,6 +8213,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_HTLCOutputInCommitme
        LDKHTLCOutputInCommitment o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = HTLCOutputInCommitment_clone(&o_conv);
        LDKCResult_HTLCOutputInCommitmentDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HTLCOutputInCommitmentDecodeErrorZ), "LDKCResult_HTLCOutputInCommitmentDecodeErrorZ");
        *ret_conv = CResult_HTLCOutputInCommitmentDecodeErrorZ_ok(o_conv);
@@ -8610,12 +8224,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_HTLCOutputInCommitme
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_HTLCOutputInCommitmentDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HTLCOutputInCommitmentDecodeErrorZ), "LDKCResult_HTLCOutputInCommitmentDecodeErrorZ");
        *ret_conv = CResult_HTLCOutputInCommitmentDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_HTLCOutputInCommitmentDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_HTLCOutputInCommitmentDecodeErrorZ* o_conv = (LDKCResult_HTLCOutputInCommitmentDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_HTLCOutputInCommitmentDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_HTLCOutputInCommitmentDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -8625,6 +8246,17 @@ void  __attribute__((visibility("default"))) TS_CResult_HTLCOutputInCommitmentDe
        CResult_HTLCOutputInCommitmentDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_HTLCOutputInCommitmentDecodeErrorZ_clone_ptr(LDKCResult_HTLCOutputInCommitmentDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_HTLCOutputInCommitmentDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HTLCOutputInCommitmentDecodeErrorZ), "LDKCResult_HTLCOutputInCommitmentDecodeErrorZ");
+       *ret_conv = CResult_HTLCOutputInCommitmentDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_HTLCOutputInCommitmentDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_HTLCOutputInCommitmentDecodeErrorZ* arg_conv = (LDKCResult_HTLCOutputInCommitmentDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_HTLCOutputInCommitmentDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_HTLCOutputInCommitmentDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_HTLCOutputInCommitmentDecodeErrorZ* orig_conv = (LDKCResult_HTLCOutputInCommitmentDecodeErrorZ*)(orig & ~1);
        LDKCResult_HTLCOutputInCommitmentDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HTLCOutputInCommitmentDecodeErrorZ), "LDKCResult_HTLCOutputInCommitmentDecodeErrorZ");
@@ -8636,6 +8268,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_CounterpartyChannelT
        LDKCounterpartyChannelTransactionParameters o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = CounterpartyChannelTransactionParameters_clone(&o_conv);
        LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ), "LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ");
        *ret_conv = CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_ok(o_conv);
@@ -8646,12 +8279,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_CounterpartyChannelT
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ), "LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ");
        *ret_conv = CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ* o_conv = (LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -8661,6 +8301,17 @@ void  __attribute__((visibility("default"))) TS_CResult_CounterpartyChannelTrans
        CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_clone_ptr(LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ), "LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ");
+       *ret_conv = CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ* arg_conv = (LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ* orig_conv = (LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ*)(orig & ~1);
        LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ), "LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ");
@@ -8672,6 +8323,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ChannelTransactionPa
        LDKChannelTransactionParameters o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ChannelTransactionParameters_clone(&o_conv);
        LDKCResult_ChannelTransactionParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelTransactionParametersDecodeErrorZ), "LDKCResult_ChannelTransactionParametersDecodeErrorZ");
        *ret_conv = CResult_ChannelTransactionParametersDecodeErrorZ_ok(o_conv);
@@ -8682,12 +8334,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ChannelTransactionPa
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ChannelTransactionParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelTransactionParametersDecodeErrorZ), "LDKCResult_ChannelTransactionParametersDecodeErrorZ");
        *ret_conv = CResult_ChannelTransactionParametersDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_ChannelTransactionParametersDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_ChannelTransactionParametersDecodeErrorZ* o_conv = (LDKCResult_ChannelTransactionParametersDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ChannelTransactionParametersDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_ChannelTransactionParametersDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -8697,6 +8356,17 @@ void  __attribute__((visibility("default"))) TS_CResult_ChannelTransactionParame
        CResult_ChannelTransactionParametersDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ChannelTransactionParametersDecodeErrorZ_clone_ptr(LDKCResult_ChannelTransactionParametersDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ChannelTransactionParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelTransactionParametersDecodeErrorZ), "LDKCResult_ChannelTransactionParametersDecodeErrorZ");
+       *ret_conv = CResult_ChannelTransactionParametersDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_ChannelTransactionParametersDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_ChannelTransactionParametersDecodeErrorZ* arg_conv = (LDKCResult_ChannelTransactionParametersDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ChannelTransactionParametersDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_ChannelTransactionParametersDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_ChannelTransactionParametersDecodeErrorZ* orig_conv = (LDKCResult_ChannelTransactionParametersDecodeErrorZ*)(orig & ~1);
        LDKCResult_ChannelTransactionParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelTransactionParametersDecodeErrorZ), "LDKCResult_ChannelTransactionParametersDecodeErrorZ");
@@ -8726,6 +8396,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_HolderCommitmentTran
        LDKHolderCommitmentTransaction o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = HolderCommitmentTransaction_clone(&o_conv);
        LDKCResult_HolderCommitmentTransactionDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HolderCommitmentTransactionDecodeErrorZ), "LDKCResult_HolderCommitmentTransactionDecodeErrorZ");
        *ret_conv = CResult_HolderCommitmentTransactionDecodeErrorZ_ok(o_conv);
@@ -8736,12 +8407,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_HolderCommitmentTran
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_HolderCommitmentTransactionDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HolderCommitmentTransactionDecodeErrorZ), "LDKCResult_HolderCommitmentTransactionDecodeErrorZ");
        *ret_conv = CResult_HolderCommitmentTransactionDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_HolderCommitmentTransactionDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_HolderCommitmentTransactionDecodeErrorZ* o_conv = (LDKCResult_HolderCommitmentTransactionDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_HolderCommitmentTransactionDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_HolderCommitmentTransactionDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -8751,6 +8429,17 @@ void  __attribute__((visibility("default"))) TS_CResult_HolderCommitmentTransact
        CResult_HolderCommitmentTransactionDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_HolderCommitmentTransactionDecodeErrorZ_clone_ptr(LDKCResult_HolderCommitmentTransactionDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_HolderCommitmentTransactionDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HolderCommitmentTransactionDecodeErrorZ), "LDKCResult_HolderCommitmentTransactionDecodeErrorZ");
+       *ret_conv = CResult_HolderCommitmentTransactionDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_HolderCommitmentTransactionDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_HolderCommitmentTransactionDecodeErrorZ* arg_conv = (LDKCResult_HolderCommitmentTransactionDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_HolderCommitmentTransactionDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_HolderCommitmentTransactionDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_HolderCommitmentTransactionDecodeErrorZ* orig_conv = (LDKCResult_HolderCommitmentTransactionDecodeErrorZ*)(orig & ~1);
        LDKCResult_HolderCommitmentTransactionDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HolderCommitmentTransactionDecodeErrorZ), "LDKCResult_HolderCommitmentTransactionDecodeErrorZ");
@@ -8762,6 +8451,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_BuiltCommitmentTrans
        LDKBuiltCommitmentTransaction o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = BuiltCommitmentTransaction_clone(&o_conv);
        LDKCResult_BuiltCommitmentTransactionDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BuiltCommitmentTransactionDecodeErrorZ), "LDKCResult_BuiltCommitmentTransactionDecodeErrorZ");
        *ret_conv = CResult_BuiltCommitmentTransactionDecodeErrorZ_ok(o_conv);
@@ -8772,12 +8462,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_BuiltCommitmentTrans
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_BuiltCommitmentTransactionDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BuiltCommitmentTransactionDecodeErrorZ), "LDKCResult_BuiltCommitmentTransactionDecodeErrorZ");
        *ret_conv = CResult_BuiltCommitmentTransactionDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_BuiltCommitmentTransactionDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_BuiltCommitmentTransactionDecodeErrorZ* o_conv = (LDKCResult_BuiltCommitmentTransactionDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_BuiltCommitmentTransactionDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_BuiltCommitmentTransactionDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -8787,6 +8484,17 @@ void  __attribute__((visibility("default"))) TS_CResult_BuiltCommitmentTransacti
        CResult_BuiltCommitmentTransactionDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_BuiltCommitmentTransactionDecodeErrorZ_clone_ptr(LDKCResult_BuiltCommitmentTransactionDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_BuiltCommitmentTransactionDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BuiltCommitmentTransactionDecodeErrorZ), "LDKCResult_BuiltCommitmentTransactionDecodeErrorZ");
+       *ret_conv = CResult_BuiltCommitmentTransactionDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_BuiltCommitmentTransactionDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_BuiltCommitmentTransactionDecodeErrorZ* arg_conv = (LDKCResult_BuiltCommitmentTransactionDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_BuiltCommitmentTransactionDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_BuiltCommitmentTransactionDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_BuiltCommitmentTransactionDecodeErrorZ* orig_conv = (LDKCResult_BuiltCommitmentTransactionDecodeErrorZ*)(orig & ~1);
        LDKCResult_BuiltCommitmentTransactionDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BuiltCommitmentTransactionDecodeErrorZ), "LDKCResult_BuiltCommitmentTransactionDecodeErrorZ");
@@ -8798,6 +8506,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_TrustedClosingTransa
        LDKTrustedClosingTransaction o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        // Warning: we need a move here but no clone is available for LDKTrustedClosingTransaction
        LDKCResult_TrustedClosingTransactionNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_TrustedClosingTransactionNoneZ), "LDKCResult_TrustedClosingTransactionNoneZ");
        *ret_conv = CResult_TrustedClosingTransactionNoneZ_ok(o_conv);
@@ -8810,6 +8519,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_TrustedClosingTransa
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_TrustedClosingTransactionNoneZ_is_ok(uint32_t o) {
+       LDKCResult_TrustedClosingTransactionNoneZ* o_conv = (LDKCResult_TrustedClosingTransactionNoneZ*)(o & ~1);
+       jboolean ret_val = CResult_TrustedClosingTransactionNoneZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_TrustedClosingTransactionNoneZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -8823,6 +8538,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_CommitmentTransactio
        LDKCommitmentTransaction o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = CommitmentTransaction_clone(&o_conv);
        LDKCResult_CommitmentTransactionDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CommitmentTransactionDecodeErrorZ), "LDKCResult_CommitmentTransactionDecodeErrorZ");
        *ret_conv = CResult_CommitmentTransactionDecodeErrorZ_ok(o_conv);
@@ -8833,12 +8549,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_CommitmentTransactio
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_CommitmentTransactionDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CommitmentTransactionDecodeErrorZ), "LDKCResult_CommitmentTransactionDecodeErrorZ");
        *ret_conv = CResult_CommitmentTransactionDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_CommitmentTransactionDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_CommitmentTransactionDecodeErrorZ* o_conv = (LDKCResult_CommitmentTransactionDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_CommitmentTransactionDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_CommitmentTransactionDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -8848,6 +8571,17 @@ void  __attribute__((visibility("default"))) TS_CResult_CommitmentTransactionDec
        CResult_CommitmentTransactionDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_CommitmentTransactionDecodeErrorZ_clone_ptr(LDKCResult_CommitmentTransactionDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_CommitmentTransactionDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CommitmentTransactionDecodeErrorZ), "LDKCResult_CommitmentTransactionDecodeErrorZ");
+       *ret_conv = CResult_CommitmentTransactionDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_CommitmentTransactionDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_CommitmentTransactionDecodeErrorZ* arg_conv = (LDKCResult_CommitmentTransactionDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_CommitmentTransactionDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_CommitmentTransactionDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_CommitmentTransactionDecodeErrorZ* orig_conv = (LDKCResult_CommitmentTransactionDecodeErrorZ*)(orig & ~1);
        LDKCResult_CommitmentTransactionDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CommitmentTransactionDecodeErrorZ), "LDKCResult_CommitmentTransactionDecodeErrorZ");
@@ -8859,6 +8593,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_TrustedCommitmentTra
        LDKTrustedCommitmentTransaction o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        // Warning: we need a move here but no clone is available for LDKTrustedCommitmentTransaction
        LDKCResult_TrustedCommitmentTransactionNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_TrustedCommitmentTransactionNoneZ), "LDKCResult_TrustedCommitmentTransactionNoneZ");
        *ret_conv = CResult_TrustedCommitmentTransactionNoneZ_ok(o_conv);
@@ -8871,6 +8606,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_TrustedCommitmentTra
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_TrustedCommitmentTransactionNoneZ_is_ok(uint32_t o) {
+       LDKCResult_TrustedCommitmentTransactionNoneZ* o_conv = (LDKCResult_TrustedCommitmentTransactionNoneZ*)(o & ~1);
+       jboolean ret_val = CResult_TrustedCommitmentTransactionNoneZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_TrustedCommitmentTransactionNoneZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -8906,6 +8647,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_CVec_SignatureZNoneZ
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_CVec_SignatureZNoneZ_is_ok(uint32_t o) {
+       LDKCResult_CVec_SignatureZNoneZ* o_conv = (LDKCResult_CVec_SignatureZNoneZ*)(o & ~1);
+       jboolean ret_val = CResult_CVec_SignatureZNoneZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_CVec_SignatureZNoneZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -8915,6 +8662,17 @@ void  __attribute__((visibility("default"))) TS_CResult_CVec_SignatureZNoneZ_fre
        CResult_CVec_SignatureZNoneZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_CVec_SignatureZNoneZ_clone_ptr(LDKCResult_CVec_SignatureZNoneZ *NONNULL_PTR arg) {
+       LDKCResult_CVec_SignatureZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_SignatureZNoneZ), "LDKCResult_CVec_SignatureZNoneZ");
+       *ret_conv = CResult_CVec_SignatureZNoneZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_CVec_SignatureZNoneZ_clone_ptr(uint32_t arg) {
+       LDKCResult_CVec_SignatureZNoneZ* arg_conv = (LDKCResult_CVec_SignatureZNoneZ*)(arg & ~1);
+       int64_t ret_val = CResult_CVec_SignatureZNoneZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_CVec_SignatureZNoneZ_clone(uint32_t orig) {
        LDKCResult_CVec_SignatureZNoneZ* orig_conv = (LDKCResult_CVec_SignatureZNoneZ*)(orig & ~1);
        LDKCResult_CVec_SignatureZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_SignatureZNoneZ), "LDKCResult_CVec_SignatureZNoneZ");
@@ -8926,6 +8684,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ShutdownScriptDecode
        LDKShutdownScript o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ShutdownScript_clone(&o_conv);
        LDKCResult_ShutdownScriptDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ShutdownScriptDecodeErrorZ), "LDKCResult_ShutdownScriptDecodeErrorZ");
        *ret_conv = CResult_ShutdownScriptDecodeErrorZ_ok(o_conv);
@@ -8936,12 +8695,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ShutdownScriptDecode
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ShutdownScriptDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ShutdownScriptDecodeErrorZ), "LDKCResult_ShutdownScriptDecodeErrorZ");
        *ret_conv = CResult_ShutdownScriptDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_ShutdownScriptDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_ShutdownScriptDecodeErrorZ* o_conv = (LDKCResult_ShutdownScriptDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ShutdownScriptDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_ShutdownScriptDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -8951,6 +8717,17 @@ void  __attribute__((visibility("default"))) TS_CResult_ShutdownScriptDecodeErro
        CResult_ShutdownScriptDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ShutdownScriptDecodeErrorZ_clone_ptr(LDKCResult_ShutdownScriptDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ShutdownScriptDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ShutdownScriptDecodeErrorZ), "LDKCResult_ShutdownScriptDecodeErrorZ");
+       *ret_conv = CResult_ShutdownScriptDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_ShutdownScriptDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_ShutdownScriptDecodeErrorZ* arg_conv = (LDKCResult_ShutdownScriptDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ShutdownScriptDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_ShutdownScriptDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_ShutdownScriptDecodeErrorZ* orig_conv = (LDKCResult_ShutdownScriptDecodeErrorZ*)(orig & ~1);
        LDKCResult_ShutdownScriptDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ShutdownScriptDecodeErrorZ), "LDKCResult_ShutdownScriptDecodeErrorZ");
@@ -8962,6 +8739,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ShutdownScriptInvali
        LDKShutdownScript o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ShutdownScript_clone(&o_conv);
        LDKCResult_ShutdownScriptInvalidShutdownScriptZ* ret_conv = MALLOC(sizeof(LDKCResult_ShutdownScriptInvalidShutdownScriptZ), "LDKCResult_ShutdownScriptInvalidShutdownScriptZ");
        *ret_conv = CResult_ShutdownScriptInvalidShutdownScriptZ_ok(o_conv);
@@ -8972,12 +8750,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ShutdownScriptInvali
        LDKInvalidShutdownScript e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = InvalidShutdownScript_clone(&e_conv);
        LDKCResult_ShutdownScriptInvalidShutdownScriptZ* ret_conv = MALLOC(sizeof(LDKCResult_ShutdownScriptInvalidShutdownScriptZ), "LDKCResult_ShutdownScriptInvalidShutdownScriptZ");
        *ret_conv = CResult_ShutdownScriptInvalidShutdownScriptZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_ShutdownScriptInvalidShutdownScriptZ_is_ok(uint32_t o) {
+       LDKCResult_ShutdownScriptInvalidShutdownScriptZ* o_conv = (LDKCResult_ShutdownScriptInvalidShutdownScriptZ*)(o & ~1);
+       jboolean ret_val = CResult_ShutdownScriptInvalidShutdownScriptZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_ShutdownScriptInvalidShutdownScriptZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -8987,6 +8772,17 @@ void  __attribute__((visibility("default"))) TS_CResult_ShutdownScriptInvalidShu
        CResult_ShutdownScriptInvalidShutdownScriptZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ShutdownScriptInvalidShutdownScriptZ_clone_ptr(LDKCResult_ShutdownScriptInvalidShutdownScriptZ *NONNULL_PTR arg) {
+       LDKCResult_ShutdownScriptInvalidShutdownScriptZ* ret_conv = MALLOC(sizeof(LDKCResult_ShutdownScriptInvalidShutdownScriptZ), "LDKCResult_ShutdownScriptInvalidShutdownScriptZ");
+       *ret_conv = CResult_ShutdownScriptInvalidShutdownScriptZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_ShutdownScriptInvalidShutdownScriptZ_clone_ptr(uint32_t arg) {
+       LDKCResult_ShutdownScriptInvalidShutdownScriptZ* arg_conv = (LDKCResult_ShutdownScriptInvalidShutdownScriptZ*)(arg & ~1);
+       int64_t ret_val = CResult_ShutdownScriptInvalidShutdownScriptZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_ShutdownScriptInvalidShutdownScriptZ_clone(uint32_t orig) {
        LDKCResult_ShutdownScriptInvalidShutdownScriptZ* orig_conv = (LDKCResult_ShutdownScriptInvalidShutdownScriptZ*)(orig & ~1);
        LDKCResult_ShutdownScriptInvalidShutdownScriptZ* ret_conv = MALLOC(sizeof(LDKCResult_ShutdownScriptInvalidShutdownScriptZ), "LDKCResult_ShutdownScriptInvalidShutdownScriptZ");
@@ -9007,6 +8803,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_NoneErrorZ_err(uint3
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_NoneErrorZ_is_ok(uint32_t o) {
+       LDKCResult_NoneErrorZ* o_conv = (LDKCResult_NoneErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_NoneErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_NoneErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -9016,6 +8818,17 @@ void  __attribute__((visibility("default"))) TS_CResult_NoneErrorZ_free(uint32_t
        CResult_NoneErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_NoneErrorZ_clone_ptr(LDKCResult_NoneErrorZ *NONNULL_PTR arg) {
+       LDKCResult_NoneErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneErrorZ), "LDKCResult_NoneErrorZ");
+       *ret_conv = CResult_NoneErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_NoneErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_NoneErrorZ* arg_conv = (LDKCResult_NoneErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_NoneErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_NoneErrorZ_clone(uint32_t orig) {
        LDKCResult_NoneErrorZ* orig_conv = (LDKCResult_NoneErrorZ*)(orig & ~1);
        LDKCResult_NoneErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneErrorZ), "LDKCResult_NoneErrorZ");
@@ -9027,6 +8840,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_RouteHopDecodeErrorZ
        LDKRouteHop o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = RouteHop_clone(&o_conv);
        LDKCResult_RouteHopDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHopDecodeErrorZ), "LDKCResult_RouteHopDecodeErrorZ");
        *ret_conv = CResult_RouteHopDecodeErrorZ_ok(o_conv);
@@ -9037,12 +8851,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_RouteHopDecodeErrorZ
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_RouteHopDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHopDecodeErrorZ), "LDKCResult_RouteHopDecodeErrorZ");
        *ret_conv = CResult_RouteHopDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_RouteHopDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_RouteHopDecodeErrorZ* o_conv = (LDKCResult_RouteHopDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_RouteHopDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_RouteHopDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -9052,6 +8873,17 @@ void  __attribute__((visibility("default"))) TS_CResult_RouteHopDecodeErrorZ_fre
        CResult_RouteHopDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_RouteHopDecodeErrorZ_clone_ptr(LDKCResult_RouteHopDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_RouteHopDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHopDecodeErrorZ), "LDKCResult_RouteHopDecodeErrorZ");
+       *ret_conv = CResult_RouteHopDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_RouteHopDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_RouteHopDecodeErrorZ* arg_conv = (LDKCResult_RouteHopDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_RouteHopDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_RouteHopDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_RouteHopDecodeErrorZ* orig_conv = (LDKCResult_RouteHopDecodeErrorZ*)(orig & ~1);
        LDKCResult_RouteHopDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHopDecodeErrorZ), "LDKCResult_RouteHopDecodeErrorZ");
@@ -9072,6 +8904,7 @@ void  __attribute__((visibility("default"))) TS_CVec_RouteHopZ_free(uint32_tArra
                LDKRouteHop _res_conv_10_conv;
                _res_conv_10_conv.inner = (void*)(_res_conv_10 & (~1));
                _res_conv_10_conv.is_owned = (_res_conv_10 & 1) || (_res_conv_10 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_10_conv);
                _res_constr.data[k] = _res_conv_10_conv;
        }
        CVec_RouteHopZ_free(_res_constr);
@@ -9099,6 +8932,7 @@ void  __attribute__((visibility("default"))) TS_CVec_CVec_RouteHopZZ_free(ptrArr
                        LDKRouteHop _res_conv_12_conv_10_conv;
                        _res_conv_12_conv_10_conv.inner = (void*)(_res_conv_12_conv_10 & (~1));
                        _res_conv_12_conv_10_conv.is_owned = (_res_conv_12_conv_10 & 1) || (_res_conv_12_conv_10 == 0);
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_12_conv_10_conv);
                        _res_conv_12_constr.data[k] = _res_conv_12_conv_10_conv;
                }
                _res_constr.data[m] = _res_conv_12_constr;
@@ -9110,6 +8944,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_RouteDecodeErrorZ_ok
        LDKRoute o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = Route_clone(&o_conv);
        LDKCResult_RouteDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteDecodeErrorZ), "LDKCResult_RouteDecodeErrorZ");
        *ret_conv = CResult_RouteDecodeErrorZ_ok(o_conv);
@@ -9120,12 +8955,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_RouteDecodeErrorZ_er
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_RouteDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteDecodeErrorZ), "LDKCResult_RouteDecodeErrorZ");
        *ret_conv = CResult_RouteDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_RouteDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_RouteDecodeErrorZ* o_conv = (LDKCResult_RouteDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_RouteDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_RouteDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -9135,6 +8977,17 @@ void  __attribute__((visibility("default"))) TS_CResult_RouteDecodeErrorZ_free(u
        CResult_RouteDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_RouteDecodeErrorZ_clone_ptr(LDKCResult_RouteDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_RouteDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteDecodeErrorZ), "LDKCResult_RouteDecodeErrorZ");
+       *ret_conv = CResult_RouteDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_RouteDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_RouteDecodeErrorZ* arg_conv = (LDKCResult_RouteDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_RouteDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_RouteDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_RouteDecodeErrorZ* orig_conv = (LDKCResult_RouteDecodeErrorZ*)(orig & ~1);
        LDKCResult_RouteDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteDecodeErrorZ), "LDKCResult_RouteDecodeErrorZ");
@@ -9146,6 +8999,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_RouteParametersDecod
        LDKRouteParameters o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = RouteParameters_clone(&o_conv);
        LDKCResult_RouteParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteParametersDecodeErrorZ), "LDKCResult_RouteParametersDecodeErrorZ");
        *ret_conv = CResult_RouteParametersDecodeErrorZ_ok(o_conv);
@@ -9156,12 +9010,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_RouteParametersDecod
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_RouteParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteParametersDecodeErrorZ), "LDKCResult_RouteParametersDecodeErrorZ");
        *ret_conv = CResult_RouteParametersDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_RouteParametersDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_RouteParametersDecodeErrorZ* o_conv = (LDKCResult_RouteParametersDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_RouteParametersDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_RouteParametersDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -9171,6 +9032,17 @@ void  __attribute__((visibility("default"))) TS_CResult_RouteParametersDecodeErr
        CResult_RouteParametersDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_RouteParametersDecodeErrorZ_clone_ptr(LDKCResult_RouteParametersDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_RouteParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteParametersDecodeErrorZ), "LDKCResult_RouteParametersDecodeErrorZ");
+       *ret_conv = CResult_RouteParametersDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_RouteParametersDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_RouteParametersDecodeErrorZ* arg_conv = (LDKCResult_RouteParametersDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_RouteParametersDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_RouteParametersDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_RouteParametersDecodeErrorZ* orig_conv = (LDKCResult_RouteParametersDecodeErrorZ*)(orig & ~1);
        LDKCResult_RouteParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteParametersDecodeErrorZ), "LDKCResult_RouteParametersDecodeErrorZ");
@@ -9191,6 +9063,7 @@ void  __attribute__((visibility("default"))) TS_CVec_RouteHintZ_free(uint32_tArr
                LDKRouteHint _res_conv_11_conv;
                _res_conv_11_conv.inner = (void*)(_res_conv_11 & (~1));
                _res_conv_11_conv.is_owned = (_res_conv_11 & 1) || (_res_conv_11 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_11_conv);
                _res_constr.data[l] = _res_conv_11_conv;
        }
        CVec_RouteHintZ_free(_res_constr);
@@ -9219,6 +9092,18 @@ void  __attribute__((visibility("default"))) TS_COption_u64Z_free(uint32_t _res)
        COption_u64Z_free(_res_conv);
 }
 
+static inline uint64_t COption_u64Z_clone_ptr(LDKCOption_u64Z *NONNULL_PTR arg) {
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = COption_u64Z_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_COption_u64Z_clone_ptr(uint32_t arg) {
+       LDKCOption_u64Z* arg_conv = (LDKCOption_u64Z*)arg;
+       int64_t ret_val = COption_u64Z_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_COption_u64Z_clone(uint32_t orig) {
        LDKCOption_u64Z* orig_conv = (LDKCOption_u64Z*)orig;
        LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
@@ -9231,6 +9116,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_PayeeDecodeErrorZ_ok
        LDKPayee o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = Payee_clone(&o_conv);
        LDKCResult_PayeeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PayeeDecodeErrorZ), "LDKCResult_PayeeDecodeErrorZ");
        *ret_conv = CResult_PayeeDecodeErrorZ_ok(o_conv);
@@ -9241,12 +9127,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_PayeeDecodeErrorZ_er
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_PayeeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PayeeDecodeErrorZ), "LDKCResult_PayeeDecodeErrorZ");
        *ret_conv = CResult_PayeeDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_PayeeDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_PayeeDecodeErrorZ* o_conv = (LDKCResult_PayeeDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_PayeeDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_PayeeDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -9256,6 +9149,17 @@ void  __attribute__((visibility("default"))) TS_CResult_PayeeDecodeErrorZ_free(u
        CResult_PayeeDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_PayeeDecodeErrorZ_clone_ptr(LDKCResult_PayeeDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_PayeeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PayeeDecodeErrorZ), "LDKCResult_PayeeDecodeErrorZ");
+       *ret_conv = CResult_PayeeDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_PayeeDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_PayeeDecodeErrorZ* arg_conv = (LDKCResult_PayeeDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_PayeeDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_PayeeDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_PayeeDecodeErrorZ* orig_conv = (LDKCResult_PayeeDecodeErrorZ*)(orig & ~1);
        LDKCResult_PayeeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PayeeDecodeErrorZ), "LDKCResult_PayeeDecodeErrorZ");
@@ -9276,6 +9180,7 @@ void  __attribute__((visibility("default"))) TS_CVec_RouteHintHopZ_free(uint32_t
                LDKRouteHintHop _res_conv_14_conv;
                _res_conv_14_conv.inner = (void*)(_res_conv_14 & (~1));
                _res_conv_14_conv.is_owned = (_res_conv_14 & 1) || (_res_conv_14 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_14_conv);
                _res_constr.data[o] = _res_conv_14_conv;
        }
        CVec_RouteHintHopZ_free(_res_constr);
@@ -9285,6 +9190,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_RouteHintDecodeError
        LDKRouteHint o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = RouteHint_clone(&o_conv);
        LDKCResult_RouteHintDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHintDecodeErrorZ), "LDKCResult_RouteHintDecodeErrorZ");
        *ret_conv = CResult_RouteHintDecodeErrorZ_ok(o_conv);
@@ -9295,12 +9201,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_RouteHintDecodeError
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_RouteHintDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHintDecodeErrorZ), "LDKCResult_RouteHintDecodeErrorZ");
        *ret_conv = CResult_RouteHintDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_RouteHintDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_RouteHintDecodeErrorZ* o_conv = (LDKCResult_RouteHintDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_RouteHintDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_RouteHintDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -9310,6 +9223,17 @@ void  __attribute__((visibility("default"))) TS_CResult_RouteHintDecodeErrorZ_fr
        CResult_RouteHintDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_RouteHintDecodeErrorZ_clone_ptr(LDKCResult_RouteHintDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_RouteHintDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHintDecodeErrorZ), "LDKCResult_RouteHintDecodeErrorZ");
+       *ret_conv = CResult_RouteHintDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_RouteHintDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_RouteHintDecodeErrorZ* arg_conv = (LDKCResult_RouteHintDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_RouteHintDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_RouteHintDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_RouteHintDecodeErrorZ* orig_conv = (LDKCResult_RouteHintDecodeErrorZ*)(orig & ~1);
        LDKCResult_RouteHintDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHintDecodeErrorZ), "LDKCResult_RouteHintDecodeErrorZ");
@@ -9321,6 +9245,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_RouteHintHopDecodeEr
        LDKRouteHintHop o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = RouteHintHop_clone(&o_conv);
        LDKCResult_RouteHintHopDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHintHopDecodeErrorZ), "LDKCResult_RouteHintHopDecodeErrorZ");
        *ret_conv = CResult_RouteHintHopDecodeErrorZ_ok(o_conv);
@@ -9331,12 +9256,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_RouteHintHopDecodeEr
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_RouteHintHopDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHintHopDecodeErrorZ), "LDKCResult_RouteHintHopDecodeErrorZ");
        *ret_conv = CResult_RouteHintHopDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_RouteHintHopDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_RouteHintHopDecodeErrorZ* o_conv = (LDKCResult_RouteHintHopDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_RouteHintHopDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_RouteHintHopDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -9346,6 +9278,17 @@ void  __attribute__((visibility("default"))) TS_CResult_RouteHintHopDecodeErrorZ
        CResult_RouteHintHopDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_RouteHintHopDecodeErrorZ_clone_ptr(LDKCResult_RouteHintHopDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_RouteHintHopDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHintHopDecodeErrorZ), "LDKCResult_RouteHintHopDecodeErrorZ");
+       *ret_conv = CResult_RouteHintHopDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_RouteHintHopDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_RouteHintHopDecodeErrorZ* arg_conv = (LDKCResult_RouteHintHopDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_RouteHintHopDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_RouteHintHopDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_RouteHintHopDecodeErrorZ* orig_conv = (LDKCResult_RouteHintHopDecodeErrorZ*)(orig & ~1);
        LDKCResult_RouteHintHopDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHintHopDecodeErrorZ), "LDKCResult_RouteHintHopDecodeErrorZ");
@@ -9366,6 +9309,7 @@ void  __attribute__((visibility("default"))) TS_CVec_ChannelDetailsZ_free(uint32
                LDKChannelDetails _res_conv_16_conv;
                _res_conv_16_conv.inner = (void*)(_res_conv_16 & (~1));
                _res_conv_16_conv.is_owned = (_res_conv_16 & 1) || (_res_conv_16 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_16_conv);
                _res_constr.data[q] = _res_conv_16_conv;
        }
        CVec_ChannelDetailsZ_free(_res_constr);
@@ -9375,6 +9319,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_RouteLightningErrorZ
        LDKRoute o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = Route_clone(&o_conv);
        LDKCResult_RouteLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteLightningErrorZ), "LDKCResult_RouteLightningErrorZ");
        *ret_conv = CResult_RouteLightningErrorZ_ok(o_conv);
@@ -9385,14 +9330,21 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_RouteLightningErrorZ
        LDKLightningError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = LightningError_clone(&e_conv);
        LDKCResult_RouteLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteLightningErrorZ), "LDKCResult_RouteLightningErrorZ");
        *ret_conv = CResult_RouteLightningErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
-void  __attribute__((visibility("default"))) TS_CResult_RouteLightningErrorZ_free(uint32_t _res) {
-       if ((_res & 1) != 0) return;
+jboolean  __attribute__((visibility("default"))) TS_CResult_RouteLightningErrorZ_is_ok(uint32_t o) {
+       LDKCResult_RouteLightningErrorZ* o_conv = (LDKCResult_RouteLightningErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_RouteLightningErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
+void  __attribute__((visibility("default"))) TS_CResult_RouteLightningErrorZ_free(uint32_t _res) {
+       if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
        CHECK_ACCESS(_res_ptr);
        LDKCResult_RouteLightningErrorZ _res_conv = *(LDKCResult_RouteLightningErrorZ*)(_res_ptr);
@@ -9400,6 +9352,17 @@ void  __attribute__((visibility("default"))) TS_CResult_RouteLightningErrorZ_fre
        CResult_RouteLightningErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_RouteLightningErrorZ_clone_ptr(LDKCResult_RouteLightningErrorZ *NONNULL_PTR arg) {
+       LDKCResult_RouteLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteLightningErrorZ), "LDKCResult_RouteLightningErrorZ");
+       *ret_conv = CResult_RouteLightningErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_RouteLightningErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_RouteLightningErrorZ* arg_conv = (LDKCResult_RouteLightningErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_RouteLightningErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_RouteLightningErrorZ_clone(uint32_t orig) {
        LDKCResult_RouteLightningErrorZ* orig_conv = (LDKCResult_RouteLightningErrorZ*)(orig & ~1);
        LDKCResult_RouteLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteLightningErrorZ), "LDKCResult_RouteLightningErrorZ");
@@ -9424,6 +9387,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_TxOutAccessErrorZ_er
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_TxOutAccessErrorZ_is_ok(uint32_t o) {
+       LDKCResult_TxOutAccessErrorZ* o_conv = (LDKCResult_TxOutAccessErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_TxOutAccessErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_TxOutAccessErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -9433,6 +9402,17 @@ void  __attribute__((visibility("default"))) TS_CResult_TxOutAccessErrorZ_free(u
        CResult_TxOutAccessErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_TxOutAccessErrorZ_clone_ptr(LDKCResult_TxOutAccessErrorZ *NONNULL_PTR arg) {
+       LDKCResult_TxOutAccessErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxOutAccessErrorZ), "LDKCResult_TxOutAccessErrorZ");
+       *ret_conv = CResult_TxOutAccessErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_TxOutAccessErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_TxOutAccessErrorZ* arg_conv = (LDKCResult_TxOutAccessErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_TxOutAccessErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_TxOutAccessErrorZ_clone(uint32_t orig) {
        LDKCResult_TxOutAccessErrorZ* orig_conv = (LDKCResult_TxOutAccessErrorZ*)(orig & ~1);
        LDKCResult_TxOutAccessErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxOutAccessErrorZ), "LDKCResult_TxOutAccessErrorZ");
@@ -9440,6 +9420,17 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_TxOutAccessErrorZ_cl
        return (uint64_t)ret_conv;
 }
 
+static inline uint64_t C2Tuple_usizeTransactionZ_clone_ptr(LDKC2Tuple_usizeTransactionZ *NONNULL_PTR arg) {
+       LDKC2Tuple_usizeTransactionZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_usizeTransactionZ), "LDKC2Tuple_usizeTransactionZ");
+       *ret_conv = C2Tuple_usizeTransactionZ_clone(arg);
+       return ((uint64_t)ret_conv);
+}
+int64_t  __attribute__((visibility("default"))) TS_C2Tuple_usizeTransactionZ_clone_ptr(uint32_t arg) {
+       LDKC2Tuple_usizeTransactionZ* arg_conv = (LDKC2Tuple_usizeTransactionZ*)(arg & ~1);
+       int64_t ret_val = C2Tuple_usizeTransactionZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_C2Tuple_usizeTransactionZ_clone(uint32_t orig) {
        LDKC2Tuple_usizeTransactionZ* orig_conv = (LDKC2Tuple_usizeTransactionZ*)(orig & ~1);
        LDKC2Tuple_usizeTransactionZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_usizeTransactionZ), "LDKC2Tuple_usizeTransactionZ");
@@ -9517,6 +9508,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_NoneChannelMonitorUp
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_NoneChannelMonitorUpdateErrZ_is_ok(uint32_t o) {
+       LDKCResult_NoneChannelMonitorUpdateErrZ* o_conv = (LDKCResult_NoneChannelMonitorUpdateErrZ*)(o & ~1);
+       jboolean ret_val = CResult_NoneChannelMonitorUpdateErrZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_NoneChannelMonitorUpdateErrZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -9526,6 +9523,17 @@ void  __attribute__((visibility("default"))) TS_CResult_NoneChannelMonitorUpdate
        CResult_NoneChannelMonitorUpdateErrZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_NoneChannelMonitorUpdateErrZ_clone_ptr(LDKCResult_NoneChannelMonitorUpdateErrZ *NONNULL_PTR arg) {
+       LDKCResult_NoneChannelMonitorUpdateErrZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneChannelMonitorUpdateErrZ), "LDKCResult_NoneChannelMonitorUpdateErrZ");
+       *ret_conv = CResult_NoneChannelMonitorUpdateErrZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_NoneChannelMonitorUpdateErrZ_clone_ptr(uint32_t arg) {
+       LDKCResult_NoneChannelMonitorUpdateErrZ* arg_conv = (LDKCResult_NoneChannelMonitorUpdateErrZ*)(arg & ~1);
+       int64_t ret_val = CResult_NoneChannelMonitorUpdateErrZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_NoneChannelMonitorUpdateErrZ_clone(uint32_t orig) {
        LDKCResult_NoneChannelMonitorUpdateErrZ* orig_conv = (LDKCResult_NoneChannelMonitorUpdateErrZ*)(orig & ~1);
        LDKCResult_NoneChannelMonitorUpdateErrZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneChannelMonitorUpdateErrZ), "LDKCResult_NoneChannelMonitorUpdateErrZ");
@@ -9579,6 +9587,18 @@ void  __attribute__((visibility("default"))) TS_COption_C2Tuple_usizeTransaction
        COption_C2Tuple_usizeTransactionZZ_free(_res_conv);
 }
 
+static inline uint64_t COption_C2Tuple_usizeTransactionZZ_clone_ptr(LDKCOption_C2Tuple_usizeTransactionZZ *NONNULL_PTR arg) {
+       LDKCOption_C2Tuple_usizeTransactionZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_usizeTransactionZZ), "LDKCOption_C2Tuple_usizeTransactionZZ");
+       *ret_copy = COption_C2Tuple_usizeTransactionZZ_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_COption_C2Tuple_usizeTransactionZZ_clone_ptr(uint32_t arg) {
+       LDKCOption_C2Tuple_usizeTransactionZZ* arg_conv = (LDKCOption_C2Tuple_usizeTransactionZZ*)arg;
+       int64_t ret_val = COption_C2Tuple_usizeTransactionZZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_COption_C2Tuple_usizeTransactionZZ_clone(uint32_t orig) {
        LDKCOption_C2Tuple_usizeTransactionZZ* orig_conv = (LDKCOption_C2Tuple_usizeTransactionZZ*)orig;
        LDKCOption_C2Tuple_usizeTransactionZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_usizeTransactionZZ), "LDKCOption_C2Tuple_usizeTransactionZZ");
@@ -9587,6 +9607,107 @@ uint32_t  __attribute__((visibility("default"))) TS_COption_C2Tuple_usizeTransac
        return ret_ref;
 }
 
+uint32_t  __attribute__((visibility("default"))) TS_COption_ClosureReasonZ_some(uint32_t o) {
+       void* o_ptr = (void*)(((uint64_t)o) & ~1);
+       CHECK_ACCESS(o_ptr);
+       LDKClosureReason o_conv = *(LDKClosureReason*)(o_ptr);
+       o_conv = ClosureReason_clone((LDKClosureReason*)(((uint64_t)o) & ~1));
+       LDKCOption_ClosureReasonZ *ret_copy = MALLOC(sizeof(LDKCOption_ClosureReasonZ), "LDKCOption_ClosureReasonZ");
+       *ret_copy = COption_ClosureReasonZ_some(o_conv);
+       uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+
+uint32_t  __attribute__((visibility("default"))) TS_COption_ClosureReasonZ_none() {
+       LDKCOption_ClosureReasonZ *ret_copy = MALLOC(sizeof(LDKCOption_ClosureReasonZ), "LDKCOption_ClosureReasonZ");
+       *ret_copy = COption_ClosureReasonZ_none();
+       uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+
+void  __attribute__((visibility("default"))) TS_COption_ClosureReasonZ_free(uint32_t _res) {
+       if ((_res & 1) != 0) return;
+       void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
+       CHECK_ACCESS(_res_ptr);
+       LDKCOption_ClosureReasonZ _res_conv = *(LDKCOption_ClosureReasonZ*)(_res_ptr);
+       FREE((void*)_res);
+       COption_ClosureReasonZ_free(_res_conv);
+}
+
+static inline uint64_t COption_ClosureReasonZ_clone_ptr(LDKCOption_ClosureReasonZ *NONNULL_PTR arg) {
+       LDKCOption_ClosureReasonZ *ret_copy = MALLOC(sizeof(LDKCOption_ClosureReasonZ), "LDKCOption_ClosureReasonZ");
+       *ret_copy = COption_ClosureReasonZ_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_COption_ClosureReasonZ_clone_ptr(uint32_t arg) {
+       LDKCOption_ClosureReasonZ* arg_conv = (LDKCOption_ClosureReasonZ*)arg;
+       int64_t ret_val = COption_ClosureReasonZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
+uint32_t  __attribute__((visibility("default"))) TS_COption_ClosureReasonZ_clone(uint32_t orig) {
+       LDKCOption_ClosureReasonZ* orig_conv = (LDKCOption_ClosureReasonZ*)orig;
+       LDKCOption_ClosureReasonZ *ret_copy = MALLOC(sizeof(LDKCOption_ClosureReasonZ), "LDKCOption_ClosureReasonZ");
+       *ret_copy = COption_ClosureReasonZ_clone(orig_conv);
+       uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+
+uint32_t  __attribute__((visibility("default"))) TS_CResult_COption_ClosureReasonZDecodeErrorZ_ok(uint32_t o) {
+       void* o_ptr = (void*)(((uint64_t)o) & ~1);
+       CHECK_ACCESS(o_ptr);
+       LDKCOption_ClosureReasonZ o_conv = *(LDKCOption_ClosureReasonZ*)(o_ptr);
+       o_conv = COption_ClosureReasonZ_clone((LDKCOption_ClosureReasonZ*)(((uint64_t)o) & ~1));
+       LDKCResult_COption_ClosureReasonZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_ClosureReasonZDecodeErrorZ), "LDKCResult_COption_ClosureReasonZDecodeErrorZ");
+       *ret_conv = CResult_COption_ClosureReasonZDecodeErrorZ_ok(o_conv);
+       return (uint64_t)ret_conv;
+}
+
+uint32_t  __attribute__((visibility("default"))) TS_CResult_COption_ClosureReasonZDecodeErrorZ_err(uint32_t e) {
+       LDKDecodeError e_conv;
+       e_conv.inner = (void*)(e & (~1));
+       e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
+       e_conv = DecodeError_clone(&e_conv);
+       LDKCResult_COption_ClosureReasonZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_ClosureReasonZDecodeErrorZ), "LDKCResult_COption_ClosureReasonZDecodeErrorZ");
+       *ret_conv = CResult_COption_ClosureReasonZDecodeErrorZ_err(e_conv);
+       return (uint64_t)ret_conv;
+}
+
+jboolean  __attribute__((visibility("default"))) TS_CResult_COption_ClosureReasonZDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_COption_ClosureReasonZDecodeErrorZ* o_conv = (LDKCResult_COption_ClosureReasonZDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_COption_ClosureReasonZDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
+void  __attribute__((visibility("default"))) TS_CResult_COption_ClosureReasonZDecodeErrorZ_free(uint32_t _res) {
+       if ((_res & 1) != 0) return;
+       void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_COption_ClosureReasonZDecodeErrorZ _res_conv = *(LDKCResult_COption_ClosureReasonZDecodeErrorZ*)(_res_ptr);
+       FREE((void*)_res);
+       CResult_COption_ClosureReasonZDecodeErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_COption_ClosureReasonZDecodeErrorZ_clone_ptr(LDKCResult_COption_ClosureReasonZDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_COption_ClosureReasonZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_ClosureReasonZDecodeErrorZ), "LDKCResult_COption_ClosureReasonZDecodeErrorZ");
+       *ret_conv = CResult_COption_ClosureReasonZDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_COption_ClosureReasonZDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_COption_ClosureReasonZDecodeErrorZ* arg_conv = (LDKCResult_COption_ClosureReasonZDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_COption_ClosureReasonZDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
+uint32_t  __attribute__((visibility("default"))) TS_CResult_COption_ClosureReasonZDecodeErrorZ_clone(uint32_t orig) {
+       LDKCResult_COption_ClosureReasonZDecodeErrorZ* orig_conv = (LDKCResult_COption_ClosureReasonZDecodeErrorZ*)(orig & ~1);
+       LDKCResult_COption_ClosureReasonZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_ClosureReasonZDecodeErrorZ), "LDKCResult_COption_ClosureReasonZDecodeErrorZ");
+       *ret_conv = CResult_COption_ClosureReasonZDecodeErrorZ_clone(orig_conv);
+       return (uint64_t)ret_conv;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_COption_NetworkUpdateZ_some(uint32_t o) {
        void* o_ptr = (void*)(((uint64_t)o) & ~1);
        CHECK_ACCESS(o_ptr);
@@ -9614,6 +9735,18 @@ void  __attribute__((visibility("default"))) TS_COption_NetworkUpdateZ_free(uint
        COption_NetworkUpdateZ_free(_res_conv);
 }
 
+static inline uint64_t COption_NetworkUpdateZ_clone_ptr(LDKCOption_NetworkUpdateZ *NONNULL_PTR arg) {
+       LDKCOption_NetworkUpdateZ *ret_copy = MALLOC(sizeof(LDKCOption_NetworkUpdateZ), "LDKCOption_NetworkUpdateZ");
+       *ret_copy = COption_NetworkUpdateZ_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_COption_NetworkUpdateZ_clone_ptr(uint32_t arg) {
+       LDKCOption_NetworkUpdateZ* arg_conv = (LDKCOption_NetworkUpdateZ*)arg;
+       int64_t ret_val = COption_NetworkUpdateZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_COption_NetworkUpdateZ_clone(uint32_t orig) {
        LDKCOption_NetworkUpdateZ* orig_conv = (LDKCOption_NetworkUpdateZ*)orig;
        LDKCOption_NetworkUpdateZ *ret_copy = MALLOC(sizeof(LDKCOption_NetworkUpdateZ), "LDKCOption_NetworkUpdateZ");
@@ -9641,6 +9774,107 @@ void  __attribute__((visibility("default"))) TS_CVec_SpendableOutputDescriptorZ_
        CVec_SpendableOutputDescriptorZ_free(_res_constr);
 }
 
+uint32_t  __attribute__((visibility("default"))) TS_COption_EventZ_some(uint32_t o) {
+       void* o_ptr = (void*)(((uint64_t)o) & ~1);
+       CHECK_ACCESS(o_ptr);
+       LDKEvent o_conv = *(LDKEvent*)(o_ptr);
+       o_conv = Event_clone((LDKEvent*)(((uint64_t)o) & ~1));
+       LDKCOption_EventZ *ret_copy = MALLOC(sizeof(LDKCOption_EventZ), "LDKCOption_EventZ");
+       *ret_copy = COption_EventZ_some(o_conv);
+       uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+
+uint32_t  __attribute__((visibility("default"))) TS_COption_EventZ_none() {
+       LDKCOption_EventZ *ret_copy = MALLOC(sizeof(LDKCOption_EventZ), "LDKCOption_EventZ");
+       *ret_copy = COption_EventZ_none();
+       uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+
+void  __attribute__((visibility("default"))) TS_COption_EventZ_free(uint32_t _res) {
+       if ((_res & 1) != 0) return;
+       void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
+       CHECK_ACCESS(_res_ptr);
+       LDKCOption_EventZ _res_conv = *(LDKCOption_EventZ*)(_res_ptr);
+       FREE((void*)_res);
+       COption_EventZ_free(_res_conv);
+}
+
+static inline uint64_t COption_EventZ_clone_ptr(LDKCOption_EventZ *NONNULL_PTR arg) {
+       LDKCOption_EventZ *ret_copy = MALLOC(sizeof(LDKCOption_EventZ), "LDKCOption_EventZ");
+       *ret_copy = COption_EventZ_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_COption_EventZ_clone_ptr(uint32_t arg) {
+       LDKCOption_EventZ* arg_conv = (LDKCOption_EventZ*)arg;
+       int64_t ret_val = COption_EventZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
+uint32_t  __attribute__((visibility("default"))) TS_COption_EventZ_clone(uint32_t orig) {
+       LDKCOption_EventZ* orig_conv = (LDKCOption_EventZ*)orig;
+       LDKCOption_EventZ *ret_copy = MALLOC(sizeof(LDKCOption_EventZ), "LDKCOption_EventZ");
+       *ret_copy = COption_EventZ_clone(orig_conv);
+       uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+
+uint32_t  __attribute__((visibility("default"))) TS_CResult_COption_EventZDecodeErrorZ_ok(uint32_t o) {
+       void* o_ptr = (void*)(((uint64_t)o) & ~1);
+       CHECK_ACCESS(o_ptr);
+       LDKCOption_EventZ o_conv = *(LDKCOption_EventZ*)(o_ptr);
+       o_conv = COption_EventZ_clone((LDKCOption_EventZ*)(((uint64_t)o) & ~1));
+       LDKCResult_COption_EventZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_EventZDecodeErrorZ), "LDKCResult_COption_EventZDecodeErrorZ");
+       *ret_conv = CResult_COption_EventZDecodeErrorZ_ok(o_conv);
+       return (uint64_t)ret_conv;
+}
+
+uint32_t  __attribute__((visibility("default"))) TS_CResult_COption_EventZDecodeErrorZ_err(uint32_t e) {
+       LDKDecodeError e_conv;
+       e_conv.inner = (void*)(e & (~1));
+       e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
+       e_conv = DecodeError_clone(&e_conv);
+       LDKCResult_COption_EventZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_EventZDecodeErrorZ), "LDKCResult_COption_EventZDecodeErrorZ");
+       *ret_conv = CResult_COption_EventZDecodeErrorZ_err(e_conv);
+       return (uint64_t)ret_conv;
+}
+
+jboolean  __attribute__((visibility("default"))) TS_CResult_COption_EventZDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_COption_EventZDecodeErrorZ* o_conv = (LDKCResult_COption_EventZDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_COption_EventZDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
+void  __attribute__((visibility("default"))) TS_CResult_COption_EventZDecodeErrorZ_free(uint32_t _res) {
+       if ((_res & 1) != 0) return;
+       void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_COption_EventZDecodeErrorZ _res_conv = *(LDKCResult_COption_EventZDecodeErrorZ*)(_res_ptr);
+       FREE((void*)_res);
+       CResult_COption_EventZDecodeErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_COption_EventZDecodeErrorZ_clone_ptr(LDKCResult_COption_EventZDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_COption_EventZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_EventZDecodeErrorZ), "LDKCResult_COption_EventZDecodeErrorZ");
+       *ret_conv = CResult_COption_EventZDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_COption_EventZDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_COption_EventZDecodeErrorZ* arg_conv = (LDKCResult_COption_EventZDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_COption_EventZDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
+uint32_t  __attribute__((visibility("default"))) TS_CResult_COption_EventZDecodeErrorZ_clone(uint32_t orig) {
+       LDKCResult_COption_EventZDecodeErrorZ* orig_conv = (LDKCResult_COption_EventZDecodeErrorZ*)(orig & ~1);
+       LDKCResult_COption_EventZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_EventZDecodeErrorZ), "LDKCResult_COption_EventZDecodeErrorZ");
+       *ret_conv = CResult_COption_EventZDecodeErrorZ_clone(orig_conv);
+       return (uint64_t)ret_conv;
+}
+
 void  __attribute__((visibility("default"))) TS_CVec_MessageSendEventZ_free(uint32_tArray _res) {
        LDKCVec_MessageSendEventZ _res_constr;
        _res_constr.datalen = *((uint32_t*)_res);
@@ -9664,6 +9898,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_InitFeaturesDecodeEr
        LDKInitFeatures o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = InitFeatures_clone(&o_conv);
        LDKCResult_InitFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InitFeaturesDecodeErrorZ), "LDKCResult_InitFeaturesDecodeErrorZ");
        *ret_conv = CResult_InitFeaturesDecodeErrorZ_ok(o_conv);
@@ -9674,12 +9909,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_InitFeaturesDecodeEr
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_InitFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InitFeaturesDecodeErrorZ), "LDKCResult_InitFeaturesDecodeErrorZ");
        *ret_conv = CResult_InitFeaturesDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_InitFeaturesDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_InitFeaturesDecodeErrorZ* o_conv = (LDKCResult_InitFeaturesDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_InitFeaturesDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_InitFeaturesDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -9693,6 +9935,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_NodeFeaturesDecodeEr
        LDKNodeFeatures o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = NodeFeatures_clone(&o_conv);
        LDKCResult_NodeFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeFeaturesDecodeErrorZ), "LDKCResult_NodeFeaturesDecodeErrorZ");
        *ret_conv = CResult_NodeFeaturesDecodeErrorZ_ok(o_conv);
@@ -9703,12 +9946,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_NodeFeaturesDecodeEr
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_NodeFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeFeaturesDecodeErrorZ), "LDKCResult_NodeFeaturesDecodeErrorZ");
        *ret_conv = CResult_NodeFeaturesDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_NodeFeaturesDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_NodeFeaturesDecodeErrorZ* o_conv = (LDKCResult_NodeFeaturesDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_NodeFeaturesDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_NodeFeaturesDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -9722,6 +9972,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ChannelFeaturesDecod
        LDKChannelFeatures o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ChannelFeatures_clone(&o_conv);
        LDKCResult_ChannelFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelFeaturesDecodeErrorZ), "LDKCResult_ChannelFeaturesDecodeErrorZ");
        *ret_conv = CResult_ChannelFeaturesDecodeErrorZ_ok(o_conv);
@@ -9732,12 +9983,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ChannelFeaturesDecod
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ChannelFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelFeaturesDecodeErrorZ), "LDKCResult_ChannelFeaturesDecodeErrorZ");
        *ret_conv = CResult_ChannelFeaturesDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_ChannelFeaturesDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_ChannelFeaturesDecodeErrorZ* o_conv = (LDKCResult_ChannelFeaturesDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ChannelFeaturesDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_ChannelFeaturesDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -9751,6 +10009,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_InvoiceFeaturesDecod
        LDKInvoiceFeatures o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = InvoiceFeatures_clone(&o_conv);
        LDKCResult_InvoiceFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceFeaturesDecodeErrorZ), "LDKCResult_InvoiceFeaturesDecodeErrorZ");
        *ret_conv = CResult_InvoiceFeaturesDecodeErrorZ_ok(o_conv);
@@ -9761,12 +10020,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_InvoiceFeaturesDecod
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_InvoiceFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceFeaturesDecodeErrorZ), "LDKCResult_InvoiceFeaturesDecodeErrorZ");
        *ret_conv = CResult_InvoiceFeaturesDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_InvoiceFeaturesDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_InvoiceFeaturesDecodeErrorZ* o_conv = (LDKCResult_InvoiceFeaturesDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_InvoiceFeaturesDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_InvoiceFeaturesDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -9780,6 +10046,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ScoringParametersDec
        LDKScoringParameters o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        // Warning: we need a move here but no clone is available for LDKScoringParameters
        LDKCResult_ScoringParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ScoringParametersDecodeErrorZ), "LDKCResult_ScoringParametersDecodeErrorZ");
        *ret_conv = CResult_ScoringParametersDecodeErrorZ_ok(o_conv);
@@ -9790,12 +10057,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ScoringParametersDec
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ScoringParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ScoringParametersDecodeErrorZ), "LDKCResult_ScoringParametersDecodeErrorZ");
        *ret_conv = CResult_ScoringParametersDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_ScoringParametersDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_ScoringParametersDecodeErrorZ* o_conv = (LDKCResult_ScoringParametersDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ScoringParametersDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_ScoringParametersDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -9809,6 +10083,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ScorerDecodeErrorZ_o
        LDKScorer o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        // Warning: we need a move here but no clone is available for LDKScorer
        LDKCResult_ScorerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ScorerDecodeErrorZ), "LDKCResult_ScorerDecodeErrorZ");
        *ret_conv = CResult_ScorerDecodeErrorZ_ok(o_conv);
@@ -9819,12 +10094,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ScorerDecodeErrorZ_e
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ScorerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ScorerDecodeErrorZ), "LDKCResult_ScorerDecodeErrorZ");
        *ret_conv = CResult_ScorerDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_ScorerDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_ScorerDecodeErrorZ* o_conv = (LDKCResult_ScorerDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ScorerDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_ScorerDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -9838,6 +10120,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_DelayedPaymentOutput
        LDKDelayedPaymentOutputDescriptor o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = DelayedPaymentOutputDescriptor_clone(&o_conv);
        LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ), "LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ");
        *ret_conv = CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_ok(o_conv);
@@ -9848,12 +10131,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_DelayedPaymentOutput
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ), "LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ");
        *ret_conv = CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ* o_conv = (LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -9863,6 +10153,17 @@ void  __attribute__((visibility("default"))) TS_CResult_DelayedPaymentOutputDesc
        CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_clone_ptr(LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ), "LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ");
+       *ret_conv = CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ* arg_conv = (LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ* orig_conv = (LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ*)(orig & ~1);
        LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ), "LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ");
@@ -9874,6 +10175,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_StaticPaymentOutputD
        LDKStaticPaymentOutputDescriptor o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = StaticPaymentOutputDescriptor_clone(&o_conv);
        LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ), "LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ");
        *ret_conv = CResult_StaticPaymentOutputDescriptorDecodeErrorZ_ok(o_conv);
@@ -9884,12 +10186,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_StaticPaymentOutputD
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ), "LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ");
        *ret_conv = CResult_StaticPaymentOutputDescriptorDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_StaticPaymentOutputDescriptorDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ* o_conv = (LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_StaticPaymentOutputDescriptorDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_StaticPaymentOutputDescriptorDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -9899,6 +10208,17 @@ void  __attribute__((visibility("default"))) TS_CResult_StaticPaymentOutputDescr
        CResult_StaticPaymentOutputDescriptorDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_StaticPaymentOutputDescriptorDecodeErrorZ_clone_ptr(LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ), "LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ");
+       *ret_conv = CResult_StaticPaymentOutputDescriptorDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_StaticPaymentOutputDescriptorDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ* arg_conv = (LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_StaticPaymentOutputDescriptorDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_StaticPaymentOutputDescriptorDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ* orig_conv = (LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ*)(orig & ~1);
        LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ), "LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ");
@@ -9920,12 +10240,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_SpendableOutputDescr
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_SpendableOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SpendableOutputDescriptorDecodeErrorZ), "LDKCResult_SpendableOutputDescriptorDecodeErrorZ");
        *ret_conv = CResult_SpendableOutputDescriptorDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_SpendableOutputDescriptorDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_SpendableOutputDescriptorDecodeErrorZ* o_conv = (LDKCResult_SpendableOutputDescriptorDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_SpendableOutputDescriptorDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_SpendableOutputDescriptorDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -9935,6 +10262,17 @@ void  __attribute__((visibility("default"))) TS_CResult_SpendableOutputDescripto
        CResult_SpendableOutputDescriptorDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_SpendableOutputDescriptorDecodeErrorZ_clone_ptr(LDKCResult_SpendableOutputDescriptorDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_SpendableOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SpendableOutputDescriptorDecodeErrorZ), "LDKCResult_SpendableOutputDescriptorDecodeErrorZ");
+       *ret_conv = CResult_SpendableOutputDescriptorDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_SpendableOutputDescriptorDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_SpendableOutputDescriptorDecodeErrorZ* arg_conv = (LDKCResult_SpendableOutputDescriptorDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_SpendableOutputDescriptorDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_SpendableOutputDescriptorDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_SpendableOutputDescriptorDecodeErrorZ* orig_conv = (LDKCResult_SpendableOutputDescriptorDecodeErrorZ*)(orig & ~1);
        LDKCResult_SpendableOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SpendableOutputDescriptorDecodeErrorZ), "LDKCResult_SpendableOutputDescriptorDecodeErrorZ");
@@ -9954,6 +10292,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_NoneNoneZ_err() {
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_NoneNoneZ_is_ok(uint32_t o) {
+       LDKCResult_NoneNoneZ* o_conv = (LDKCResult_NoneNoneZ*)(o & ~1);
+       jboolean ret_val = CResult_NoneNoneZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_NoneNoneZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -9963,6 +10307,17 @@ void  __attribute__((visibility("default"))) TS_CResult_NoneNoneZ_free(uint32_t
        CResult_NoneNoneZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_NoneNoneZ_clone_ptr(LDKCResult_NoneNoneZ *NONNULL_PTR arg) {
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = CResult_NoneNoneZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_NoneNoneZ_clone_ptr(uint32_t arg) {
+       LDKCResult_NoneNoneZ* arg_conv = (LDKCResult_NoneNoneZ*)(arg & ~1);
+       int64_t ret_val = CResult_NoneNoneZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_NoneNoneZ_clone(uint32_t orig) {
        LDKCResult_NoneNoneZ* orig_conv = (LDKCResult_NoneNoneZ*)(orig & ~1);
        LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
@@ -9970,6 +10325,17 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_NoneNoneZ_clone(uint
        return (uint64_t)ret_conv;
 }
 
+static inline uint64_t C2Tuple_SignatureCVec_SignatureZZ_clone_ptr(LDKC2Tuple_SignatureCVec_SignatureZZ *NONNULL_PTR arg) {
+       LDKC2Tuple_SignatureCVec_SignatureZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_SignatureCVec_SignatureZZ), "LDKC2Tuple_SignatureCVec_SignatureZZ");
+       *ret_conv = C2Tuple_SignatureCVec_SignatureZZ_clone(arg);
+       return ((uint64_t)ret_conv);
+}
+int64_t  __attribute__((visibility("default"))) TS_C2Tuple_SignatureCVec_SignatureZZ_clone_ptr(uint32_t arg) {
+       LDKC2Tuple_SignatureCVec_SignatureZZ* arg_conv = (LDKC2Tuple_SignatureCVec_SignatureZZ*)(arg & ~1);
+       int64_t ret_val = C2Tuple_SignatureCVec_SignatureZZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_C2Tuple_SignatureCVec_SignatureZZ_clone(uint32_t orig) {
        LDKC2Tuple_SignatureCVec_SignatureZZ* orig_conv = (LDKC2Tuple_SignatureCVec_SignatureZZ*)(orig & ~1);
        LDKC2Tuple_SignatureCVec_SignatureZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_SignatureCVec_SignatureZZ), "LDKC2Tuple_SignatureCVec_SignatureZZ");
@@ -10025,6 +10391,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_C2Tuple_SignatureCVe
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_is_ok(uint32_t o) {
+       LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* o_conv = (LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)(o & ~1);
+       jboolean ret_val = CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -10034,6 +10406,17 @@ void  __attribute__((visibility("default"))) TS_CResult_C2Tuple_SignatureCVec_Si
        CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone_ptr(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ *NONNULL_PTR arg) {
+       LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ), "LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ");
+       *ret_conv = CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone_ptr(uint32_t arg) {
+       LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* arg_conv = (LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)(arg & ~1);
+       int64_t ret_val = CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone(uint32_t orig) {
        LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* orig_conv = (LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)(orig & ~1);
        LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ), "LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ");
@@ -10056,6 +10439,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_SignatureNoneZ_err()
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_SignatureNoneZ_is_ok(uint32_t o) {
+       LDKCResult_SignatureNoneZ* o_conv = (LDKCResult_SignatureNoneZ*)(o & ~1);
+       jboolean ret_val = CResult_SignatureNoneZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_SignatureNoneZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -10065,6 +10454,17 @@ void  __attribute__((visibility("default"))) TS_CResult_SignatureNoneZ_free(uint
        CResult_SignatureNoneZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_SignatureNoneZ_clone_ptr(LDKCResult_SignatureNoneZ *NONNULL_PTR arg) {
+       LDKCResult_SignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignatureNoneZ), "LDKCResult_SignatureNoneZ");
+       *ret_conv = CResult_SignatureNoneZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_SignatureNoneZ_clone_ptr(uint32_t arg) {
+       LDKCResult_SignatureNoneZ* arg_conv = (LDKCResult_SignatureNoneZ*)(arg & ~1);
+       int64_t ret_val = CResult_SignatureNoneZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_SignatureNoneZ_clone(uint32_t orig) {
        LDKCResult_SignatureNoneZ* orig_conv = (LDKCResult_SignatureNoneZ*)(orig & ~1);
        LDKCResult_SignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignatureNoneZ), "LDKCResult_SignatureNoneZ");
@@ -10085,12 +10485,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_SignDecodeErrorZ_err
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_SignDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SignDecodeErrorZ), "LDKCResult_SignDecodeErrorZ");
        *ret_conv = CResult_SignDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_SignDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_SignDecodeErrorZ* o_conv = (LDKCResult_SignDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_SignDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_SignDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -10100,6 +10507,17 @@ void  __attribute__((visibility("default"))) TS_CResult_SignDecodeErrorZ_free(ui
        CResult_SignDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_SignDecodeErrorZ_clone_ptr(LDKCResult_SignDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_SignDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SignDecodeErrorZ), "LDKCResult_SignDecodeErrorZ");
+       *ret_conv = CResult_SignDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_SignDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_SignDecodeErrorZ* arg_conv = (LDKCResult_SignDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_SignDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_SignDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_SignDecodeErrorZ* orig_conv = (LDKCResult_SignDecodeErrorZ*)(orig & ~1);
        LDKCResult_SignDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SignDecodeErrorZ), "LDKCResult_SignDecodeErrorZ");
@@ -10130,6 +10548,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_RecoverableSignature
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_RecoverableSignatureNoneZ_is_ok(uint32_t o) {
+       LDKCResult_RecoverableSignatureNoneZ* o_conv = (LDKCResult_RecoverableSignatureNoneZ*)(o & ~1);
+       jboolean ret_val = CResult_RecoverableSignatureNoneZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_RecoverableSignatureNoneZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -10139,6 +10563,17 @@ void  __attribute__((visibility("default"))) TS_CResult_RecoverableSignatureNone
        CResult_RecoverableSignatureNoneZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_RecoverableSignatureNoneZ_clone_ptr(LDKCResult_RecoverableSignatureNoneZ *NONNULL_PTR arg) {
+       LDKCResult_RecoverableSignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_RecoverableSignatureNoneZ), "LDKCResult_RecoverableSignatureNoneZ");
+       *ret_conv = CResult_RecoverableSignatureNoneZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_RecoverableSignatureNoneZ_clone_ptr(uint32_t arg) {
+       LDKCResult_RecoverableSignatureNoneZ* arg_conv = (LDKCResult_RecoverableSignatureNoneZ*)(arg & ~1);
+       int64_t ret_val = CResult_RecoverableSignatureNoneZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_RecoverableSignatureNoneZ_clone(uint32_t orig) {
        LDKCResult_RecoverableSignatureNoneZ* orig_conv = (LDKCResult_RecoverableSignatureNoneZ*)(orig & ~1);
        LDKCResult_RecoverableSignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_RecoverableSignatureNoneZ), "LDKCResult_RecoverableSignatureNoneZ");
@@ -10192,6 +10627,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_CVec_CVec_u8ZZNoneZ_
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_CVec_CVec_u8ZZNoneZ_is_ok(uint32_t o) {
+       LDKCResult_CVec_CVec_u8ZZNoneZ* o_conv = (LDKCResult_CVec_CVec_u8ZZNoneZ*)(o & ~1);
+       jboolean ret_val = CResult_CVec_CVec_u8ZZNoneZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_CVec_CVec_u8ZZNoneZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -10201,6 +10642,17 @@ void  __attribute__((visibility("default"))) TS_CResult_CVec_CVec_u8ZZNoneZ_free
        CResult_CVec_CVec_u8ZZNoneZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_CVec_CVec_u8ZZNoneZ_clone_ptr(LDKCResult_CVec_CVec_u8ZZNoneZ *NONNULL_PTR arg) {
+       LDKCResult_CVec_CVec_u8ZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_CVec_u8ZZNoneZ), "LDKCResult_CVec_CVec_u8ZZNoneZ");
+       *ret_conv = CResult_CVec_CVec_u8ZZNoneZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_CVec_CVec_u8ZZNoneZ_clone_ptr(uint32_t arg) {
+       LDKCResult_CVec_CVec_u8ZZNoneZ* arg_conv = (LDKCResult_CVec_CVec_u8ZZNoneZ*)(arg & ~1);
+       int64_t ret_val = CResult_CVec_CVec_u8ZZNoneZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_CVec_CVec_u8ZZNoneZ_clone(uint32_t orig) {
        LDKCResult_CVec_CVec_u8ZZNoneZ* orig_conv = (LDKCResult_CVec_CVec_u8ZZNoneZ*)(orig & ~1);
        LDKCResult_CVec_CVec_u8ZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_CVec_u8ZZNoneZ), "LDKCResult_CVec_CVec_u8ZZNoneZ");
@@ -10212,6 +10664,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_InMemorySignerDecode
        LDKInMemorySigner o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = InMemorySigner_clone(&o_conv);
        LDKCResult_InMemorySignerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InMemorySignerDecodeErrorZ), "LDKCResult_InMemorySignerDecodeErrorZ");
        *ret_conv = CResult_InMemorySignerDecodeErrorZ_ok(o_conv);
@@ -10222,12 +10675,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_InMemorySignerDecode
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_InMemorySignerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InMemorySignerDecodeErrorZ), "LDKCResult_InMemorySignerDecodeErrorZ");
        *ret_conv = CResult_InMemorySignerDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_InMemorySignerDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_InMemorySignerDecodeErrorZ* o_conv = (LDKCResult_InMemorySignerDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_InMemorySignerDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_InMemorySignerDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -10237,6 +10697,17 @@ void  __attribute__((visibility("default"))) TS_CResult_InMemorySignerDecodeErro
        CResult_InMemorySignerDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_InMemorySignerDecodeErrorZ_clone_ptr(LDKCResult_InMemorySignerDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_InMemorySignerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InMemorySignerDecodeErrorZ), "LDKCResult_InMemorySignerDecodeErrorZ");
+       *ret_conv = CResult_InMemorySignerDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_InMemorySignerDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_InMemorySignerDecodeErrorZ* arg_conv = (LDKCResult_InMemorySignerDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_InMemorySignerDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_InMemorySignerDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_InMemorySignerDecodeErrorZ* orig_conv = (LDKCResult_InMemorySignerDecodeErrorZ*)(orig & ~1);
        LDKCResult_InMemorySignerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InMemorySignerDecodeErrorZ), "LDKCResult_InMemorySignerDecodeErrorZ");
@@ -10280,6 +10751,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_TransactionNoneZ_err
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_TransactionNoneZ_is_ok(uint32_t o) {
+       LDKCResult_TransactionNoneZ* o_conv = (LDKCResult_TransactionNoneZ*)(o & ~1);
+       jboolean ret_val = CResult_TransactionNoneZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_TransactionNoneZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -10289,6 +10766,17 @@ void  __attribute__((visibility("default"))) TS_CResult_TransactionNoneZ_free(ui
        CResult_TransactionNoneZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_TransactionNoneZ_clone_ptr(LDKCResult_TransactionNoneZ *NONNULL_PTR arg) {
+       LDKCResult_TransactionNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_TransactionNoneZ), "LDKCResult_TransactionNoneZ");
+       *ret_conv = CResult_TransactionNoneZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_TransactionNoneZ_clone_ptr(uint32_t arg) {
+       LDKCResult_TransactionNoneZ* arg_conv = (LDKCResult_TransactionNoneZ*)(arg & ~1);
+       int64_t ret_val = CResult_TransactionNoneZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_TransactionNoneZ_clone(uint32_t orig) {
        LDKCResult_TransactionNoneZ* orig_conv = (LDKCResult_TransactionNoneZ*)(orig & ~1);
        LDKCResult_TransactionNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_TransactionNoneZ), "LDKCResult_TransactionNoneZ");
@@ -10296,6 +10784,17 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_TransactionNoneZ_clo
        return (uint64_t)ret_conv;
 }
 
+static inline uint64_t C2Tuple_BlockHashChannelMonitorZ_clone_ptr(LDKC2Tuple_BlockHashChannelMonitorZ *NONNULL_PTR arg) {
+       LDKC2Tuple_BlockHashChannelMonitorZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_BlockHashChannelMonitorZ), "LDKC2Tuple_BlockHashChannelMonitorZ");
+       *ret_conv = C2Tuple_BlockHashChannelMonitorZ_clone(arg);
+       return ((uint64_t)ret_conv);
+}
+int64_t  __attribute__((visibility("default"))) TS_C2Tuple_BlockHashChannelMonitorZ_clone_ptr(uint32_t arg) {
+       LDKC2Tuple_BlockHashChannelMonitorZ* arg_conv = (LDKC2Tuple_BlockHashChannelMonitorZ*)(arg & ~1);
+       int64_t ret_val = C2Tuple_BlockHashChannelMonitorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_C2Tuple_BlockHashChannelMonitorZ_clone(uint32_t orig) {
        LDKC2Tuple_BlockHashChannelMonitorZ* orig_conv = (LDKC2Tuple_BlockHashChannelMonitorZ*)(orig & ~1);
        LDKC2Tuple_BlockHashChannelMonitorZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_BlockHashChannelMonitorZ), "LDKC2Tuple_BlockHashChannelMonitorZ");
@@ -10310,6 +10809,7 @@ uint32_t  __attribute__((visibility("default"))) TS_C2Tuple_BlockHashChannelMoni
        LDKChannelMonitor b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = (b & 1) || (b == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv = ChannelMonitor_clone(&b_conv);
        LDKC2Tuple_BlockHashChannelMonitorZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_BlockHashChannelMonitorZ), "LDKC2Tuple_BlockHashChannelMonitorZ");
        *ret_conv = C2Tuple_BlockHashChannelMonitorZ_new(a_ref, b_conv);
@@ -10372,6 +10872,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_CVec_C2Tuple_BlockHa
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_is_ok(uint32_t o) {
+       LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ* o_conv = (LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -10381,6 +10887,17 @@ void  __attribute__((visibility("default"))) TS_CResult_CVec_C2Tuple_BlockHashCh
        CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_clone_ptr(LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ *NONNULL_PTR arg) {
+       LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ), "LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ");
+       *ret_conv = CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ* arg_conv = (LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_clone(uint32_t orig) {
        LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ* orig_conv = (LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ*)(orig & ~1);
        LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ), "LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ");
@@ -10411,6 +10928,18 @@ void  __attribute__((visibility("default"))) TS_COption_u16Z_free(uint32_t _res)
        COption_u16Z_free(_res_conv);
 }
 
+static inline uint64_t COption_u16Z_clone_ptr(LDKCOption_u16Z *NONNULL_PTR arg) {
+       LDKCOption_u16Z *ret_copy = MALLOC(sizeof(LDKCOption_u16Z), "LDKCOption_u16Z");
+       *ret_copy = COption_u16Z_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_COption_u16Z_clone_ptr(uint32_t arg) {
+       LDKCOption_u16Z* arg_conv = (LDKCOption_u16Z*)arg;
+       int64_t ret_val = COption_u16Z_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_COption_u16Z_clone(uint32_t orig) {
        LDKCOption_u16Z* orig_conv = (LDKCOption_u16Z*)orig;
        LDKCOption_u16Z *ret_copy = MALLOC(sizeof(LDKCOption_u16Z), "LDKCOption_u16Z");
@@ -10435,6 +10964,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_NoneAPIErrorZ_err(ui
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_NoneAPIErrorZ_is_ok(uint32_t o) {
+       LDKCResult_NoneAPIErrorZ* o_conv = (LDKCResult_NoneAPIErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_NoneAPIErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_NoneAPIErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -10444,6 +10979,17 @@ void  __attribute__((visibility("default"))) TS_CResult_NoneAPIErrorZ_free(uint3
        CResult_NoneAPIErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_NoneAPIErrorZ_clone_ptr(LDKCResult_NoneAPIErrorZ *NONNULL_PTR arg) {
+       LDKCResult_NoneAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneAPIErrorZ), "LDKCResult_NoneAPIErrorZ");
+       *ret_conv = CResult_NoneAPIErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_NoneAPIErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_NoneAPIErrorZ* arg_conv = (LDKCResult_NoneAPIErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_NoneAPIErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_NoneAPIErrorZ_clone(uint32_t orig) {
        LDKCResult_NoneAPIErrorZ* orig_conv = (LDKCResult_NoneAPIErrorZ*)(orig & ~1);
        LDKCResult_NoneAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneAPIErrorZ), "LDKCResult_NoneAPIErrorZ");
@@ -10508,6 +11054,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult__u832APIErrorZ_err(u
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult__u832APIErrorZ_is_ok(uint32_t o) {
+       LDKCResult__u832APIErrorZ* o_conv = (LDKCResult__u832APIErrorZ*)(o & ~1);
+       jboolean ret_val = CResult__u832APIErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult__u832APIErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -10517,6 +11069,17 @@ void  __attribute__((visibility("default"))) TS_CResult__u832APIErrorZ_free(uint
        CResult__u832APIErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult__u832APIErrorZ_clone_ptr(LDKCResult__u832APIErrorZ *NONNULL_PTR arg) {
+       LDKCResult__u832APIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult__u832APIErrorZ), "LDKCResult__u832APIErrorZ");
+       *ret_conv = CResult__u832APIErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult__u832APIErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult__u832APIErrorZ* arg_conv = (LDKCResult__u832APIErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult__u832APIErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult__u832APIErrorZ_clone(uint32_t orig) {
        LDKCResult__u832APIErrorZ* orig_conv = (LDKCResult__u832APIErrorZ*)(orig & ~1);
        LDKCResult__u832APIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult__u832APIErrorZ), "LDKCResult__u832APIErrorZ");
@@ -10543,6 +11106,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_PaymentIdPaymentSend
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_PaymentIdPaymentSendFailureZ_is_ok(uint32_t o) {
+       LDKCResult_PaymentIdPaymentSendFailureZ* o_conv = (LDKCResult_PaymentIdPaymentSendFailureZ*)(o & ~1);
+       jboolean ret_val = CResult_PaymentIdPaymentSendFailureZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_PaymentIdPaymentSendFailureZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -10552,6 +11121,17 @@ void  __attribute__((visibility("default"))) TS_CResult_PaymentIdPaymentSendFail
        CResult_PaymentIdPaymentSendFailureZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_PaymentIdPaymentSendFailureZ_clone_ptr(LDKCResult_PaymentIdPaymentSendFailureZ *NONNULL_PTR arg) {
+       LDKCResult_PaymentIdPaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentIdPaymentSendFailureZ), "LDKCResult_PaymentIdPaymentSendFailureZ");
+       *ret_conv = CResult_PaymentIdPaymentSendFailureZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_PaymentIdPaymentSendFailureZ_clone_ptr(uint32_t arg) {
+       LDKCResult_PaymentIdPaymentSendFailureZ* arg_conv = (LDKCResult_PaymentIdPaymentSendFailureZ*)(arg & ~1);
+       int64_t ret_val = CResult_PaymentIdPaymentSendFailureZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_PaymentIdPaymentSendFailureZ_clone(uint32_t orig) {
        LDKCResult_PaymentIdPaymentSendFailureZ* orig_conv = (LDKCResult_PaymentIdPaymentSendFailureZ*)(orig & ~1);
        LDKCResult_PaymentIdPaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentIdPaymentSendFailureZ), "LDKCResult_PaymentIdPaymentSendFailureZ");
@@ -10575,6 +11155,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_NonePaymentSendFailu
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_NonePaymentSendFailureZ_is_ok(uint32_t o) {
+       LDKCResult_NonePaymentSendFailureZ* o_conv = (LDKCResult_NonePaymentSendFailureZ*)(o & ~1);
+       jboolean ret_val = CResult_NonePaymentSendFailureZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_NonePaymentSendFailureZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -10584,6 +11170,17 @@ void  __attribute__((visibility("default"))) TS_CResult_NonePaymentSendFailureZ_
        CResult_NonePaymentSendFailureZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_NonePaymentSendFailureZ_clone_ptr(LDKCResult_NonePaymentSendFailureZ *NONNULL_PTR arg) {
+       LDKCResult_NonePaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_NonePaymentSendFailureZ), "LDKCResult_NonePaymentSendFailureZ");
+       *ret_conv = CResult_NonePaymentSendFailureZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_NonePaymentSendFailureZ_clone_ptr(uint32_t arg) {
+       LDKCResult_NonePaymentSendFailureZ* arg_conv = (LDKCResult_NonePaymentSendFailureZ*)(arg & ~1);
+       int64_t ret_val = CResult_NonePaymentSendFailureZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_NonePaymentSendFailureZ_clone(uint32_t orig) {
        LDKCResult_NonePaymentSendFailureZ* orig_conv = (LDKCResult_NonePaymentSendFailureZ*)(orig & ~1);
        LDKCResult_NonePaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_NonePaymentSendFailureZ), "LDKCResult_NonePaymentSendFailureZ");
@@ -10591,6 +11188,17 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_NonePaymentSendFailu
        return (uint64_t)ret_conv;
 }
 
+static inline uint64_t C2Tuple_PaymentHashPaymentIdZ_clone_ptr(LDKC2Tuple_PaymentHashPaymentIdZ *NONNULL_PTR arg) {
+       LDKC2Tuple_PaymentHashPaymentIdZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PaymentHashPaymentIdZ), "LDKC2Tuple_PaymentHashPaymentIdZ");
+       *ret_conv = C2Tuple_PaymentHashPaymentIdZ_clone(arg);
+       return ((uint64_t)ret_conv);
+}
+int64_t  __attribute__((visibility("default"))) TS_C2Tuple_PaymentHashPaymentIdZ_clone_ptr(uint32_t arg) {
+       LDKC2Tuple_PaymentHashPaymentIdZ* arg_conv = (LDKC2Tuple_PaymentHashPaymentIdZ*)(arg & ~1);
+       int64_t ret_val = C2Tuple_PaymentHashPaymentIdZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_C2Tuple_PaymentHashPaymentIdZ_clone(uint32_t orig) {
        LDKC2Tuple_PaymentHashPaymentIdZ* orig_conv = (LDKC2Tuple_PaymentHashPaymentIdZ*)(orig & ~1);
        LDKC2Tuple_PaymentHashPaymentIdZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PaymentHashPaymentIdZ), "LDKC2Tuple_PaymentHashPaymentIdZ");
@@ -10639,6 +11247,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_C2Tuple_PaymentHashP
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_is_ok(uint32_t o) {
+       LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ* o_conv = (LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ*)(o & ~1);
+       jboolean ret_val = CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -10648,6 +11262,17 @@ void  __attribute__((visibility("default"))) TS_CResult_C2Tuple_PaymentHashPayme
        CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_clone_ptr(LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ *NONNULL_PTR arg) {
+       LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ), "LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ");
+       *ret_conv = CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_clone_ptr(uint32_t arg) {
+       LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ* arg_conv = (LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ*)(arg & ~1);
+       int64_t ret_val = CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_clone(uint32_t orig) {
        LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ* orig_conv = (LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ*)(orig & ~1);
        LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ), "LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ");
@@ -10674,6 +11299,17 @@ void  __attribute__((visibility("default"))) TS_CVec_NetAddressZ_free(uint32_tAr
        CVec_NetAddressZ_free(_res_constr);
 }
 
+static inline uint64_t C2Tuple_PaymentHashPaymentSecretZ_clone_ptr(LDKC2Tuple_PaymentHashPaymentSecretZ *NONNULL_PTR arg) {
+       LDKC2Tuple_PaymentHashPaymentSecretZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PaymentHashPaymentSecretZ), "LDKC2Tuple_PaymentHashPaymentSecretZ");
+       *ret_conv = C2Tuple_PaymentHashPaymentSecretZ_clone(arg);
+       return ((uint64_t)ret_conv);
+}
+int64_t  __attribute__((visibility("default"))) TS_C2Tuple_PaymentHashPaymentSecretZ_clone_ptr(uint32_t arg) {
+       LDKC2Tuple_PaymentHashPaymentSecretZ* arg_conv = (LDKC2Tuple_PaymentHashPaymentSecretZ*)(arg & ~1);
+       int64_t ret_val = C2Tuple_PaymentHashPaymentSecretZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_C2Tuple_PaymentHashPaymentSecretZ_clone(uint32_t orig) {
        LDKC2Tuple_PaymentHashPaymentSecretZ* orig_conv = (LDKC2Tuple_PaymentHashPaymentSecretZ*)(orig & ~1);
        LDKC2Tuple_PaymentHashPaymentSecretZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PaymentHashPaymentSecretZ), "LDKC2Tuple_PaymentHashPaymentSecretZ");
@@ -10721,6 +11357,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_PaymentSecretAPIErro
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_PaymentSecretAPIErrorZ_is_ok(uint32_t o) {
+       LDKCResult_PaymentSecretAPIErrorZ* o_conv = (LDKCResult_PaymentSecretAPIErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_PaymentSecretAPIErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_PaymentSecretAPIErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -10730,6 +11372,17 @@ void  __attribute__((visibility("default"))) TS_CResult_PaymentSecretAPIErrorZ_f
        CResult_PaymentSecretAPIErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_PaymentSecretAPIErrorZ_clone_ptr(LDKCResult_PaymentSecretAPIErrorZ *NONNULL_PTR arg) {
+       LDKCResult_PaymentSecretAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentSecretAPIErrorZ), "LDKCResult_PaymentSecretAPIErrorZ");
+       *ret_conv = CResult_PaymentSecretAPIErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_PaymentSecretAPIErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_PaymentSecretAPIErrorZ* arg_conv = (LDKCResult_PaymentSecretAPIErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_PaymentSecretAPIErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_PaymentSecretAPIErrorZ_clone(uint32_t orig) {
        LDKCResult_PaymentSecretAPIErrorZ* orig_conv = (LDKCResult_PaymentSecretAPIErrorZ*)(orig & ~1);
        LDKCResult_PaymentSecretAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentSecretAPIErrorZ), "LDKCResult_PaymentSecretAPIErrorZ");
@@ -10750,6 +11403,7 @@ void  __attribute__((visibility("default"))) TS_CVec_ChannelMonitorZ_free(uint32
                LDKChannelMonitor _res_conv_16_conv;
                _res_conv_16_conv.inner = (void*)(_res_conv_16 & (~1));
                _res_conv_16_conv.is_owned = (_res_conv_16 & 1) || (_res_conv_16 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_16_conv);
                _res_constr.data[q] = _res_conv_16_conv;
        }
        CVec_ChannelMonitorZ_free(_res_constr);
@@ -10762,6 +11416,7 @@ uint32_t  __attribute__((visibility("default"))) TS_C2Tuple_BlockHashChannelMana
        LDKChannelManager b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = (b & 1) || (b == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        // Warning: we need a move here but no clone is available for LDKChannelManager
        LDKC2Tuple_BlockHashChannelManagerZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_BlockHashChannelManagerZ), "LDKC2Tuple_BlockHashChannelManagerZ");
        *ret_conv = C2Tuple_BlockHashChannelManagerZ_new(a_ref, b_conv);
@@ -10791,12 +11446,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_C2Tuple_BlockHashCha
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ), "LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ");
        *ret_conv = CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ* o_conv = (LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -10810,6 +11472,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ChannelConfigDecodeE
        LDKChannelConfig o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ChannelConfig_clone(&o_conv);
        LDKCResult_ChannelConfigDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelConfigDecodeErrorZ), "LDKCResult_ChannelConfigDecodeErrorZ");
        *ret_conv = CResult_ChannelConfigDecodeErrorZ_ok(o_conv);
@@ -10820,12 +11483,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ChannelConfigDecodeE
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ChannelConfigDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelConfigDecodeErrorZ), "LDKCResult_ChannelConfigDecodeErrorZ");
        *ret_conv = CResult_ChannelConfigDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_ChannelConfigDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_ChannelConfigDecodeErrorZ* o_conv = (LDKCResult_ChannelConfigDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ChannelConfigDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_ChannelConfigDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -10835,6 +11505,17 @@ void  __attribute__((visibility("default"))) TS_CResult_ChannelConfigDecodeError
        CResult_ChannelConfigDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ChannelConfigDecodeErrorZ_clone_ptr(LDKCResult_ChannelConfigDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ChannelConfigDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelConfigDecodeErrorZ), "LDKCResult_ChannelConfigDecodeErrorZ");
+       *ret_conv = CResult_ChannelConfigDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_ChannelConfigDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_ChannelConfigDecodeErrorZ* arg_conv = (LDKCResult_ChannelConfigDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ChannelConfigDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_ChannelConfigDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_ChannelConfigDecodeErrorZ* orig_conv = (LDKCResult_ChannelConfigDecodeErrorZ*)(orig & ~1);
        LDKCResult_ChannelConfigDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelConfigDecodeErrorZ), "LDKCResult_ChannelConfigDecodeErrorZ");
@@ -10846,6 +11527,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_OutPointDecodeErrorZ
        LDKOutPoint o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = OutPoint_clone(&o_conv);
        LDKCResult_OutPointDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OutPointDecodeErrorZ), "LDKCResult_OutPointDecodeErrorZ");
        *ret_conv = CResult_OutPointDecodeErrorZ_ok(o_conv);
@@ -10856,12 +11538,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_OutPointDecodeErrorZ
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_OutPointDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OutPointDecodeErrorZ), "LDKCResult_OutPointDecodeErrorZ");
        *ret_conv = CResult_OutPointDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_OutPointDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_OutPointDecodeErrorZ* o_conv = (LDKCResult_OutPointDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_OutPointDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_OutPointDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -10871,6 +11560,17 @@ void  __attribute__((visibility("default"))) TS_CResult_OutPointDecodeErrorZ_fre
        CResult_OutPointDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_OutPointDecodeErrorZ_clone_ptr(LDKCResult_OutPointDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_OutPointDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OutPointDecodeErrorZ), "LDKCResult_OutPointDecodeErrorZ");
+       *ret_conv = CResult_OutPointDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_OutPointDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_OutPointDecodeErrorZ* arg_conv = (LDKCResult_OutPointDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_OutPointDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_OutPointDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_OutPointDecodeErrorZ* orig_conv = (LDKCResult_OutPointDecodeErrorZ*)(orig & ~1);
        LDKCResult_OutPointDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OutPointDecodeErrorZ), "LDKCResult_OutPointDecodeErrorZ");
@@ -10904,6 +11604,18 @@ void  __attribute__((visibility("default"))) TS_COption_TypeZ_free(uint32_t _res
        COption_TypeZ_free(_res_conv);
 }
 
+static inline uint64_t COption_TypeZ_clone_ptr(LDKCOption_TypeZ *NONNULL_PTR arg) {
+       LDKCOption_TypeZ *ret_copy = MALLOC(sizeof(LDKCOption_TypeZ), "LDKCOption_TypeZ");
+       *ret_copy = COption_TypeZ_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_COption_TypeZ_clone_ptr(uint32_t arg) {
+       LDKCOption_TypeZ* arg_conv = (LDKCOption_TypeZ*)arg;
+       int64_t ret_val = COption_TypeZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_COption_TypeZ_clone(uint32_t orig) {
        LDKCOption_TypeZ* orig_conv = (LDKCOption_TypeZ*)orig;
        LDKCOption_TypeZ *ret_copy = MALLOC(sizeof(LDKCOption_TypeZ), "LDKCOption_TypeZ");
@@ -10926,12 +11638,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_COption_TypeZDecodeE
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_COption_TypeZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_TypeZDecodeErrorZ), "LDKCResult_COption_TypeZDecodeErrorZ");
        *ret_conv = CResult_COption_TypeZDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_COption_TypeZDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_COption_TypeZDecodeErrorZ* o_conv = (LDKCResult_COption_TypeZDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_COption_TypeZDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_COption_TypeZDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -10941,6 +11660,17 @@ void  __attribute__((visibility("default"))) TS_CResult_COption_TypeZDecodeError
        CResult_COption_TypeZDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_COption_TypeZDecodeErrorZ_clone_ptr(LDKCResult_COption_TypeZDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_COption_TypeZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_TypeZDecodeErrorZ), "LDKCResult_COption_TypeZDecodeErrorZ");
+       *ret_conv = CResult_COption_TypeZDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_COption_TypeZDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_COption_TypeZDecodeErrorZ* arg_conv = (LDKCResult_COption_TypeZDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_COption_TypeZDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_COption_TypeZDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_COption_TypeZDecodeErrorZ* orig_conv = (LDKCResult_COption_TypeZDecodeErrorZ*)(orig & ~1);
        LDKCResult_COption_TypeZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_TypeZDecodeErrorZ), "LDKCResult_COption_TypeZDecodeErrorZ");
@@ -10967,6 +11697,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_PaymentIdPaymentErro
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_PaymentIdPaymentErrorZ_is_ok(uint32_t o) {
+       LDKCResult_PaymentIdPaymentErrorZ* o_conv = (LDKCResult_PaymentIdPaymentErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_PaymentIdPaymentErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_PaymentIdPaymentErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -10976,6 +11712,17 @@ void  __attribute__((visibility("default"))) TS_CResult_PaymentIdPaymentErrorZ_f
        CResult_PaymentIdPaymentErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_PaymentIdPaymentErrorZ_clone_ptr(LDKCResult_PaymentIdPaymentErrorZ *NONNULL_PTR arg) {
+       LDKCResult_PaymentIdPaymentErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentIdPaymentErrorZ), "LDKCResult_PaymentIdPaymentErrorZ");
+       *ret_conv = CResult_PaymentIdPaymentErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_PaymentIdPaymentErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_PaymentIdPaymentErrorZ* arg_conv = (LDKCResult_PaymentIdPaymentErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_PaymentIdPaymentErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_PaymentIdPaymentErrorZ_clone(uint32_t orig) {
        LDKCResult_PaymentIdPaymentErrorZ* orig_conv = (LDKCResult_PaymentIdPaymentErrorZ*)(orig & ~1);
        LDKCResult_PaymentIdPaymentErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentIdPaymentErrorZ), "LDKCResult_PaymentIdPaymentErrorZ");
@@ -10996,6 +11743,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_SiPrefixNoneZ_err()
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_SiPrefixNoneZ_is_ok(uint32_t o) {
+       LDKCResult_SiPrefixNoneZ* o_conv = (LDKCResult_SiPrefixNoneZ*)(o & ~1);
+       jboolean ret_val = CResult_SiPrefixNoneZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_SiPrefixNoneZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -11005,6 +11758,17 @@ void  __attribute__((visibility("default"))) TS_CResult_SiPrefixNoneZ_free(uint3
        CResult_SiPrefixNoneZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_SiPrefixNoneZ_clone_ptr(LDKCResult_SiPrefixNoneZ *NONNULL_PTR arg) {
+       LDKCResult_SiPrefixNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SiPrefixNoneZ), "LDKCResult_SiPrefixNoneZ");
+       *ret_conv = CResult_SiPrefixNoneZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_SiPrefixNoneZ_clone_ptr(uint32_t arg) {
+       LDKCResult_SiPrefixNoneZ* arg_conv = (LDKCResult_SiPrefixNoneZ*)(arg & ~1);
+       int64_t ret_val = CResult_SiPrefixNoneZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_SiPrefixNoneZ_clone(uint32_t orig) {
        LDKCResult_SiPrefixNoneZ* orig_conv = (LDKCResult_SiPrefixNoneZ*)(orig & ~1);
        LDKCResult_SiPrefixNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SiPrefixNoneZ), "LDKCResult_SiPrefixNoneZ");
@@ -11016,6 +11780,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_InvoiceNoneZ_ok(uint
        LDKInvoice o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = Invoice_clone(&o_conv);
        LDKCResult_InvoiceNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceNoneZ), "LDKCResult_InvoiceNoneZ");
        *ret_conv = CResult_InvoiceNoneZ_ok(o_conv);
@@ -11028,6 +11793,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_InvoiceNoneZ_err() {
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_InvoiceNoneZ_is_ok(uint32_t o) {
+       LDKCResult_InvoiceNoneZ* o_conv = (LDKCResult_InvoiceNoneZ*)(o & ~1);
+       jboolean ret_val = CResult_InvoiceNoneZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_InvoiceNoneZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -11037,6 +11808,17 @@ void  __attribute__((visibility("default"))) TS_CResult_InvoiceNoneZ_free(uint32
        CResult_InvoiceNoneZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_InvoiceNoneZ_clone_ptr(LDKCResult_InvoiceNoneZ *NONNULL_PTR arg) {
+       LDKCResult_InvoiceNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceNoneZ), "LDKCResult_InvoiceNoneZ");
+       *ret_conv = CResult_InvoiceNoneZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_InvoiceNoneZ_clone_ptr(uint32_t arg) {
+       LDKCResult_InvoiceNoneZ* arg_conv = (LDKCResult_InvoiceNoneZ*)(arg & ~1);
+       int64_t ret_val = CResult_InvoiceNoneZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_InvoiceNoneZ_clone(uint32_t orig) {
        LDKCResult_InvoiceNoneZ* orig_conv = (LDKCResult_InvoiceNoneZ*)(orig & ~1);
        LDKCResult_InvoiceNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceNoneZ), "LDKCResult_InvoiceNoneZ");
@@ -11048,6 +11830,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_SignedRawInvoiceNone
        LDKSignedRawInvoice o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = SignedRawInvoice_clone(&o_conv);
        LDKCResult_SignedRawInvoiceNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignedRawInvoiceNoneZ), "LDKCResult_SignedRawInvoiceNoneZ");
        *ret_conv = CResult_SignedRawInvoiceNoneZ_ok(o_conv);
@@ -11060,6 +11843,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_SignedRawInvoiceNone
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_SignedRawInvoiceNoneZ_is_ok(uint32_t o) {
+       LDKCResult_SignedRawInvoiceNoneZ* o_conv = (LDKCResult_SignedRawInvoiceNoneZ*)(o & ~1);
+       jboolean ret_val = CResult_SignedRawInvoiceNoneZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_SignedRawInvoiceNoneZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -11069,6 +11858,17 @@ void  __attribute__((visibility("default"))) TS_CResult_SignedRawInvoiceNoneZ_fr
        CResult_SignedRawInvoiceNoneZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_SignedRawInvoiceNoneZ_clone_ptr(LDKCResult_SignedRawInvoiceNoneZ *NONNULL_PTR arg) {
+       LDKCResult_SignedRawInvoiceNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignedRawInvoiceNoneZ), "LDKCResult_SignedRawInvoiceNoneZ");
+       *ret_conv = CResult_SignedRawInvoiceNoneZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_SignedRawInvoiceNoneZ_clone_ptr(uint32_t arg) {
+       LDKCResult_SignedRawInvoiceNoneZ* arg_conv = (LDKCResult_SignedRawInvoiceNoneZ*)(arg & ~1);
+       int64_t ret_val = CResult_SignedRawInvoiceNoneZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_SignedRawInvoiceNoneZ_clone(uint32_t orig) {
        LDKCResult_SignedRawInvoiceNoneZ* orig_conv = (LDKCResult_SignedRawInvoiceNoneZ*)(orig & ~1);
        LDKCResult_SignedRawInvoiceNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignedRawInvoiceNoneZ), "LDKCResult_SignedRawInvoiceNoneZ");
@@ -11076,6 +11876,17 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_SignedRawInvoiceNone
        return (uint64_t)ret_conv;
 }
 
+static inline uint64_t C3Tuple_RawInvoice_u832InvoiceSignatureZ_clone_ptr(LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ *NONNULL_PTR arg) {
+       LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ* ret_conv = MALLOC(sizeof(LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ), "LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ");
+       *ret_conv = C3Tuple_RawInvoice_u832InvoiceSignatureZ_clone(arg);
+       return ((uint64_t)ret_conv);
+}
+int64_t  __attribute__((visibility("default"))) TS_C3Tuple_RawInvoice_u832InvoiceSignatureZ_clone_ptr(uint32_t arg) {
+       LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ* arg_conv = (LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ*)(arg & ~1);
+       int64_t ret_val = C3Tuple_RawInvoice_u832InvoiceSignatureZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_C3Tuple_RawInvoice_u832InvoiceSignatureZ_clone(uint32_t orig) {
        LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ* orig_conv = (LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ*)(orig & ~1);
        LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ* ret_conv = MALLOC(sizeof(LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ), "LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ");
@@ -11087,6 +11898,7 @@ uint32_t  __attribute__((visibility("default"))) TS_C3Tuple_RawInvoice_u832Invoi
        LDKRawInvoice a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = (a & 1) || (a == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv = RawInvoice_clone(&a_conv);
        LDKThirtyTwoBytes b_ref;
        CHECK(*((uint32_t*)b) == 32);
@@ -11094,6 +11906,7 @@ uint32_t  __attribute__((visibility("default"))) TS_C3Tuple_RawInvoice_u832Invoi
        LDKInvoiceSignature c_conv;
        c_conv.inner = (void*)(c & (~1));
        c_conv.is_owned = (c & 1) || (c == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(c_conv);
        c_conv = InvoiceSignature_clone(&c_conv);
        LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ* ret_conv = MALLOC(sizeof(LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ), "LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ");
        *ret_conv = C3Tuple_RawInvoice_u832InvoiceSignatureZ_new(a_conv, b_ref, c_conv);
@@ -11113,6 +11926,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_PayeePubKeyErrorZ_ok
        LDKPayeePubKey o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = PayeePubKey_clone(&o_conv);
        LDKCResult_PayeePubKeyErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PayeePubKeyErrorZ), "LDKCResult_PayeePubKeyErrorZ");
        *ret_conv = CResult_PayeePubKeyErrorZ_ok(o_conv);
@@ -11126,6 +11940,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_PayeePubKeyErrorZ_er
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_PayeePubKeyErrorZ_is_ok(uint32_t o) {
+       LDKCResult_PayeePubKeyErrorZ* o_conv = (LDKCResult_PayeePubKeyErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_PayeePubKeyErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_PayeePubKeyErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -11135,6 +11955,17 @@ void  __attribute__((visibility("default"))) TS_CResult_PayeePubKeyErrorZ_free(u
        CResult_PayeePubKeyErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_PayeePubKeyErrorZ_clone_ptr(LDKCResult_PayeePubKeyErrorZ *NONNULL_PTR arg) {
+       LDKCResult_PayeePubKeyErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PayeePubKeyErrorZ), "LDKCResult_PayeePubKeyErrorZ");
+       *ret_conv = CResult_PayeePubKeyErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_PayeePubKeyErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_PayeePubKeyErrorZ* arg_conv = (LDKCResult_PayeePubKeyErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_PayeePubKeyErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_PayeePubKeyErrorZ_clone(uint32_t orig) {
        LDKCResult_PayeePubKeyErrorZ* orig_conv = (LDKCResult_PayeePubKeyErrorZ*)(orig & ~1);
        LDKCResult_PayeePubKeyErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PayeePubKeyErrorZ), "LDKCResult_PayeePubKeyErrorZ");
@@ -11155,6 +11986,7 @@ void  __attribute__((visibility("default"))) TS_CVec_PrivateRouteZ_free(uint32_t
                LDKPrivateRoute _res_conv_14_conv;
                _res_conv_14_conv.inner = (void*)(_res_conv_14 & (~1));
                _res_conv_14_conv.is_owned = (_res_conv_14 & 1) || (_res_conv_14 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_14_conv);
                _res_constr.data[o] = _res_conv_14_conv;
        }
        CVec_PrivateRouteZ_free(_res_constr);
@@ -11164,6 +11996,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_PositiveTimestampCre
        LDKPositiveTimestamp o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = PositiveTimestamp_clone(&o_conv);
        LDKCResult_PositiveTimestampCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PositiveTimestampCreationErrorZ), "LDKCResult_PositiveTimestampCreationErrorZ");
        *ret_conv = CResult_PositiveTimestampCreationErrorZ_ok(o_conv);
@@ -11177,6 +12010,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_PositiveTimestampCre
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_PositiveTimestampCreationErrorZ_is_ok(uint32_t o) {
+       LDKCResult_PositiveTimestampCreationErrorZ* o_conv = (LDKCResult_PositiveTimestampCreationErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_PositiveTimestampCreationErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_PositiveTimestampCreationErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -11186,6 +12025,17 @@ void  __attribute__((visibility("default"))) TS_CResult_PositiveTimestampCreatio
        CResult_PositiveTimestampCreationErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_PositiveTimestampCreationErrorZ_clone_ptr(LDKCResult_PositiveTimestampCreationErrorZ *NONNULL_PTR arg) {
+       LDKCResult_PositiveTimestampCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PositiveTimestampCreationErrorZ), "LDKCResult_PositiveTimestampCreationErrorZ");
+       *ret_conv = CResult_PositiveTimestampCreationErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_PositiveTimestampCreationErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_PositiveTimestampCreationErrorZ* arg_conv = (LDKCResult_PositiveTimestampCreationErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_PositiveTimestampCreationErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_PositiveTimestampCreationErrorZ_clone(uint32_t orig) {
        LDKCResult_PositiveTimestampCreationErrorZ* orig_conv = (LDKCResult_PositiveTimestampCreationErrorZ*)(orig & ~1);
        LDKCResult_PositiveTimestampCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PositiveTimestampCreationErrorZ), "LDKCResult_PositiveTimestampCreationErrorZ");
@@ -11206,6 +12056,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_NoneSemanticErrorZ_e
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_NoneSemanticErrorZ_is_ok(uint32_t o) {
+       LDKCResult_NoneSemanticErrorZ* o_conv = (LDKCResult_NoneSemanticErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_NoneSemanticErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_NoneSemanticErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -11215,6 +12071,17 @@ void  __attribute__((visibility("default"))) TS_CResult_NoneSemanticErrorZ_free(
        CResult_NoneSemanticErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_NoneSemanticErrorZ_clone_ptr(LDKCResult_NoneSemanticErrorZ *NONNULL_PTR arg) {
+       LDKCResult_NoneSemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneSemanticErrorZ), "LDKCResult_NoneSemanticErrorZ");
+       *ret_conv = CResult_NoneSemanticErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_NoneSemanticErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_NoneSemanticErrorZ* arg_conv = (LDKCResult_NoneSemanticErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_NoneSemanticErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_NoneSemanticErrorZ_clone(uint32_t orig) {
        LDKCResult_NoneSemanticErrorZ* orig_conv = (LDKCResult_NoneSemanticErrorZ*)(orig & ~1);
        LDKCResult_NoneSemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneSemanticErrorZ), "LDKCResult_NoneSemanticErrorZ");
@@ -11226,6 +12093,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_InvoiceSemanticError
        LDKInvoice o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = Invoice_clone(&o_conv);
        LDKCResult_InvoiceSemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceSemanticErrorZ), "LDKCResult_InvoiceSemanticErrorZ");
        *ret_conv = CResult_InvoiceSemanticErrorZ_ok(o_conv);
@@ -11239,6 +12107,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_InvoiceSemanticError
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_InvoiceSemanticErrorZ_is_ok(uint32_t o) {
+       LDKCResult_InvoiceSemanticErrorZ* o_conv = (LDKCResult_InvoiceSemanticErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_InvoiceSemanticErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_InvoiceSemanticErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -11248,6 +12122,17 @@ void  __attribute__((visibility("default"))) TS_CResult_InvoiceSemanticErrorZ_fr
        CResult_InvoiceSemanticErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_InvoiceSemanticErrorZ_clone_ptr(LDKCResult_InvoiceSemanticErrorZ *NONNULL_PTR arg) {
+       LDKCResult_InvoiceSemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceSemanticErrorZ), "LDKCResult_InvoiceSemanticErrorZ");
+       *ret_conv = CResult_InvoiceSemanticErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_InvoiceSemanticErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_InvoiceSemanticErrorZ* arg_conv = (LDKCResult_InvoiceSemanticErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_InvoiceSemanticErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_InvoiceSemanticErrorZ_clone(uint32_t orig) {
        LDKCResult_InvoiceSemanticErrorZ* orig_conv = (LDKCResult_InvoiceSemanticErrorZ*)(orig & ~1);
        LDKCResult_InvoiceSemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceSemanticErrorZ), "LDKCResult_InvoiceSemanticErrorZ");
@@ -11259,6 +12144,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_DescriptionCreationE
        LDKDescription o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = Description_clone(&o_conv);
        LDKCResult_DescriptionCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_DescriptionCreationErrorZ), "LDKCResult_DescriptionCreationErrorZ");
        *ret_conv = CResult_DescriptionCreationErrorZ_ok(o_conv);
@@ -11272,6 +12158,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_DescriptionCreationE
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_DescriptionCreationErrorZ_is_ok(uint32_t o) {
+       LDKCResult_DescriptionCreationErrorZ* o_conv = (LDKCResult_DescriptionCreationErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_DescriptionCreationErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_DescriptionCreationErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -11281,6 +12173,17 @@ void  __attribute__((visibility("default"))) TS_CResult_DescriptionCreationError
        CResult_DescriptionCreationErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_DescriptionCreationErrorZ_clone_ptr(LDKCResult_DescriptionCreationErrorZ *NONNULL_PTR arg) {
+       LDKCResult_DescriptionCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_DescriptionCreationErrorZ), "LDKCResult_DescriptionCreationErrorZ");
+       *ret_conv = CResult_DescriptionCreationErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_DescriptionCreationErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_DescriptionCreationErrorZ* arg_conv = (LDKCResult_DescriptionCreationErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_DescriptionCreationErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_DescriptionCreationErrorZ_clone(uint32_t orig) {
        LDKCResult_DescriptionCreationErrorZ* orig_conv = (LDKCResult_DescriptionCreationErrorZ*)(orig & ~1);
        LDKCResult_DescriptionCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_DescriptionCreationErrorZ), "LDKCResult_DescriptionCreationErrorZ");
@@ -11292,6 +12195,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ExpiryTimeCreationEr
        LDKExpiryTime o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ExpiryTime_clone(&o_conv);
        LDKCResult_ExpiryTimeCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ExpiryTimeCreationErrorZ), "LDKCResult_ExpiryTimeCreationErrorZ");
        *ret_conv = CResult_ExpiryTimeCreationErrorZ_ok(o_conv);
@@ -11305,6 +12209,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ExpiryTimeCreationEr
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_ExpiryTimeCreationErrorZ_is_ok(uint32_t o) {
+       LDKCResult_ExpiryTimeCreationErrorZ* o_conv = (LDKCResult_ExpiryTimeCreationErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ExpiryTimeCreationErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_ExpiryTimeCreationErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -11314,6 +12224,17 @@ void  __attribute__((visibility("default"))) TS_CResult_ExpiryTimeCreationErrorZ
        CResult_ExpiryTimeCreationErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ExpiryTimeCreationErrorZ_clone_ptr(LDKCResult_ExpiryTimeCreationErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ExpiryTimeCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ExpiryTimeCreationErrorZ), "LDKCResult_ExpiryTimeCreationErrorZ");
+       *ret_conv = CResult_ExpiryTimeCreationErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_ExpiryTimeCreationErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_ExpiryTimeCreationErrorZ* arg_conv = (LDKCResult_ExpiryTimeCreationErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ExpiryTimeCreationErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_ExpiryTimeCreationErrorZ_clone(uint32_t orig) {
        LDKCResult_ExpiryTimeCreationErrorZ* orig_conv = (LDKCResult_ExpiryTimeCreationErrorZ*)(orig & ~1);
        LDKCResult_ExpiryTimeCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ExpiryTimeCreationErrorZ), "LDKCResult_ExpiryTimeCreationErrorZ");
@@ -11325,6 +12246,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_PrivateRouteCreation
        LDKPrivateRoute o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = PrivateRoute_clone(&o_conv);
        LDKCResult_PrivateRouteCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PrivateRouteCreationErrorZ), "LDKCResult_PrivateRouteCreationErrorZ");
        *ret_conv = CResult_PrivateRouteCreationErrorZ_ok(o_conv);
@@ -11338,6 +12260,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_PrivateRouteCreation
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_PrivateRouteCreationErrorZ_is_ok(uint32_t o) {
+       LDKCResult_PrivateRouteCreationErrorZ* o_conv = (LDKCResult_PrivateRouteCreationErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_PrivateRouteCreationErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_PrivateRouteCreationErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -11347,6 +12275,17 @@ void  __attribute__((visibility("default"))) TS_CResult_PrivateRouteCreationErro
        CResult_PrivateRouteCreationErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_PrivateRouteCreationErrorZ_clone_ptr(LDKCResult_PrivateRouteCreationErrorZ *NONNULL_PTR arg) {
+       LDKCResult_PrivateRouteCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PrivateRouteCreationErrorZ), "LDKCResult_PrivateRouteCreationErrorZ");
+       *ret_conv = CResult_PrivateRouteCreationErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_PrivateRouteCreationErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_PrivateRouteCreationErrorZ* arg_conv = (LDKCResult_PrivateRouteCreationErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_PrivateRouteCreationErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_PrivateRouteCreationErrorZ_clone(uint32_t orig) {
        LDKCResult_PrivateRouteCreationErrorZ* orig_conv = (LDKCResult_PrivateRouteCreationErrorZ*)(orig & ~1);
        LDKCResult_PrivateRouteCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PrivateRouteCreationErrorZ), "LDKCResult_PrivateRouteCreationErrorZ");
@@ -11368,6 +12307,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_StringErrorZ_err(uin
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_StringErrorZ_is_ok(uint32_t o) {
+       LDKCResult_StringErrorZ* o_conv = (LDKCResult_StringErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_StringErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_StringErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -11381,6 +12326,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ChannelMonitorUpdate
        LDKChannelMonitorUpdate o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ChannelMonitorUpdate_clone(&o_conv);
        LDKCResult_ChannelMonitorUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelMonitorUpdateDecodeErrorZ), "LDKCResult_ChannelMonitorUpdateDecodeErrorZ");
        *ret_conv = CResult_ChannelMonitorUpdateDecodeErrorZ_ok(o_conv);
@@ -11391,12 +12337,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ChannelMonitorUpdate
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ChannelMonitorUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelMonitorUpdateDecodeErrorZ), "LDKCResult_ChannelMonitorUpdateDecodeErrorZ");
        *ret_conv = CResult_ChannelMonitorUpdateDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_ChannelMonitorUpdateDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_ChannelMonitorUpdateDecodeErrorZ* o_conv = (LDKCResult_ChannelMonitorUpdateDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ChannelMonitorUpdateDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_ChannelMonitorUpdateDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -11406,6 +12359,17 @@ void  __attribute__((visibility("default"))) TS_CResult_ChannelMonitorUpdateDeco
        CResult_ChannelMonitorUpdateDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ChannelMonitorUpdateDecodeErrorZ_clone_ptr(LDKCResult_ChannelMonitorUpdateDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ChannelMonitorUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelMonitorUpdateDecodeErrorZ), "LDKCResult_ChannelMonitorUpdateDecodeErrorZ");
+       *ret_conv = CResult_ChannelMonitorUpdateDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_ChannelMonitorUpdateDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_ChannelMonitorUpdateDecodeErrorZ* arg_conv = (LDKCResult_ChannelMonitorUpdateDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ChannelMonitorUpdateDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_ChannelMonitorUpdateDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_ChannelMonitorUpdateDecodeErrorZ* orig_conv = (LDKCResult_ChannelMonitorUpdateDecodeErrorZ*)(orig & ~1);
        LDKCResult_ChannelMonitorUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelMonitorUpdateDecodeErrorZ), "LDKCResult_ChannelMonitorUpdateDecodeErrorZ");
@@ -11413,10 +12377,112 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ChannelMonitorUpdate
        return (uint64_t)ret_conv;
 }
 
+uint32_t  __attribute__((visibility("default"))) TS_COption_MonitorEventZ_some(uint32_t o) {
+       void* o_ptr = (void*)(((uint64_t)o) & ~1);
+       CHECK_ACCESS(o_ptr);
+       LDKMonitorEvent o_conv = *(LDKMonitorEvent*)(o_ptr);
+       o_conv = MonitorEvent_clone((LDKMonitorEvent*)(((uint64_t)o) & ~1));
+       LDKCOption_MonitorEventZ *ret_copy = MALLOC(sizeof(LDKCOption_MonitorEventZ), "LDKCOption_MonitorEventZ");
+       *ret_copy = COption_MonitorEventZ_some(o_conv);
+       uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+
+uint32_t  __attribute__((visibility("default"))) TS_COption_MonitorEventZ_none() {
+       LDKCOption_MonitorEventZ *ret_copy = MALLOC(sizeof(LDKCOption_MonitorEventZ), "LDKCOption_MonitorEventZ");
+       *ret_copy = COption_MonitorEventZ_none();
+       uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+
+void  __attribute__((visibility("default"))) TS_COption_MonitorEventZ_free(uint32_t _res) {
+       if ((_res & 1) != 0) return;
+       void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
+       CHECK_ACCESS(_res_ptr);
+       LDKCOption_MonitorEventZ _res_conv = *(LDKCOption_MonitorEventZ*)(_res_ptr);
+       FREE((void*)_res);
+       COption_MonitorEventZ_free(_res_conv);
+}
+
+static inline uint64_t COption_MonitorEventZ_clone_ptr(LDKCOption_MonitorEventZ *NONNULL_PTR arg) {
+       LDKCOption_MonitorEventZ *ret_copy = MALLOC(sizeof(LDKCOption_MonitorEventZ), "LDKCOption_MonitorEventZ");
+       *ret_copy = COption_MonitorEventZ_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_COption_MonitorEventZ_clone_ptr(uint32_t arg) {
+       LDKCOption_MonitorEventZ* arg_conv = (LDKCOption_MonitorEventZ*)arg;
+       int64_t ret_val = COption_MonitorEventZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
+uint32_t  __attribute__((visibility("default"))) TS_COption_MonitorEventZ_clone(uint32_t orig) {
+       LDKCOption_MonitorEventZ* orig_conv = (LDKCOption_MonitorEventZ*)orig;
+       LDKCOption_MonitorEventZ *ret_copy = MALLOC(sizeof(LDKCOption_MonitorEventZ), "LDKCOption_MonitorEventZ");
+       *ret_copy = COption_MonitorEventZ_clone(orig_conv);
+       uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+
+uint32_t  __attribute__((visibility("default"))) TS_CResult_COption_MonitorEventZDecodeErrorZ_ok(uint32_t o) {
+       void* o_ptr = (void*)(((uint64_t)o) & ~1);
+       CHECK_ACCESS(o_ptr);
+       LDKCOption_MonitorEventZ o_conv = *(LDKCOption_MonitorEventZ*)(o_ptr);
+       o_conv = COption_MonitorEventZ_clone((LDKCOption_MonitorEventZ*)(((uint64_t)o) & ~1));
+       LDKCResult_COption_MonitorEventZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_MonitorEventZDecodeErrorZ), "LDKCResult_COption_MonitorEventZDecodeErrorZ");
+       *ret_conv = CResult_COption_MonitorEventZDecodeErrorZ_ok(o_conv);
+       return (uint64_t)ret_conv;
+}
+
+uint32_t  __attribute__((visibility("default"))) TS_CResult_COption_MonitorEventZDecodeErrorZ_err(uint32_t e) {
+       LDKDecodeError e_conv;
+       e_conv.inner = (void*)(e & (~1));
+       e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
+       e_conv = DecodeError_clone(&e_conv);
+       LDKCResult_COption_MonitorEventZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_MonitorEventZDecodeErrorZ), "LDKCResult_COption_MonitorEventZDecodeErrorZ");
+       *ret_conv = CResult_COption_MonitorEventZDecodeErrorZ_err(e_conv);
+       return (uint64_t)ret_conv;
+}
+
+jboolean  __attribute__((visibility("default"))) TS_CResult_COption_MonitorEventZDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_COption_MonitorEventZDecodeErrorZ* o_conv = (LDKCResult_COption_MonitorEventZDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_COption_MonitorEventZDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
+void  __attribute__((visibility("default"))) TS_CResult_COption_MonitorEventZDecodeErrorZ_free(uint32_t _res) {
+       if ((_res & 1) != 0) return;
+       void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_COption_MonitorEventZDecodeErrorZ _res_conv = *(LDKCResult_COption_MonitorEventZDecodeErrorZ*)(_res_ptr);
+       FREE((void*)_res);
+       CResult_COption_MonitorEventZDecodeErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_COption_MonitorEventZDecodeErrorZ_clone_ptr(LDKCResult_COption_MonitorEventZDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_COption_MonitorEventZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_MonitorEventZDecodeErrorZ), "LDKCResult_COption_MonitorEventZDecodeErrorZ");
+       *ret_conv = CResult_COption_MonitorEventZDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_COption_MonitorEventZDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_COption_MonitorEventZDecodeErrorZ* arg_conv = (LDKCResult_COption_MonitorEventZDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_COption_MonitorEventZDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
+uint32_t  __attribute__((visibility("default"))) TS_CResult_COption_MonitorEventZDecodeErrorZ_clone(uint32_t orig) {
+       LDKCResult_COption_MonitorEventZDecodeErrorZ* orig_conv = (LDKCResult_COption_MonitorEventZDecodeErrorZ*)(orig & ~1);
+       LDKCResult_COption_MonitorEventZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_MonitorEventZDecodeErrorZ), "LDKCResult_COption_MonitorEventZDecodeErrorZ");
+       *ret_conv = CResult_COption_MonitorEventZDecodeErrorZ_clone(orig_conv);
+       return (uint64_t)ret_conv;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_HTLCUpdateDecodeErrorZ_ok(uint32_t o) {
        LDKHTLCUpdate o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = HTLCUpdate_clone(&o_conv);
        LDKCResult_HTLCUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HTLCUpdateDecodeErrorZ), "LDKCResult_HTLCUpdateDecodeErrorZ");
        *ret_conv = CResult_HTLCUpdateDecodeErrorZ_ok(o_conv);
@@ -11427,12 +12493,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_HTLCUpdateDecodeErro
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_HTLCUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HTLCUpdateDecodeErrorZ), "LDKCResult_HTLCUpdateDecodeErrorZ");
        *ret_conv = CResult_HTLCUpdateDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_HTLCUpdateDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_HTLCUpdateDecodeErrorZ* o_conv = (LDKCResult_HTLCUpdateDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_HTLCUpdateDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_HTLCUpdateDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -11442,6 +12515,17 @@ void  __attribute__((visibility("default"))) TS_CResult_HTLCUpdateDecodeErrorZ_f
        CResult_HTLCUpdateDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_HTLCUpdateDecodeErrorZ_clone_ptr(LDKCResult_HTLCUpdateDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_HTLCUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HTLCUpdateDecodeErrorZ), "LDKCResult_HTLCUpdateDecodeErrorZ");
+       *ret_conv = CResult_HTLCUpdateDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_HTLCUpdateDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_HTLCUpdateDecodeErrorZ* arg_conv = (LDKCResult_HTLCUpdateDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_HTLCUpdateDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_HTLCUpdateDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_HTLCUpdateDecodeErrorZ* orig_conv = (LDKCResult_HTLCUpdateDecodeErrorZ*)(orig & ~1);
        LDKCResult_HTLCUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HTLCUpdateDecodeErrorZ), "LDKCResult_HTLCUpdateDecodeErrorZ");
@@ -11459,12 +12543,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_NoneMonitorUpdateErr
        LDKMonitorUpdateError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = MonitorUpdateError_clone(&e_conv);
        LDKCResult_NoneMonitorUpdateErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneMonitorUpdateErrorZ), "LDKCResult_NoneMonitorUpdateErrorZ");
        *ret_conv = CResult_NoneMonitorUpdateErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_NoneMonitorUpdateErrorZ_is_ok(uint32_t o) {
+       LDKCResult_NoneMonitorUpdateErrorZ* o_conv = (LDKCResult_NoneMonitorUpdateErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_NoneMonitorUpdateErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_NoneMonitorUpdateErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -11474,6 +12565,17 @@ void  __attribute__((visibility("default"))) TS_CResult_NoneMonitorUpdateErrorZ_
        CResult_NoneMonitorUpdateErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_NoneMonitorUpdateErrorZ_clone_ptr(LDKCResult_NoneMonitorUpdateErrorZ *NONNULL_PTR arg) {
+       LDKCResult_NoneMonitorUpdateErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneMonitorUpdateErrorZ), "LDKCResult_NoneMonitorUpdateErrorZ");
+       *ret_conv = CResult_NoneMonitorUpdateErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_NoneMonitorUpdateErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_NoneMonitorUpdateErrorZ* arg_conv = (LDKCResult_NoneMonitorUpdateErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_NoneMonitorUpdateErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_NoneMonitorUpdateErrorZ_clone(uint32_t orig) {
        LDKCResult_NoneMonitorUpdateErrorZ* orig_conv = (LDKCResult_NoneMonitorUpdateErrorZ*)(orig & ~1);
        LDKCResult_NoneMonitorUpdateErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneMonitorUpdateErrorZ), "LDKCResult_NoneMonitorUpdateErrorZ");
@@ -11481,6 +12583,17 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_NoneMonitorUpdateErr
        return (uint64_t)ret_conv;
 }
 
+static inline uint64_t C2Tuple_OutPointScriptZ_clone_ptr(LDKC2Tuple_OutPointScriptZ *NONNULL_PTR arg) {
+       LDKC2Tuple_OutPointScriptZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OutPointScriptZ), "LDKC2Tuple_OutPointScriptZ");
+       *ret_conv = C2Tuple_OutPointScriptZ_clone(arg);
+       return ((uint64_t)ret_conv);
+}
+int64_t  __attribute__((visibility("default"))) TS_C2Tuple_OutPointScriptZ_clone_ptr(uint32_t arg) {
+       LDKC2Tuple_OutPointScriptZ* arg_conv = (LDKC2Tuple_OutPointScriptZ*)(arg & ~1);
+       int64_t ret_val = C2Tuple_OutPointScriptZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_C2Tuple_OutPointScriptZ_clone(uint32_t orig) {
        LDKC2Tuple_OutPointScriptZ* orig_conv = (LDKC2Tuple_OutPointScriptZ*)(orig & ~1);
        LDKC2Tuple_OutPointScriptZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OutPointScriptZ), "LDKC2Tuple_OutPointScriptZ");
@@ -11492,6 +12605,7 @@ uint32_t  __attribute__((visibility("default"))) TS_C2Tuple_OutPointScriptZ_new(
        LDKOutPoint a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = (a & 1) || (a == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv = OutPoint_clone(&a_conv);
        LDKCVec_u8Z b_ref;
        b_ref.datalen = *((uint32_t*)b);
@@ -11511,6 +12625,17 @@ void  __attribute__((visibility("default"))) TS_C2Tuple_OutPointScriptZ_free(uin
        C2Tuple_OutPointScriptZ_free(_res_conv);
 }
 
+static inline uint64_t C2Tuple_u32ScriptZ_clone_ptr(LDKC2Tuple_u32ScriptZ *NONNULL_PTR arg) {
+       LDKC2Tuple_u32ScriptZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_u32ScriptZ), "LDKC2Tuple_u32ScriptZ");
+       *ret_conv = C2Tuple_u32ScriptZ_clone(arg);
+       return ((uint64_t)ret_conv);
+}
+int64_t  __attribute__((visibility("default"))) TS_C2Tuple_u32ScriptZ_clone_ptr(uint32_t arg) {
+       LDKC2Tuple_u32ScriptZ* arg_conv = (LDKC2Tuple_u32ScriptZ*)(arg & ~1);
+       int64_t ret_val = C2Tuple_u32ScriptZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_C2Tuple_u32ScriptZ_clone(uint32_t orig) {
        LDKC2Tuple_u32ScriptZ* orig_conv = (LDKC2Tuple_u32ScriptZ*)(orig & ~1);
        LDKC2Tuple_u32ScriptZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_u32ScriptZ), "LDKC2Tuple_u32ScriptZ");
@@ -11556,6 +12681,17 @@ void  __attribute__((visibility("default"))) TS_CVec_C2Tuple_u32ScriptZZ_free(ui
        CVec_C2Tuple_u32ScriptZZ_free(_res_constr);
 }
 
+static inline uint64_t C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_clone_ptr(LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ *NONNULL_PTR arg) {
+       LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ), "LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ");
+       *ret_conv = C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_clone(arg);
+       return ((uint64_t)ret_conv);
+}
+int64_t  __attribute__((visibility("default"))) TS_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_clone_ptr(uint32_t arg) {
+       LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ* arg_conv = (LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ*)(arg & ~1);
+       int64_t ret_val = C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_clone(uint32_t orig) {
        LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ* orig_conv = (LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ*)(orig & ~1);
        LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ), "LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ");
@@ -11654,6 +12790,17 @@ void  __attribute__((visibility("default"))) TS_CVec_TransactionZ_free(ptrArray
        CVec_TransactionZ_free(_res_constr);
 }
 
+static inline uint64_t C2Tuple_u32TxOutZ_clone_ptr(LDKC2Tuple_u32TxOutZ *NONNULL_PTR arg) {
+       LDKC2Tuple_u32TxOutZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_u32TxOutZ), "LDKC2Tuple_u32TxOutZ");
+       *ret_conv = C2Tuple_u32TxOutZ_clone(arg);
+       return ((uint64_t)ret_conv);
+}
+int64_t  __attribute__((visibility("default"))) TS_C2Tuple_u32TxOutZ_clone_ptr(uint32_t arg) {
+       LDKC2Tuple_u32TxOutZ* arg_conv = (LDKC2Tuple_u32TxOutZ*)(arg & ~1);
+       int64_t ret_val = C2Tuple_u32TxOutZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_C2Tuple_u32TxOutZ_clone(uint32_t orig) {
        LDKC2Tuple_u32TxOutZ* orig_conv = (LDKC2Tuple_u32TxOutZ*)(orig & ~1);
        LDKC2Tuple_u32TxOutZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_u32TxOutZ), "LDKC2Tuple_u32TxOutZ");
@@ -11699,6 +12846,17 @@ void  __attribute__((visibility("default"))) TS_CVec_C2Tuple_u32TxOutZZ_free(uin
        CVec_C2Tuple_u32TxOutZZ_free(_res_constr);
 }
 
+static inline uint64_t C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_clone_ptr(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ *NONNULL_PTR arg) {
+       LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ), "LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ");
+       *ret_conv = C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_clone(arg);
+       return ((uint64_t)ret_conv);
+}
+int64_t  __attribute__((visibility("default"))) TS_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_clone_ptr(uint32_t arg) {
+       LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ* arg_conv = (LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ*)(arg & ~1);
+       int64_t ret_val = C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_clone(uint32_t orig) {
        LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ* orig_conv = (LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ*)(orig & ~1);
        LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ), "LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ");
@@ -11791,12 +12949,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_C2Tuple_BlockHashCha
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ), "LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ");
        *ret_conv = CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ* o_conv = (LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -11806,6 +12971,17 @@ void  __attribute__((visibility("default"))) TS_CResult_C2Tuple_BlockHashChannel
        CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_clone_ptr(LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ), "LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ");
+       *ret_conv = CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ* arg_conv = (LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ* orig_conv = (LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ*)(orig & ~1);
        LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ), "LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ");
@@ -11823,12 +12999,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_NoneLightningErrorZ_
        LDKLightningError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = LightningError_clone(&e_conv);
        LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
        *ret_conv = CResult_NoneLightningErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_NoneLightningErrorZ_is_ok(uint32_t o) {
+       LDKCResult_NoneLightningErrorZ* o_conv = (LDKCResult_NoneLightningErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_NoneLightningErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_NoneLightningErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -11838,6 +13021,17 @@ void  __attribute__((visibility("default"))) TS_CResult_NoneLightningErrorZ_free
        CResult_NoneLightningErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_NoneLightningErrorZ_clone_ptr(LDKCResult_NoneLightningErrorZ *NONNULL_PTR arg) {
+       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
+       *ret_conv = CResult_NoneLightningErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_NoneLightningErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_NoneLightningErrorZ* arg_conv = (LDKCResult_NoneLightningErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_NoneLightningErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_NoneLightningErrorZ_clone(uint32_t orig) {
        LDKCResult_NoneLightningErrorZ* orig_conv = (LDKCResult_NoneLightningErrorZ*)(orig & ~1);
        LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
@@ -11845,6 +13039,17 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_NoneLightningErrorZ_
        return (uint64_t)ret_conv;
 }
 
+static inline uint64_t C2Tuple_PublicKeyTypeZ_clone_ptr(LDKC2Tuple_PublicKeyTypeZ *NONNULL_PTR arg) {
+       LDKC2Tuple_PublicKeyTypeZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PublicKeyTypeZ), "LDKC2Tuple_PublicKeyTypeZ");
+       *ret_conv = C2Tuple_PublicKeyTypeZ_clone(arg);
+       return ((uint64_t)ret_conv);
+}
+int64_t  __attribute__((visibility("default"))) TS_C2Tuple_PublicKeyTypeZ_clone_ptr(uint32_t arg) {
+       LDKC2Tuple_PublicKeyTypeZ* arg_conv = (LDKC2Tuple_PublicKeyTypeZ*)(arg & ~1);
+       int64_t ret_val = C2Tuple_PublicKeyTypeZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_C2Tuple_PublicKeyTypeZ_clone(uint32_t orig) {
        LDKC2Tuple_PublicKeyTypeZ* orig_conv = (LDKC2Tuple_PublicKeyTypeZ*)(orig & ~1);
        LDKC2Tuple_PublicKeyTypeZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PublicKeyTypeZ), "LDKC2Tuple_PublicKeyTypeZ");
@@ -11902,12 +13107,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_boolLightningErrorZ_
        LDKLightningError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = LightningError_clone(&e_conv);
        LDKCResult_boolLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_boolLightningErrorZ), "LDKCResult_boolLightningErrorZ");
        *ret_conv = CResult_boolLightningErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_boolLightningErrorZ_is_ok(uint32_t o) {
+       LDKCResult_boolLightningErrorZ* o_conv = (LDKCResult_boolLightningErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_boolLightningErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_boolLightningErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -11917,6 +13129,17 @@ void  __attribute__((visibility("default"))) TS_CResult_boolLightningErrorZ_free
        CResult_boolLightningErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_boolLightningErrorZ_clone_ptr(LDKCResult_boolLightningErrorZ *NONNULL_PTR arg) {
+       LDKCResult_boolLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_boolLightningErrorZ), "LDKCResult_boolLightningErrorZ");
+       *ret_conv = CResult_boolLightningErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_boolLightningErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_boolLightningErrorZ* arg_conv = (LDKCResult_boolLightningErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_boolLightningErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_boolLightningErrorZ_clone(uint32_t orig) {
        LDKCResult_boolLightningErrorZ* orig_conv = (LDKCResult_boolLightningErrorZ*)(orig & ~1);
        LDKCResult_boolLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_boolLightningErrorZ), "LDKCResult_boolLightningErrorZ");
@@ -11924,6 +13147,17 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_boolLightningErrorZ_
        return (uint64_t)ret_conv;
 }
 
+static inline uint64_t C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_clone_ptr(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ *NONNULL_PTR arg) {
+       LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ* ret_conv = MALLOC(sizeof(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ), "LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ");
+       *ret_conv = C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_clone(arg);
+       return ((uint64_t)ret_conv);
+}
+int64_t  __attribute__((visibility("default"))) TS_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_clone_ptr(uint32_t arg) {
+       LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ* arg_conv = (LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ*)(arg & ~1);
+       int64_t ret_val = C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_clone(uint32_t orig) {
        LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ* orig_conv = (LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ*)(orig & ~1);
        LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ* ret_conv = MALLOC(sizeof(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ), "LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ");
@@ -11935,14 +13169,17 @@ uint32_t  __attribute__((visibility("default"))) TS_C3Tuple_ChannelAnnouncementC
        LDKChannelAnnouncement a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = (a & 1) || (a == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv = ChannelAnnouncement_clone(&a_conv);
        LDKChannelUpdate b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = (b & 1) || (b == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv = ChannelUpdate_clone(&b_conv);
        LDKChannelUpdate c_conv;
        c_conv.inner = (void*)(c & (~1));
        c_conv.is_owned = (c & 1) || (c == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(c_conv);
        c_conv = ChannelUpdate_clone(&c_conv);
        LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ* ret_conv = MALLOC(sizeof(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ), "LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ");
        *ret_conv = C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_new(a_conv, b_conv, c_conv);
@@ -11990,6 +13227,7 @@ void  __attribute__((visibility("default"))) TS_CVec_NodeAnnouncementZ_free(uint
                LDKNodeAnnouncement _res_conv_18_conv;
                _res_conv_18_conv.inner = (void*)(_res_conv_18 & (~1));
                _res_conv_18_conv.is_owned = (_res_conv_18 & 1) || (_res_conv_18 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_18_conv);
                _res_constr.data[s] = _res_conv_18_conv;
        }
        CVec_NodeAnnouncementZ_free(_res_constr);
@@ -12027,12 +13265,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_CVec_u8ZPeerHandleEr
        LDKPeerHandleError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = PeerHandleError_clone(&e_conv);
        LDKCResult_CVec_u8ZPeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_u8ZPeerHandleErrorZ), "LDKCResult_CVec_u8ZPeerHandleErrorZ");
        *ret_conv = CResult_CVec_u8ZPeerHandleErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_CVec_u8ZPeerHandleErrorZ_is_ok(uint32_t o) {
+       LDKCResult_CVec_u8ZPeerHandleErrorZ* o_conv = (LDKCResult_CVec_u8ZPeerHandleErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_CVec_u8ZPeerHandleErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_CVec_u8ZPeerHandleErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12042,6 +13287,17 @@ void  __attribute__((visibility("default"))) TS_CResult_CVec_u8ZPeerHandleErrorZ
        CResult_CVec_u8ZPeerHandleErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_CVec_u8ZPeerHandleErrorZ_clone_ptr(LDKCResult_CVec_u8ZPeerHandleErrorZ *NONNULL_PTR arg) {
+       LDKCResult_CVec_u8ZPeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_u8ZPeerHandleErrorZ), "LDKCResult_CVec_u8ZPeerHandleErrorZ");
+       *ret_conv = CResult_CVec_u8ZPeerHandleErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_CVec_u8ZPeerHandleErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_CVec_u8ZPeerHandleErrorZ* arg_conv = (LDKCResult_CVec_u8ZPeerHandleErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_CVec_u8ZPeerHandleErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_CVec_u8ZPeerHandleErrorZ_clone(uint32_t orig) {
        LDKCResult_CVec_u8ZPeerHandleErrorZ* orig_conv = (LDKCResult_CVec_u8ZPeerHandleErrorZ*)(orig & ~1);
        LDKCResult_CVec_u8ZPeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_u8ZPeerHandleErrorZ), "LDKCResult_CVec_u8ZPeerHandleErrorZ");
@@ -12059,12 +13315,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_NonePeerHandleErrorZ
        LDKPeerHandleError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = PeerHandleError_clone(&e_conv);
        LDKCResult_NonePeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NonePeerHandleErrorZ), "LDKCResult_NonePeerHandleErrorZ");
        *ret_conv = CResult_NonePeerHandleErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_NonePeerHandleErrorZ_is_ok(uint32_t o) {
+       LDKCResult_NonePeerHandleErrorZ* o_conv = (LDKCResult_NonePeerHandleErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_NonePeerHandleErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_NonePeerHandleErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12074,6 +13337,17 @@ void  __attribute__((visibility("default"))) TS_CResult_NonePeerHandleErrorZ_fre
        CResult_NonePeerHandleErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_NonePeerHandleErrorZ_clone_ptr(LDKCResult_NonePeerHandleErrorZ *NONNULL_PTR arg) {
+       LDKCResult_NonePeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NonePeerHandleErrorZ), "LDKCResult_NonePeerHandleErrorZ");
+       *ret_conv = CResult_NonePeerHandleErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_NonePeerHandleErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_NonePeerHandleErrorZ* arg_conv = (LDKCResult_NonePeerHandleErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_NonePeerHandleErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_NonePeerHandleErrorZ_clone(uint32_t orig) {
        LDKCResult_NonePeerHandleErrorZ* orig_conv = (LDKCResult_NonePeerHandleErrorZ*)(orig & ~1);
        LDKCResult_NonePeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NonePeerHandleErrorZ), "LDKCResult_NonePeerHandleErrorZ");
@@ -12091,12 +13365,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_boolPeerHandleErrorZ
        LDKPeerHandleError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = PeerHandleError_clone(&e_conv);
        LDKCResult_boolPeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_boolPeerHandleErrorZ), "LDKCResult_boolPeerHandleErrorZ");
        *ret_conv = CResult_boolPeerHandleErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_boolPeerHandleErrorZ_is_ok(uint32_t o) {
+       LDKCResult_boolPeerHandleErrorZ* o_conv = (LDKCResult_boolPeerHandleErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_boolPeerHandleErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_boolPeerHandleErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12106,6 +13387,17 @@ void  __attribute__((visibility("default"))) TS_CResult_boolPeerHandleErrorZ_fre
        CResult_boolPeerHandleErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_boolPeerHandleErrorZ_clone_ptr(LDKCResult_boolPeerHandleErrorZ *NONNULL_PTR arg) {
+       LDKCResult_boolPeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_boolPeerHandleErrorZ), "LDKCResult_boolPeerHandleErrorZ");
+       *ret_conv = CResult_boolPeerHandleErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_boolPeerHandleErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_boolPeerHandleErrorZ* arg_conv = (LDKCResult_boolPeerHandleErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_boolPeerHandleErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_boolPeerHandleErrorZ_clone(uint32_t orig) {
        LDKCResult_boolPeerHandleErrorZ* orig_conv = (LDKCResult_boolPeerHandleErrorZ*)(orig & ~1);
        LDKCResult_boolPeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_boolPeerHandleErrorZ), "LDKCResult_boolPeerHandleErrorZ");
@@ -12117,6 +13409,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_NodeIdDecodeErrorZ_o
        LDKNodeId o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = NodeId_clone(&o_conv);
        LDKCResult_NodeIdDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeIdDecodeErrorZ), "LDKCResult_NodeIdDecodeErrorZ");
        *ret_conv = CResult_NodeIdDecodeErrorZ_ok(o_conv);
@@ -12127,25 +13420,97 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_NodeIdDecodeErrorZ_e
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
+       e_conv = DecodeError_clone(&e_conv);
+       LDKCResult_NodeIdDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeIdDecodeErrorZ), "LDKCResult_NodeIdDecodeErrorZ");
+       *ret_conv = CResult_NodeIdDecodeErrorZ_err(e_conv);
+       return (uint64_t)ret_conv;
+}
+
+jboolean  __attribute__((visibility("default"))) TS_CResult_NodeIdDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_NodeIdDecodeErrorZ* o_conv = (LDKCResult_NodeIdDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_NodeIdDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
+void  __attribute__((visibility("default"))) TS_CResult_NodeIdDecodeErrorZ_free(uint32_t _res) {
+       if ((_res & 1) != 0) return;
+       void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_NodeIdDecodeErrorZ _res_conv = *(LDKCResult_NodeIdDecodeErrorZ*)(_res_ptr);
+       FREE((void*)_res);
+       CResult_NodeIdDecodeErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_NodeIdDecodeErrorZ_clone_ptr(LDKCResult_NodeIdDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_NodeIdDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeIdDecodeErrorZ), "LDKCResult_NodeIdDecodeErrorZ");
+       *ret_conv = CResult_NodeIdDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_NodeIdDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_NodeIdDecodeErrorZ* arg_conv = (LDKCResult_NodeIdDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_NodeIdDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
+uint32_t  __attribute__((visibility("default"))) TS_CResult_NodeIdDecodeErrorZ_clone(uint32_t orig) {
+       LDKCResult_NodeIdDecodeErrorZ* orig_conv = (LDKCResult_NodeIdDecodeErrorZ*)(orig & ~1);
+       LDKCResult_NodeIdDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeIdDecodeErrorZ), "LDKCResult_NodeIdDecodeErrorZ");
+       *ret_conv = CResult_NodeIdDecodeErrorZ_clone(orig_conv);
+       return (uint64_t)ret_conv;
+}
+
+uint32_t  __attribute__((visibility("default"))) TS_CResult_COption_NetworkUpdateZDecodeErrorZ_ok(uint32_t o) {
+       void* o_ptr = (void*)(((uint64_t)o) & ~1);
+       CHECK_ACCESS(o_ptr);
+       LDKCOption_NetworkUpdateZ o_conv = *(LDKCOption_NetworkUpdateZ*)(o_ptr);
+       o_conv = COption_NetworkUpdateZ_clone((LDKCOption_NetworkUpdateZ*)(((uint64_t)o) & ~1));
+       LDKCResult_COption_NetworkUpdateZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_NetworkUpdateZDecodeErrorZ), "LDKCResult_COption_NetworkUpdateZDecodeErrorZ");
+       *ret_conv = CResult_COption_NetworkUpdateZDecodeErrorZ_ok(o_conv);
+       return (uint64_t)ret_conv;
+}
+
+uint32_t  __attribute__((visibility("default"))) TS_CResult_COption_NetworkUpdateZDecodeErrorZ_err(uint32_t e) {
+       LDKDecodeError e_conv;
+       e_conv.inner = (void*)(e & (~1));
+       e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
-       LDKCResult_NodeIdDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeIdDecodeErrorZ), "LDKCResult_NodeIdDecodeErrorZ");
-       *ret_conv = CResult_NodeIdDecodeErrorZ_err(e_conv);
+       LDKCResult_COption_NetworkUpdateZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_NetworkUpdateZDecodeErrorZ), "LDKCResult_COption_NetworkUpdateZDecodeErrorZ");
+       *ret_conv = CResult_COption_NetworkUpdateZDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
-void  __attribute__((visibility("default"))) TS_CResult_NodeIdDecodeErrorZ_free(uint32_t _res) {
+jboolean  __attribute__((visibility("default"))) TS_CResult_COption_NetworkUpdateZDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_COption_NetworkUpdateZDecodeErrorZ* o_conv = (LDKCResult_COption_NetworkUpdateZDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_COption_NetworkUpdateZDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
+void  __attribute__((visibility("default"))) TS_CResult_COption_NetworkUpdateZDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_NodeIdDecodeErrorZ _res_conv = *(LDKCResult_NodeIdDecodeErrorZ*)(_res_ptr);
+       LDKCResult_COption_NetworkUpdateZDecodeErrorZ _res_conv = *(LDKCResult_COption_NetworkUpdateZDecodeErrorZ*)(_res_ptr);
        FREE((void*)_res);
-       CResult_NodeIdDecodeErrorZ_free(_res_conv);
+       CResult_COption_NetworkUpdateZDecodeErrorZ_free(_res_conv);
 }
 
-uint32_t  __attribute__((visibility("default"))) TS_CResult_NodeIdDecodeErrorZ_clone(uint32_t orig) {
-       LDKCResult_NodeIdDecodeErrorZ* orig_conv = (LDKCResult_NodeIdDecodeErrorZ*)(orig & ~1);
-       LDKCResult_NodeIdDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeIdDecodeErrorZ), "LDKCResult_NodeIdDecodeErrorZ");
-       *ret_conv = CResult_NodeIdDecodeErrorZ_clone(orig_conv);
+static inline uint64_t CResult_COption_NetworkUpdateZDecodeErrorZ_clone_ptr(LDKCResult_COption_NetworkUpdateZDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_COption_NetworkUpdateZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_NetworkUpdateZDecodeErrorZ), "LDKCResult_COption_NetworkUpdateZDecodeErrorZ");
+       *ret_conv = CResult_COption_NetworkUpdateZDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_COption_NetworkUpdateZDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_COption_NetworkUpdateZDecodeErrorZ* arg_conv = (LDKCResult_COption_NetworkUpdateZDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_COption_NetworkUpdateZDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
+uint32_t  __attribute__((visibility("default"))) TS_CResult_COption_NetworkUpdateZDecodeErrorZ_clone(uint32_t orig) {
+       LDKCResult_COption_NetworkUpdateZDecodeErrorZ* orig_conv = (LDKCResult_COption_NetworkUpdateZDecodeErrorZ*)(orig & ~1);
+       LDKCResult_COption_NetworkUpdateZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_NetworkUpdateZDecodeErrorZ), "LDKCResult_COption_NetworkUpdateZDecodeErrorZ");
+       *ret_conv = CResult_COption_NetworkUpdateZDecodeErrorZ_clone(orig_conv);
        return (uint64_t)ret_conv;
 }
 
@@ -12179,6 +13544,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_DirectionalChannelIn
        LDKDirectionalChannelInfo o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = DirectionalChannelInfo_clone(&o_conv);
        LDKCResult_DirectionalChannelInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_DirectionalChannelInfoDecodeErrorZ), "LDKCResult_DirectionalChannelInfoDecodeErrorZ");
        *ret_conv = CResult_DirectionalChannelInfoDecodeErrorZ_ok(o_conv);
@@ -12189,12 +13555,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_DirectionalChannelIn
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_DirectionalChannelInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_DirectionalChannelInfoDecodeErrorZ), "LDKCResult_DirectionalChannelInfoDecodeErrorZ");
        *ret_conv = CResult_DirectionalChannelInfoDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_DirectionalChannelInfoDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_DirectionalChannelInfoDecodeErrorZ* o_conv = (LDKCResult_DirectionalChannelInfoDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_DirectionalChannelInfoDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_DirectionalChannelInfoDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12204,6 +13577,17 @@ void  __attribute__((visibility("default"))) TS_CResult_DirectionalChannelInfoDe
        CResult_DirectionalChannelInfoDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_DirectionalChannelInfoDecodeErrorZ_clone_ptr(LDKCResult_DirectionalChannelInfoDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_DirectionalChannelInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_DirectionalChannelInfoDecodeErrorZ), "LDKCResult_DirectionalChannelInfoDecodeErrorZ");
+       *ret_conv = CResult_DirectionalChannelInfoDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_DirectionalChannelInfoDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_DirectionalChannelInfoDecodeErrorZ* arg_conv = (LDKCResult_DirectionalChannelInfoDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_DirectionalChannelInfoDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_DirectionalChannelInfoDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_DirectionalChannelInfoDecodeErrorZ* orig_conv = (LDKCResult_DirectionalChannelInfoDecodeErrorZ*)(orig & ~1);
        LDKCResult_DirectionalChannelInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_DirectionalChannelInfoDecodeErrorZ), "LDKCResult_DirectionalChannelInfoDecodeErrorZ");
@@ -12215,6 +13599,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ChannelInfoDecodeErr
        LDKChannelInfo o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ChannelInfo_clone(&o_conv);
        LDKCResult_ChannelInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelInfoDecodeErrorZ), "LDKCResult_ChannelInfoDecodeErrorZ");
        *ret_conv = CResult_ChannelInfoDecodeErrorZ_ok(o_conv);
@@ -12225,12 +13610,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ChannelInfoDecodeErr
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ChannelInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelInfoDecodeErrorZ), "LDKCResult_ChannelInfoDecodeErrorZ");
        *ret_conv = CResult_ChannelInfoDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_ChannelInfoDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_ChannelInfoDecodeErrorZ* o_conv = (LDKCResult_ChannelInfoDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ChannelInfoDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_ChannelInfoDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12240,6 +13632,17 @@ void  __attribute__((visibility("default"))) TS_CResult_ChannelInfoDecodeErrorZ_
        CResult_ChannelInfoDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ChannelInfoDecodeErrorZ_clone_ptr(LDKCResult_ChannelInfoDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ChannelInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelInfoDecodeErrorZ), "LDKCResult_ChannelInfoDecodeErrorZ");
+       *ret_conv = CResult_ChannelInfoDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_ChannelInfoDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_ChannelInfoDecodeErrorZ* arg_conv = (LDKCResult_ChannelInfoDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ChannelInfoDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_ChannelInfoDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_ChannelInfoDecodeErrorZ* orig_conv = (LDKCResult_ChannelInfoDecodeErrorZ*)(orig & ~1);
        LDKCResult_ChannelInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelInfoDecodeErrorZ), "LDKCResult_ChannelInfoDecodeErrorZ");
@@ -12251,6 +13654,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_RoutingFeesDecodeErr
        LDKRoutingFees o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = RoutingFees_clone(&o_conv);
        LDKCResult_RoutingFeesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RoutingFeesDecodeErrorZ), "LDKCResult_RoutingFeesDecodeErrorZ");
        *ret_conv = CResult_RoutingFeesDecodeErrorZ_ok(o_conv);
@@ -12261,12 +13665,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_RoutingFeesDecodeErr
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_RoutingFeesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RoutingFeesDecodeErrorZ), "LDKCResult_RoutingFeesDecodeErrorZ");
        *ret_conv = CResult_RoutingFeesDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_RoutingFeesDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_RoutingFeesDecodeErrorZ* o_conv = (LDKCResult_RoutingFeesDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_RoutingFeesDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_RoutingFeesDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12276,6 +13687,17 @@ void  __attribute__((visibility("default"))) TS_CResult_RoutingFeesDecodeErrorZ_
        CResult_RoutingFeesDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_RoutingFeesDecodeErrorZ_clone_ptr(LDKCResult_RoutingFeesDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_RoutingFeesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RoutingFeesDecodeErrorZ), "LDKCResult_RoutingFeesDecodeErrorZ");
+       *ret_conv = CResult_RoutingFeesDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_RoutingFeesDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_RoutingFeesDecodeErrorZ* arg_conv = (LDKCResult_RoutingFeesDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_RoutingFeesDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_RoutingFeesDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_RoutingFeesDecodeErrorZ* orig_conv = (LDKCResult_RoutingFeesDecodeErrorZ*)(orig & ~1);
        LDKCResult_RoutingFeesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RoutingFeesDecodeErrorZ), "LDKCResult_RoutingFeesDecodeErrorZ");
@@ -12287,6 +13709,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_NodeAnnouncementInfo
        LDKNodeAnnouncementInfo o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = NodeAnnouncementInfo_clone(&o_conv);
        LDKCResult_NodeAnnouncementInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeAnnouncementInfoDecodeErrorZ), "LDKCResult_NodeAnnouncementInfoDecodeErrorZ");
        *ret_conv = CResult_NodeAnnouncementInfoDecodeErrorZ_ok(o_conv);
@@ -12297,12 +13720,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_NodeAnnouncementInfo
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_NodeAnnouncementInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeAnnouncementInfoDecodeErrorZ), "LDKCResult_NodeAnnouncementInfoDecodeErrorZ");
        *ret_conv = CResult_NodeAnnouncementInfoDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_NodeAnnouncementInfoDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_NodeAnnouncementInfoDecodeErrorZ* o_conv = (LDKCResult_NodeAnnouncementInfoDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_NodeAnnouncementInfoDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_NodeAnnouncementInfoDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12312,6 +13742,17 @@ void  __attribute__((visibility("default"))) TS_CResult_NodeAnnouncementInfoDeco
        CResult_NodeAnnouncementInfoDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_NodeAnnouncementInfoDecodeErrorZ_clone_ptr(LDKCResult_NodeAnnouncementInfoDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_NodeAnnouncementInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeAnnouncementInfoDecodeErrorZ), "LDKCResult_NodeAnnouncementInfoDecodeErrorZ");
+       *ret_conv = CResult_NodeAnnouncementInfoDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_NodeAnnouncementInfoDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_NodeAnnouncementInfoDecodeErrorZ* arg_conv = (LDKCResult_NodeAnnouncementInfoDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_NodeAnnouncementInfoDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_NodeAnnouncementInfoDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_NodeAnnouncementInfoDecodeErrorZ* orig_conv = (LDKCResult_NodeAnnouncementInfoDecodeErrorZ*)(orig & ~1);
        LDKCResult_NodeAnnouncementInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeAnnouncementInfoDecodeErrorZ), "LDKCResult_NodeAnnouncementInfoDecodeErrorZ");
@@ -12338,6 +13779,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_NodeInfoDecodeErrorZ
        LDKNodeInfo o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = NodeInfo_clone(&o_conv);
        LDKCResult_NodeInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeInfoDecodeErrorZ), "LDKCResult_NodeInfoDecodeErrorZ");
        *ret_conv = CResult_NodeInfoDecodeErrorZ_ok(o_conv);
@@ -12348,12 +13790,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_NodeInfoDecodeErrorZ
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_NodeInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeInfoDecodeErrorZ), "LDKCResult_NodeInfoDecodeErrorZ");
        *ret_conv = CResult_NodeInfoDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_NodeInfoDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_NodeInfoDecodeErrorZ* o_conv = (LDKCResult_NodeInfoDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_NodeInfoDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_NodeInfoDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12363,6 +13812,17 @@ void  __attribute__((visibility("default"))) TS_CResult_NodeInfoDecodeErrorZ_fre
        CResult_NodeInfoDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_NodeInfoDecodeErrorZ_clone_ptr(LDKCResult_NodeInfoDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_NodeInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeInfoDecodeErrorZ), "LDKCResult_NodeInfoDecodeErrorZ");
+       *ret_conv = CResult_NodeInfoDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_NodeInfoDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_NodeInfoDecodeErrorZ* arg_conv = (LDKCResult_NodeInfoDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_NodeInfoDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_NodeInfoDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_NodeInfoDecodeErrorZ* orig_conv = (LDKCResult_NodeInfoDecodeErrorZ*)(orig & ~1);
        LDKCResult_NodeInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeInfoDecodeErrorZ), "LDKCResult_NodeInfoDecodeErrorZ");
@@ -12374,6 +13834,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_NetworkGraphDecodeEr
        LDKNetworkGraph o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = NetworkGraph_clone(&o_conv);
        LDKCResult_NetworkGraphDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NetworkGraphDecodeErrorZ), "LDKCResult_NetworkGraphDecodeErrorZ");
        *ret_conv = CResult_NetworkGraphDecodeErrorZ_ok(o_conv);
@@ -12384,12 +13845,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_NetworkGraphDecodeEr
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_NetworkGraphDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NetworkGraphDecodeErrorZ), "LDKCResult_NetworkGraphDecodeErrorZ");
        *ret_conv = CResult_NetworkGraphDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_NetworkGraphDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_NetworkGraphDecodeErrorZ* o_conv = (LDKCResult_NetworkGraphDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_NetworkGraphDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_NetworkGraphDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12399,6 +13867,17 @@ void  __attribute__((visibility("default"))) TS_CResult_NetworkGraphDecodeErrorZ
        CResult_NetworkGraphDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_NetworkGraphDecodeErrorZ_clone_ptr(LDKCResult_NetworkGraphDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_NetworkGraphDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NetworkGraphDecodeErrorZ), "LDKCResult_NetworkGraphDecodeErrorZ");
+       *ret_conv = CResult_NetworkGraphDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_NetworkGraphDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_NetworkGraphDecodeErrorZ* arg_conv = (LDKCResult_NetworkGraphDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_NetworkGraphDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_NetworkGraphDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_NetworkGraphDecodeErrorZ* orig_conv = (LDKCResult_NetworkGraphDecodeErrorZ*)(orig & ~1);
        LDKCResult_NetworkGraphDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NetworkGraphDecodeErrorZ), "LDKCResult_NetworkGraphDecodeErrorZ");
@@ -12444,6 +13923,18 @@ void  __attribute__((visibility("default"))) TS_COption_CVec_NetAddressZZ_free(u
        COption_CVec_NetAddressZZ_free(_res_conv);
 }
 
+static inline uint64_t COption_CVec_NetAddressZZ_clone_ptr(LDKCOption_CVec_NetAddressZZ *NONNULL_PTR arg) {
+       LDKCOption_CVec_NetAddressZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_NetAddressZZ), "LDKCOption_CVec_NetAddressZZ");
+       *ret_copy = COption_CVec_NetAddressZZ_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_COption_CVec_NetAddressZZ_clone_ptr(uint32_t arg) {
+       LDKCOption_CVec_NetAddressZZ* arg_conv = (LDKCOption_CVec_NetAddressZZ*)arg;
+       int64_t ret_val = COption_CVec_NetAddressZZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_COption_CVec_NetAddressZZ_clone(uint32_t orig) {
        LDKCOption_CVec_NetAddressZZ* orig_conv = (LDKCOption_CVec_NetAddressZZ*)orig;
        LDKCOption_CVec_NetAddressZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_NetAddressZZ), "LDKCOption_CVec_NetAddressZZ");
@@ -12466,12 +13957,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_NetAddressDecodeErro
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_NetAddressDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NetAddressDecodeErrorZ), "LDKCResult_NetAddressDecodeErrorZ");
        *ret_conv = CResult_NetAddressDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_NetAddressDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_NetAddressDecodeErrorZ* o_conv = (LDKCResult_NetAddressDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_NetAddressDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_NetAddressDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12481,6 +13979,17 @@ void  __attribute__((visibility("default"))) TS_CResult_NetAddressDecodeErrorZ_f
        CResult_NetAddressDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_NetAddressDecodeErrorZ_clone_ptr(LDKCResult_NetAddressDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_NetAddressDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NetAddressDecodeErrorZ), "LDKCResult_NetAddressDecodeErrorZ");
+       *ret_conv = CResult_NetAddressDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_NetAddressDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_NetAddressDecodeErrorZ* arg_conv = (LDKCResult_NetAddressDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_NetAddressDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_NetAddressDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_NetAddressDecodeErrorZ* orig_conv = (LDKCResult_NetAddressDecodeErrorZ*)(orig & ~1);
        LDKCResult_NetAddressDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NetAddressDecodeErrorZ), "LDKCResult_NetAddressDecodeErrorZ");
@@ -12501,6 +14010,7 @@ void  __attribute__((visibility("default"))) TS_CVec_UpdateAddHTLCZ_free(uint32_
                LDKUpdateAddHTLC _res_conv_15_conv;
                _res_conv_15_conv.inner = (void*)(_res_conv_15 & (~1));
                _res_conv_15_conv.is_owned = (_res_conv_15 & 1) || (_res_conv_15 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_15_conv);
                _res_constr.data[p] = _res_conv_15_conv;
        }
        CVec_UpdateAddHTLCZ_free(_res_constr);
@@ -12519,6 +14029,7 @@ void  __attribute__((visibility("default"))) TS_CVec_UpdateFulfillHTLCZ_free(uin
                LDKUpdateFulfillHTLC _res_conv_19_conv;
                _res_conv_19_conv.inner = (void*)(_res_conv_19 & (~1));
                _res_conv_19_conv.is_owned = (_res_conv_19 & 1) || (_res_conv_19 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_19_conv);
                _res_constr.data[t] = _res_conv_19_conv;
        }
        CVec_UpdateFulfillHTLCZ_free(_res_constr);
@@ -12537,6 +14048,7 @@ void  __attribute__((visibility("default"))) TS_CVec_UpdateFailHTLCZ_free(uint32
                LDKUpdateFailHTLC _res_conv_16_conv;
                _res_conv_16_conv.inner = (void*)(_res_conv_16 & (~1));
                _res_conv_16_conv.is_owned = (_res_conv_16 & 1) || (_res_conv_16 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_16_conv);
                _res_constr.data[q] = _res_conv_16_conv;
        }
        CVec_UpdateFailHTLCZ_free(_res_constr);
@@ -12555,6 +14067,7 @@ void  __attribute__((visibility("default"))) TS_CVec_UpdateFailMalformedHTLCZ_fr
                LDKUpdateFailMalformedHTLC _res_conv_25_conv;
                _res_conv_25_conv.inner = (void*)(_res_conv_25 & (~1));
                _res_conv_25_conv.is_owned = (_res_conv_25 & 1) || (_res_conv_25 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_25_conv);
                _res_constr.data[z] = _res_conv_25_conv;
        }
        CVec_UpdateFailMalformedHTLCZ_free(_res_constr);
@@ -12564,6 +14077,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_AcceptChannelDecodeE
        LDKAcceptChannel o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = AcceptChannel_clone(&o_conv);
        LDKCResult_AcceptChannelDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_AcceptChannelDecodeErrorZ), "LDKCResult_AcceptChannelDecodeErrorZ");
        *ret_conv = CResult_AcceptChannelDecodeErrorZ_ok(o_conv);
@@ -12574,12 +14088,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_AcceptChannelDecodeE
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_AcceptChannelDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_AcceptChannelDecodeErrorZ), "LDKCResult_AcceptChannelDecodeErrorZ");
        *ret_conv = CResult_AcceptChannelDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_AcceptChannelDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_AcceptChannelDecodeErrorZ* o_conv = (LDKCResult_AcceptChannelDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_AcceptChannelDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_AcceptChannelDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12589,6 +14110,17 @@ void  __attribute__((visibility("default"))) TS_CResult_AcceptChannelDecodeError
        CResult_AcceptChannelDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_AcceptChannelDecodeErrorZ_clone_ptr(LDKCResult_AcceptChannelDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_AcceptChannelDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_AcceptChannelDecodeErrorZ), "LDKCResult_AcceptChannelDecodeErrorZ");
+       *ret_conv = CResult_AcceptChannelDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_AcceptChannelDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_AcceptChannelDecodeErrorZ* arg_conv = (LDKCResult_AcceptChannelDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_AcceptChannelDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_AcceptChannelDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_AcceptChannelDecodeErrorZ* orig_conv = (LDKCResult_AcceptChannelDecodeErrorZ*)(orig & ~1);
        LDKCResult_AcceptChannelDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_AcceptChannelDecodeErrorZ), "LDKCResult_AcceptChannelDecodeErrorZ");
@@ -12600,6 +14132,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_AnnouncementSignatur
        LDKAnnouncementSignatures o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = AnnouncementSignatures_clone(&o_conv);
        LDKCResult_AnnouncementSignaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_AnnouncementSignaturesDecodeErrorZ), "LDKCResult_AnnouncementSignaturesDecodeErrorZ");
        *ret_conv = CResult_AnnouncementSignaturesDecodeErrorZ_ok(o_conv);
@@ -12610,12 +14143,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_AnnouncementSignatur
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_AnnouncementSignaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_AnnouncementSignaturesDecodeErrorZ), "LDKCResult_AnnouncementSignaturesDecodeErrorZ");
        *ret_conv = CResult_AnnouncementSignaturesDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_AnnouncementSignaturesDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_AnnouncementSignaturesDecodeErrorZ* o_conv = (LDKCResult_AnnouncementSignaturesDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_AnnouncementSignaturesDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_AnnouncementSignaturesDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12625,6 +14165,17 @@ void  __attribute__((visibility("default"))) TS_CResult_AnnouncementSignaturesDe
        CResult_AnnouncementSignaturesDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_AnnouncementSignaturesDecodeErrorZ_clone_ptr(LDKCResult_AnnouncementSignaturesDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_AnnouncementSignaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_AnnouncementSignaturesDecodeErrorZ), "LDKCResult_AnnouncementSignaturesDecodeErrorZ");
+       *ret_conv = CResult_AnnouncementSignaturesDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_AnnouncementSignaturesDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_AnnouncementSignaturesDecodeErrorZ* arg_conv = (LDKCResult_AnnouncementSignaturesDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_AnnouncementSignaturesDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_AnnouncementSignaturesDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_AnnouncementSignaturesDecodeErrorZ* orig_conv = (LDKCResult_AnnouncementSignaturesDecodeErrorZ*)(orig & ~1);
        LDKCResult_AnnouncementSignaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_AnnouncementSignaturesDecodeErrorZ), "LDKCResult_AnnouncementSignaturesDecodeErrorZ");
@@ -12636,6 +14187,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ChannelReestablishDe
        LDKChannelReestablish o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ChannelReestablish_clone(&o_conv);
        LDKCResult_ChannelReestablishDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelReestablishDecodeErrorZ), "LDKCResult_ChannelReestablishDecodeErrorZ");
        *ret_conv = CResult_ChannelReestablishDecodeErrorZ_ok(o_conv);
@@ -12646,12 +14198,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ChannelReestablishDe
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ChannelReestablishDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelReestablishDecodeErrorZ), "LDKCResult_ChannelReestablishDecodeErrorZ");
        *ret_conv = CResult_ChannelReestablishDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_ChannelReestablishDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_ChannelReestablishDecodeErrorZ* o_conv = (LDKCResult_ChannelReestablishDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ChannelReestablishDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_ChannelReestablishDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12661,6 +14220,17 @@ void  __attribute__((visibility("default"))) TS_CResult_ChannelReestablishDecode
        CResult_ChannelReestablishDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ChannelReestablishDecodeErrorZ_clone_ptr(LDKCResult_ChannelReestablishDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ChannelReestablishDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelReestablishDecodeErrorZ), "LDKCResult_ChannelReestablishDecodeErrorZ");
+       *ret_conv = CResult_ChannelReestablishDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_ChannelReestablishDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_ChannelReestablishDecodeErrorZ* arg_conv = (LDKCResult_ChannelReestablishDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ChannelReestablishDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_ChannelReestablishDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_ChannelReestablishDecodeErrorZ* orig_conv = (LDKCResult_ChannelReestablishDecodeErrorZ*)(orig & ~1);
        LDKCResult_ChannelReestablishDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelReestablishDecodeErrorZ), "LDKCResult_ChannelReestablishDecodeErrorZ");
@@ -12672,6 +14242,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ClosingSignedDecodeE
        LDKClosingSigned o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ClosingSigned_clone(&o_conv);
        LDKCResult_ClosingSignedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ClosingSignedDecodeErrorZ), "LDKCResult_ClosingSignedDecodeErrorZ");
        *ret_conv = CResult_ClosingSignedDecodeErrorZ_ok(o_conv);
@@ -12682,12 +14253,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ClosingSignedDecodeE
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ClosingSignedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ClosingSignedDecodeErrorZ), "LDKCResult_ClosingSignedDecodeErrorZ");
        *ret_conv = CResult_ClosingSignedDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_ClosingSignedDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_ClosingSignedDecodeErrorZ* o_conv = (LDKCResult_ClosingSignedDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ClosingSignedDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_ClosingSignedDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12697,6 +14275,17 @@ void  __attribute__((visibility("default"))) TS_CResult_ClosingSignedDecodeError
        CResult_ClosingSignedDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ClosingSignedDecodeErrorZ_clone_ptr(LDKCResult_ClosingSignedDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ClosingSignedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ClosingSignedDecodeErrorZ), "LDKCResult_ClosingSignedDecodeErrorZ");
+       *ret_conv = CResult_ClosingSignedDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_ClosingSignedDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_ClosingSignedDecodeErrorZ* arg_conv = (LDKCResult_ClosingSignedDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ClosingSignedDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_ClosingSignedDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_ClosingSignedDecodeErrorZ* orig_conv = (LDKCResult_ClosingSignedDecodeErrorZ*)(orig & ~1);
        LDKCResult_ClosingSignedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ClosingSignedDecodeErrorZ), "LDKCResult_ClosingSignedDecodeErrorZ");
@@ -12708,6 +14297,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ClosingSignedFeeRang
        LDKClosingSignedFeeRange o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ClosingSignedFeeRange_clone(&o_conv);
        LDKCResult_ClosingSignedFeeRangeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ClosingSignedFeeRangeDecodeErrorZ), "LDKCResult_ClosingSignedFeeRangeDecodeErrorZ");
        *ret_conv = CResult_ClosingSignedFeeRangeDecodeErrorZ_ok(o_conv);
@@ -12718,12 +14308,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ClosingSignedFeeRang
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ClosingSignedFeeRangeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ClosingSignedFeeRangeDecodeErrorZ), "LDKCResult_ClosingSignedFeeRangeDecodeErrorZ");
        *ret_conv = CResult_ClosingSignedFeeRangeDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_ClosingSignedFeeRangeDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_ClosingSignedFeeRangeDecodeErrorZ* o_conv = (LDKCResult_ClosingSignedFeeRangeDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ClosingSignedFeeRangeDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_ClosingSignedFeeRangeDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12733,6 +14330,17 @@ void  __attribute__((visibility("default"))) TS_CResult_ClosingSignedFeeRangeDec
        CResult_ClosingSignedFeeRangeDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ClosingSignedFeeRangeDecodeErrorZ_clone_ptr(LDKCResult_ClosingSignedFeeRangeDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ClosingSignedFeeRangeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ClosingSignedFeeRangeDecodeErrorZ), "LDKCResult_ClosingSignedFeeRangeDecodeErrorZ");
+       *ret_conv = CResult_ClosingSignedFeeRangeDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_ClosingSignedFeeRangeDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_ClosingSignedFeeRangeDecodeErrorZ* arg_conv = (LDKCResult_ClosingSignedFeeRangeDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ClosingSignedFeeRangeDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_ClosingSignedFeeRangeDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_ClosingSignedFeeRangeDecodeErrorZ* orig_conv = (LDKCResult_ClosingSignedFeeRangeDecodeErrorZ*)(orig & ~1);
        LDKCResult_ClosingSignedFeeRangeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ClosingSignedFeeRangeDecodeErrorZ), "LDKCResult_ClosingSignedFeeRangeDecodeErrorZ");
@@ -12744,6 +14352,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_CommitmentSignedDeco
        LDKCommitmentSigned o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = CommitmentSigned_clone(&o_conv);
        LDKCResult_CommitmentSignedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CommitmentSignedDecodeErrorZ), "LDKCResult_CommitmentSignedDecodeErrorZ");
        *ret_conv = CResult_CommitmentSignedDecodeErrorZ_ok(o_conv);
@@ -12754,12 +14363,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_CommitmentSignedDeco
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_CommitmentSignedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CommitmentSignedDecodeErrorZ), "LDKCResult_CommitmentSignedDecodeErrorZ");
        *ret_conv = CResult_CommitmentSignedDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_CommitmentSignedDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_CommitmentSignedDecodeErrorZ* o_conv = (LDKCResult_CommitmentSignedDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_CommitmentSignedDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_CommitmentSignedDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12769,6 +14385,17 @@ void  __attribute__((visibility("default"))) TS_CResult_CommitmentSignedDecodeEr
        CResult_CommitmentSignedDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_CommitmentSignedDecodeErrorZ_clone_ptr(LDKCResult_CommitmentSignedDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_CommitmentSignedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CommitmentSignedDecodeErrorZ), "LDKCResult_CommitmentSignedDecodeErrorZ");
+       *ret_conv = CResult_CommitmentSignedDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_CommitmentSignedDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_CommitmentSignedDecodeErrorZ* arg_conv = (LDKCResult_CommitmentSignedDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_CommitmentSignedDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_CommitmentSignedDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_CommitmentSignedDecodeErrorZ* orig_conv = (LDKCResult_CommitmentSignedDecodeErrorZ*)(orig & ~1);
        LDKCResult_CommitmentSignedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CommitmentSignedDecodeErrorZ), "LDKCResult_CommitmentSignedDecodeErrorZ");
@@ -12780,6 +14407,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_FundingCreatedDecode
        LDKFundingCreated o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = FundingCreated_clone(&o_conv);
        LDKCResult_FundingCreatedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FundingCreatedDecodeErrorZ), "LDKCResult_FundingCreatedDecodeErrorZ");
        *ret_conv = CResult_FundingCreatedDecodeErrorZ_ok(o_conv);
@@ -12790,12 +14418,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_FundingCreatedDecode
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_FundingCreatedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FundingCreatedDecodeErrorZ), "LDKCResult_FundingCreatedDecodeErrorZ");
        *ret_conv = CResult_FundingCreatedDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_FundingCreatedDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_FundingCreatedDecodeErrorZ* o_conv = (LDKCResult_FundingCreatedDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_FundingCreatedDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_FundingCreatedDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12805,6 +14440,17 @@ void  __attribute__((visibility("default"))) TS_CResult_FundingCreatedDecodeErro
        CResult_FundingCreatedDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_FundingCreatedDecodeErrorZ_clone_ptr(LDKCResult_FundingCreatedDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_FundingCreatedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FundingCreatedDecodeErrorZ), "LDKCResult_FundingCreatedDecodeErrorZ");
+       *ret_conv = CResult_FundingCreatedDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_FundingCreatedDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_FundingCreatedDecodeErrorZ* arg_conv = (LDKCResult_FundingCreatedDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_FundingCreatedDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_FundingCreatedDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_FundingCreatedDecodeErrorZ* orig_conv = (LDKCResult_FundingCreatedDecodeErrorZ*)(orig & ~1);
        LDKCResult_FundingCreatedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FundingCreatedDecodeErrorZ), "LDKCResult_FundingCreatedDecodeErrorZ");
@@ -12816,6 +14462,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_FundingSignedDecodeE
        LDKFundingSigned o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = FundingSigned_clone(&o_conv);
        LDKCResult_FundingSignedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FundingSignedDecodeErrorZ), "LDKCResult_FundingSignedDecodeErrorZ");
        *ret_conv = CResult_FundingSignedDecodeErrorZ_ok(o_conv);
@@ -12826,12 +14473,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_FundingSignedDecodeE
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_FundingSignedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FundingSignedDecodeErrorZ), "LDKCResult_FundingSignedDecodeErrorZ");
        *ret_conv = CResult_FundingSignedDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_FundingSignedDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_FundingSignedDecodeErrorZ* o_conv = (LDKCResult_FundingSignedDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_FundingSignedDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_FundingSignedDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12841,6 +14495,17 @@ void  __attribute__((visibility("default"))) TS_CResult_FundingSignedDecodeError
        CResult_FundingSignedDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_FundingSignedDecodeErrorZ_clone_ptr(LDKCResult_FundingSignedDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_FundingSignedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FundingSignedDecodeErrorZ), "LDKCResult_FundingSignedDecodeErrorZ");
+       *ret_conv = CResult_FundingSignedDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_FundingSignedDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_FundingSignedDecodeErrorZ* arg_conv = (LDKCResult_FundingSignedDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_FundingSignedDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_FundingSignedDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_FundingSignedDecodeErrorZ* orig_conv = (LDKCResult_FundingSignedDecodeErrorZ*)(orig & ~1);
        LDKCResult_FundingSignedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FundingSignedDecodeErrorZ), "LDKCResult_FundingSignedDecodeErrorZ");
@@ -12852,6 +14517,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_FundingLockedDecodeE
        LDKFundingLocked o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = FundingLocked_clone(&o_conv);
        LDKCResult_FundingLockedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FundingLockedDecodeErrorZ), "LDKCResult_FundingLockedDecodeErrorZ");
        *ret_conv = CResult_FundingLockedDecodeErrorZ_ok(o_conv);
@@ -12862,12 +14528,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_FundingLockedDecodeE
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_FundingLockedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FundingLockedDecodeErrorZ), "LDKCResult_FundingLockedDecodeErrorZ");
        *ret_conv = CResult_FundingLockedDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_FundingLockedDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_FundingLockedDecodeErrorZ* o_conv = (LDKCResult_FundingLockedDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_FundingLockedDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_FundingLockedDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12877,6 +14550,17 @@ void  __attribute__((visibility("default"))) TS_CResult_FundingLockedDecodeError
        CResult_FundingLockedDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_FundingLockedDecodeErrorZ_clone_ptr(LDKCResult_FundingLockedDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_FundingLockedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FundingLockedDecodeErrorZ), "LDKCResult_FundingLockedDecodeErrorZ");
+       *ret_conv = CResult_FundingLockedDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_FundingLockedDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_FundingLockedDecodeErrorZ* arg_conv = (LDKCResult_FundingLockedDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_FundingLockedDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_FundingLockedDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_FundingLockedDecodeErrorZ* orig_conv = (LDKCResult_FundingLockedDecodeErrorZ*)(orig & ~1);
        LDKCResult_FundingLockedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FundingLockedDecodeErrorZ), "LDKCResult_FundingLockedDecodeErrorZ");
@@ -12888,6 +14572,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_InitDecodeErrorZ_ok(
        LDKInit o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = Init_clone(&o_conv);
        LDKCResult_InitDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InitDecodeErrorZ), "LDKCResult_InitDecodeErrorZ");
        *ret_conv = CResult_InitDecodeErrorZ_ok(o_conv);
@@ -12898,12 +14583,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_InitDecodeErrorZ_err
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_InitDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InitDecodeErrorZ), "LDKCResult_InitDecodeErrorZ");
        *ret_conv = CResult_InitDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_InitDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_InitDecodeErrorZ* o_conv = (LDKCResult_InitDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_InitDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_InitDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12913,6 +14605,17 @@ void  __attribute__((visibility("default"))) TS_CResult_InitDecodeErrorZ_free(ui
        CResult_InitDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_InitDecodeErrorZ_clone_ptr(LDKCResult_InitDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_InitDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InitDecodeErrorZ), "LDKCResult_InitDecodeErrorZ");
+       *ret_conv = CResult_InitDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_InitDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_InitDecodeErrorZ* arg_conv = (LDKCResult_InitDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_InitDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_InitDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_InitDecodeErrorZ* orig_conv = (LDKCResult_InitDecodeErrorZ*)(orig & ~1);
        LDKCResult_InitDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InitDecodeErrorZ), "LDKCResult_InitDecodeErrorZ");
@@ -12924,6 +14627,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_OpenChannelDecodeErr
        LDKOpenChannel o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = OpenChannel_clone(&o_conv);
        LDKCResult_OpenChannelDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OpenChannelDecodeErrorZ), "LDKCResult_OpenChannelDecodeErrorZ");
        *ret_conv = CResult_OpenChannelDecodeErrorZ_ok(o_conv);
@@ -12934,12 +14638,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_OpenChannelDecodeErr
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_OpenChannelDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OpenChannelDecodeErrorZ), "LDKCResult_OpenChannelDecodeErrorZ");
        *ret_conv = CResult_OpenChannelDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_OpenChannelDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_OpenChannelDecodeErrorZ* o_conv = (LDKCResult_OpenChannelDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_OpenChannelDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_OpenChannelDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12949,6 +14660,17 @@ void  __attribute__((visibility("default"))) TS_CResult_OpenChannelDecodeErrorZ_
        CResult_OpenChannelDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_OpenChannelDecodeErrorZ_clone_ptr(LDKCResult_OpenChannelDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_OpenChannelDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OpenChannelDecodeErrorZ), "LDKCResult_OpenChannelDecodeErrorZ");
+       *ret_conv = CResult_OpenChannelDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_OpenChannelDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_OpenChannelDecodeErrorZ* arg_conv = (LDKCResult_OpenChannelDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_OpenChannelDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_OpenChannelDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_OpenChannelDecodeErrorZ* orig_conv = (LDKCResult_OpenChannelDecodeErrorZ*)(orig & ~1);
        LDKCResult_OpenChannelDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OpenChannelDecodeErrorZ), "LDKCResult_OpenChannelDecodeErrorZ");
@@ -12960,6 +14682,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_RevokeAndACKDecodeEr
        LDKRevokeAndACK o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = RevokeAndACK_clone(&o_conv);
        LDKCResult_RevokeAndACKDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RevokeAndACKDecodeErrorZ), "LDKCResult_RevokeAndACKDecodeErrorZ");
        *ret_conv = CResult_RevokeAndACKDecodeErrorZ_ok(o_conv);
@@ -12970,12 +14693,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_RevokeAndACKDecodeEr
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_RevokeAndACKDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RevokeAndACKDecodeErrorZ), "LDKCResult_RevokeAndACKDecodeErrorZ");
        *ret_conv = CResult_RevokeAndACKDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_RevokeAndACKDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_RevokeAndACKDecodeErrorZ* o_conv = (LDKCResult_RevokeAndACKDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_RevokeAndACKDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_RevokeAndACKDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12985,6 +14715,17 @@ void  __attribute__((visibility("default"))) TS_CResult_RevokeAndACKDecodeErrorZ
        CResult_RevokeAndACKDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_RevokeAndACKDecodeErrorZ_clone_ptr(LDKCResult_RevokeAndACKDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_RevokeAndACKDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RevokeAndACKDecodeErrorZ), "LDKCResult_RevokeAndACKDecodeErrorZ");
+       *ret_conv = CResult_RevokeAndACKDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_RevokeAndACKDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_RevokeAndACKDecodeErrorZ* arg_conv = (LDKCResult_RevokeAndACKDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_RevokeAndACKDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_RevokeAndACKDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_RevokeAndACKDecodeErrorZ* orig_conv = (LDKCResult_RevokeAndACKDecodeErrorZ*)(orig & ~1);
        LDKCResult_RevokeAndACKDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RevokeAndACKDecodeErrorZ), "LDKCResult_RevokeAndACKDecodeErrorZ");
@@ -12996,6 +14737,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ShutdownDecodeErrorZ
        LDKShutdown o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = Shutdown_clone(&o_conv);
        LDKCResult_ShutdownDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ShutdownDecodeErrorZ), "LDKCResult_ShutdownDecodeErrorZ");
        *ret_conv = CResult_ShutdownDecodeErrorZ_ok(o_conv);
@@ -13006,12 +14748,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ShutdownDecodeErrorZ
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ShutdownDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ShutdownDecodeErrorZ), "LDKCResult_ShutdownDecodeErrorZ");
        *ret_conv = CResult_ShutdownDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_ShutdownDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_ShutdownDecodeErrorZ* o_conv = (LDKCResult_ShutdownDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ShutdownDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_ShutdownDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13021,6 +14770,17 @@ void  __attribute__((visibility("default"))) TS_CResult_ShutdownDecodeErrorZ_fre
        CResult_ShutdownDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ShutdownDecodeErrorZ_clone_ptr(LDKCResult_ShutdownDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ShutdownDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ShutdownDecodeErrorZ), "LDKCResult_ShutdownDecodeErrorZ");
+       *ret_conv = CResult_ShutdownDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_ShutdownDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_ShutdownDecodeErrorZ* arg_conv = (LDKCResult_ShutdownDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ShutdownDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_ShutdownDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_ShutdownDecodeErrorZ* orig_conv = (LDKCResult_ShutdownDecodeErrorZ*)(orig & ~1);
        LDKCResult_ShutdownDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ShutdownDecodeErrorZ), "LDKCResult_ShutdownDecodeErrorZ");
@@ -13032,6 +14792,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_UpdateFailHTLCDecode
        LDKUpdateFailHTLC o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = UpdateFailHTLC_clone(&o_conv);
        LDKCResult_UpdateFailHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFailHTLCDecodeErrorZ), "LDKCResult_UpdateFailHTLCDecodeErrorZ");
        *ret_conv = CResult_UpdateFailHTLCDecodeErrorZ_ok(o_conv);
@@ -13042,12 +14803,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_UpdateFailHTLCDecode
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_UpdateFailHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFailHTLCDecodeErrorZ), "LDKCResult_UpdateFailHTLCDecodeErrorZ");
        *ret_conv = CResult_UpdateFailHTLCDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_UpdateFailHTLCDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_UpdateFailHTLCDecodeErrorZ* o_conv = (LDKCResult_UpdateFailHTLCDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_UpdateFailHTLCDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_UpdateFailHTLCDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13057,6 +14825,17 @@ void  __attribute__((visibility("default"))) TS_CResult_UpdateFailHTLCDecodeErro
        CResult_UpdateFailHTLCDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_UpdateFailHTLCDecodeErrorZ_clone_ptr(LDKCResult_UpdateFailHTLCDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_UpdateFailHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFailHTLCDecodeErrorZ), "LDKCResult_UpdateFailHTLCDecodeErrorZ");
+       *ret_conv = CResult_UpdateFailHTLCDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_UpdateFailHTLCDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_UpdateFailHTLCDecodeErrorZ* arg_conv = (LDKCResult_UpdateFailHTLCDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_UpdateFailHTLCDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_UpdateFailHTLCDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_UpdateFailHTLCDecodeErrorZ* orig_conv = (LDKCResult_UpdateFailHTLCDecodeErrorZ*)(orig & ~1);
        LDKCResult_UpdateFailHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFailHTLCDecodeErrorZ), "LDKCResult_UpdateFailHTLCDecodeErrorZ");
@@ -13068,6 +14847,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_UpdateFailMalformedH
        LDKUpdateFailMalformedHTLC o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = UpdateFailMalformedHTLC_clone(&o_conv);
        LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ), "LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ");
        *ret_conv = CResult_UpdateFailMalformedHTLCDecodeErrorZ_ok(o_conv);
@@ -13078,12 +14858,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_UpdateFailMalformedH
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ), "LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ");
        *ret_conv = CResult_UpdateFailMalformedHTLCDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_UpdateFailMalformedHTLCDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ* o_conv = (LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_UpdateFailMalformedHTLCDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_UpdateFailMalformedHTLCDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13093,6 +14880,17 @@ void  __attribute__((visibility("default"))) TS_CResult_UpdateFailMalformedHTLCD
        CResult_UpdateFailMalformedHTLCDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_UpdateFailMalformedHTLCDecodeErrorZ_clone_ptr(LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ), "LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ");
+       *ret_conv = CResult_UpdateFailMalformedHTLCDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_UpdateFailMalformedHTLCDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ* arg_conv = (LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_UpdateFailMalformedHTLCDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_UpdateFailMalformedHTLCDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ* orig_conv = (LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ*)(orig & ~1);
        LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ), "LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ");
@@ -13104,6 +14902,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_UpdateFeeDecodeError
        LDKUpdateFee o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = UpdateFee_clone(&o_conv);
        LDKCResult_UpdateFeeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFeeDecodeErrorZ), "LDKCResult_UpdateFeeDecodeErrorZ");
        *ret_conv = CResult_UpdateFeeDecodeErrorZ_ok(o_conv);
@@ -13114,12 +14913,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_UpdateFeeDecodeError
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_UpdateFeeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFeeDecodeErrorZ), "LDKCResult_UpdateFeeDecodeErrorZ");
        *ret_conv = CResult_UpdateFeeDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_UpdateFeeDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_UpdateFeeDecodeErrorZ* o_conv = (LDKCResult_UpdateFeeDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_UpdateFeeDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_UpdateFeeDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13129,6 +14935,17 @@ void  __attribute__((visibility("default"))) TS_CResult_UpdateFeeDecodeErrorZ_fr
        CResult_UpdateFeeDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_UpdateFeeDecodeErrorZ_clone_ptr(LDKCResult_UpdateFeeDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_UpdateFeeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFeeDecodeErrorZ), "LDKCResult_UpdateFeeDecodeErrorZ");
+       *ret_conv = CResult_UpdateFeeDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_UpdateFeeDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_UpdateFeeDecodeErrorZ* arg_conv = (LDKCResult_UpdateFeeDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_UpdateFeeDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_UpdateFeeDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_UpdateFeeDecodeErrorZ* orig_conv = (LDKCResult_UpdateFeeDecodeErrorZ*)(orig & ~1);
        LDKCResult_UpdateFeeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFeeDecodeErrorZ), "LDKCResult_UpdateFeeDecodeErrorZ");
@@ -13140,6 +14957,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_UpdateFulfillHTLCDec
        LDKUpdateFulfillHTLC o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = UpdateFulfillHTLC_clone(&o_conv);
        LDKCResult_UpdateFulfillHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFulfillHTLCDecodeErrorZ), "LDKCResult_UpdateFulfillHTLCDecodeErrorZ");
        *ret_conv = CResult_UpdateFulfillHTLCDecodeErrorZ_ok(o_conv);
@@ -13150,12 +14968,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_UpdateFulfillHTLCDec
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_UpdateFulfillHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFulfillHTLCDecodeErrorZ), "LDKCResult_UpdateFulfillHTLCDecodeErrorZ");
        *ret_conv = CResult_UpdateFulfillHTLCDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_UpdateFulfillHTLCDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_UpdateFulfillHTLCDecodeErrorZ* o_conv = (LDKCResult_UpdateFulfillHTLCDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_UpdateFulfillHTLCDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_UpdateFulfillHTLCDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13165,6 +14990,17 @@ void  __attribute__((visibility("default"))) TS_CResult_UpdateFulfillHTLCDecodeE
        CResult_UpdateFulfillHTLCDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_UpdateFulfillHTLCDecodeErrorZ_clone_ptr(LDKCResult_UpdateFulfillHTLCDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_UpdateFulfillHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFulfillHTLCDecodeErrorZ), "LDKCResult_UpdateFulfillHTLCDecodeErrorZ");
+       *ret_conv = CResult_UpdateFulfillHTLCDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_UpdateFulfillHTLCDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_UpdateFulfillHTLCDecodeErrorZ* arg_conv = (LDKCResult_UpdateFulfillHTLCDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_UpdateFulfillHTLCDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_UpdateFulfillHTLCDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_UpdateFulfillHTLCDecodeErrorZ* orig_conv = (LDKCResult_UpdateFulfillHTLCDecodeErrorZ*)(orig & ~1);
        LDKCResult_UpdateFulfillHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFulfillHTLCDecodeErrorZ), "LDKCResult_UpdateFulfillHTLCDecodeErrorZ");
@@ -13176,6 +15012,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_UpdateAddHTLCDecodeE
        LDKUpdateAddHTLC o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = UpdateAddHTLC_clone(&o_conv);
        LDKCResult_UpdateAddHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateAddHTLCDecodeErrorZ), "LDKCResult_UpdateAddHTLCDecodeErrorZ");
        *ret_conv = CResult_UpdateAddHTLCDecodeErrorZ_ok(o_conv);
@@ -13186,12 +15023,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_UpdateAddHTLCDecodeE
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_UpdateAddHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateAddHTLCDecodeErrorZ), "LDKCResult_UpdateAddHTLCDecodeErrorZ");
        *ret_conv = CResult_UpdateAddHTLCDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_UpdateAddHTLCDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_UpdateAddHTLCDecodeErrorZ* o_conv = (LDKCResult_UpdateAddHTLCDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_UpdateAddHTLCDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_UpdateAddHTLCDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13201,6 +15045,17 @@ void  __attribute__((visibility("default"))) TS_CResult_UpdateAddHTLCDecodeError
        CResult_UpdateAddHTLCDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_UpdateAddHTLCDecodeErrorZ_clone_ptr(LDKCResult_UpdateAddHTLCDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_UpdateAddHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateAddHTLCDecodeErrorZ), "LDKCResult_UpdateAddHTLCDecodeErrorZ");
+       *ret_conv = CResult_UpdateAddHTLCDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_UpdateAddHTLCDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_UpdateAddHTLCDecodeErrorZ* arg_conv = (LDKCResult_UpdateAddHTLCDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_UpdateAddHTLCDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_UpdateAddHTLCDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_UpdateAddHTLCDecodeErrorZ* orig_conv = (LDKCResult_UpdateAddHTLCDecodeErrorZ*)(orig & ~1);
        LDKCResult_UpdateAddHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateAddHTLCDecodeErrorZ), "LDKCResult_UpdateAddHTLCDecodeErrorZ");
@@ -13212,6 +15067,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_PingDecodeErrorZ_ok(
        LDKPing o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = Ping_clone(&o_conv);
        LDKCResult_PingDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PingDecodeErrorZ), "LDKCResult_PingDecodeErrorZ");
        *ret_conv = CResult_PingDecodeErrorZ_ok(o_conv);
@@ -13222,12 +15078,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_PingDecodeErrorZ_err
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_PingDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PingDecodeErrorZ), "LDKCResult_PingDecodeErrorZ");
        *ret_conv = CResult_PingDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_PingDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_PingDecodeErrorZ* o_conv = (LDKCResult_PingDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_PingDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_PingDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13237,6 +15100,17 @@ void  __attribute__((visibility("default"))) TS_CResult_PingDecodeErrorZ_free(ui
        CResult_PingDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_PingDecodeErrorZ_clone_ptr(LDKCResult_PingDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_PingDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PingDecodeErrorZ), "LDKCResult_PingDecodeErrorZ");
+       *ret_conv = CResult_PingDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_PingDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_PingDecodeErrorZ* arg_conv = (LDKCResult_PingDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_PingDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_PingDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_PingDecodeErrorZ* orig_conv = (LDKCResult_PingDecodeErrorZ*)(orig & ~1);
        LDKCResult_PingDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PingDecodeErrorZ), "LDKCResult_PingDecodeErrorZ");
@@ -13248,6 +15122,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_PongDecodeErrorZ_ok(
        LDKPong o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = Pong_clone(&o_conv);
        LDKCResult_PongDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PongDecodeErrorZ), "LDKCResult_PongDecodeErrorZ");
        *ret_conv = CResult_PongDecodeErrorZ_ok(o_conv);
@@ -13258,12 +15133,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_PongDecodeErrorZ_err
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_PongDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PongDecodeErrorZ), "LDKCResult_PongDecodeErrorZ");
        *ret_conv = CResult_PongDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_PongDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_PongDecodeErrorZ* o_conv = (LDKCResult_PongDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_PongDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_PongDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13273,6 +15155,17 @@ void  __attribute__((visibility("default"))) TS_CResult_PongDecodeErrorZ_free(ui
        CResult_PongDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_PongDecodeErrorZ_clone_ptr(LDKCResult_PongDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_PongDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PongDecodeErrorZ), "LDKCResult_PongDecodeErrorZ");
+       *ret_conv = CResult_PongDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_PongDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_PongDecodeErrorZ* arg_conv = (LDKCResult_PongDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_PongDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_PongDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_PongDecodeErrorZ* orig_conv = (LDKCResult_PongDecodeErrorZ*)(orig & ~1);
        LDKCResult_PongDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PongDecodeErrorZ), "LDKCResult_PongDecodeErrorZ");
@@ -13284,6 +15177,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_UnsignedChannelAnnou
        LDKUnsignedChannelAnnouncement o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = UnsignedChannelAnnouncement_clone(&o_conv);
        LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ), "LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ");
        *ret_conv = CResult_UnsignedChannelAnnouncementDecodeErrorZ_ok(o_conv);
@@ -13294,12 +15188,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_UnsignedChannelAnnou
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ), "LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ");
        *ret_conv = CResult_UnsignedChannelAnnouncementDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_UnsignedChannelAnnouncementDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ* o_conv = (LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_UnsignedChannelAnnouncementDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_UnsignedChannelAnnouncementDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13309,6 +15210,17 @@ void  __attribute__((visibility("default"))) TS_CResult_UnsignedChannelAnnouncem
        CResult_UnsignedChannelAnnouncementDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_UnsignedChannelAnnouncementDecodeErrorZ_clone_ptr(LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ), "LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ");
+       *ret_conv = CResult_UnsignedChannelAnnouncementDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_UnsignedChannelAnnouncementDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ* arg_conv = (LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_UnsignedChannelAnnouncementDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_UnsignedChannelAnnouncementDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ* orig_conv = (LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ*)(orig & ~1);
        LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ), "LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ");
@@ -13320,6 +15232,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ChannelAnnouncementD
        LDKChannelAnnouncement o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ChannelAnnouncement_clone(&o_conv);
        LDKCResult_ChannelAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelAnnouncementDecodeErrorZ), "LDKCResult_ChannelAnnouncementDecodeErrorZ");
        *ret_conv = CResult_ChannelAnnouncementDecodeErrorZ_ok(o_conv);
@@ -13330,12 +15243,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ChannelAnnouncementD
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ChannelAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelAnnouncementDecodeErrorZ), "LDKCResult_ChannelAnnouncementDecodeErrorZ");
        *ret_conv = CResult_ChannelAnnouncementDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_ChannelAnnouncementDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_ChannelAnnouncementDecodeErrorZ* o_conv = (LDKCResult_ChannelAnnouncementDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ChannelAnnouncementDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_ChannelAnnouncementDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13345,6 +15265,17 @@ void  __attribute__((visibility("default"))) TS_CResult_ChannelAnnouncementDecod
        CResult_ChannelAnnouncementDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ChannelAnnouncementDecodeErrorZ_clone_ptr(LDKCResult_ChannelAnnouncementDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ChannelAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelAnnouncementDecodeErrorZ), "LDKCResult_ChannelAnnouncementDecodeErrorZ");
+       *ret_conv = CResult_ChannelAnnouncementDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_ChannelAnnouncementDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_ChannelAnnouncementDecodeErrorZ* arg_conv = (LDKCResult_ChannelAnnouncementDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ChannelAnnouncementDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_ChannelAnnouncementDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_ChannelAnnouncementDecodeErrorZ* orig_conv = (LDKCResult_ChannelAnnouncementDecodeErrorZ*)(orig & ~1);
        LDKCResult_ChannelAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelAnnouncementDecodeErrorZ), "LDKCResult_ChannelAnnouncementDecodeErrorZ");
@@ -13356,6 +15287,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_UnsignedChannelUpdat
        LDKUnsignedChannelUpdate o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = UnsignedChannelUpdate_clone(&o_conv);
        LDKCResult_UnsignedChannelUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedChannelUpdateDecodeErrorZ), "LDKCResult_UnsignedChannelUpdateDecodeErrorZ");
        *ret_conv = CResult_UnsignedChannelUpdateDecodeErrorZ_ok(o_conv);
@@ -13366,12 +15298,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_UnsignedChannelUpdat
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_UnsignedChannelUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedChannelUpdateDecodeErrorZ), "LDKCResult_UnsignedChannelUpdateDecodeErrorZ");
        *ret_conv = CResult_UnsignedChannelUpdateDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_UnsignedChannelUpdateDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_UnsignedChannelUpdateDecodeErrorZ* o_conv = (LDKCResult_UnsignedChannelUpdateDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_UnsignedChannelUpdateDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_UnsignedChannelUpdateDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13381,6 +15320,17 @@ void  __attribute__((visibility("default"))) TS_CResult_UnsignedChannelUpdateDec
        CResult_UnsignedChannelUpdateDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_UnsignedChannelUpdateDecodeErrorZ_clone_ptr(LDKCResult_UnsignedChannelUpdateDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_UnsignedChannelUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedChannelUpdateDecodeErrorZ), "LDKCResult_UnsignedChannelUpdateDecodeErrorZ");
+       *ret_conv = CResult_UnsignedChannelUpdateDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_UnsignedChannelUpdateDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_UnsignedChannelUpdateDecodeErrorZ* arg_conv = (LDKCResult_UnsignedChannelUpdateDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_UnsignedChannelUpdateDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_UnsignedChannelUpdateDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_UnsignedChannelUpdateDecodeErrorZ* orig_conv = (LDKCResult_UnsignedChannelUpdateDecodeErrorZ*)(orig & ~1);
        LDKCResult_UnsignedChannelUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedChannelUpdateDecodeErrorZ), "LDKCResult_UnsignedChannelUpdateDecodeErrorZ");
@@ -13392,6 +15342,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ChannelUpdateDecodeE
        LDKChannelUpdate o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ChannelUpdate_clone(&o_conv);
        LDKCResult_ChannelUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelUpdateDecodeErrorZ), "LDKCResult_ChannelUpdateDecodeErrorZ");
        *ret_conv = CResult_ChannelUpdateDecodeErrorZ_ok(o_conv);
@@ -13402,12 +15353,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ChannelUpdateDecodeE
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ChannelUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelUpdateDecodeErrorZ), "LDKCResult_ChannelUpdateDecodeErrorZ");
        *ret_conv = CResult_ChannelUpdateDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_ChannelUpdateDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_ChannelUpdateDecodeErrorZ* o_conv = (LDKCResult_ChannelUpdateDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ChannelUpdateDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_ChannelUpdateDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13417,6 +15375,17 @@ void  __attribute__((visibility("default"))) TS_CResult_ChannelUpdateDecodeError
        CResult_ChannelUpdateDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ChannelUpdateDecodeErrorZ_clone_ptr(LDKCResult_ChannelUpdateDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ChannelUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelUpdateDecodeErrorZ), "LDKCResult_ChannelUpdateDecodeErrorZ");
+       *ret_conv = CResult_ChannelUpdateDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_ChannelUpdateDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_ChannelUpdateDecodeErrorZ* arg_conv = (LDKCResult_ChannelUpdateDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ChannelUpdateDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_ChannelUpdateDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_ChannelUpdateDecodeErrorZ* orig_conv = (LDKCResult_ChannelUpdateDecodeErrorZ*)(orig & ~1);
        LDKCResult_ChannelUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelUpdateDecodeErrorZ), "LDKCResult_ChannelUpdateDecodeErrorZ");
@@ -13428,6 +15397,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ErrorMessageDecodeEr
        LDKErrorMessage o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ErrorMessage_clone(&o_conv);
        LDKCResult_ErrorMessageDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ErrorMessageDecodeErrorZ), "LDKCResult_ErrorMessageDecodeErrorZ");
        *ret_conv = CResult_ErrorMessageDecodeErrorZ_ok(o_conv);
@@ -13438,12 +15408,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ErrorMessageDecodeEr
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ErrorMessageDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ErrorMessageDecodeErrorZ), "LDKCResult_ErrorMessageDecodeErrorZ");
        *ret_conv = CResult_ErrorMessageDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_ErrorMessageDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_ErrorMessageDecodeErrorZ* o_conv = (LDKCResult_ErrorMessageDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ErrorMessageDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_ErrorMessageDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13453,6 +15430,17 @@ void  __attribute__((visibility("default"))) TS_CResult_ErrorMessageDecodeErrorZ
        CResult_ErrorMessageDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ErrorMessageDecodeErrorZ_clone_ptr(LDKCResult_ErrorMessageDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ErrorMessageDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ErrorMessageDecodeErrorZ), "LDKCResult_ErrorMessageDecodeErrorZ");
+       *ret_conv = CResult_ErrorMessageDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_ErrorMessageDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_ErrorMessageDecodeErrorZ* arg_conv = (LDKCResult_ErrorMessageDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ErrorMessageDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_ErrorMessageDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_ErrorMessageDecodeErrorZ* orig_conv = (LDKCResult_ErrorMessageDecodeErrorZ*)(orig & ~1);
        LDKCResult_ErrorMessageDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ErrorMessageDecodeErrorZ), "LDKCResult_ErrorMessageDecodeErrorZ");
@@ -13464,6 +15452,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_UnsignedNodeAnnounce
        LDKUnsignedNodeAnnouncement o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = UnsignedNodeAnnouncement_clone(&o_conv);
        LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ), "LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ");
        *ret_conv = CResult_UnsignedNodeAnnouncementDecodeErrorZ_ok(o_conv);
@@ -13474,12 +15463,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_UnsignedNodeAnnounce
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ), "LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ");
        *ret_conv = CResult_UnsignedNodeAnnouncementDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_UnsignedNodeAnnouncementDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ* o_conv = (LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_UnsignedNodeAnnouncementDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_UnsignedNodeAnnouncementDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13489,6 +15485,17 @@ void  __attribute__((visibility("default"))) TS_CResult_UnsignedNodeAnnouncement
        CResult_UnsignedNodeAnnouncementDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_UnsignedNodeAnnouncementDecodeErrorZ_clone_ptr(LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ), "LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ");
+       *ret_conv = CResult_UnsignedNodeAnnouncementDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_UnsignedNodeAnnouncementDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ* arg_conv = (LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_UnsignedNodeAnnouncementDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_UnsignedNodeAnnouncementDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ* orig_conv = (LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ*)(orig & ~1);
        LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ), "LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ");
@@ -13500,6 +15507,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_NodeAnnouncementDeco
        LDKNodeAnnouncement o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = NodeAnnouncement_clone(&o_conv);
        LDKCResult_NodeAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeAnnouncementDecodeErrorZ), "LDKCResult_NodeAnnouncementDecodeErrorZ");
        *ret_conv = CResult_NodeAnnouncementDecodeErrorZ_ok(o_conv);
@@ -13510,12 +15518,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_NodeAnnouncementDeco
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_NodeAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeAnnouncementDecodeErrorZ), "LDKCResult_NodeAnnouncementDecodeErrorZ");
        *ret_conv = CResult_NodeAnnouncementDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_NodeAnnouncementDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_NodeAnnouncementDecodeErrorZ* o_conv = (LDKCResult_NodeAnnouncementDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_NodeAnnouncementDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_NodeAnnouncementDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13525,6 +15540,17 @@ void  __attribute__((visibility("default"))) TS_CResult_NodeAnnouncementDecodeEr
        CResult_NodeAnnouncementDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_NodeAnnouncementDecodeErrorZ_clone_ptr(LDKCResult_NodeAnnouncementDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_NodeAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeAnnouncementDecodeErrorZ), "LDKCResult_NodeAnnouncementDecodeErrorZ");
+       *ret_conv = CResult_NodeAnnouncementDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_NodeAnnouncementDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_NodeAnnouncementDecodeErrorZ* arg_conv = (LDKCResult_NodeAnnouncementDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_NodeAnnouncementDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_NodeAnnouncementDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_NodeAnnouncementDecodeErrorZ* orig_conv = (LDKCResult_NodeAnnouncementDecodeErrorZ*)(orig & ~1);
        LDKCResult_NodeAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeAnnouncementDecodeErrorZ), "LDKCResult_NodeAnnouncementDecodeErrorZ");
@@ -13536,6 +15562,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_QueryShortChannelIds
        LDKQueryShortChannelIds o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = QueryShortChannelIds_clone(&o_conv);
        LDKCResult_QueryShortChannelIdsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_QueryShortChannelIdsDecodeErrorZ), "LDKCResult_QueryShortChannelIdsDecodeErrorZ");
        *ret_conv = CResult_QueryShortChannelIdsDecodeErrorZ_ok(o_conv);
@@ -13546,12 +15573,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_QueryShortChannelIds
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_QueryShortChannelIdsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_QueryShortChannelIdsDecodeErrorZ), "LDKCResult_QueryShortChannelIdsDecodeErrorZ");
        *ret_conv = CResult_QueryShortChannelIdsDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_QueryShortChannelIdsDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_QueryShortChannelIdsDecodeErrorZ* o_conv = (LDKCResult_QueryShortChannelIdsDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_QueryShortChannelIdsDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_QueryShortChannelIdsDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13561,6 +15595,17 @@ void  __attribute__((visibility("default"))) TS_CResult_QueryShortChannelIdsDeco
        CResult_QueryShortChannelIdsDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_QueryShortChannelIdsDecodeErrorZ_clone_ptr(LDKCResult_QueryShortChannelIdsDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_QueryShortChannelIdsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_QueryShortChannelIdsDecodeErrorZ), "LDKCResult_QueryShortChannelIdsDecodeErrorZ");
+       *ret_conv = CResult_QueryShortChannelIdsDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_QueryShortChannelIdsDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_QueryShortChannelIdsDecodeErrorZ* arg_conv = (LDKCResult_QueryShortChannelIdsDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_QueryShortChannelIdsDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_QueryShortChannelIdsDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_QueryShortChannelIdsDecodeErrorZ* orig_conv = (LDKCResult_QueryShortChannelIdsDecodeErrorZ*)(orig & ~1);
        LDKCResult_QueryShortChannelIdsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_QueryShortChannelIdsDecodeErrorZ), "LDKCResult_QueryShortChannelIdsDecodeErrorZ");
@@ -13572,6 +15617,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ReplyShortChannelIds
        LDKReplyShortChannelIdsEnd o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ReplyShortChannelIdsEnd_clone(&o_conv);
        LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ), "LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ");
        *ret_conv = CResult_ReplyShortChannelIdsEndDecodeErrorZ_ok(o_conv);
@@ -13582,12 +15628,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ReplyShortChannelIds
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ), "LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ");
        *ret_conv = CResult_ReplyShortChannelIdsEndDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_ReplyShortChannelIdsEndDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ* o_conv = (LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ReplyShortChannelIdsEndDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_ReplyShortChannelIdsEndDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13597,6 +15650,17 @@ void  __attribute__((visibility("default"))) TS_CResult_ReplyShortChannelIdsEndD
        CResult_ReplyShortChannelIdsEndDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ReplyShortChannelIdsEndDecodeErrorZ_clone_ptr(LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ), "LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ");
+       *ret_conv = CResult_ReplyShortChannelIdsEndDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_ReplyShortChannelIdsEndDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ* arg_conv = (LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ReplyShortChannelIdsEndDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_ReplyShortChannelIdsEndDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ* orig_conv = (LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ*)(orig & ~1);
        LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ), "LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ");
@@ -13608,6 +15672,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_QueryChannelRangeDec
        LDKQueryChannelRange o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = QueryChannelRange_clone(&o_conv);
        LDKCResult_QueryChannelRangeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_QueryChannelRangeDecodeErrorZ), "LDKCResult_QueryChannelRangeDecodeErrorZ");
        *ret_conv = CResult_QueryChannelRangeDecodeErrorZ_ok(o_conv);
@@ -13618,12 +15683,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_QueryChannelRangeDec
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_QueryChannelRangeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_QueryChannelRangeDecodeErrorZ), "LDKCResult_QueryChannelRangeDecodeErrorZ");
        *ret_conv = CResult_QueryChannelRangeDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_QueryChannelRangeDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_QueryChannelRangeDecodeErrorZ* o_conv = (LDKCResult_QueryChannelRangeDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_QueryChannelRangeDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_QueryChannelRangeDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13633,6 +15705,17 @@ void  __attribute__((visibility("default"))) TS_CResult_QueryChannelRangeDecodeE
        CResult_QueryChannelRangeDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_QueryChannelRangeDecodeErrorZ_clone_ptr(LDKCResult_QueryChannelRangeDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_QueryChannelRangeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_QueryChannelRangeDecodeErrorZ), "LDKCResult_QueryChannelRangeDecodeErrorZ");
+       *ret_conv = CResult_QueryChannelRangeDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_QueryChannelRangeDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_QueryChannelRangeDecodeErrorZ* arg_conv = (LDKCResult_QueryChannelRangeDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_QueryChannelRangeDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_QueryChannelRangeDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_QueryChannelRangeDecodeErrorZ* orig_conv = (LDKCResult_QueryChannelRangeDecodeErrorZ*)(orig & ~1);
        LDKCResult_QueryChannelRangeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_QueryChannelRangeDecodeErrorZ), "LDKCResult_QueryChannelRangeDecodeErrorZ");
@@ -13644,6 +15727,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ReplyChannelRangeDec
        LDKReplyChannelRange o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ReplyChannelRange_clone(&o_conv);
        LDKCResult_ReplyChannelRangeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReplyChannelRangeDecodeErrorZ), "LDKCResult_ReplyChannelRangeDecodeErrorZ");
        *ret_conv = CResult_ReplyChannelRangeDecodeErrorZ_ok(o_conv);
@@ -13654,12 +15738,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ReplyChannelRangeDec
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ReplyChannelRangeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReplyChannelRangeDecodeErrorZ), "LDKCResult_ReplyChannelRangeDecodeErrorZ");
        *ret_conv = CResult_ReplyChannelRangeDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_ReplyChannelRangeDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_ReplyChannelRangeDecodeErrorZ* o_conv = (LDKCResult_ReplyChannelRangeDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ReplyChannelRangeDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_ReplyChannelRangeDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13669,6 +15760,17 @@ void  __attribute__((visibility("default"))) TS_CResult_ReplyChannelRangeDecodeE
        CResult_ReplyChannelRangeDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ReplyChannelRangeDecodeErrorZ_clone_ptr(LDKCResult_ReplyChannelRangeDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ReplyChannelRangeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReplyChannelRangeDecodeErrorZ), "LDKCResult_ReplyChannelRangeDecodeErrorZ");
+       *ret_conv = CResult_ReplyChannelRangeDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_ReplyChannelRangeDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_ReplyChannelRangeDecodeErrorZ* arg_conv = (LDKCResult_ReplyChannelRangeDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ReplyChannelRangeDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_ReplyChannelRangeDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_ReplyChannelRangeDecodeErrorZ* orig_conv = (LDKCResult_ReplyChannelRangeDecodeErrorZ*)(orig & ~1);
        LDKCResult_ReplyChannelRangeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReplyChannelRangeDecodeErrorZ), "LDKCResult_ReplyChannelRangeDecodeErrorZ");
@@ -13680,6 +15782,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_GossipTimestampFilte
        LDKGossipTimestampFilter o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = GossipTimestampFilter_clone(&o_conv);
        LDKCResult_GossipTimestampFilterDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_GossipTimestampFilterDecodeErrorZ), "LDKCResult_GossipTimestampFilterDecodeErrorZ");
        *ret_conv = CResult_GossipTimestampFilterDecodeErrorZ_ok(o_conv);
@@ -13690,12 +15793,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_GossipTimestampFilte
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_GossipTimestampFilterDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_GossipTimestampFilterDecodeErrorZ), "LDKCResult_GossipTimestampFilterDecodeErrorZ");
        *ret_conv = CResult_GossipTimestampFilterDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_GossipTimestampFilterDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_GossipTimestampFilterDecodeErrorZ* o_conv = (LDKCResult_GossipTimestampFilterDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_GossipTimestampFilterDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_GossipTimestampFilterDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13705,6 +15815,17 @@ void  __attribute__((visibility("default"))) TS_CResult_GossipTimestampFilterDec
        CResult_GossipTimestampFilterDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_GossipTimestampFilterDecodeErrorZ_clone_ptr(LDKCResult_GossipTimestampFilterDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_GossipTimestampFilterDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_GossipTimestampFilterDecodeErrorZ), "LDKCResult_GossipTimestampFilterDecodeErrorZ");
+       *ret_conv = CResult_GossipTimestampFilterDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_GossipTimestampFilterDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_GossipTimestampFilterDecodeErrorZ* arg_conv = (LDKCResult_GossipTimestampFilterDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_GossipTimestampFilterDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_GossipTimestampFilterDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_GossipTimestampFilterDecodeErrorZ* orig_conv = (LDKCResult_GossipTimestampFilterDecodeErrorZ*)(orig & ~1);
        LDKCResult_GossipTimestampFilterDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_GossipTimestampFilterDecodeErrorZ), "LDKCResult_GossipTimestampFilterDecodeErrorZ");
@@ -13716,6 +15837,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_InvoiceSignOrCreatio
        LDKInvoice o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = Invoice_clone(&o_conv);
        LDKCResult_InvoiceSignOrCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceSignOrCreationErrorZ), "LDKCResult_InvoiceSignOrCreationErrorZ");
        *ret_conv = CResult_InvoiceSignOrCreationErrorZ_ok(o_conv);
@@ -13732,6 +15854,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_InvoiceSignOrCreatio
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_InvoiceSignOrCreationErrorZ_is_ok(uint32_t o) {
+       LDKCResult_InvoiceSignOrCreationErrorZ* o_conv = (LDKCResult_InvoiceSignOrCreationErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_InvoiceSignOrCreationErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_InvoiceSignOrCreationErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13741,6 +15869,17 @@ void  __attribute__((visibility("default"))) TS_CResult_InvoiceSignOrCreationErr
        CResult_InvoiceSignOrCreationErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_InvoiceSignOrCreationErrorZ_clone_ptr(LDKCResult_InvoiceSignOrCreationErrorZ *NONNULL_PTR arg) {
+       LDKCResult_InvoiceSignOrCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceSignOrCreationErrorZ), "LDKCResult_InvoiceSignOrCreationErrorZ");
+       *ret_conv = CResult_InvoiceSignOrCreationErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_InvoiceSignOrCreationErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_InvoiceSignOrCreationErrorZ* arg_conv = (LDKCResult_InvoiceSignOrCreationErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_InvoiceSignOrCreationErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_InvoiceSignOrCreationErrorZ_clone(uint32_t orig) {
        LDKCResult_InvoiceSignOrCreationErrorZ* orig_conv = (LDKCResult_InvoiceSignOrCreationErrorZ*)(orig & ~1);
        LDKCResult_InvoiceSignOrCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceSignOrCreationErrorZ), "LDKCResult_InvoiceSignOrCreationErrorZ");
@@ -13778,6 +15917,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_LockedChannelMonitor
        LDKLockedChannelMonitor o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        // Warning: we need a move here but no clone is available for LDKLockedChannelMonitor
        LDKCResult_LockedChannelMonitorNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_LockedChannelMonitorNoneZ), "LDKCResult_LockedChannelMonitorNoneZ");
        *ret_conv = CResult_LockedChannelMonitorNoneZ_ok(o_conv);
@@ -13790,6 +15930,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_LockedChannelMonitor
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_LockedChannelMonitorNoneZ_is_ok(uint32_t o) {
+       LDKCResult_LockedChannelMonitorNoneZ* o_conv = (LDKCResult_LockedChannelMonitorNoneZ*)(o & ~1);
+       jboolean ret_val = CResult_LockedChannelMonitorNoneZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_LockedChannelMonitorNoneZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13812,6 +15958,7 @@ void  __attribute__((visibility("default"))) TS_CVec_OutPointZ_free(uint32_tArra
                LDKOutPoint _res_conv_10_conv;
                _res_conv_10_conv.inner = (void*)(_res_conv_10 & (~1));
                _res_conv_10_conv.is_owned = (_res_conv_10 & 1) || (_res_conv_10 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_10_conv);
                _res_constr.data[k] = _res_conv_10_conv;
        }
        CVec_OutPointZ_free(_res_constr);
@@ -13826,6 +15973,18 @@ void  __attribute__((visibility("default"))) TS_PaymentPurpose_free(uint32_t thi
        PaymentPurpose_free(this_ptr_conv);
 }
 
+static inline uint64_t PaymentPurpose_clone_ptr(LDKPaymentPurpose *NONNULL_PTR arg) {
+       LDKPaymentPurpose *ret_copy = MALLOC(sizeof(LDKPaymentPurpose), "LDKPaymentPurpose");
+       *ret_copy = PaymentPurpose_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_PaymentPurpose_clone_ptr(uint32_t arg) {
+       LDKPaymentPurpose* arg_conv = (LDKPaymentPurpose*)arg;
+       int64_t ret_val = PaymentPurpose_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_PaymentPurpose_clone(uint32_t orig) {
        LDKPaymentPurpose* orig_conv = (LDKPaymentPurpose*)orig;
        LDKPaymentPurpose *ret_copy = MALLOC(sizeof(LDKPaymentPurpose), "LDKPaymentPurpose");
@@ -13866,6 +16025,18 @@ void  __attribute__((visibility("default"))) TS_ClosureReason_free(uint32_t this
        ClosureReason_free(this_ptr_conv);
 }
 
+static inline uint64_t ClosureReason_clone_ptr(LDKClosureReason *NONNULL_PTR arg) {
+       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
+       *ret_copy = ClosureReason_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_ClosureReason_clone_ptr(uint32_t arg) {
+       LDKClosureReason* arg_conv = (LDKClosureReason*)arg;
+       int64_t ret_val = ClosureReason_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_ClosureReason_clone(uint32_t orig) {
        LDKClosureReason* orig_conv = (LDKClosureReason*)orig;
        LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
@@ -13934,6 +16105,15 @@ int8_tArray  __attribute__((visibility("default"))) TS_ClosureReason_write(uint3
        return ret_arr;
 }
 
+uint32_t  __attribute__((visibility("default"))) TS_ClosureReason_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = *((uint32_t*)ser);
+       ser_ref.data = (int8_t*)(ser + 4);
+       LDKCResult_COption_ClosureReasonZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_ClosureReasonZDecodeErrorZ), "LDKCResult_COption_ClosureReasonZDecodeErrorZ");
+       *ret_conv = ClosureReason_read(ser_ref);
+       return (uint64_t)ret_conv;
+}
+
 void  __attribute__((visibility("default"))) TS_Event_free(uint32_t this_ptr) {
        if ((this_ptr & 1) != 0) return;
        void* this_ptr_ptr = (void*)(((uint64_t)this_ptr) & ~1);
@@ -13943,6 +16123,18 @@ void  __attribute__((visibility("default"))) TS_Event_free(uint32_t this_ptr) {
        Event_free(this_ptr_conv);
 }
 
+static inline uint64_t Event_clone_ptr(LDKEvent *NONNULL_PTR arg) {
+       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
+       *ret_copy = Event_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_Event_clone_ptr(uint32_t arg) {
+       LDKEvent* arg_conv = (LDKEvent*)arg;
+       int64_t ret_val = Event_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_Event_clone(uint32_t orig) {
        LDKEvent* orig_conv = (LDKEvent*)orig;
        LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
@@ -14022,6 +16214,7 @@ uint32_t  __attribute__((visibility("default"))) TS_Event_payment_path_failed(in
                LDKRouteHop path_conv_10_conv;
                path_conv_10_conv.inner = (void*)(path_conv_10 & (~1));
                path_conv_10_conv.is_owned = (path_conv_10 & 1) || (path_conv_10 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv_10_conv);
                path_conv_10_conv = RouteHop_clone(&path_conv_10_conv);
                path_constr.data[k] = path_conv_10_conv;
        }
@@ -14032,6 +16225,7 @@ uint32_t  __attribute__((visibility("default"))) TS_Event_payment_path_failed(in
        LDKRouteParameters retry_conv;
        retry_conv.inner = (void*)(retry & (~1));
        retry_conv.is_owned = (retry & 1) || (retry == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(retry_conv);
        retry_conv = RouteParameters_clone(&retry_conv);
        LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
        *ret_copy = Event_payment_path_failed(payment_id_ref, payment_hash_ref, rejected_by_dest, network_update_conv, all_paths_failed, path_constr, short_channel_id_conv, retry_conv);
@@ -14117,6 +16311,15 @@ int8_tArray  __attribute__((visibility("default"))) TS_Event_write(uint32_t obj)
        return ret_arr;
 }
 
+uint32_t  __attribute__((visibility("default"))) TS_Event_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = *((uint32_t*)ser);
+       ser_ref.data = (int8_t*)(ser + 4);
+       LDKCResult_COption_EventZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_EventZDecodeErrorZ), "LDKCResult_COption_EventZDecodeErrorZ");
+       *ret_conv = Event_read(ser_ref);
+       return (uint64_t)ret_conv;
+}
+
 void  __attribute__((visibility("default"))) TS_MessageSendEvent_free(uint32_t this_ptr) {
        if ((this_ptr & 1) != 0) return;
        void* this_ptr_ptr = (void*)(((uint64_t)this_ptr) & ~1);
@@ -14126,6 +16329,18 @@ void  __attribute__((visibility("default"))) TS_MessageSendEvent_free(uint32_t t
        MessageSendEvent_free(this_ptr_conv);
 }
 
+static inline uint64_t MessageSendEvent_clone_ptr(LDKMessageSendEvent *NONNULL_PTR arg) {
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_MessageSendEvent_clone_ptr(uint32_t arg) {
+       LDKMessageSendEvent* arg_conv = (LDKMessageSendEvent*)arg;
+       int64_t ret_val = MessageSendEvent_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_MessageSendEvent_clone(uint32_t orig) {
        LDKMessageSendEvent* orig_conv = (LDKMessageSendEvent*)orig;
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
@@ -14141,6 +16356,7 @@ uint32_t  __attribute__((visibility("default"))) TS_MessageSendEvent_send_accept
        LDKAcceptChannel msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = AcceptChannel_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_send_accept_channel(node_id_ref, msg_conv);
@@ -14155,6 +16371,7 @@ uint32_t  __attribute__((visibility("default"))) TS_MessageSendEvent_send_open_c
        LDKOpenChannel msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = OpenChannel_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_send_open_channel(node_id_ref, msg_conv);
@@ -14169,6 +16386,7 @@ uint32_t  __attribute__((visibility("default"))) TS_MessageSendEvent_send_fundin
        LDKFundingCreated msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = FundingCreated_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_send_funding_created(node_id_ref, msg_conv);
@@ -14183,6 +16401,7 @@ uint32_t  __attribute__((visibility("default"))) TS_MessageSendEvent_send_fundin
        LDKFundingSigned msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = FundingSigned_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_send_funding_signed(node_id_ref, msg_conv);
@@ -14197,6 +16416,7 @@ uint32_t  __attribute__((visibility("default"))) TS_MessageSendEvent_send_fundin
        LDKFundingLocked msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = FundingLocked_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_send_funding_locked(node_id_ref, msg_conv);
@@ -14211,6 +16431,7 @@ uint32_t  __attribute__((visibility("default"))) TS_MessageSendEvent_send_announ
        LDKAnnouncementSignatures msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = AnnouncementSignatures_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_send_announcement_signatures(node_id_ref, msg_conv);
@@ -14225,6 +16446,7 @@ uint32_t  __attribute__((visibility("default"))) TS_MessageSendEvent_update_htlc
        LDKCommitmentUpdate updates_conv;
        updates_conv.inner = (void*)(updates & (~1));
        updates_conv.is_owned = (updates & 1) || (updates == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(updates_conv);
        updates_conv = CommitmentUpdate_clone(&updates_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_update_htlcs(node_id_ref, updates_conv);
@@ -14239,6 +16461,7 @@ uint32_t  __attribute__((visibility("default"))) TS_MessageSendEvent_send_revoke
        LDKRevokeAndACK msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = RevokeAndACK_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_send_revoke_and_ack(node_id_ref, msg_conv);
@@ -14253,6 +16476,7 @@ uint32_t  __attribute__((visibility("default"))) TS_MessageSendEvent_send_closin
        LDKClosingSigned msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = ClosingSigned_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_send_closing_signed(node_id_ref, msg_conv);
@@ -14267,6 +16491,7 @@ uint32_t  __attribute__((visibility("default"))) TS_MessageSendEvent_send_shutdo
        LDKShutdown msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = Shutdown_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_send_shutdown(node_id_ref, msg_conv);
@@ -14281,6 +16506,7 @@ uint32_t  __attribute__((visibility("default"))) TS_MessageSendEvent_send_channe
        LDKChannelReestablish msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = ChannelReestablish_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_send_channel_reestablish(node_id_ref, msg_conv);
@@ -14292,10 +16518,12 @@ uint32_t  __attribute__((visibility("default"))) TS_MessageSendEvent_broadcast_c
        LDKChannelAnnouncement msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = ChannelAnnouncement_clone(&msg_conv);
        LDKChannelUpdate update_msg_conv;
        update_msg_conv.inner = (void*)(update_msg & (~1));
        update_msg_conv.is_owned = (update_msg & 1) || (update_msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_msg_conv);
        update_msg_conv = ChannelUpdate_clone(&update_msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_broadcast_channel_announcement(msg_conv, update_msg_conv);
@@ -14307,6 +16535,7 @@ uint32_t  __attribute__((visibility("default"))) TS_MessageSendEvent_broadcast_n
        LDKNodeAnnouncement msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = NodeAnnouncement_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_broadcast_node_announcement(msg_conv);
@@ -14318,6 +16547,7 @@ uint32_t  __attribute__((visibility("default"))) TS_MessageSendEvent_broadcast_c
        LDKChannelUpdate msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = ChannelUpdate_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_broadcast_channel_update(msg_conv);
@@ -14332,6 +16562,7 @@ uint32_t  __attribute__((visibility("default"))) TS_MessageSendEvent_send_channe
        LDKChannelUpdate msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = ChannelUpdate_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_send_channel_update(node_id_ref, msg_conv);
@@ -14360,6 +16591,7 @@ uint32_t  __attribute__((visibility("default"))) TS_MessageSendEvent_send_channe
        LDKQueryChannelRange msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = QueryChannelRange_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_send_channel_range_query(node_id_ref, msg_conv);
@@ -14374,6 +16606,7 @@ uint32_t  __attribute__((visibility("default"))) TS_MessageSendEvent_send_short_
        LDKQueryShortChannelIds msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = QueryShortChannelIds_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_send_short_ids_query(node_id_ref, msg_conv);
@@ -14388,6 +16621,7 @@ uint32_t  __attribute__((visibility("default"))) TS_MessageSendEvent_send_reply_
        LDKReplyChannelRange msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = ReplyChannelRange_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_send_reply_channel_range(node_id_ref, msg_conv);
@@ -14431,6 +16665,18 @@ void  __attribute__((visibility("default"))) TS_APIError_free(uint32_t this_ptr)
        APIError_free(this_ptr_conv);
 }
 
+static inline uint64_t APIError_clone_ptr(LDKAPIError *NONNULL_PTR arg) {
+       LDKAPIError *ret_copy = MALLOC(sizeof(LDKAPIError), "LDKAPIError");
+       *ret_copy = APIError_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_APIError_clone_ptr(uint32_t arg) {
+       LDKAPIError* arg_conv = (LDKAPIError*)arg;
+       int64_t ret_val = APIError_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_APIError_clone(uint32_t orig) {
        LDKAPIError* orig_conv = (LDKAPIError*)orig;
        LDKAPIError *ret_copy = MALLOC(sizeof(LDKAPIError), "LDKAPIError");
@@ -14482,6 +16728,7 @@ uint32_t  __attribute__((visibility("default"))) TS_APIError_incompatible_shutdo
        LDKShutdownScript script_conv;
        script_conv.inner = (void*)(script & (~1));
        script_conv.is_owned = (script & 1) || (script == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(script_conv);
        script_conv = ShutdownScript_clone(&script_conv);
        LDKAPIError *ret_copy = MALLOC(sizeof(LDKAPIError), "LDKAPIError");
        *ret_copy = APIError_incompatible_shutdown_script(script_conv);
@@ -14573,6 +16820,147 @@ uint32_t  __attribute__((visibility("default"))) TS_Level_max() {
        return ret_conv;
 }
 
+void  __attribute__((visibility("default"))) TS_Record_free(uint32_t this_obj) {
+       LDKRecord this_obj_conv;
+       this_obj_conv.inner = (void*)(this_obj & (~1));
+       this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       Record_free(this_obj_conv);
+}
+
+uint32_t  __attribute__((visibility("default"))) TS_Record_get_level(uint32_t this_ptr) {
+       LDKRecord this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       uint32_t ret_conv = LDKLevel_to_js(Record_get_level(&this_ptr_conv));
+       return ret_conv;
+}
+
+void  __attribute__((visibility("default"))) TS_Record_set_level(uint32_t this_ptr, uint32_t val) {
+       LDKRecord this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKLevel val_conv = LDKLevel_from_js(val);
+       Record_set_level(&this_ptr_conv, val_conv);
+}
+
+jstring  __attribute__((visibility("default"))) TS_Record_get_args(uint32_t this_ptr) {
+       LDKRecord this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKStr ret_str = Record_get_args(&this_ptr_conv);
+       jstring ret_conv = str_ref_to_ts(ret_str.chars, ret_str.len);
+       Str_free(ret_str);
+       return ret_conv;
+}
+
+void  __attribute__((visibility("default"))) TS_Record_set_args(uint32_t this_ptr, jstring val) {
+       LDKRecord this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKStr val_conv = str_ref_to_owned_c(val);
+       Record_set_args(&this_ptr_conv, val_conv);
+}
+
+jstring  __attribute__((visibility("default"))) TS_Record_get_module_path(uint32_t this_ptr) {
+       LDKRecord this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKStr ret_str = Record_get_module_path(&this_ptr_conv);
+       jstring ret_conv = str_ref_to_ts(ret_str.chars, ret_str.len);
+       Str_free(ret_str);
+       return ret_conv;
+}
+
+void  __attribute__((visibility("default"))) TS_Record_set_module_path(uint32_t this_ptr, jstring val) {
+       LDKRecord this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKStr val_conv = str_ref_to_owned_c(val);
+       Record_set_module_path(&this_ptr_conv, val_conv);
+}
+
+jstring  __attribute__((visibility("default"))) TS_Record_get_file(uint32_t this_ptr) {
+       LDKRecord this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKStr ret_str = Record_get_file(&this_ptr_conv);
+       jstring ret_conv = str_ref_to_ts(ret_str.chars, ret_str.len);
+       Str_free(ret_str);
+       return ret_conv;
+}
+
+void  __attribute__((visibility("default"))) TS_Record_set_file(uint32_t this_ptr, jstring val) {
+       LDKRecord this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKStr val_conv = str_ref_to_owned_c(val);
+       Record_set_file(&this_ptr_conv, val_conv);
+}
+
+int32_t  __attribute__((visibility("default"))) TS_Record_get_line(uint32_t this_ptr) {
+       LDKRecord this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       int32_t ret_val = Record_get_line(&this_ptr_conv);
+       return ret_val;
+}
+
+void  __attribute__((visibility("default"))) TS_Record_set_line(uint32_t this_ptr, int32_t val) {
+       LDKRecord this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       Record_set_line(&this_ptr_conv, val);
+}
+
+static inline uint64_t Record_clone_ptr(LDKRecord *NONNULL_PTR arg) {
+       LDKRecord ret_var = Record_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_Record_clone_ptr(uint32_t arg) {
+       LDKRecord arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = Record_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
+uint32_t  __attribute__((visibility("default"))) TS_Record_clone(uint32_t orig) {
+       LDKRecord orig_conv;
+       orig_conv.inner = (void*)(orig & (~1));
+       orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       LDKRecord ret_var = Record_clone(&orig_conv);
+       uint64_t ret_ref = 0;
+       CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+       CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = (uint64_t)ret_var.inner;
+       if (ret_var.is_owned) {
+               ret_ref |= 1;
+       }
+       return ret_ref;
+}
+
 void  __attribute__((visibility("default"))) TS_Logger_free(uint32_t this_ptr) {
        if ((this_ptr & 1) != 0) return;
        void* this_ptr_ptr = (void*)(((uint64_t)this_ptr) & ~1);
@@ -14586,6 +16974,7 @@ void  __attribute__((visibility("default"))) TS_ChannelHandshakeConfig_free(uint
        LDKChannelHandshakeConfig this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelHandshakeConfig_free(this_obj_conv);
 }
 
@@ -14593,6 +16982,7 @@ int32_t  __attribute__((visibility("default"))) TS_ChannelHandshakeConfig_get_mi
        LDKChannelHandshakeConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = ChannelHandshakeConfig_get_minimum_depth(&this_ptr_conv);
        return ret_val;
 }
@@ -14601,6 +16991,7 @@ void  __attribute__((visibility("default"))) TS_ChannelHandshakeConfig_set_minim
        LDKChannelHandshakeConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelHandshakeConfig_set_minimum_depth(&this_ptr_conv, val);
 }
 
@@ -14608,6 +16999,7 @@ int16_t  __attribute__((visibility("default"))) TS_ChannelHandshakeConfig_get_ou
        LDKChannelHandshakeConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = ChannelHandshakeConfig_get_our_to_self_delay(&this_ptr_conv);
        return ret_val;
 }
@@ -14616,6 +17008,7 @@ void  __attribute__((visibility("default"))) TS_ChannelHandshakeConfig_set_our_t
        LDKChannelHandshakeConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelHandshakeConfig_set_our_to_self_delay(&this_ptr_conv, val);
 }
 
@@ -14623,6 +17016,7 @@ int64_t  __attribute__((visibility("default"))) TS_ChannelHandshakeConfig_get_ou
        LDKChannelHandshakeConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelHandshakeConfig_get_our_htlc_minimum_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -14631,6 +17025,7 @@ void  __attribute__((visibility("default"))) TS_ChannelHandshakeConfig_set_our_h
        LDKChannelHandshakeConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelHandshakeConfig_set_our_htlc_minimum_msat(&this_ptr_conv, val);
 }
 
@@ -14639,6 +17034,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelHandshakeConfig_new(i
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -14646,14 +17042,37 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelHandshakeConfig_new(i
        return ret_ref;
 }
 
+static inline uint64_t ChannelHandshakeConfig_clone_ptr(LDKChannelHandshakeConfig *NONNULL_PTR arg) {
+       LDKChannelHandshakeConfig ret_var = ChannelHandshakeConfig_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_ChannelHandshakeConfig_clone_ptr(uint32_t arg) {
+       LDKChannelHandshakeConfig arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChannelHandshakeConfig_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_ChannelHandshakeConfig_clone(uint32_t orig) {
        LDKChannelHandshakeConfig orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChannelHandshakeConfig ret_var = ChannelHandshakeConfig_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -14666,6 +17085,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelHandshakeConfig_defau
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -14677,6 +17097,7 @@ void  __attribute__((visibility("default"))) TS_ChannelHandshakeLimits_free(uint
        LDKChannelHandshakeLimits this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelHandshakeLimits_free(this_obj_conv);
 }
 
@@ -14684,6 +17105,7 @@ int64_t  __attribute__((visibility("default"))) TS_ChannelHandshakeLimits_get_mi
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelHandshakeLimits_get_min_funding_satoshis(&this_ptr_conv);
        return ret_val;
 }
@@ -14692,6 +17114,7 @@ void  __attribute__((visibility("default"))) TS_ChannelHandshakeLimits_set_min_f
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelHandshakeLimits_set_min_funding_satoshis(&this_ptr_conv, val);
 }
 
@@ -14699,6 +17122,7 @@ int64_t  __attribute__((visibility("default"))) TS_ChannelHandshakeLimits_get_ma
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelHandshakeLimits_get_max_htlc_minimum_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -14707,6 +17131,7 @@ void  __attribute__((visibility("default"))) TS_ChannelHandshakeLimits_set_max_h
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelHandshakeLimits_set_max_htlc_minimum_msat(&this_ptr_conv, val);
 }
 
@@ -14714,6 +17139,7 @@ int64_t  __attribute__((visibility("default"))) TS_ChannelHandshakeLimits_get_mi
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelHandshakeLimits_get_min_max_htlc_value_in_flight_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -14722,6 +17148,7 @@ void  __attribute__((visibility("default"))) TS_ChannelHandshakeLimits_set_min_m
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelHandshakeLimits_set_min_max_htlc_value_in_flight_msat(&this_ptr_conv, val);
 }
 
@@ -14729,6 +17156,7 @@ int64_t  __attribute__((visibility("default"))) TS_ChannelHandshakeLimits_get_ma
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelHandshakeLimits_get_max_channel_reserve_satoshis(&this_ptr_conv);
        return ret_val;
 }
@@ -14737,6 +17165,7 @@ void  __attribute__((visibility("default"))) TS_ChannelHandshakeLimits_set_max_c
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelHandshakeLimits_set_max_channel_reserve_satoshis(&this_ptr_conv, val);
 }
 
@@ -14744,6 +17173,7 @@ int16_t  __attribute__((visibility("default"))) TS_ChannelHandshakeLimits_get_mi
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = ChannelHandshakeLimits_get_min_max_accepted_htlcs(&this_ptr_conv);
        return ret_val;
 }
@@ -14752,6 +17182,7 @@ void  __attribute__((visibility("default"))) TS_ChannelHandshakeLimits_set_min_m
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelHandshakeLimits_set_min_max_accepted_htlcs(&this_ptr_conv, val);
 }
 
@@ -14759,6 +17190,7 @@ int32_t  __attribute__((visibility("default"))) TS_ChannelHandshakeLimits_get_ma
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = ChannelHandshakeLimits_get_max_minimum_depth(&this_ptr_conv);
        return ret_val;
 }
@@ -14767,6 +17199,7 @@ void  __attribute__((visibility("default"))) TS_ChannelHandshakeLimits_set_max_m
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelHandshakeLimits_set_max_minimum_depth(&this_ptr_conv, val);
 }
 
@@ -14774,6 +17207,7 @@ jboolean  __attribute__((visibility("default"))) TS_ChannelHandshakeLimits_get_f
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        jboolean ret_val = ChannelHandshakeLimits_get_force_announced_channel_preference(&this_ptr_conv);
        return ret_val;
 }
@@ -14782,6 +17216,7 @@ void  __attribute__((visibility("default"))) TS_ChannelHandshakeLimits_set_force
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelHandshakeLimits_set_force_announced_channel_preference(&this_ptr_conv, val);
 }
 
@@ -14789,6 +17224,7 @@ int16_t  __attribute__((visibility("default"))) TS_ChannelHandshakeLimits_get_th
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = ChannelHandshakeLimits_get_their_to_self_delay(&this_ptr_conv);
        return ret_val;
 }
@@ -14797,6 +17233,7 @@ void  __attribute__((visibility("default"))) TS_ChannelHandshakeLimits_set_their
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelHandshakeLimits_set_their_to_self_delay(&this_ptr_conv, val);
 }
 
@@ -14805,6 +17242,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelHandshakeLimits_new(i
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -14812,14 +17250,37 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelHandshakeLimits_new(i
        return ret_ref;
 }
 
+static inline uint64_t ChannelHandshakeLimits_clone_ptr(LDKChannelHandshakeLimits *NONNULL_PTR arg) {
+       LDKChannelHandshakeLimits ret_var = ChannelHandshakeLimits_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_ChannelHandshakeLimits_clone_ptr(uint32_t arg) {
+       LDKChannelHandshakeLimits arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChannelHandshakeLimits_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_ChannelHandshakeLimits_clone(uint32_t orig) {
        LDKChannelHandshakeLimits orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChannelHandshakeLimits ret_var = ChannelHandshakeLimits_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -14832,6 +17293,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelHandshakeLimits_defau
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -14843,6 +17305,7 @@ void  __attribute__((visibility("default"))) TS_ChannelConfig_free(uint32_t this
        LDKChannelConfig this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelConfig_free(this_obj_conv);
 }
 
@@ -14850,6 +17313,7 @@ int32_t  __attribute__((visibility("default"))) TS_ChannelConfig_get_forwarding_
        LDKChannelConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = ChannelConfig_get_forwarding_fee_proportional_millionths(&this_ptr_conv);
        return ret_val;
 }
@@ -14858,6 +17322,7 @@ void  __attribute__((visibility("default"))) TS_ChannelConfig_set_forwarding_fee
        LDKChannelConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelConfig_set_forwarding_fee_proportional_millionths(&this_ptr_conv, val);
 }
 
@@ -14865,6 +17330,7 @@ int32_t  __attribute__((visibility("default"))) TS_ChannelConfig_get_forwarding_
        LDKChannelConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = ChannelConfig_get_forwarding_fee_base_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -14873,6 +17339,7 @@ void  __attribute__((visibility("default"))) TS_ChannelConfig_set_forwarding_fee
        LDKChannelConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelConfig_set_forwarding_fee_base_msat(&this_ptr_conv, val);
 }
 
@@ -14880,6 +17347,7 @@ int16_t  __attribute__((visibility("default"))) TS_ChannelConfig_get_cltv_expiry
        LDKChannelConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = ChannelConfig_get_cltv_expiry_delta(&this_ptr_conv);
        return ret_val;
 }
@@ -14888,6 +17356,7 @@ void  __attribute__((visibility("default"))) TS_ChannelConfig_set_cltv_expiry_de
        LDKChannelConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelConfig_set_cltv_expiry_delta(&this_ptr_conv, val);
 }
 
@@ -14895,6 +17364,7 @@ jboolean  __attribute__((visibility("default"))) TS_ChannelConfig_get_announced_
        LDKChannelConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        jboolean ret_val = ChannelConfig_get_announced_channel(&this_ptr_conv);
        return ret_val;
 }
@@ -14903,6 +17373,7 @@ void  __attribute__((visibility("default"))) TS_ChannelConfig_set_announced_chan
        LDKChannelConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelConfig_set_announced_channel(&this_ptr_conv, val);
 }
 
@@ -14910,6 +17381,7 @@ jboolean  __attribute__((visibility("default"))) TS_ChannelConfig_get_commit_upf
        LDKChannelConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        jboolean ret_val = ChannelConfig_get_commit_upfront_shutdown_pubkey(&this_ptr_conv);
        return ret_val;
 }
@@ -14918,6 +17390,7 @@ void  __attribute__((visibility("default"))) TS_ChannelConfig_set_commit_upfront
        LDKChannelConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelConfig_set_commit_upfront_shutdown_pubkey(&this_ptr_conv, val);
 }
 
@@ -14925,6 +17398,7 @@ int64_t  __attribute__((visibility("default"))) TS_ChannelConfig_get_max_dust_ht
        LDKChannelConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelConfig_get_max_dust_htlc_exposure_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -14933,6 +17407,7 @@ void  __attribute__((visibility("default"))) TS_ChannelConfig_set_max_dust_htlc_
        LDKChannelConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelConfig_set_max_dust_htlc_exposure_msat(&this_ptr_conv, val);
 }
 
@@ -14940,6 +17415,7 @@ int64_t  __attribute__((visibility("default"))) TS_ChannelConfig_get_force_close
        LDKChannelConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelConfig_get_force_close_avoidance_max_fee_satoshis(&this_ptr_conv);
        return ret_val;
 }
@@ -14948,6 +17424,7 @@ void  __attribute__((visibility("default"))) TS_ChannelConfig_set_force_close_av
        LDKChannelConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelConfig_set_force_close_avoidance_max_fee_satoshis(&this_ptr_conv, val);
 }
 
@@ -14956,6 +17433,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelConfig_new(int32_t fo
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -14963,14 +17441,37 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelConfig_new(int32_t fo
        return ret_ref;
 }
 
+static inline uint64_t ChannelConfig_clone_ptr(LDKChannelConfig *NONNULL_PTR arg) {
+       LDKChannelConfig ret_var = ChannelConfig_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_ChannelConfig_clone_ptr(uint32_t arg) {
+       LDKChannelConfig arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChannelConfig_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_ChannelConfig_clone(uint32_t orig) {
        LDKChannelConfig orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChannelConfig ret_var = ChannelConfig_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -14983,6 +17484,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelConfig_default() {
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -14994,6 +17496,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ChannelConfig_write(uint3
        LDKChannelConfig obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ChannelConfig_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -15014,6 +17517,7 @@ void  __attribute__((visibility("default"))) TS_UserConfig_free(uint32_t this_ob
        LDKUserConfig this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        UserConfig_free(this_obj_conv);
 }
 
@@ -15021,10 +17525,12 @@ uint32_t  __attribute__((visibility("default"))) TS_UserConfig_get_own_channel_c
        LDKUserConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelHandshakeConfig ret_var = UserConfig_get_own_channel_config(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -15036,9 +17542,11 @@ void  __attribute__((visibility("default"))) TS_UserConfig_set_own_channel_confi
        LDKUserConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelHandshakeConfig val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = ChannelHandshakeConfig_clone(&val_conv);
        UserConfig_set_own_channel_config(&this_ptr_conv, val_conv);
 }
@@ -15047,10 +17555,12 @@ uint32_t  __attribute__((visibility("default"))) TS_UserConfig_get_peer_channel_
        LDKUserConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelHandshakeLimits ret_var = UserConfig_get_peer_channel_config_limits(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -15062,9 +17572,11 @@ void  __attribute__((visibility("default"))) TS_UserConfig_set_peer_channel_conf
        LDKUserConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelHandshakeLimits val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = ChannelHandshakeLimits_clone(&val_conv);
        UserConfig_set_peer_channel_config_limits(&this_ptr_conv, val_conv);
 }
@@ -15073,10 +17585,12 @@ uint32_t  __attribute__((visibility("default"))) TS_UserConfig_get_channel_optio
        LDKUserConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelConfig ret_var = UserConfig_get_channel_options(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -15088,9 +17602,11 @@ void  __attribute__((visibility("default"))) TS_UserConfig_set_channel_options(u
        LDKUserConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelConfig val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = ChannelConfig_clone(&val_conv);
        UserConfig_set_channel_options(&this_ptr_conv, val_conv);
 }
@@ -15099,6 +17615,7 @@ jboolean  __attribute__((visibility("default"))) TS_UserConfig_get_accept_forwar
        LDKUserConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        jboolean ret_val = UserConfig_get_accept_forwards_to_priv_channels(&this_ptr_conv);
        return ret_val;
 }
@@ -15107,6 +17624,7 @@ void  __attribute__((visibility("default"))) TS_UserConfig_set_accept_forwards_t
        LDKUserConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UserConfig_set_accept_forwards_to_priv_channels(&this_ptr_conv, val);
 }
 
@@ -15114,19 +17632,23 @@ uint32_t  __attribute__((visibility("default"))) TS_UserConfig_new(uint32_t own_
        LDKChannelHandshakeConfig own_channel_config_arg_conv;
        own_channel_config_arg_conv.inner = (void*)(own_channel_config_arg & (~1));
        own_channel_config_arg_conv.is_owned = (own_channel_config_arg & 1) || (own_channel_config_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(own_channel_config_arg_conv);
        own_channel_config_arg_conv = ChannelHandshakeConfig_clone(&own_channel_config_arg_conv);
        LDKChannelHandshakeLimits peer_channel_config_limits_arg_conv;
        peer_channel_config_limits_arg_conv.inner = (void*)(peer_channel_config_limits_arg & (~1));
        peer_channel_config_limits_arg_conv.is_owned = (peer_channel_config_limits_arg & 1) || (peer_channel_config_limits_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(peer_channel_config_limits_arg_conv);
        peer_channel_config_limits_arg_conv = ChannelHandshakeLimits_clone(&peer_channel_config_limits_arg_conv);
        LDKChannelConfig channel_options_arg_conv;
        channel_options_arg_conv.inner = (void*)(channel_options_arg & (~1));
        channel_options_arg_conv.is_owned = (channel_options_arg & 1) || (channel_options_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_options_arg_conv);
        channel_options_arg_conv = ChannelConfig_clone(&channel_options_arg_conv);
        LDKUserConfig ret_var = UserConfig_new(own_channel_config_arg_conv, peer_channel_config_limits_arg_conv, channel_options_arg_conv, accept_forwards_to_priv_channels_arg);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -15134,14 +17656,37 @@ uint32_t  __attribute__((visibility("default"))) TS_UserConfig_new(uint32_t own_
        return ret_ref;
 }
 
+static inline uint64_t UserConfig_clone_ptr(LDKUserConfig *NONNULL_PTR arg) {
+       LDKUserConfig ret_var = UserConfig_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_UserConfig_clone_ptr(uint32_t arg) {
+       LDKUserConfig arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = UserConfig_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_UserConfig_clone(uint32_t orig) {
        LDKUserConfig orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKUserConfig ret_var = UserConfig_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -15154,6 +17699,7 @@ uint32_t  __attribute__((visibility("default"))) TS_UserConfig_default() {
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -15165,17 +17711,41 @@ void  __attribute__((visibility("default"))) TS_BestBlock_free(uint32_t this_obj
        LDKBestBlock this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        BestBlock_free(this_obj_conv);
 }
 
+static inline uint64_t BestBlock_clone_ptr(LDKBestBlock *NONNULL_PTR arg) {
+       LDKBestBlock ret_var = BestBlock_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_BestBlock_clone_ptr(uint32_t arg) {
+       LDKBestBlock arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = BestBlock_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_BestBlock_clone(uint32_t orig) {
        LDKBestBlock orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKBestBlock ret_var = BestBlock_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -15189,6 +17759,7 @@ uint32_t  __attribute__((visibility("default"))) TS_BestBlock_from_genesis(uint3
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -15204,6 +17775,7 @@ uint32_t  __attribute__((visibility("default"))) TS_BestBlock_new(int8_tArray bl
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -15215,6 +17787,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_BestBlock_block_hash(uint
        LDKBestBlock this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), BestBlock_block_hash(&this_arg_conv).data, 32);
        return ret_arr;
@@ -15224,6 +17797,7 @@ int32_t  __attribute__((visibility("default"))) TS_BestBlock_height(uint32_t thi
        LDKBestBlock this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int32_t ret_val = BestBlock_height(&this_arg_conv);
        return ret_val;
 }
@@ -15309,6 +17883,7 @@ void  __attribute__((visibility("default"))) TS_WatchedOutput_free(uint32_t this
        LDKWatchedOutput this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        WatchedOutput_free(this_obj_conv);
 }
 
@@ -15316,6 +17891,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_WatchedOutput_get_block_h
        LDKWatchedOutput this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), WatchedOutput_get_block_hash(&this_ptr_conv).data, 32);
        return ret_arr;
@@ -15325,6 +17901,7 @@ void  __attribute__((visibility("default"))) TS_WatchedOutput_set_block_hash(uin
        LDKWatchedOutput this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -15335,10 +17912,12 @@ uint32_t  __attribute__((visibility("default"))) TS_WatchedOutput_get_outpoint(u
        LDKWatchedOutput this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKOutPoint ret_var = WatchedOutput_get_outpoint(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -15350,9 +17929,11 @@ void  __attribute__((visibility("default"))) TS_WatchedOutput_set_outpoint(uint3
        LDKWatchedOutput this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKOutPoint val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = OutPoint_clone(&val_conv);
        WatchedOutput_set_outpoint(&this_ptr_conv, val_conv);
 }
@@ -15361,6 +17942,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_WatchedOutput_get_script_
        LDKWatchedOutput this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKu8slice ret_var = WatchedOutput_get_script_pubkey(&this_ptr_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -15371,6 +17953,7 @@ void  __attribute__((visibility("default"))) TS_WatchedOutput_set_script_pubkey(
        LDKWatchedOutput this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_u8Z val_ref;
        val_ref.datalen = *((uint32_t*)val);
        val_ref.data = MALLOC(val_ref.datalen, "LDKCVec_u8Z Bytes");
@@ -15385,6 +17968,7 @@ uint32_t  __attribute__((visibility("default"))) TS_WatchedOutput_new(int8_tArra
        LDKOutPoint outpoint_arg_conv;
        outpoint_arg_conv.inner = (void*)(outpoint_arg & (~1));
        outpoint_arg_conv.is_owned = (outpoint_arg & 1) || (outpoint_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_arg_conv);
        outpoint_arg_conv = OutPoint_clone(&outpoint_arg_conv);
        LDKCVec_u8Z script_pubkey_arg_ref;
        script_pubkey_arg_ref.datalen = *((uint32_t*)script_pubkey_arg);
@@ -15394,6 +17978,7 @@ uint32_t  __attribute__((visibility("default"))) TS_WatchedOutput_new(int8_tArra
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -15401,14 +17986,37 @@ uint32_t  __attribute__((visibility("default"))) TS_WatchedOutput_new(int8_tArra
        return ret_ref;
 }
 
+static inline uint64_t WatchedOutput_clone_ptr(LDKWatchedOutput *NONNULL_PTR arg) {
+       LDKWatchedOutput ret_var = WatchedOutput_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_WatchedOutput_clone_ptr(uint32_t arg) {
+       LDKWatchedOutput arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = WatchedOutput_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_WatchedOutput_clone(uint32_t orig) {
        LDKWatchedOutput orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKWatchedOutput ret_var = WatchedOutput_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -15420,6 +18028,7 @@ int64_t  __attribute__((visibility("default"))) TS_WatchedOutput_hash(uint32_t o
        LDKWatchedOutput o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = WatchedOutput_hash(&o_conv);
        return ret_val;
 }
@@ -15474,17 +18083,41 @@ void  __attribute__((visibility("default"))) TS_MonitorUpdateId_free(uint32_t th
        LDKMonitorUpdateId this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        MonitorUpdateId_free(this_obj_conv);
 }
 
+static inline uint64_t MonitorUpdateId_clone_ptr(LDKMonitorUpdateId *NONNULL_PTR arg) {
+       LDKMonitorUpdateId ret_var = MonitorUpdateId_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_MonitorUpdateId_clone_ptr(uint32_t arg) {
+       LDKMonitorUpdateId arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = MonitorUpdateId_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_MonitorUpdateId_clone(uint32_t orig) {
        LDKMonitorUpdateId orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKMonitorUpdateId ret_var = MonitorUpdateId_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -15496,6 +18129,7 @@ int64_t  __attribute__((visibility("default"))) TS_MonitorUpdateId_hash(uint32_t
        LDKMonitorUpdateId o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = MonitorUpdateId_hash(&o_conv);
        return ret_val;
 }
@@ -15504,9 +18138,11 @@ jboolean  __attribute__((visibility("default"))) TS_MonitorUpdateId_eq(uint32_t
        LDKMonitorUpdateId a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKMonitorUpdateId b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = MonitorUpdateId_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -15524,6 +18160,7 @@ void  __attribute__((visibility("default"))) TS_LockedChannelMonitor_free(uint32
        LDKLockedChannelMonitor this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        LockedChannelMonitor_free(this_obj_conv);
 }
 
@@ -15531,6 +18168,7 @@ void  __attribute__((visibility("default"))) TS_ChainMonitor_free(uint32_t this_
        LDKChainMonitor this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChainMonitor_free(this_obj_conv);
 }
 
@@ -15558,6 +18196,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChainMonitor_new(uint32_t ch
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -15569,6 +18208,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_ChainMonitor_get_claima
        LDKChainMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCVec_ChannelDetailsZ ignored_channels_constr;
        ignored_channels_constr.datalen = *((uint32_t*)ignored_channels);
        if (ignored_channels_constr.datalen > 0)
@@ -15581,6 +18221,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_ChainMonitor_get_claima
                LDKChannelDetails ignored_channels_conv_16_conv;
                ignored_channels_conv_16_conv.inner = (void*)(ignored_channels_conv_16 & (~1));
                ignored_channels_conv_16_conv.is_owned = (ignored_channels_conv_16 & 1) || (ignored_channels_conv_16 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ignored_channels_conv_16_conv);
                ignored_channels_conv_16_conv = ChannelDetails_clone(&ignored_channels_conv_16_conv);
                ignored_channels_constr.data[q] = ignored_channels_conv_16_conv;
        }
@@ -15603,9 +18244,11 @@ uint32_t  __attribute__((visibility("default"))) TS_ChainMonitor_get_monitor(uin
        LDKChainMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKOutPoint funding_txo_conv;
        funding_txo_conv.inner = (void*)(funding_txo & (~1));
        funding_txo_conv.is_owned = (funding_txo & 1) || (funding_txo == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_txo_conv);
        funding_txo_conv = OutPoint_clone(&funding_txo_conv);
        LDKCResult_LockedChannelMonitorNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_LockedChannelMonitorNoneZ), "LDKCResult_LockedChannelMonitorNoneZ");
        *ret_conv = ChainMonitor_get_monitor(&this_arg_conv, funding_txo_conv);
@@ -15616,6 +18259,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_ChainMonitor_list_monit
        LDKChainMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCVec_OutPointZ ret_var = ChainMonitor_list_monitors(&this_arg_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_arr(ret_var.datalen, sizeof(uint32_t), "Native uint32_tArray Bytes");
@@ -15625,6 +18269,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_ChainMonitor_list_monit
                uint64_t ret_conv_10_ref = 0;
                CHECK((((uint64_t)ret_conv_10_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_conv_10_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_10_var);
                ret_conv_10_ref = (uint64_t)ret_conv_10_var.inner;
                if (ret_conv_10_var.is_owned) {
                        ret_conv_10_ref |= 1;
@@ -15640,13 +18285,16 @@ uint32_t  __attribute__((visibility("default"))) TS_ChainMonitor_channel_monitor
        LDKChainMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKOutPoint funding_txo_conv;
        funding_txo_conv.inner = (void*)(funding_txo & (~1));
        funding_txo_conv.is_owned = (funding_txo & 1) || (funding_txo == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_txo_conv);
        funding_txo_conv = OutPoint_clone(&funding_txo_conv);
        LDKMonitorUpdateId completed_update_id_conv;
        completed_update_id_conv.inner = (void*)(completed_update_id & (~1));
        completed_update_id_conv.is_owned = (completed_update_id & 1) || (completed_update_id == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(completed_update_id_conv);
        completed_update_id_conv = MonitorUpdateId_clone(&completed_update_id_conv);
        LDKCResult_NoneAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneAPIErrorZ), "LDKCResult_NoneAPIErrorZ");
        *ret_conv = ChainMonitor_channel_monitor_updated(&this_arg_conv, funding_txo_conv, completed_update_id_conv);
@@ -15657,6 +18305,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChainMonitor_as_Listen(uint3
        LDKChainMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKListen* ret_ret = MALLOC(sizeof(LDKListen), "LDKListen");
        *ret_ret = ChainMonitor_as_Listen(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -15666,6 +18315,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChainMonitor_as_Confirm(uint
        LDKChainMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKConfirm* ret_ret = MALLOC(sizeof(LDKConfirm), "LDKConfirm");
        *ret_ret = ChainMonitor_as_Confirm(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -15675,6 +18325,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChainMonitor_as_Watch(uint32
        LDKChainMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKWatch* ret_ret = MALLOC(sizeof(LDKWatch), "LDKWatch");
        *ret_ret = ChainMonitor_as_Watch(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -15684,6 +18335,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChainMonitor_as_EventsProvid
        LDKChainMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKEventsProvider* ret_ret = MALLOC(sizeof(LDKEventsProvider), "LDKEventsProvider");
        *ret_ret = ChainMonitor_as_EventsProvider(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -15693,6 +18345,7 @@ void  __attribute__((visibility("default"))) TS_ChannelMonitorUpdate_free(uint32
        LDKChannelMonitorUpdate this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelMonitorUpdate_free(this_obj_conv);
 }
 
@@ -15700,6 +18353,7 @@ int64_t  __attribute__((visibility("default"))) TS_ChannelMonitorUpdate_get_upda
        LDKChannelMonitorUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelMonitorUpdate_get_update_id(&this_ptr_conv);
        return ret_val;
 }
@@ -15708,17 +18362,41 @@ void  __attribute__((visibility("default"))) TS_ChannelMonitorUpdate_set_update_
        LDKChannelMonitorUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelMonitorUpdate_set_update_id(&this_ptr_conv, val);
 }
 
+static inline uint64_t ChannelMonitorUpdate_clone_ptr(LDKChannelMonitorUpdate *NONNULL_PTR arg) {
+       LDKChannelMonitorUpdate ret_var = ChannelMonitorUpdate_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_ChannelMonitorUpdate_clone_ptr(uint32_t arg) {
+       LDKChannelMonitorUpdate arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChannelMonitorUpdate_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_ChannelMonitorUpdate_clone(uint32_t orig) {
        LDKChannelMonitorUpdate orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChannelMonitorUpdate ret_var = ChannelMonitorUpdate_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -15730,6 +18408,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ChannelMonitorUpdate_writ
        LDKChannelMonitorUpdate obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ChannelMonitorUpdate_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -15750,6 +18429,7 @@ void  __attribute__((visibility("default"))) TS_MonitorUpdateError_free(uint32_t
        LDKMonitorUpdateError this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        MonitorUpdateError_free(this_obj_conv);
 }
 
@@ -15757,6 +18437,7 @@ jstring  __attribute__((visibility("default"))) TS_MonitorUpdateError_get_a(uint
        LDKMonitorUpdateError this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKStr ret_str = MonitorUpdateError_get_a(&this_ptr_conv);
        jstring ret_conv = str_ref_to_ts(ret_str.chars, ret_str.len);
        Str_free(ret_str);
@@ -15767,6 +18448,7 @@ void  __attribute__((visibility("default"))) TS_MonitorUpdateError_set_a(uint32_
        LDKMonitorUpdateError this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKStr val_conv = str_ref_to_owned_c(val);
        MonitorUpdateError_set_a(&this_ptr_conv, val_conv);
 }
@@ -15777,6 +18459,7 @@ uint32_t  __attribute__((visibility("default"))) TS_MonitorUpdateError_new(jstri
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -15784,14 +18467,37 @@ uint32_t  __attribute__((visibility("default"))) TS_MonitorUpdateError_new(jstri
        return ret_ref;
 }
 
+static inline uint64_t MonitorUpdateError_clone_ptr(LDKMonitorUpdateError *NONNULL_PTR arg) {
+       LDKMonitorUpdateError ret_var = MonitorUpdateError_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_MonitorUpdateError_clone_ptr(uint32_t arg) {
+       LDKMonitorUpdateError arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = MonitorUpdateError_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_MonitorUpdateError_clone(uint32_t orig) {
        LDKMonitorUpdateError orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKMonitorUpdateError ret_var = MonitorUpdateError_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -15808,6 +18514,18 @@ void  __attribute__((visibility("default"))) TS_MonitorEvent_free(uint32_t this_
        MonitorEvent_free(this_ptr_conv);
 }
 
+static inline uint64_t MonitorEvent_clone_ptr(LDKMonitorEvent *NONNULL_PTR arg) {
+       LDKMonitorEvent *ret_copy = MALLOC(sizeof(LDKMonitorEvent), "LDKMonitorEvent");
+       *ret_copy = MonitorEvent_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_MonitorEvent_clone_ptr(uint32_t arg) {
+       LDKMonitorEvent* arg_conv = (LDKMonitorEvent*)arg;
+       int64_t ret_val = MonitorEvent_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_MonitorEvent_clone(uint32_t orig) {
        LDKMonitorEvent* orig_conv = (LDKMonitorEvent*)orig;
        LDKMonitorEvent *ret_copy = MALLOC(sizeof(LDKMonitorEvent), "LDKMonitorEvent");
@@ -15820,6 +18538,7 @@ uint32_t  __attribute__((visibility("default"))) TS_MonitorEvent_htlcevent(uint3
        LDKHTLCUpdate a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = (a & 1) || (a == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv = HTLCUpdate_clone(&a_conv);
        LDKMonitorEvent *ret_copy = MALLOC(sizeof(LDKMonitorEvent), "LDKMonitorEvent");
        *ret_copy = MonitorEvent_htlcevent(a_conv);
@@ -15831,6 +18550,7 @@ uint32_t  __attribute__((visibility("default"))) TS_MonitorEvent_commitment_tx_c
        LDKOutPoint a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = (a & 1) || (a == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv = OutPoint_clone(&a_conv);
        LDKMonitorEvent *ret_copy = MALLOC(sizeof(LDKMonitorEvent), "LDKMonitorEvent");
        *ret_copy = MonitorEvent_commitment_tx_confirmed(a_conv);
@@ -15842,6 +18562,7 @@ uint32_t  __attribute__((visibility("default"))) TS_MonitorEvent_update_complete
        LDKOutPoint funding_txo_conv;
        funding_txo_conv.inner = (void*)(funding_txo & (~1));
        funding_txo_conv.is_owned = (funding_txo & 1) || (funding_txo == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_txo_conv);
        funding_txo_conv = OutPoint_clone(&funding_txo_conv);
        LDKMonitorEvent *ret_copy = MALLOC(sizeof(LDKMonitorEvent), "LDKMonitorEvent");
        *ret_copy = MonitorEvent_update_completed(funding_txo_conv, monitor_update_id);
@@ -15853,6 +18574,7 @@ uint32_t  __attribute__((visibility("default"))) TS_MonitorEvent_update_failed(u
        LDKOutPoint a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = (a & 1) || (a == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv = OutPoint_clone(&a_conv);
        LDKMonitorEvent *ret_copy = MALLOC(sizeof(LDKMonitorEvent), "LDKMonitorEvent");
        *ret_copy = MonitorEvent_update_failed(a_conv);
@@ -15869,21 +18591,54 @@ int8_tArray  __attribute__((visibility("default"))) TS_MonitorEvent_write(uint32
        return ret_arr;
 }
 
+uint32_t  __attribute__((visibility("default"))) TS_MonitorEvent_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = *((uint32_t*)ser);
+       ser_ref.data = (int8_t*)(ser + 4);
+       LDKCResult_COption_MonitorEventZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_MonitorEventZDecodeErrorZ), "LDKCResult_COption_MonitorEventZDecodeErrorZ");
+       *ret_conv = MonitorEvent_read(ser_ref);
+       return (uint64_t)ret_conv;
+}
+
 void  __attribute__((visibility("default"))) TS_HTLCUpdate_free(uint32_t this_obj) {
        LDKHTLCUpdate this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        HTLCUpdate_free(this_obj_conv);
 }
 
+static inline uint64_t HTLCUpdate_clone_ptr(LDKHTLCUpdate *NONNULL_PTR arg) {
+       LDKHTLCUpdate ret_var = HTLCUpdate_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_HTLCUpdate_clone_ptr(uint32_t arg) {
+       LDKHTLCUpdate arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = HTLCUpdate_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_HTLCUpdate_clone(uint32_t orig) {
        LDKHTLCUpdate orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKHTLCUpdate ret_var = HTLCUpdate_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -15895,6 +18650,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_HTLCUpdate_write(uint32_t
        LDKHTLCUpdate obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = HTLCUpdate_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -15920,6 +18676,18 @@ void  __attribute__((visibility("default"))) TS_Balance_free(uint32_t this_ptr)
        Balance_free(this_ptr_conv);
 }
 
+static inline uint64_t Balance_clone_ptr(LDKBalance *NONNULL_PTR arg) {
+       LDKBalance *ret_copy = MALLOC(sizeof(LDKBalance), "LDKBalance");
+       *ret_copy = Balance_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_Balance_clone_ptr(uint32_t arg) {
+       LDKBalance* arg_conv = (LDKBalance*)arg;
+       int64_t ret_val = Balance_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_Balance_clone(uint32_t orig) {
        LDKBalance* orig_conv = (LDKBalance*)orig;
        LDKBalance *ret_copy = MALLOC(sizeof(LDKBalance), "LDKBalance");
@@ -15967,17 +18735,41 @@ void  __attribute__((visibility("default"))) TS_ChannelMonitor_free(uint32_t thi
        LDKChannelMonitor this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelMonitor_free(this_obj_conv);
 }
 
+static inline uint64_t ChannelMonitor_clone_ptr(LDKChannelMonitor *NONNULL_PTR arg) {
+       LDKChannelMonitor ret_var = ChannelMonitor_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_ChannelMonitor_clone_ptr(uint32_t arg) {
+       LDKChannelMonitor arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChannelMonitor_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_ChannelMonitor_clone(uint32_t orig) {
        LDKChannelMonitor orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChannelMonitor ret_var = ChannelMonitor_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -15989,6 +18781,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ChannelMonitor_write(uint
        LDKChannelMonitor obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ChannelMonitor_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -16000,9 +18793,11 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelMonitor_update_monito
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKChannelMonitorUpdate updates_conv;
        updates_conv.inner = (void*)(updates & (~1));
        updates_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(updates_conv);
        void* broadcaster_ptr = (void*)(((uint64_t)broadcaster) & ~1);
        if (!(broadcaster & 1)) { CHECK_ACCESS(broadcaster_ptr); }
        LDKBroadcasterInterface* broadcaster_conv = (LDKBroadcasterInterface*)broadcaster_ptr;
@@ -16021,6 +18816,7 @@ int64_t  __attribute__((visibility("default"))) TS_ChannelMonitor_get_latest_upd
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = ChannelMonitor_get_latest_update_id(&this_arg_conv);
        return ret_val;
 }
@@ -16029,6 +18825,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelMonitor_get_funding_t
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKC2Tuple_OutPointScriptZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OutPointScriptZ), "LDKC2Tuple_OutPointScriptZ");
        *ret_conv = ChannelMonitor_get_funding_txo(&this_arg_conv);
        return ((uint64_t)ret_conv);
@@ -16038,6 +18835,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_ChannelMonitor_get_outp
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ ret_var = ChannelMonitor_get_outputs_to_watch(&this_arg_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_arr(ret_var.datalen, sizeof(uint32_t), "Native uint32_tArray Bytes");
@@ -16056,6 +18854,7 @@ void  __attribute__((visibility("default"))) TS_ChannelMonitor_load_outputs_to_w
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        void* filter_ptr = (void*)(((uint64_t)filter) & ~1);
        if (!(filter & 1)) { CHECK_ACCESS(filter_ptr); }
        LDKFilter* filter_conv = (LDKFilter*)filter_ptr;
@@ -16066,6 +18865,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_ChannelMonitor_get_and_
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCVec_MonitorEventZ ret_var = ChannelMonitor_get_and_clear_pending_monitor_events(&this_arg_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_arr(ret_var.datalen, sizeof(uint32_t), "Native uint32_tArray Bytes");
@@ -16085,6 +18885,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_ChannelMonitor_get_and_
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCVec_EventZ ret_var = ChannelMonitor_get_and_clear_pending_events(&this_arg_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_arr(ret_var.datalen, sizeof(uint32_t), "Native uint32_tArray Bytes");
@@ -16104,6 +18905,7 @@ ptrArray  __attribute__((visibility("default"))) TS_ChannelMonitor_get_latest_ho
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        void* logger_ptr = (void*)(((uint64_t)logger) & ~1);
        if (!(logger & 1)) { CHECK_ACCESS(logger_ptr); }
        LDKLogger* logger_conv = (LDKLogger*)logger_ptr;
@@ -16127,6 +18929,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_ChannelMonitor_block_co
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char header_arr[80];
        CHECK(*((uint32_t*)header) == 80);
        memcpy(header_arr, (uint8_t*)(header + 4), 80);
@@ -16173,6 +18976,7 @@ void  __attribute__((visibility("default"))) TS_ChannelMonitor_block_disconnecte
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char header_arr[80];
        CHECK(*((uint32_t*)header) == 80);
        memcpy(header_arr, (uint8_t*)(header + 4), 80);
@@ -16193,6 +18997,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_ChannelMonitor_transact
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char header_arr[80];
        CHECK(*((uint32_t*)header) == 80);
        memcpy(header_arr, (uint8_t*)(header + 4), 80);
@@ -16239,6 +19044,7 @@ void  __attribute__((visibility("default"))) TS_ChannelMonitor_transaction_uncon
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char txid_arr[32];
        CHECK(*((uint32_t*)txid) == 32);
        memcpy(txid_arr, (uint8_t*)(txid + 4), 32);
@@ -16259,6 +19065,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_ChannelMonitor_best_blo
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char header_arr[80];
        CHECK(*((uint32_t*)header) == 80);
        memcpy(header_arr, (uint8_t*)(header + 4), 80);
@@ -16290,6 +19097,7 @@ ptrArray  __attribute__((visibility("default"))) TS_ChannelMonitor_get_relevant_
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCVec_TxidZ ret_var = ChannelMonitor_get_relevant_txids(&this_arg_conv);
        ptrArray ret_arr = NULL;
        ret_arr = init_arr(ret_var.datalen, sizeof(uint32_t), "Native ptrArray Bytes");
@@ -16308,10 +19116,12 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelMonitor_current_best_
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKBestBlock ret_var = ChannelMonitor_current_best_block(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -16323,6 +19133,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_ChannelMonitor_get_clai
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCVec_BalanceZ ret_var = ChannelMonitor_get_claimable_balances(&this_arg_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_arr(ret_var.datalen, sizeof(uint32_t), "Native uint32_tArray Bytes");
@@ -16354,6 +19165,7 @@ void  __attribute__((visibility("default"))) TS_OutPoint_free(uint32_t this_obj)
        LDKOutPoint this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        OutPoint_free(this_obj_conv);
 }
 
@@ -16361,6 +19173,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_OutPoint_get_txid(uint32_
        LDKOutPoint this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *OutPoint_get_txid(&this_ptr_conv), 32);
        return ret_arr;
@@ -16370,6 +19183,7 @@ void  __attribute__((visibility("default"))) TS_OutPoint_set_txid(uint32_t this_
        LDKOutPoint this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -16380,6 +19194,7 @@ int16_t  __attribute__((visibility("default"))) TS_OutPoint_get_index(uint32_t t
        LDKOutPoint this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = OutPoint_get_index(&this_ptr_conv);
        return ret_val;
 }
@@ -16388,6 +19203,7 @@ void  __attribute__((visibility("default"))) TS_OutPoint_set_index(uint32_t this
        LDKOutPoint this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        OutPoint_set_index(&this_ptr_conv, val);
 }
 
@@ -16399,6 +19215,7 @@ uint32_t  __attribute__((visibility("default"))) TS_OutPoint_new(int8_tArray txi
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -16406,14 +19223,37 @@ uint32_t  __attribute__((visibility("default"))) TS_OutPoint_new(int8_tArray txi
        return ret_ref;
 }
 
+static inline uint64_t OutPoint_clone_ptr(LDKOutPoint *NONNULL_PTR arg) {
+       LDKOutPoint ret_var = OutPoint_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_OutPoint_clone_ptr(uint32_t arg) {
+       LDKOutPoint arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = OutPoint_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_OutPoint_clone(uint32_t orig) {
        LDKOutPoint orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKOutPoint ret_var = OutPoint_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -16425,9 +19265,11 @@ jboolean  __attribute__((visibility("default"))) TS_OutPoint_eq(uint32_t a, uint
        LDKOutPoint a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKOutPoint b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = OutPoint_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -16436,6 +19278,7 @@ int64_t  __attribute__((visibility("default"))) TS_OutPoint_hash(uint32_t o) {
        LDKOutPoint o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = OutPoint_hash(&o_conv);
        return ret_val;
 }
@@ -16444,6 +19287,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_OutPoint_to_channel_id(ui
        LDKOutPoint this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), OutPoint_to_channel_id(&this_arg_conv).data, 32);
        return ret_arr;
@@ -16453,6 +19297,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_OutPoint_write(uint32_t o
        LDKOutPoint obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = OutPoint_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -16473,6 +19318,7 @@ void  __attribute__((visibility("default"))) TS_DelayedPaymentOutputDescriptor_f
        LDKDelayedPaymentOutputDescriptor this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        DelayedPaymentOutputDescriptor_free(this_obj_conv);
 }
 
@@ -16480,10 +19326,12 @@ uint32_t  __attribute__((visibility("default"))) TS_DelayedPaymentOutputDescript
        LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKOutPoint ret_var = DelayedPaymentOutputDescriptor_get_outpoint(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -16495,9 +19343,11 @@ void  __attribute__((visibility("default"))) TS_DelayedPaymentOutputDescriptor_s
        LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKOutPoint val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = OutPoint_clone(&val_conv);
        DelayedPaymentOutputDescriptor_set_outpoint(&this_ptr_conv, val_conv);
 }
@@ -16506,6 +19356,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_DelayedPaymentOutputDescr
        LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), DelayedPaymentOutputDescriptor_get_per_commitment_point(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -16515,6 +19366,7 @@ void  __attribute__((visibility("default"))) TS_DelayedPaymentOutputDescriptor_s
        LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -16525,6 +19377,7 @@ int16_t  __attribute__((visibility("default"))) TS_DelayedPaymentOutputDescripto
        LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = DelayedPaymentOutputDescriptor_get_to_self_delay(&this_ptr_conv);
        return ret_val;
 }
@@ -16533,6 +19386,7 @@ void  __attribute__((visibility("default"))) TS_DelayedPaymentOutputDescriptor_s
        LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        DelayedPaymentOutputDescriptor_set_to_self_delay(&this_ptr_conv, val);
 }
 
@@ -16540,6 +19394,7 @@ void  __attribute__((visibility("default"))) TS_DelayedPaymentOutputDescriptor_s
        LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKTxOut val_conv = *(LDKTxOut*)(val_ptr);
@@ -16551,6 +19406,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_DelayedPaymentOutputDescr
        LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), DelayedPaymentOutputDescriptor_get_revocation_pubkey(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -16560,6 +19416,7 @@ void  __attribute__((visibility("default"))) TS_DelayedPaymentOutputDescriptor_s
        LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -16570,6 +19427,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_DelayedPaymentOutputDescr
        LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *DelayedPaymentOutputDescriptor_get_channel_keys_id(&this_ptr_conv), 32);
        return ret_arr;
@@ -16579,6 +19437,7 @@ void  __attribute__((visibility("default"))) TS_DelayedPaymentOutputDescriptor_s
        LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -16589,6 +19448,7 @@ int64_t  __attribute__((visibility("default"))) TS_DelayedPaymentOutputDescripto
        LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = DelayedPaymentOutputDescriptor_get_channel_value_satoshis(&this_ptr_conv);
        return ret_val;
 }
@@ -16597,6 +19457,7 @@ void  __attribute__((visibility("default"))) TS_DelayedPaymentOutputDescriptor_s
        LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        DelayedPaymentOutputDescriptor_set_channel_value_satoshis(&this_ptr_conv, val);
 }
 
@@ -16604,6 +19465,7 @@ uint32_t  __attribute__((visibility("default"))) TS_DelayedPaymentOutputDescript
        LDKOutPoint outpoint_arg_conv;
        outpoint_arg_conv.inner = (void*)(outpoint_arg & (~1));
        outpoint_arg_conv.is_owned = (outpoint_arg & 1) || (outpoint_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_arg_conv);
        outpoint_arg_conv = OutPoint_clone(&outpoint_arg_conv);
        LDKPublicKey per_commitment_point_arg_ref;
        CHECK(*((uint32_t*)per_commitment_point_arg) == 33);
@@ -16622,6 +19484,7 @@ uint32_t  __attribute__((visibility("default"))) TS_DelayedPaymentOutputDescript
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -16629,14 +19492,37 @@ uint32_t  __attribute__((visibility("default"))) TS_DelayedPaymentOutputDescript
        return ret_ref;
 }
 
+static inline uint64_t DelayedPaymentOutputDescriptor_clone_ptr(LDKDelayedPaymentOutputDescriptor *NONNULL_PTR arg) {
+       LDKDelayedPaymentOutputDescriptor ret_var = DelayedPaymentOutputDescriptor_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_DelayedPaymentOutputDescriptor_clone_ptr(uint32_t arg) {
+       LDKDelayedPaymentOutputDescriptor arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = DelayedPaymentOutputDescriptor_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_DelayedPaymentOutputDescriptor_clone(uint32_t orig) {
        LDKDelayedPaymentOutputDescriptor orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKDelayedPaymentOutputDescriptor ret_var = DelayedPaymentOutputDescriptor_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -16648,6 +19534,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_DelayedPaymentOutputDescr
        LDKDelayedPaymentOutputDescriptor obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = DelayedPaymentOutputDescriptor_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -16668,6 +19555,7 @@ void  __attribute__((visibility("default"))) TS_StaticPaymentOutputDescriptor_fr
        LDKStaticPaymentOutputDescriptor this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        StaticPaymentOutputDescriptor_free(this_obj_conv);
 }
 
@@ -16675,10 +19563,12 @@ uint32_t  __attribute__((visibility("default"))) TS_StaticPaymentOutputDescripto
        LDKStaticPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKOutPoint ret_var = StaticPaymentOutputDescriptor_get_outpoint(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -16690,9 +19580,11 @@ void  __attribute__((visibility("default"))) TS_StaticPaymentOutputDescriptor_se
        LDKStaticPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKOutPoint val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = OutPoint_clone(&val_conv);
        StaticPaymentOutputDescriptor_set_outpoint(&this_ptr_conv, val_conv);
 }
@@ -16701,6 +19593,7 @@ void  __attribute__((visibility("default"))) TS_StaticPaymentOutputDescriptor_se
        LDKStaticPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKTxOut val_conv = *(LDKTxOut*)(val_ptr);
@@ -16712,6 +19605,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_StaticPaymentOutputDescri
        LDKStaticPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *StaticPaymentOutputDescriptor_get_channel_keys_id(&this_ptr_conv), 32);
        return ret_arr;
@@ -16721,6 +19615,7 @@ void  __attribute__((visibility("default"))) TS_StaticPaymentOutputDescriptor_se
        LDKStaticPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -16731,6 +19626,7 @@ int64_t  __attribute__((visibility("default"))) TS_StaticPaymentOutputDescriptor
        LDKStaticPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = StaticPaymentOutputDescriptor_get_channel_value_satoshis(&this_ptr_conv);
        return ret_val;
 }
@@ -16739,6 +19635,7 @@ void  __attribute__((visibility("default"))) TS_StaticPaymentOutputDescriptor_se
        LDKStaticPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        StaticPaymentOutputDescriptor_set_channel_value_satoshis(&this_ptr_conv, val);
 }
 
@@ -16746,6 +19643,7 @@ uint32_t  __attribute__((visibility("default"))) TS_StaticPaymentOutputDescripto
        LDKOutPoint outpoint_arg_conv;
        outpoint_arg_conv.inner = (void*)(outpoint_arg & (~1));
        outpoint_arg_conv.is_owned = (outpoint_arg & 1) || (outpoint_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_arg_conv);
        outpoint_arg_conv = OutPoint_clone(&outpoint_arg_conv);
        void* output_arg_ptr = (void*)(((uint64_t)output_arg) & ~1);
        CHECK_ACCESS(output_arg_ptr);
@@ -16758,6 +19656,7 @@ uint32_t  __attribute__((visibility("default"))) TS_StaticPaymentOutputDescripto
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -16765,14 +19664,37 @@ uint32_t  __attribute__((visibility("default"))) TS_StaticPaymentOutputDescripto
        return ret_ref;
 }
 
+static inline uint64_t StaticPaymentOutputDescriptor_clone_ptr(LDKStaticPaymentOutputDescriptor *NONNULL_PTR arg) {
+       LDKStaticPaymentOutputDescriptor ret_var = StaticPaymentOutputDescriptor_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_StaticPaymentOutputDescriptor_clone_ptr(uint32_t arg) {
+       LDKStaticPaymentOutputDescriptor arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = StaticPaymentOutputDescriptor_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_StaticPaymentOutputDescriptor_clone(uint32_t orig) {
        LDKStaticPaymentOutputDescriptor orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKStaticPaymentOutputDescriptor ret_var = StaticPaymentOutputDescriptor_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -16784,6 +19706,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_StaticPaymentOutputDescri
        LDKStaticPaymentOutputDescriptor obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = StaticPaymentOutputDescriptor_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -16809,6 +19732,18 @@ void  __attribute__((visibility("default"))) TS_SpendableOutputDescriptor_free(u
        SpendableOutputDescriptor_free(this_ptr_conv);
 }
 
+static inline uint64_t SpendableOutputDescriptor_clone_ptr(LDKSpendableOutputDescriptor *NONNULL_PTR arg) {
+       LDKSpendableOutputDescriptor *ret_copy = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor");
+       *ret_copy = SpendableOutputDescriptor_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_SpendableOutputDescriptor_clone_ptr(uint32_t arg) {
+       LDKSpendableOutputDescriptor* arg_conv = (LDKSpendableOutputDescriptor*)arg;
+       int64_t ret_val = SpendableOutputDescriptor_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_SpendableOutputDescriptor_clone(uint32_t orig) {
        LDKSpendableOutputDescriptor* orig_conv = (LDKSpendableOutputDescriptor*)orig;
        LDKSpendableOutputDescriptor *ret_copy = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor");
@@ -16821,6 +19756,7 @@ uint32_t  __attribute__((visibility("default"))) TS_SpendableOutputDescriptor_st
        LDKOutPoint outpoint_conv;
        outpoint_conv.inner = (void*)(outpoint & (~1));
        outpoint_conv.is_owned = (outpoint & 1) || (outpoint == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_conv);
        outpoint_conv = OutPoint_clone(&outpoint_conv);
        void* output_ptr = (void*)(((uint64_t)output) & ~1);
        CHECK_ACCESS(output_ptr);
@@ -16836,6 +19772,7 @@ uint32_t  __attribute__((visibility("default"))) TS_SpendableOutputDescriptor_de
        LDKDelayedPaymentOutputDescriptor a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = (a & 1) || (a == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv = DelayedPaymentOutputDescriptor_clone(&a_conv);
        LDKSpendableOutputDescriptor *ret_copy = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor");
        *ret_copy = SpendableOutputDescriptor_delayed_payment_output(a_conv);
@@ -16847,6 +19784,7 @@ uint32_t  __attribute__((visibility("default"))) TS_SpendableOutputDescriptor_st
        LDKStaticPaymentOutputDescriptor a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = (a & 1) || (a == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv = StaticPaymentOutputDescriptor_clone(&a_conv);
        LDKSpendableOutputDescriptor *ret_copy = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor");
        *ret_copy = SpendableOutputDescriptor_static_payment_output(a_conv);
@@ -16881,6 +19819,19 @@ void  __attribute__((visibility("default"))) TS_BaseSign_free(uint32_t this_ptr)
        BaseSign_free(this_ptr_conv);
 }
 
+static inline uint64_t Sign_clone_ptr(LDKSign *NONNULL_PTR arg) {
+       LDKSign* ret_ret = MALLOC(sizeof(LDKSign), "LDKSign");
+       *ret_ret = Sign_clone(arg);
+       return (uint64_t)ret_ret;
+}
+int64_t  __attribute__((visibility("default"))) TS_Sign_clone_ptr(uint32_t arg) {
+       void* arg_ptr = (void*)(((uint64_t)arg) & ~1);
+       if (!(arg & 1)) { CHECK_ACCESS(arg_ptr); }
+       LDKSign* arg_conv = (LDKSign*)arg_ptr;
+       int64_t ret_val = Sign_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_Sign_clone(uint32_t orig) {
        void* orig_ptr = (void*)(((uint64_t)orig) & ~1);
        if (!(orig & 1)) { CHECK_ACCESS(orig_ptr); }
@@ -16912,6 +19863,7 @@ void  __attribute__((visibility("default"))) TS_InMemorySigner_free(uint32_t thi
        LDKInMemorySigner this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        InMemorySigner_free(this_obj_conv);
 }
 
@@ -16919,6 +19871,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_InMemorySigner_get_fundin
        LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *InMemorySigner_get_funding_key(&this_ptr_conv), 32);
        return ret_arr;
@@ -16928,6 +19881,7 @@ void  __attribute__((visibility("default"))) TS_InMemorySigner_set_funding_key(u
        LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSecretKey val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.bytes, (uint8_t*)(val + 4), 32);
@@ -16938,6 +19892,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_InMemorySigner_get_revoca
        LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *InMemorySigner_get_revocation_base_key(&this_ptr_conv), 32);
        return ret_arr;
@@ -16947,6 +19902,7 @@ void  __attribute__((visibility("default"))) TS_InMemorySigner_set_revocation_ba
        LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSecretKey val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.bytes, (uint8_t*)(val + 4), 32);
@@ -16957,6 +19913,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_InMemorySigner_get_paymen
        LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *InMemorySigner_get_payment_key(&this_ptr_conv), 32);
        return ret_arr;
@@ -16966,6 +19923,7 @@ void  __attribute__((visibility("default"))) TS_InMemorySigner_set_payment_key(u
        LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSecretKey val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.bytes, (uint8_t*)(val + 4), 32);
@@ -16976,6 +19934,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_InMemorySigner_get_delaye
        LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *InMemorySigner_get_delayed_payment_base_key(&this_ptr_conv), 32);
        return ret_arr;
@@ -16985,6 +19944,7 @@ void  __attribute__((visibility("default"))) TS_InMemorySigner_set_delayed_payme
        LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSecretKey val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.bytes, (uint8_t*)(val + 4), 32);
@@ -16995,6 +19955,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_InMemorySigner_get_htlc_b
        LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *InMemorySigner_get_htlc_base_key(&this_ptr_conv), 32);
        return ret_arr;
@@ -17004,6 +19965,7 @@ void  __attribute__((visibility("default"))) TS_InMemorySigner_set_htlc_base_key
        LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSecretKey val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.bytes, (uint8_t*)(val + 4), 32);
@@ -17014,6 +19976,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_InMemorySigner_get_commit
        LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *InMemorySigner_get_commitment_seed(&this_ptr_conv), 32);
        return ret_arr;
@@ -17023,20 +19986,44 @@ void  __attribute__((visibility("default"))) TS_InMemorySigner_set_commitment_se
        LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
        InMemorySigner_set_commitment_seed(&this_ptr_conv, val_ref);
 }
 
+static inline uint64_t InMemorySigner_clone_ptr(LDKInMemorySigner *NONNULL_PTR arg) {
+       LDKInMemorySigner ret_var = InMemorySigner_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_InMemorySigner_clone_ptr(uint32_t arg) {
+       LDKInMemorySigner arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = InMemorySigner_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_InMemorySigner_clone(uint32_t orig) {
        LDKInMemorySigner orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKInMemorySigner ret_var = InMemorySigner_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -17070,6 +20057,7 @@ uint32_t  __attribute__((visibility("default"))) TS_InMemorySigner_new(int8_tArr
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -17081,10 +20069,12 @@ uint32_t  __attribute__((visibility("default"))) TS_InMemorySigner_counterparty_
        LDKInMemorySigner this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKChannelPublicKeys ret_var = InMemorySigner_counterparty_pubkeys(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -17096,6 +20086,7 @@ int16_t  __attribute__((visibility("default"))) TS_InMemorySigner_counterparty_s
        LDKInMemorySigner this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int16_t ret_val = InMemorySigner_counterparty_selected_contest_delay(&this_arg_conv);
        return ret_val;
 }
@@ -17104,6 +20095,7 @@ int16_t  __attribute__((visibility("default"))) TS_InMemorySigner_holder_selecte
        LDKInMemorySigner this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int16_t ret_val = InMemorySigner_holder_selected_contest_delay(&this_arg_conv);
        return ret_val;
 }
@@ -17112,6 +20104,7 @@ jboolean  __attribute__((visibility("default"))) TS_InMemorySigner_is_outbound(u
        LDKInMemorySigner this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        jboolean ret_val = InMemorySigner_is_outbound(&this_arg_conv);
        return ret_val;
 }
@@ -17120,10 +20113,12 @@ uint32_t  __attribute__((visibility("default"))) TS_InMemorySigner_funding_outpo
        LDKInMemorySigner this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKOutPoint ret_var = InMemorySigner_funding_outpoint(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -17135,10 +20130,12 @@ uint32_t  __attribute__((visibility("default"))) TS_InMemorySigner_get_channel_p
        LDKInMemorySigner this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKChannelTransactionParameters ret_var = InMemorySigner_get_channel_parameters(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -17150,6 +20147,7 @@ uint32_t  __attribute__((visibility("default"))) TS_InMemorySigner_sign_counterp
        LDKInMemorySigner this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKTransaction spend_tx_ref;
        spend_tx_ref.datalen = *((uint32_t*)spend_tx);
        spend_tx_ref.data = MALLOC(spend_tx_ref.datalen, "LDKTransaction Bytes");
@@ -17158,6 +20156,7 @@ uint32_t  __attribute__((visibility("default"))) TS_InMemorySigner_sign_counterp
        LDKStaticPaymentOutputDescriptor descriptor_conv;
        descriptor_conv.inner = (void*)(descriptor & (~1));
        descriptor_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(descriptor_conv);
        LDKCResult_CVec_CVec_u8ZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_CVec_u8ZZNoneZ), "LDKCResult_CVec_CVec_u8ZZNoneZ");
        *ret_conv = InMemorySigner_sign_counterparty_payment_input(&this_arg_conv, spend_tx_ref, input_idx, &descriptor_conv);
        return (uint64_t)ret_conv;
@@ -17167,6 +20166,7 @@ uint32_t  __attribute__((visibility("default"))) TS_InMemorySigner_sign_dynamic_
        LDKInMemorySigner this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKTransaction spend_tx_ref;
        spend_tx_ref.datalen = *((uint32_t*)spend_tx);
        spend_tx_ref.data = MALLOC(spend_tx_ref.datalen, "LDKTransaction Bytes");
@@ -17175,6 +20175,7 @@ uint32_t  __attribute__((visibility("default"))) TS_InMemorySigner_sign_dynamic_
        LDKDelayedPaymentOutputDescriptor descriptor_conv;
        descriptor_conv.inner = (void*)(descriptor & (~1));
        descriptor_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(descriptor_conv);
        LDKCResult_CVec_CVec_u8ZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_CVec_u8ZZNoneZ), "LDKCResult_CVec_CVec_u8ZZNoneZ");
        *ret_conv = InMemorySigner_sign_dynamic_p2wsh_input(&this_arg_conv, spend_tx_ref, input_idx, &descriptor_conv);
        return (uint64_t)ret_conv;
@@ -17184,6 +20185,7 @@ uint32_t  __attribute__((visibility("default"))) TS_InMemorySigner_as_BaseSign(u
        LDKInMemorySigner this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKBaseSign* ret_ret = MALLOC(sizeof(LDKBaseSign), "LDKBaseSign");
        *ret_ret = InMemorySigner_as_BaseSign(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -17193,6 +20195,7 @@ uint32_t  __attribute__((visibility("default"))) TS_InMemorySigner_as_Sign(uint3
        LDKInMemorySigner this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKSign* ret_ret = MALLOC(sizeof(LDKSign), "LDKSign");
        *ret_ret = InMemorySigner_as_Sign(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -17202,6 +20205,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_InMemorySigner_write(uint
        LDKInMemorySigner obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = InMemorySigner_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -17222,6 +20226,7 @@ void  __attribute__((visibility("default"))) TS_KeysManager_free(uint32_t this_o
        LDKKeysManager this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        KeysManager_free(this_obj_conv);
 }
 
@@ -17234,6 +20239,7 @@ uint32_t  __attribute__((visibility("default"))) TS_KeysManager_new(int8_tArray
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -17245,6 +20251,7 @@ uint32_t  __attribute__((visibility("default"))) TS_KeysManager_derive_channel_k
        LDKKeysManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char params_arr[32];
        CHECK(*((uint32_t*)params) == 32);
        memcpy(params_arr, (uint8_t*)(params + 4), 32);
@@ -17253,6 +20260,7 @@ uint32_t  __attribute__((visibility("default"))) TS_KeysManager_derive_channel_k
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -17264,6 +20272,7 @@ uint32_t  __attribute__((visibility("default"))) TS_KeysManager_spend_spendable_
        LDKKeysManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCVec_SpendableOutputDescriptorZ descriptors_constr;
        descriptors_constr.datalen = *((uint32_t*)descriptors);
        if (descriptors_constr.datalen > 0)
@@ -17307,6 +20316,7 @@ uint32_t  __attribute__((visibility("default"))) TS_KeysManager_as_KeysInterface
        LDKKeysManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKKeysInterface* ret_ret = MALLOC(sizeof(LDKKeysInterface), "LDKKeysInterface");
        *ret_ret = KeysManager_as_KeysInterface(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -17316,6 +20326,7 @@ void  __attribute__((visibility("default"))) TS_ChannelManager_free(uint32_t thi
        LDKChannelManager this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelManager_free(this_obj_conv);
 }
 
@@ -17323,6 +20334,7 @@ void  __attribute__((visibility("default"))) TS_ChainParameters_free(uint32_t th
        LDKChainParameters this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChainParameters_free(this_obj_conv);
 }
 
@@ -17330,6 +20342,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChainParameters_get_network(
        LDKChainParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        uint32_t ret_conv = LDKNetwork_to_js(ChainParameters_get_network(&this_ptr_conv));
        return ret_conv;
 }
@@ -17338,6 +20351,7 @@ void  __attribute__((visibility("default"))) TS_ChainParameters_set_network(uint
        LDKChainParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNetwork val_conv = LDKNetwork_from_js(val);
        ChainParameters_set_network(&this_ptr_conv, val_conv);
 }
@@ -17346,10 +20360,12 @@ uint32_t  __attribute__((visibility("default"))) TS_ChainParameters_get_best_blo
        LDKChainParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKBestBlock ret_var = ChainParameters_get_best_block(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -17361,9 +20377,11 @@ void  __attribute__((visibility("default"))) TS_ChainParameters_set_best_block(u
        LDKChainParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKBestBlock val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = BestBlock_clone(&val_conv);
        ChainParameters_set_best_block(&this_ptr_conv, val_conv);
 }
@@ -17373,11 +20391,13 @@ uint32_t  __attribute__((visibility("default"))) TS_ChainParameters_new(uint32_t
        LDKBestBlock best_block_arg_conv;
        best_block_arg_conv.inner = (void*)(best_block_arg & (~1));
        best_block_arg_conv.is_owned = (best_block_arg & 1) || (best_block_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(best_block_arg_conv);
        best_block_arg_conv = BestBlock_clone(&best_block_arg_conv);
        LDKChainParameters ret_var = ChainParameters_new(network_arg_conv, best_block_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -17385,14 +20405,37 @@ uint32_t  __attribute__((visibility("default"))) TS_ChainParameters_new(uint32_t
        return ret_ref;
 }
 
+static inline uint64_t ChainParameters_clone_ptr(LDKChainParameters *NONNULL_PTR arg) {
+       LDKChainParameters ret_var = ChainParameters_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_ChainParameters_clone_ptr(uint32_t arg) {
+       LDKChainParameters arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChainParameters_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_ChainParameters_clone(uint32_t orig) {
        LDKChainParameters orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChainParameters ret_var = ChainParameters_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -17404,6 +20447,7 @@ void  __attribute__((visibility("default"))) TS_CounterpartyForwardingInfo_free(
        LDKCounterpartyForwardingInfo this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        CounterpartyForwardingInfo_free(this_obj_conv);
 }
 
@@ -17411,6 +20455,7 @@ int32_t  __attribute__((visibility("default"))) TS_CounterpartyForwardingInfo_ge
        LDKCounterpartyForwardingInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = CounterpartyForwardingInfo_get_fee_base_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -17419,6 +20464,7 @@ void  __attribute__((visibility("default"))) TS_CounterpartyForwardingInfo_set_f
        LDKCounterpartyForwardingInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        CounterpartyForwardingInfo_set_fee_base_msat(&this_ptr_conv, val);
 }
 
@@ -17426,6 +20472,7 @@ int32_t  __attribute__((visibility("default"))) TS_CounterpartyForwardingInfo_ge
        LDKCounterpartyForwardingInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = CounterpartyForwardingInfo_get_fee_proportional_millionths(&this_ptr_conv);
        return ret_val;
 }
@@ -17434,6 +20481,7 @@ void  __attribute__((visibility("default"))) TS_CounterpartyForwardingInfo_set_f
        LDKCounterpartyForwardingInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        CounterpartyForwardingInfo_set_fee_proportional_millionths(&this_ptr_conv, val);
 }
 
@@ -17441,6 +20489,7 @@ int16_t  __attribute__((visibility("default"))) TS_CounterpartyForwardingInfo_ge
        LDKCounterpartyForwardingInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = CounterpartyForwardingInfo_get_cltv_expiry_delta(&this_ptr_conv);
        return ret_val;
 }
@@ -17449,6 +20498,7 @@ void  __attribute__((visibility("default"))) TS_CounterpartyForwardingInfo_set_c
        LDKCounterpartyForwardingInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        CounterpartyForwardingInfo_set_cltv_expiry_delta(&this_ptr_conv, val);
 }
 
@@ -17457,6 +20507,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CounterpartyForwardingInfo_n
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -17464,14 +20515,37 @@ uint32_t  __attribute__((visibility("default"))) TS_CounterpartyForwardingInfo_n
        return ret_ref;
 }
 
+static inline uint64_t CounterpartyForwardingInfo_clone_ptr(LDKCounterpartyForwardingInfo *NONNULL_PTR arg) {
+       LDKCounterpartyForwardingInfo ret_var = CounterpartyForwardingInfo_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_CounterpartyForwardingInfo_clone_ptr(uint32_t arg) {
+       LDKCounterpartyForwardingInfo arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = CounterpartyForwardingInfo_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CounterpartyForwardingInfo_clone(uint32_t orig) {
        LDKCounterpartyForwardingInfo orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKCounterpartyForwardingInfo ret_var = CounterpartyForwardingInfo_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -17483,6 +20557,7 @@ void  __attribute__((visibility("default"))) TS_ChannelCounterparty_free(uint32_
        LDKChannelCounterparty this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelCounterparty_free(this_obj_conv);
 }
 
@@ -17490,6 +20565,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ChannelCounterparty_get_n
        LDKChannelCounterparty this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ChannelCounterparty_get_node_id(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -17499,6 +20575,7 @@ void  __attribute__((visibility("default"))) TS_ChannelCounterparty_set_node_id(
        LDKChannelCounterparty this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -17509,10 +20586,12 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelCounterparty_get_feat
        LDKChannelCounterparty this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKInitFeatures ret_var = ChannelCounterparty_get_features(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -17524,9 +20603,11 @@ void  __attribute__((visibility("default"))) TS_ChannelCounterparty_set_features
        LDKChannelCounterparty this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKInitFeatures val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = InitFeatures_clone(&val_conv);
        ChannelCounterparty_set_features(&this_ptr_conv, val_conv);
 }
@@ -17535,6 +20616,7 @@ int64_t  __attribute__((visibility("default"))) TS_ChannelCounterparty_get_unspe
        LDKChannelCounterparty this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelCounterparty_get_unspendable_punishment_reserve(&this_ptr_conv);
        return ret_val;
 }
@@ -17543,6 +20625,7 @@ void  __attribute__((visibility("default"))) TS_ChannelCounterparty_set_unspenda
        LDKChannelCounterparty this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelCounterparty_set_unspendable_punishment_reserve(&this_ptr_conv, val);
 }
 
@@ -17550,11 +20633,13 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelCounterparty_get_forw
        LDKChannelCounterparty this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCounterpartyForwardingInfo ret_var = ChannelCounterparty_get_forwarding_info(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -17567,9 +20652,11 @@ void  __attribute__((visibility("default"))) TS_ChannelCounterparty_set_forwardi
        LDKChannelCounterparty this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCounterpartyForwardingInfo val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = CounterpartyForwardingInfo_clone(&val_conv);
        ChannelCounterparty_set_forwarding_info(&this_ptr_conv, val_conv);
 }
@@ -17581,15 +20668,18 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelCounterparty_new(int8
        LDKInitFeatures features_arg_conv;
        features_arg_conv.inner = (void*)(features_arg & (~1));
        features_arg_conv.is_owned = (features_arg & 1) || (features_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_arg_conv);
        features_arg_conv = InitFeatures_clone(&features_arg_conv);
        LDKCounterpartyForwardingInfo forwarding_info_arg_conv;
        forwarding_info_arg_conv.inner = (void*)(forwarding_info_arg & (~1));
        forwarding_info_arg_conv.is_owned = (forwarding_info_arg & 1) || (forwarding_info_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(forwarding_info_arg_conv);
        forwarding_info_arg_conv = CounterpartyForwardingInfo_clone(&forwarding_info_arg_conv);
        LDKChannelCounterparty ret_var = ChannelCounterparty_new(node_id_arg_ref, features_arg_conv, unspendable_punishment_reserve_arg, forwarding_info_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -17597,14 +20687,37 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelCounterparty_new(int8
        return ret_ref;
 }
 
+static inline uint64_t ChannelCounterparty_clone_ptr(LDKChannelCounterparty *NONNULL_PTR arg) {
+       LDKChannelCounterparty ret_var = ChannelCounterparty_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_ChannelCounterparty_clone_ptr(uint32_t arg) {
+       LDKChannelCounterparty arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChannelCounterparty_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_ChannelCounterparty_clone(uint32_t orig) {
        LDKChannelCounterparty orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChannelCounterparty ret_var = ChannelCounterparty_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -17616,6 +20729,7 @@ void  __attribute__((visibility("default"))) TS_ChannelDetails_free(uint32_t thi
        LDKChannelDetails this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelDetails_free(this_obj_conv);
 }
 
@@ -17623,6 +20737,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ChannelDetails_get_channe
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *ChannelDetails_get_channel_id(&this_ptr_conv), 32);
        return ret_arr;
@@ -17632,6 +20747,7 @@ void  __attribute__((visibility("default"))) TS_ChannelDetails_set_channel_id(ui
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -17642,10 +20758,12 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelDetails_get_counterpa
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelCounterparty ret_var = ChannelDetails_get_counterparty(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -17657,9 +20775,11 @@ void  __attribute__((visibility("default"))) TS_ChannelDetails_set_counterparty(
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelCounterparty val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = ChannelCounterparty_clone(&val_conv);
        ChannelDetails_set_counterparty(&this_ptr_conv, val_conv);
 }
@@ -17668,11 +20788,13 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelDetails_get_funding_t
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKOutPoint ret_var = ChannelDetails_get_funding_txo(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -17685,9 +20807,11 @@ void  __attribute__((visibility("default"))) TS_ChannelDetails_set_funding_txo(u
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKOutPoint val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = OutPoint_clone(&val_conv);
        ChannelDetails_set_funding_txo(&this_ptr_conv, val_conv);
 }
@@ -17696,6 +20820,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelDetails_get_short_cha
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
        *ret_copy = ChannelDetails_get_short_channel_id(&this_ptr_conv);
        uint64_t ret_ref = (uint64_t)ret_copy;
@@ -17706,6 +20831,7 @@ void  __attribute__((visibility("default"))) TS_ChannelDetails_set_short_channel
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
@@ -17717,6 +20843,7 @@ int64_t  __attribute__((visibility("default"))) TS_ChannelDetails_get_channel_va
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelDetails_get_channel_value_satoshis(&this_ptr_conv);
        return ret_val;
 }
@@ -17725,6 +20852,7 @@ void  __attribute__((visibility("default"))) TS_ChannelDetails_set_channel_value
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelDetails_set_channel_value_satoshis(&this_ptr_conv, val);
 }
 
@@ -17732,6 +20860,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelDetails_get_unspendab
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
        *ret_copy = ChannelDetails_get_unspendable_punishment_reserve(&this_ptr_conv);
        uint64_t ret_ref = (uint64_t)ret_copy;
@@ -17742,6 +20871,7 @@ void  __attribute__((visibility("default"))) TS_ChannelDetails_set_unspendable_p
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
@@ -17753,6 +20883,7 @@ int64_t  __attribute__((visibility("default"))) TS_ChannelDetails_get_user_chann
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelDetails_get_user_channel_id(&this_ptr_conv);
        return ret_val;
 }
@@ -17761,6 +20892,7 @@ void  __attribute__((visibility("default"))) TS_ChannelDetails_set_user_channel_
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelDetails_set_user_channel_id(&this_ptr_conv, val);
 }
 
@@ -17768,6 +20900,7 @@ int64_t  __attribute__((visibility("default"))) TS_ChannelDetails_get_outbound_c
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelDetails_get_outbound_capacity_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -17776,6 +20909,7 @@ void  __attribute__((visibility("default"))) TS_ChannelDetails_set_outbound_capa
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelDetails_set_outbound_capacity_msat(&this_ptr_conv, val);
 }
 
@@ -17783,6 +20917,7 @@ int64_t  __attribute__((visibility("default"))) TS_ChannelDetails_get_inbound_ca
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelDetails_get_inbound_capacity_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -17791,6 +20926,7 @@ void  __attribute__((visibility("default"))) TS_ChannelDetails_set_inbound_capac
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelDetails_set_inbound_capacity_msat(&this_ptr_conv, val);
 }
 
@@ -17798,6 +20934,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelDetails_get_confirmat
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCOption_u32Z *ret_copy = MALLOC(sizeof(LDKCOption_u32Z), "LDKCOption_u32Z");
        *ret_copy = ChannelDetails_get_confirmations_required(&this_ptr_conv);
        uint64_t ret_ref = (uint64_t)ret_copy;
@@ -17808,6 +20945,7 @@ void  __attribute__((visibility("default"))) TS_ChannelDetails_set_confirmations
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKCOption_u32Z val_conv = *(LDKCOption_u32Z*)(val_ptr);
@@ -17819,6 +20957,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelDetails_get_force_clo
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCOption_u16Z *ret_copy = MALLOC(sizeof(LDKCOption_u16Z), "LDKCOption_u16Z");
        *ret_copy = ChannelDetails_get_force_close_spend_delay(&this_ptr_conv);
        uint64_t ret_ref = (uint64_t)ret_copy;
@@ -17829,6 +20968,7 @@ void  __attribute__((visibility("default"))) TS_ChannelDetails_set_force_close_s
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKCOption_u16Z val_conv = *(LDKCOption_u16Z*)(val_ptr);
@@ -17840,6 +20980,7 @@ jboolean  __attribute__((visibility("default"))) TS_ChannelDetails_get_is_outbou
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        jboolean ret_val = ChannelDetails_get_is_outbound(&this_ptr_conv);
        return ret_val;
 }
@@ -17848,6 +20989,7 @@ void  __attribute__((visibility("default"))) TS_ChannelDetails_set_is_outbound(u
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelDetails_set_is_outbound(&this_ptr_conv, val);
 }
 
@@ -17855,6 +20997,7 @@ jboolean  __attribute__((visibility("default"))) TS_ChannelDetails_get_is_fundin
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        jboolean ret_val = ChannelDetails_get_is_funding_locked(&this_ptr_conv);
        return ret_val;
 }
@@ -17863,6 +21006,7 @@ void  __attribute__((visibility("default"))) TS_ChannelDetails_set_is_funding_lo
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelDetails_set_is_funding_locked(&this_ptr_conv, val);
 }
 
@@ -17870,6 +21014,7 @@ jboolean  __attribute__((visibility("default"))) TS_ChannelDetails_get_is_usable
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        jboolean ret_val = ChannelDetails_get_is_usable(&this_ptr_conv);
        return ret_val;
 }
@@ -17878,6 +21023,7 @@ void  __attribute__((visibility("default"))) TS_ChannelDetails_set_is_usable(uin
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelDetails_set_is_usable(&this_ptr_conv, val);
 }
 
@@ -17885,6 +21031,7 @@ jboolean  __attribute__((visibility("default"))) TS_ChannelDetails_get_is_public
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        jboolean ret_val = ChannelDetails_get_is_public(&this_ptr_conv);
        return ret_val;
 }
@@ -17893,6 +21040,7 @@ void  __attribute__((visibility("default"))) TS_ChannelDetails_set_is_public(uin
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelDetails_set_is_public(&this_ptr_conv, val);
 }
 
@@ -17903,10 +21051,12 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelDetails_new(int8_tArr
        LDKChannelCounterparty counterparty_arg_conv;
        counterparty_arg_conv.inner = (void*)(counterparty_arg & (~1));
        counterparty_arg_conv.is_owned = (counterparty_arg & 1) || (counterparty_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(counterparty_arg_conv);
        counterparty_arg_conv = ChannelCounterparty_clone(&counterparty_arg_conv);
        LDKOutPoint funding_txo_arg_conv;
        funding_txo_arg_conv.inner = (void*)(funding_txo_arg & (~1));
        funding_txo_arg_conv.is_owned = (funding_txo_arg & 1) || (funding_txo_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_txo_arg_conv);
        funding_txo_arg_conv = OutPoint_clone(&funding_txo_arg_conv);
        void* short_channel_id_arg_ptr = (void*)(((uint64_t)short_channel_id_arg) & ~1);
        CHECK_ACCESS(short_channel_id_arg_ptr);
@@ -17927,6 +21077,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelDetails_new(int8_tArr
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -17934,14 +21085,37 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelDetails_new(int8_tArr
        return ret_ref;
 }
 
+static inline uint64_t ChannelDetails_clone_ptr(LDKChannelDetails *NONNULL_PTR arg) {
+       LDKChannelDetails ret_var = ChannelDetails_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_ChannelDetails_clone_ptr(uint32_t arg) {
+       LDKChannelDetails arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChannelDetails_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_ChannelDetails_clone(uint32_t orig) {
        LDKChannelDetails orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChannelDetails ret_var = ChannelDetails_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -17958,6 +21132,18 @@ void  __attribute__((visibility("default"))) TS_PaymentSendFailure_free(uint32_t
        PaymentSendFailure_free(this_ptr_conv);
 }
 
+static inline uint64_t PaymentSendFailure_clone_ptr(LDKPaymentSendFailure *NONNULL_PTR arg) {
+       LDKPaymentSendFailure *ret_copy = MALLOC(sizeof(LDKPaymentSendFailure), "LDKPaymentSendFailure");
+       *ret_copy = PaymentSendFailure_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_PaymentSendFailure_clone_ptr(uint32_t arg) {
+       LDKPaymentSendFailure* arg_conv = (LDKPaymentSendFailure*)arg;
+       int64_t ret_val = PaymentSendFailure_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_PaymentSendFailure_clone(uint32_t orig) {
        LDKPaymentSendFailure* orig_conv = (LDKPaymentSendFailure*)orig;
        LDKPaymentSendFailure *ret_copy = MALLOC(sizeof(LDKPaymentSendFailure), "LDKPaymentSendFailure");
@@ -18039,6 +21225,7 @@ uint32_t  __attribute__((visibility("default"))) TS_PaymentSendFailure_partial_f
        LDKRouteParameters failed_paths_retry_conv;
        failed_paths_retry_conv.inner = (void*)(failed_paths_retry & (~1));
        failed_paths_retry_conv.is_owned = (failed_paths_retry & 1) || (failed_paths_retry == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(failed_paths_retry_conv);
        failed_paths_retry_conv = RouteParameters_clone(&failed_paths_retry_conv);
        LDKThirtyTwoBytes payment_id_ref;
        CHECK(*((uint32_t*)payment_id) == 32);
@@ -18068,15 +21255,18 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelManager_new(uint32_t
        LDKUserConfig config_conv;
        config_conv.inner = (void*)(config & (~1));
        config_conv.is_owned = (config & 1) || (config == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(config_conv);
        config_conv = UserConfig_clone(&config_conv);
        LDKChainParameters params_conv;
        params_conv.inner = (void*)(params & (~1));
        params_conv.is_owned = (params & 1) || (params == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(params_conv);
        params_conv = ChainParameters_clone(&params_conv);
        LDKChannelManager ret_var = ChannelManager_new(fee_est_conv, chain_monitor_conv, tx_broadcaster_conv, logger_conv, keys_manager_conv, config_conv, params_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18088,10 +21278,12 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelManager_get_current_d
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKUserConfig ret_var = ChannelManager_get_current_default_configuration(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18103,12 +21295,14 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelManager_create_channe
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKPublicKey their_network_key_ref;
        CHECK(*((uint32_t*)their_network_key) == 33);
        memcpy(their_network_key_ref.compressed_form, (uint8_t*)(their_network_key + 4), 33);
        LDKUserConfig override_config_conv;
        override_config_conv.inner = (void*)(override_config & (~1));
        override_config_conv.is_owned = (override_config & 1) || (override_config == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(override_config_conv);
        override_config_conv = UserConfig_clone(&override_config_conv);
        LDKCResult__u832APIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult__u832APIErrorZ), "LDKCResult__u832APIErrorZ");
        *ret_conv = ChannelManager_create_channel(&this_arg_conv, their_network_key_ref, channel_value_satoshis, push_msat, user_channel_id, override_config_conv);
@@ -18119,6 +21313,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_ChannelManager_list_cha
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCVec_ChannelDetailsZ ret_var = ChannelManager_list_channels(&this_arg_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_arr(ret_var.datalen, sizeof(uint32_t), "Native uint32_tArray Bytes");
@@ -18128,6 +21323,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_ChannelManager_list_cha
                uint64_t ret_conv_16_ref = 0;
                CHECK((((uint64_t)ret_conv_16_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_conv_16_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_16_var);
                ret_conv_16_ref = (uint64_t)ret_conv_16_var.inner;
                if (ret_conv_16_var.is_owned) {
                        ret_conv_16_ref |= 1;
@@ -18143,6 +21339,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_ChannelManager_list_usa
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCVec_ChannelDetailsZ ret_var = ChannelManager_list_usable_channels(&this_arg_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_arr(ret_var.datalen, sizeof(uint32_t), "Native uint32_tArray Bytes");
@@ -18152,6 +21349,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_ChannelManager_list_usa
                uint64_t ret_conv_16_ref = 0;
                CHECK((((uint64_t)ret_conv_16_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_conv_16_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_16_var);
                ret_conv_16_ref = (uint64_t)ret_conv_16_var.inner;
                if (ret_conv_16_var.is_owned) {
                        ret_conv_16_ref |= 1;
@@ -18167,6 +21365,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelManager_close_channel
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char channel_id_arr[32];
        CHECK(*((uint32_t*)channel_id) == 32);
        memcpy(channel_id_arr, (uint8_t*)(channel_id + 4), 32);
@@ -18180,6 +21379,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelManager_close_channel
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char channel_id_arr[32];
        CHECK(*((uint32_t*)channel_id) == 32);
        memcpy(channel_id_arr, (uint8_t*)(channel_id + 4), 32);
@@ -18193,6 +21393,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelManager_force_close_c
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char channel_id_arr[32];
        CHECK(*((uint32_t*)channel_id) == 32);
        memcpy(channel_id_arr, (uint8_t*)(channel_id + 4), 32);
@@ -18206,6 +21407,7 @@ void  __attribute__((visibility("default"))) TS_ChannelManager_force_close_all_c
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        ChannelManager_force_close_all_channels(&this_arg_conv);
 }
 
@@ -18213,9 +21415,11 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelManager_send_payment(
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKRoute route_conv;
        route_conv.inner = (void*)(route & (~1));
        route_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(route_conv);
        LDKThirtyTwoBytes payment_hash_ref;
        CHECK(*((uint32_t*)payment_hash) == 32);
        memcpy(payment_hash_ref.data, (uint8_t*)(payment_hash + 4), 32);
@@ -18231,9 +21435,11 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelManager_retry_payment
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKRoute route_conv;
        route_conv.inner = (void*)(route & (~1));
        route_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(route_conv);
        LDKThirtyTwoBytes payment_id_ref;
        CHECK(*((uint32_t*)payment_id) == 32);
        memcpy(payment_id_ref.data, (uint8_t*)(payment_id + 4), 32);
@@ -18246,9 +21452,11 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelManager_send_spontane
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKRoute route_conv;
        route_conv.inner = (void*)(route & (~1));
        route_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(route_conv);
        LDKThirtyTwoBytes payment_preimage_ref;
        CHECK(*((uint32_t*)payment_preimage) == 32);
        memcpy(payment_preimage_ref.data, (uint8_t*)(payment_preimage + 4), 32);
@@ -18261,6 +21469,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelManager_funding_trans
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char temporary_channel_id_arr[32];
        CHECK(*((uint32_t*)temporary_channel_id) == 32);
        memcpy(temporary_channel_id_arr, (uint8_t*)(temporary_channel_id + 4), 32);
@@ -18279,6 +21488,7 @@ void  __attribute__((visibility("default"))) TS_ChannelManager_broadcast_node_an
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKThreeBytes rgb_ref;
        CHECK(*((uint32_t*)rgb) == 3);
        memcpy(rgb_ref.data, (uint8_t*)(rgb + 4), 3);
@@ -18306,6 +21516,7 @@ void  __attribute__((visibility("default"))) TS_ChannelManager_process_pending_h
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        ChannelManager_process_pending_htlc_forwards(&this_arg_conv);
 }
 
@@ -18313,6 +21524,7 @@ void  __attribute__((visibility("default"))) TS_ChannelManager_timer_tick_occurr
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        ChannelManager_timer_tick_occurred(&this_arg_conv);
 }
 
@@ -18320,6 +21532,7 @@ jboolean  __attribute__((visibility("default"))) TS_ChannelManager_fail_htlc_bac
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char payment_hash_arr[32];
        CHECK(*((uint32_t*)payment_hash) == 32);
        memcpy(payment_hash_arr, (uint8_t*)(payment_hash + 4), 32);
@@ -18332,6 +21545,7 @@ jboolean  __attribute__((visibility("default"))) TS_ChannelManager_claim_funds(u
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKThirtyTwoBytes payment_preimage_ref;
        CHECK(*((uint32_t*)payment_preimage) == 32);
        memcpy(payment_preimage_ref.data, (uint8_t*)(payment_preimage + 4), 32);
@@ -18343,6 +21557,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ChannelManager_get_our_no
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ChannelManager_get_our_node_id(&this_arg_conv).compressed_form, 33);
        return ret_arr;
@@ -18352,6 +21567,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelManager_create_inboun
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        void* min_value_msat_ptr = (void*)(((uint64_t)min_value_msat) & ~1);
        CHECK_ACCESS(min_value_msat_ptr);
        LDKCOption_u64Z min_value_msat_conv = *(LDKCOption_u64Z*)(min_value_msat_ptr);
@@ -18365,6 +21581,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelManager_create_inboun
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKThirtyTwoBytes payment_hash_ref;
        CHECK(*((uint32_t*)payment_hash) == 32);
        memcpy(payment_hash_ref.data, (uint8_t*)(payment_hash + 4), 32);
@@ -18381,6 +21598,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelManager_as_MessageSen
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKMessageSendEventsProvider* ret_ret = MALLOC(sizeof(LDKMessageSendEventsProvider), "LDKMessageSendEventsProvider");
        *ret_ret = ChannelManager_as_MessageSendEventsProvider(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -18390,6 +21608,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelManager_as_EventsProv
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKEventsProvider* ret_ret = MALLOC(sizeof(LDKEventsProvider), "LDKEventsProvider");
        *ret_ret = ChannelManager_as_EventsProvider(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -18399,6 +21618,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelManager_as_Listen(uin
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKListen* ret_ret = MALLOC(sizeof(LDKListen), "LDKListen");
        *ret_ret = ChannelManager_as_Listen(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -18408,6 +21628,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelManager_as_Confirm(ui
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKConfirm* ret_ret = MALLOC(sizeof(LDKConfirm), "LDKConfirm");
        *ret_ret = ChannelManager_as_Confirm(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -18417,6 +21638,7 @@ jboolean  __attribute__((visibility("default"))) TS_ChannelManager_await_persist
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        jboolean ret_val = ChannelManager_await_persistable_update_timeout(&this_arg_conv, max_wait);
        return ret_val;
 }
@@ -18425,6 +21647,7 @@ void  __attribute__((visibility("default"))) TS_ChannelManager_await_persistable
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        ChannelManager_await_persistable_update(&this_arg_conv);
 }
 
@@ -18432,10 +21655,12 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelManager_current_best_
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKBestBlock ret_var = ChannelManager_current_best_block(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18447,6 +21672,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelManager_as_ChannelMes
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKChannelMessageHandler* ret_ret = MALLOC(sizeof(LDKChannelMessageHandler), "LDKChannelMessageHandler");
        *ret_ret = ChannelManager_as_ChannelMessageHandler(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -18456,6 +21682,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ChannelManager_write(uint
        LDKChannelManager obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ChannelManager_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -18467,6 +21694,7 @@ void  __attribute__((visibility("default"))) TS_ChannelManagerReadArgs_free(uint
        LDKChannelManagerReadArgs this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelManagerReadArgs_free(this_obj_conv);
 }
 
@@ -18474,6 +21702,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelManagerReadArgs_get_k
        LDKChannelManagerReadArgs this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        // WARNING: This object doesn't live past this scope, needs clone!
        uint64_t ret_ret = ((uint64_t)ChannelManagerReadArgs_get_keys_manager(&this_ptr_conv)) | 1;
        return ret_ret;
@@ -18483,6 +21712,7 @@ void  __attribute__((visibility("default"))) TS_ChannelManagerReadArgs_set_keys_
        LDKChannelManagerReadArgs this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKKeysInterface val_conv = *(LDKKeysInterface*)(val_ptr);
@@ -18493,6 +21723,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelManagerReadArgs_get_f
        LDKChannelManagerReadArgs this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        // WARNING: This object doesn't live past this scope, needs clone!
        uint64_t ret_ret = ((uint64_t)ChannelManagerReadArgs_get_fee_estimator(&this_ptr_conv)) | 1;
        return ret_ret;
@@ -18502,6 +21733,7 @@ void  __attribute__((visibility("default"))) TS_ChannelManagerReadArgs_set_fee_e
        LDKChannelManagerReadArgs this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKFeeEstimator val_conv = *(LDKFeeEstimator*)(val_ptr);
@@ -18512,6 +21744,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelManagerReadArgs_get_c
        LDKChannelManagerReadArgs this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        // WARNING: This object doesn't live past this scope, needs clone!
        uint64_t ret_ret = ((uint64_t)ChannelManagerReadArgs_get_chain_monitor(&this_ptr_conv)) | 1;
        return ret_ret;
@@ -18521,6 +21754,7 @@ void  __attribute__((visibility("default"))) TS_ChannelManagerReadArgs_set_chain
        LDKChannelManagerReadArgs this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKWatch val_conv = *(LDKWatch*)(val_ptr);
@@ -18531,6 +21765,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelManagerReadArgs_get_t
        LDKChannelManagerReadArgs this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        // WARNING: This object doesn't live past this scope, needs clone!
        uint64_t ret_ret = ((uint64_t)ChannelManagerReadArgs_get_tx_broadcaster(&this_ptr_conv)) | 1;
        return ret_ret;
@@ -18540,6 +21775,7 @@ void  __attribute__((visibility("default"))) TS_ChannelManagerReadArgs_set_tx_br
        LDKChannelManagerReadArgs this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKBroadcasterInterface val_conv = *(LDKBroadcasterInterface*)(val_ptr);
@@ -18550,6 +21786,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelManagerReadArgs_get_l
        LDKChannelManagerReadArgs this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        // WARNING: This object doesn't live past this scope, needs clone!
        uint64_t ret_ret = ((uint64_t)ChannelManagerReadArgs_get_logger(&this_ptr_conv)) | 1;
        return ret_ret;
@@ -18559,6 +21796,7 @@ void  __attribute__((visibility("default"))) TS_ChannelManagerReadArgs_set_logge
        LDKChannelManagerReadArgs this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKLogger val_conv = *(LDKLogger*)(val_ptr);
@@ -18569,10 +21807,12 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelManagerReadArgs_get_d
        LDKChannelManagerReadArgs this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKUserConfig ret_var = ChannelManagerReadArgs_get_default_config(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18584,9 +21824,11 @@ void  __attribute__((visibility("default"))) TS_ChannelManagerReadArgs_set_defau
        LDKChannelManagerReadArgs this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKUserConfig val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = UserConfig_clone(&val_conv);
        ChannelManagerReadArgs_set_default_config(&this_ptr_conv, val_conv);
 }
@@ -18610,6 +21852,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelManagerReadArgs_new(u
        LDKUserConfig default_config_conv;
        default_config_conv.inner = (void*)(default_config & (~1));
        default_config_conv.is_owned = (default_config & 1) || (default_config == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(default_config_conv);
        default_config_conv = UserConfig_clone(&default_config_conv);
        LDKCVec_ChannelMonitorZ channel_monitors_constr;
        channel_monitors_constr.datalen = *((uint32_t*)channel_monitors);
@@ -18623,12 +21866,14 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelManagerReadArgs_new(u
                LDKChannelMonitor channel_monitors_conv_16_conv;
                channel_monitors_conv_16_conv.inner = (void*)(channel_monitors_conv_16 & (~1));
                channel_monitors_conv_16_conv.is_owned = (channel_monitors_conv_16 & 1) || (channel_monitors_conv_16 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_monitors_conv_16_conv);
                channel_monitors_constr.data[q] = channel_monitors_conv_16_conv;
        }
        LDKChannelManagerReadArgs ret_var = ChannelManagerReadArgs_new(keys_manager_conv, fee_estimator_conv, chain_monitor_conv, tx_broadcaster_conv, logger_conv, default_config_conv, channel_monitors_constr);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18643,6 +21888,7 @@ uint32_t  __attribute__((visibility("default"))) TS_C2Tuple_BlockHashChannelMana
        LDKChannelManagerReadArgs arg_conv;
        arg_conv.inner = (void*)(arg & (~1));
        arg_conv.is_owned = (arg & 1) || (arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        // Warning: we need a move here but no clone is available for LDKChannelManagerReadArgs
        LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ), "LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ");
        *ret_conv = C2Tuple_BlockHashChannelManagerZ_read(ser_ref, arg_conv);
@@ -18653,17 +21899,41 @@ void  __attribute__((visibility("default"))) TS_DecodeError_free(uint32_t this_o
        LDKDecodeError this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        DecodeError_free(this_obj_conv);
 }
 
+static inline uint64_t DecodeError_clone_ptr(LDKDecodeError *NONNULL_PTR arg) {
+       LDKDecodeError ret_var = DecodeError_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_DecodeError_clone_ptr(uint32_t arg) {
+       LDKDecodeError arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = DecodeError_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_DecodeError_clone(uint32_t orig) {
        LDKDecodeError orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKDecodeError ret_var = DecodeError_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18675,6 +21945,7 @@ void  __attribute__((visibility("default"))) TS_Init_free(uint32_t this_obj) {
        LDKInit this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        Init_free(this_obj_conv);
 }
 
@@ -18682,10 +21953,12 @@ uint32_t  __attribute__((visibility("default"))) TS_Init_get_features(uint32_t t
        LDKInit this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKInitFeatures ret_var = Init_get_features(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18697,9 +21970,11 @@ void  __attribute__((visibility("default"))) TS_Init_set_features(uint32_t this_
        LDKInit this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKInitFeatures val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = InitFeatures_clone(&val_conv);
        Init_set_features(&this_ptr_conv, val_conv);
 }
@@ -18708,11 +21983,13 @@ uint32_t  __attribute__((visibility("default"))) TS_Init_new(uint32_t features_a
        LDKInitFeatures features_arg_conv;
        features_arg_conv.inner = (void*)(features_arg & (~1));
        features_arg_conv.is_owned = (features_arg & 1) || (features_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_arg_conv);
        features_arg_conv = InitFeatures_clone(&features_arg_conv);
        LDKInit ret_var = Init_new(features_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18720,14 +21997,37 @@ uint32_t  __attribute__((visibility("default"))) TS_Init_new(uint32_t features_a
        return ret_ref;
 }
 
+static inline uint64_t Init_clone_ptr(LDKInit *NONNULL_PTR arg) {
+       LDKInit ret_var = Init_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_Init_clone_ptr(uint32_t arg) {
+       LDKInit arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = Init_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_Init_clone(uint32_t orig) {
        LDKInit orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKInit ret_var = Init_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18739,6 +22039,7 @@ void  __attribute__((visibility("default"))) TS_ErrorMessage_free(uint32_t this_
        LDKErrorMessage this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ErrorMessage_free(this_obj_conv);
 }
 
@@ -18746,6 +22047,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ErrorMessage_get_channel_
        LDKErrorMessage this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *ErrorMessage_get_channel_id(&this_ptr_conv), 32);
        return ret_arr;
@@ -18755,6 +22057,7 @@ void  __attribute__((visibility("default"))) TS_ErrorMessage_set_channel_id(uint
        LDKErrorMessage this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -18765,6 +22068,7 @@ jstring  __attribute__((visibility("default"))) TS_ErrorMessage_get_data(uint32_
        LDKErrorMessage this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKStr ret_str = ErrorMessage_get_data(&this_ptr_conv);
        jstring ret_conv = str_ref_to_ts(ret_str.chars, ret_str.len);
        Str_free(ret_str);
@@ -18775,6 +22079,7 @@ void  __attribute__((visibility("default"))) TS_ErrorMessage_set_data(uint32_t t
        LDKErrorMessage this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKStr val_conv = str_ref_to_owned_c(val);
        ErrorMessage_set_data(&this_ptr_conv, val_conv);
 }
@@ -18788,6 +22093,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ErrorMessage_new(int8_tArray
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18795,14 +22101,37 @@ uint32_t  __attribute__((visibility("default"))) TS_ErrorMessage_new(int8_tArray
        return ret_ref;
 }
 
+static inline uint64_t ErrorMessage_clone_ptr(LDKErrorMessage *NONNULL_PTR arg) {
+       LDKErrorMessage ret_var = ErrorMessage_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_ErrorMessage_clone_ptr(uint32_t arg) {
+       LDKErrorMessage arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ErrorMessage_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_ErrorMessage_clone(uint32_t orig) {
        LDKErrorMessage orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKErrorMessage ret_var = ErrorMessage_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18814,6 +22143,7 @@ void  __attribute__((visibility("default"))) TS_Ping_free(uint32_t this_obj) {
        LDKPing this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        Ping_free(this_obj_conv);
 }
 
@@ -18821,6 +22151,7 @@ int16_t  __attribute__((visibility("default"))) TS_Ping_get_ponglen(uint32_t thi
        LDKPing this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = Ping_get_ponglen(&this_ptr_conv);
        return ret_val;
 }
@@ -18829,6 +22160,7 @@ void  __attribute__((visibility("default"))) TS_Ping_set_ponglen(uint32_t this_p
        LDKPing this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        Ping_set_ponglen(&this_ptr_conv, val);
 }
 
@@ -18836,6 +22168,7 @@ int16_t  __attribute__((visibility("default"))) TS_Ping_get_byteslen(uint32_t th
        LDKPing this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = Ping_get_byteslen(&this_ptr_conv);
        return ret_val;
 }
@@ -18844,6 +22177,7 @@ void  __attribute__((visibility("default"))) TS_Ping_set_byteslen(uint32_t this_
        LDKPing this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        Ping_set_byteslen(&this_ptr_conv, val);
 }
 
@@ -18852,6 +22186,7 @@ uint32_t  __attribute__((visibility("default"))) TS_Ping_new(int16_t ponglen_arg
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18859,14 +22194,37 @@ uint32_t  __attribute__((visibility("default"))) TS_Ping_new(int16_t ponglen_arg
        return ret_ref;
 }
 
+static inline uint64_t Ping_clone_ptr(LDKPing *NONNULL_PTR arg) {
+       LDKPing ret_var = Ping_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_Ping_clone_ptr(uint32_t arg) {
+       LDKPing arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = Ping_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_Ping_clone(uint32_t orig) {
        LDKPing orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKPing ret_var = Ping_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18878,6 +22236,7 @@ void  __attribute__((visibility("default"))) TS_Pong_free(uint32_t this_obj) {
        LDKPong this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        Pong_free(this_obj_conv);
 }
 
@@ -18885,6 +22244,7 @@ int16_t  __attribute__((visibility("default"))) TS_Pong_get_byteslen(uint32_t th
        LDKPong this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = Pong_get_byteslen(&this_ptr_conv);
        return ret_val;
 }
@@ -18893,6 +22253,7 @@ void  __attribute__((visibility("default"))) TS_Pong_set_byteslen(uint32_t this_
        LDKPong this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        Pong_set_byteslen(&this_ptr_conv, val);
 }
 
@@ -18901,6 +22262,7 @@ uint32_t  __attribute__((visibility("default"))) TS_Pong_new(int16_t byteslen_ar
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18908,14 +22270,37 @@ uint32_t  __attribute__((visibility("default"))) TS_Pong_new(int16_t byteslen_ar
        return ret_ref;
 }
 
+static inline uint64_t Pong_clone_ptr(LDKPong *NONNULL_PTR arg) {
+       LDKPong ret_var = Pong_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_Pong_clone_ptr(uint32_t arg) {
+       LDKPong arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = Pong_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_Pong_clone(uint32_t orig) {
        LDKPong orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKPong ret_var = Pong_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18927,6 +22312,7 @@ void  __attribute__((visibility("default"))) TS_OpenChannel_free(uint32_t this_o
        LDKOpenChannel this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        OpenChannel_free(this_obj_conv);
 }
 
@@ -18934,6 +22320,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_OpenChannel_get_chain_has
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *OpenChannel_get_chain_hash(&this_ptr_conv), 32);
        return ret_arr;
@@ -18943,6 +22330,7 @@ void  __attribute__((visibility("default"))) TS_OpenChannel_set_chain_hash(uint3
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -18953,6 +22341,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_OpenChannel_get_temporary
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *OpenChannel_get_temporary_channel_id(&this_ptr_conv), 32);
        return ret_arr;
@@ -18962,6 +22351,7 @@ void  __attribute__((visibility("default"))) TS_OpenChannel_set_temporary_channe
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -18972,6 +22362,7 @@ int64_t  __attribute__((visibility("default"))) TS_OpenChannel_get_funding_satos
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = OpenChannel_get_funding_satoshis(&this_ptr_conv);
        return ret_val;
 }
@@ -18980,6 +22371,7 @@ void  __attribute__((visibility("default"))) TS_OpenChannel_set_funding_satoshis
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        OpenChannel_set_funding_satoshis(&this_ptr_conv, val);
 }
 
@@ -18987,6 +22379,7 @@ int64_t  __attribute__((visibility("default"))) TS_OpenChannel_get_push_msat(uin
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = OpenChannel_get_push_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -18995,6 +22388,7 @@ void  __attribute__((visibility("default"))) TS_OpenChannel_set_push_msat(uint32
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        OpenChannel_set_push_msat(&this_ptr_conv, val);
 }
 
@@ -19002,6 +22396,7 @@ int64_t  __attribute__((visibility("default"))) TS_OpenChannel_get_dust_limit_sa
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = OpenChannel_get_dust_limit_satoshis(&this_ptr_conv);
        return ret_val;
 }
@@ -19010,6 +22405,7 @@ void  __attribute__((visibility("default"))) TS_OpenChannel_set_dust_limit_satos
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        OpenChannel_set_dust_limit_satoshis(&this_ptr_conv, val);
 }
 
@@ -19017,6 +22413,7 @@ int64_t  __attribute__((visibility("default"))) TS_OpenChannel_get_max_htlc_valu
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = OpenChannel_get_max_htlc_value_in_flight_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -19025,6 +22422,7 @@ void  __attribute__((visibility("default"))) TS_OpenChannel_set_max_htlc_value_i
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        OpenChannel_set_max_htlc_value_in_flight_msat(&this_ptr_conv, val);
 }
 
@@ -19032,6 +22430,7 @@ int64_t  __attribute__((visibility("default"))) TS_OpenChannel_get_channel_reser
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = OpenChannel_get_channel_reserve_satoshis(&this_ptr_conv);
        return ret_val;
 }
@@ -19040,6 +22439,7 @@ void  __attribute__((visibility("default"))) TS_OpenChannel_set_channel_reserve_
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        OpenChannel_set_channel_reserve_satoshis(&this_ptr_conv, val);
 }
 
@@ -19047,6 +22447,7 @@ int64_t  __attribute__((visibility("default"))) TS_OpenChannel_get_htlc_minimum_
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = OpenChannel_get_htlc_minimum_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -19055,6 +22456,7 @@ void  __attribute__((visibility("default"))) TS_OpenChannel_set_htlc_minimum_msa
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        OpenChannel_set_htlc_minimum_msat(&this_ptr_conv, val);
 }
 
@@ -19062,6 +22464,7 @@ int32_t  __attribute__((visibility("default"))) TS_OpenChannel_get_feerate_per_k
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = OpenChannel_get_feerate_per_kw(&this_ptr_conv);
        return ret_val;
 }
@@ -19070,6 +22473,7 @@ void  __attribute__((visibility("default"))) TS_OpenChannel_set_feerate_per_kw(u
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        OpenChannel_set_feerate_per_kw(&this_ptr_conv, val);
 }
 
@@ -19077,6 +22481,7 @@ int16_t  __attribute__((visibility("default"))) TS_OpenChannel_get_to_self_delay
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = OpenChannel_get_to_self_delay(&this_ptr_conv);
        return ret_val;
 }
@@ -19085,6 +22490,7 @@ void  __attribute__((visibility("default"))) TS_OpenChannel_set_to_self_delay(ui
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        OpenChannel_set_to_self_delay(&this_ptr_conv, val);
 }
 
@@ -19092,6 +22498,7 @@ int16_t  __attribute__((visibility("default"))) TS_OpenChannel_get_max_accepted_
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = OpenChannel_get_max_accepted_htlcs(&this_ptr_conv);
        return ret_val;
 }
@@ -19100,6 +22507,7 @@ void  __attribute__((visibility("default"))) TS_OpenChannel_set_max_accepted_htl
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        OpenChannel_set_max_accepted_htlcs(&this_ptr_conv, val);
 }
 
@@ -19107,6 +22515,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_OpenChannel_get_funding_p
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), OpenChannel_get_funding_pubkey(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -19116,6 +22525,7 @@ void  __attribute__((visibility("default"))) TS_OpenChannel_set_funding_pubkey(u
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -19126,6 +22536,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_OpenChannel_get_revocatio
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), OpenChannel_get_revocation_basepoint(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -19135,6 +22546,7 @@ void  __attribute__((visibility("default"))) TS_OpenChannel_set_revocation_basep
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -19145,6 +22557,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_OpenChannel_get_payment_p
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), OpenChannel_get_payment_point(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -19154,6 +22567,7 @@ void  __attribute__((visibility("default"))) TS_OpenChannel_set_payment_point(ui
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -19164,6 +22578,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_OpenChannel_get_delayed_p
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), OpenChannel_get_delayed_payment_basepoint(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -19173,6 +22588,7 @@ void  __attribute__((visibility("default"))) TS_OpenChannel_set_delayed_payment_
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -19183,6 +22599,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_OpenChannel_get_htlc_base
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), OpenChannel_get_htlc_basepoint(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -19192,6 +22609,7 @@ void  __attribute__((visibility("default"))) TS_OpenChannel_set_htlc_basepoint(u
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -19202,6 +22620,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_OpenChannel_get_first_per
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), OpenChannel_get_first_per_commitment_point(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -19211,6 +22630,7 @@ void  __attribute__((visibility("default"))) TS_OpenChannel_set_first_per_commit
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -19221,6 +22641,7 @@ int8_t  __attribute__((visibility("default"))) TS_OpenChannel_get_channel_flags(
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_t ret_val = OpenChannel_get_channel_flags(&this_ptr_conv);
        return ret_val;
 }
@@ -19229,17 +22650,41 @@ void  __attribute__((visibility("default"))) TS_OpenChannel_set_channel_flags(ui
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        OpenChannel_set_channel_flags(&this_ptr_conv, val);
 }
 
+static inline uint64_t OpenChannel_clone_ptr(LDKOpenChannel *NONNULL_PTR arg) {
+       LDKOpenChannel ret_var = OpenChannel_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_OpenChannel_clone_ptr(uint32_t arg) {
+       LDKOpenChannel arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = OpenChannel_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_OpenChannel_clone(uint32_t orig) {
        LDKOpenChannel orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKOpenChannel ret_var = OpenChannel_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -19251,6 +22696,7 @@ void  __attribute__((visibility("default"))) TS_AcceptChannel_free(uint32_t this
        LDKAcceptChannel this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        AcceptChannel_free(this_obj_conv);
 }
 
@@ -19258,6 +22704,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_AcceptChannel_get_tempora
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *AcceptChannel_get_temporary_channel_id(&this_ptr_conv), 32);
        return ret_arr;
@@ -19267,6 +22714,7 @@ void  __attribute__((visibility("default"))) TS_AcceptChannel_set_temporary_chan
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -19277,6 +22725,7 @@ int64_t  __attribute__((visibility("default"))) TS_AcceptChannel_get_dust_limit_
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = AcceptChannel_get_dust_limit_satoshis(&this_ptr_conv);
        return ret_val;
 }
@@ -19285,6 +22734,7 @@ void  __attribute__((visibility("default"))) TS_AcceptChannel_set_dust_limit_sat
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        AcceptChannel_set_dust_limit_satoshis(&this_ptr_conv, val);
 }
 
@@ -19292,6 +22742,7 @@ int64_t  __attribute__((visibility("default"))) TS_AcceptChannel_get_max_htlc_va
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = AcceptChannel_get_max_htlc_value_in_flight_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -19300,6 +22751,7 @@ void  __attribute__((visibility("default"))) TS_AcceptChannel_set_max_htlc_value
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        AcceptChannel_set_max_htlc_value_in_flight_msat(&this_ptr_conv, val);
 }
 
@@ -19307,6 +22759,7 @@ int64_t  __attribute__((visibility("default"))) TS_AcceptChannel_get_channel_res
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = AcceptChannel_get_channel_reserve_satoshis(&this_ptr_conv);
        return ret_val;
 }
@@ -19315,6 +22768,7 @@ void  __attribute__((visibility("default"))) TS_AcceptChannel_set_channel_reserv
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        AcceptChannel_set_channel_reserve_satoshis(&this_ptr_conv, val);
 }
 
@@ -19322,6 +22776,7 @@ int64_t  __attribute__((visibility("default"))) TS_AcceptChannel_get_htlc_minimu
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = AcceptChannel_get_htlc_minimum_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -19330,6 +22785,7 @@ void  __attribute__((visibility("default"))) TS_AcceptChannel_set_htlc_minimum_m
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        AcceptChannel_set_htlc_minimum_msat(&this_ptr_conv, val);
 }
 
@@ -19337,6 +22793,7 @@ int32_t  __attribute__((visibility("default"))) TS_AcceptChannel_get_minimum_dep
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = AcceptChannel_get_minimum_depth(&this_ptr_conv);
        return ret_val;
 }
@@ -19345,6 +22802,7 @@ void  __attribute__((visibility("default"))) TS_AcceptChannel_set_minimum_depth(
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        AcceptChannel_set_minimum_depth(&this_ptr_conv, val);
 }
 
@@ -19352,6 +22810,7 @@ int16_t  __attribute__((visibility("default"))) TS_AcceptChannel_get_to_self_del
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = AcceptChannel_get_to_self_delay(&this_ptr_conv);
        return ret_val;
 }
@@ -19360,6 +22819,7 @@ void  __attribute__((visibility("default"))) TS_AcceptChannel_set_to_self_delay(
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        AcceptChannel_set_to_self_delay(&this_ptr_conv, val);
 }
 
@@ -19367,6 +22827,7 @@ int16_t  __attribute__((visibility("default"))) TS_AcceptChannel_get_max_accepte
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = AcceptChannel_get_max_accepted_htlcs(&this_ptr_conv);
        return ret_val;
 }
@@ -19375,6 +22836,7 @@ void  __attribute__((visibility("default"))) TS_AcceptChannel_set_max_accepted_h
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        AcceptChannel_set_max_accepted_htlcs(&this_ptr_conv, val);
 }
 
@@ -19382,6 +22844,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_AcceptChannel_get_funding
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), AcceptChannel_get_funding_pubkey(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -19391,6 +22854,7 @@ void  __attribute__((visibility("default"))) TS_AcceptChannel_set_funding_pubkey
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -19401,6 +22865,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_AcceptChannel_get_revocat
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), AcceptChannel_get_revocation_basepoint(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -19410,6 +22875,7 @@ void  __attribute__((visibility("default"))) TS_AcceptChannel_set_revocation_bas
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -19420,6 +22886,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_AcceptChannel_get_payment
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), AcceptChannel_get_payment_point(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -19429,6 +22896,7 @@ void  __attribute__((visibility("default"))) TS_AcceptChannel_set_payment_point(
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -19439,6 +22907,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_AcceptChannel_get_delayed
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), AcceptChannel_get_delayed_payment_basepoint(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -19448,6 +22917,7 @@ void  __attribute__((visibility("default"))) TS_AcceptChannel_set_delayed_paymen
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -19458,6 +22928,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_AcceptChannel_get_htlc_ba
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), AcceptChannel_get_htlc_basepoint(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -19467,6 +22938,7 @@ void  __attribute__((visibility("default"))) TS_AcceptChannel_set_htlc_basepoint
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -19477,6 +22949,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_AcceptChannel_get_first_p
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), AcceptChannel_get_first_per_commitment_point(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -19486,20 +22959,44 @@ void  __attribute__((visibility("default"))) TS_AcceptChannel_set_first_per_comm
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
        AcceptChannel_set_first_per_commitment_point(&this_ptr_conv, val_ref);
 }
 
+static inline uint64_t AcceptChannel_clone_ptr(LDKAcceptChannel *NONNULL_PTR arg) {
+       LDKAcceptChannel ret_var = AcceptChannel_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_AcceptChannel_clone_ptr(uint32_t arg) {
+       LDKAcceptChannel arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = AcceptChannel_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_AcceptChannel_clone(uint32_t orig) {
        LDKAcceptChannel orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKAcceptChannel ret_var = AcceptChannel_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -19511,6 +23008,7 @@ void  __attribute__((visibility("default"))) TS_FundingCreated_free(uint32_t thi
        LDKFundingCreated this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        FundingCreated_free(this_obj_conv);
 }
 
@@ -19518,6 +23016,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_FundingCreated_get_tempor
        LDKFundingCreated this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *FundingCreated_get_temporary_channel_id(&this_ptr_conv), 32);
        return ret_arr;
@@ -19527,6 +23026,7 @@ void  __attribute__((visibility("default"))) TS_FundingCreated_set_temporary_cha
        LDKFundingCreated this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -19537,6 +23037,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_FundingCreated_get_fundin
        LDKFundingCreated this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *FundingCreated_get_funding_txid(&this_ptr_conv), 32);
        return ret_arr;
@@ -19546,6 +23047,7 @@ void  __attribute__((visibility("default"))) TS_FundingCreated_set_funding_txid(
        LDKFundingCreated this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -19556,6 +23058,7 @@ int16_t  __attribute__((visibility("default"))) TS_FundingCreated_get_funding_ou
        LDKFundingCreated this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = FundingCreated_get_funding_output_index(&this_ptr_conv);
        return ret_val;
 }
@@ -19564,6 +23067,7 @@ void  __attribute__((visibility("default"))) TS_FundingCreated_set_funding_outpu
        LDKFundingCreated this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        FundingCreated_set_funding_output_index(&this_ptr_conv, val);
 }
 
@@ -19571,6 +23075,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_FundingCreated_get_signat
        LDKFundingCreated this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(64, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), FundingCreated_get_signature(&this_ptr_conv).compact_form, 64);
        return ret_arr;
@@ -19580,6 +23085,7 @@ void  __attribute__((visibility("default"))) TS_FundingCreated_set_signature(uin
        LDKFundingCreated this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSignature val_ref;
        CHECK(*((uint32_t*)val) == 64);
        memcpy(val_ref.compact_form, (uint8_t*)(val + 4), 64);
@@ -19600,6 +23106,7 @@ uint32_t  __attribute__((visibility("default"))) TS_FundingCreated_new(int8_tArr
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -19607,14 +23114,37 @@ uint32_t  __attribute__((visibility("default"))) TS_FundingCreated_new(int8_tArr
        return ret_ref;
 }
 
+static inline uint64_t FundingCreated_clone_ptr(LDKFundingCreated *NONNULL_PTR arg) {
+       LDKFundingCreated ret_var = FundingCreated_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_FundingCreated_clone_ptr(uint32_t arg) {
+       LDKFundingCreated arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = FundingCreated_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_FundingCreated_clone(uint32_t orig) {
        LDKFundingCreated orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKFundingCreated ret_var = FundingCreated_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -19626,6 +23156,7 @@ void  __attribute__((visibility("default"))) TS_FundingSigned_free(uint32_t this
        LDKFundingSigned this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        FundingSigned_free(this_obj_conv);
 }
 
@@ -19633,6 +23164,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_FundingSigned_get_channel
        LDKFundingSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *FundingSigned_get_channel_id(&this_ptr_conv), 32);
        return ret_arr;
@@ -19642,6 +23174,7 @@ void  __attribute__((visibility("default"))) TS_FundingSigned_set_channel_id(uin
        LDKFundingSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -19652,6 +23185,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_FundingSigned_get_signatu
        LDKFundingSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(64, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), FundingSigned_get_signature(&this_ptr_conv).compact_form, 64);
        return ret_arr;
@@ -19661,6 +23195,7 @@ void  __attribute__((visibility("default"))) TS_FundingSigned_set_signature(uint
        LDKFundingSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSignature val_ref;
        CHECK(*((uint32_t*)val) == 64);
        memcpy(val_ref.compact_form, (uint8_t*)(val + 4), 64);
@@ -19678,6 +23213,7 @@ uint32_t  __attribute__((visibility("default"))) TS_FundingSigned_new(int8_tArra
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -19685,14 +23221,37 @@ uint32_t  __attribute__((visibility("default"))) TS_FundingSigned_new(int8_tArra
        return ret_ref;
 }
 
+static inline uint64_t FundingSigned_clone_ptr(LDKFundingSigned *NONNULL_PTR arg) {
+       LDKFundingSigned ret_var = FundingSigned_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_FundingSigned_clone_ptr(uint32_t arg) {
+       LDKFundingSigned arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = FundingSigned_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_FundingSigned_clone(uint32_t orig) {
        LDKFundingSigned orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKFundingSigned ret_var = FundingSigned_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -19704,6 +23263,7 @@ void  __attribute__((visibility("default"))) TS_FundingLocked_free(uint32_t this
        LDKFundingLocked this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        FundingLocked_free(this_obj_conv);
 }
 
@@ -19711,6 +23271,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_FundingLocked_get_channel
        LDKFundingLocked this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *FundingLocked_get_channel_id(&this_ptr_conv), 32);
        return ret_arr;
@@ -19720,6 +23281,7 @@ void  __attribute__((visibility("default"))) TS_FundingLocked_set_channel_id(uin
        LDKFundingLocked this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -19730,6 +23292,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_FundingLocked_get_next_pe
        LDKFundingLocked this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), FundingLocked_get_next_per_commitment_point(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -19739,6 +23302,7 @@ void  __attribute__((visibility("default"))) TS_FundingLocked_set_next_per_commi
        LDKFundingLocked this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -19756,6 +23320,7 @@ uint32_t  __attribute__((visibility("default"))) TS_FundingLocked_new(int8_tArra
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -19763,14 +23328,37 @@ uint32_t  __attribute__((visibility("default"))) TS_FundingLocked_new(int8_tArra
        return ret_ref;
 }
 
+static inline uint64_t FundingLocked_clone_ptr(LDKFundingLocked *NONNULL_PTR arg) {
+       LDKFundingLocked ret_var = FundingLocked_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_FundingLocked_clone_ptr(uint32_t arg) {
+       LDKFundingLocked arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = FundingLocked_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_FundingLocked_clone(uint32_t orig) {
        LDKFundingLocked orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKFundingLocked ret_var = FundingLocked_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -19782,6 +23370,7 @@ void  __attribute__((visibility("default"))) TS_Shutdown_free(uint32_t this_obj)
        LDKShutdown this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        Shutdown_free(this_obj_conv);
 }
 
@@ -19789,6 +23378,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_Shutdown_get_channel_id(u
        LDKShutdown this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *Shutdown_get_channel_id(&this_ptr_conv), 32);
        return ret_arr;
@@ -19798,6 +23388,7 @@ void  __attribute__((visibility("default"))) TS_Shutdown_set_channel_id(uint32_t
        LDKShutdown this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -19808,6 +23399,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_Shutdown_get_scriptpubkey
        LDKShutdown this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKu8slice ret_var = Shutdown_get_scriptpubkey(&this_ptr_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -19818,6 +23410,7 @@ void  __attribute__((visibility("default"))) TS_Shutdown_set_scriptpubkey(uint32
        LDKShutdown this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_u8Z val_ref;
        val_ref.datalen = *((uint32_t*)val);
        val_ref.data = MALLOC(val_ref.datalen, "LDKCVec_u8Z Bytes");
@@ -19837,6 +23430,7 @@ uint32_t  __attribute__((visibility("default"))) TS_Shutdown_new(int8_tArray cha
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -19844,14 +23438,37 @@ uint32_t  __attribute__((visibility("default"))) TS_Shutdown_new(int8_tArray cha
        return ret_ref;
 }
 
+static inline uint64_t Shutdown_clone_ptr(LDKShutdown *NONNULL_PTR arg) {
+       LDKShutdown ret_var = Shutdown_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_Shutdown_clone_ptr(uint32_t arg) {
+       LDKShutdown arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = Shutdown_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_Shutdown_clone(uint32_t orig) {
        LDKShutdown orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKShutdown ret_var = Shutdown_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -19863,6 +23480,7 @@ void  __attribute__((visibility("default"))) TS_ClosingSignedFeeRange_free(uint3
        LDKClosingSignedFeeRange this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ClosingSignedFeeRange_free(this_obj_conv);
 }
 
@@ -19870,6 +23488,7 @@ int64_t  __attribute__((visibility("default"))) TS_ClosingSignedFeeRange_get_min
        LDKClosingSignedFeeRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ClosingSignedFeeRange_get_min_fee_satoshis(&this_ptr_conv);
        return ret_val;
 }
@@ -19878,6 +23497,7 @@ void  __attribute__((visibility("default"))) TS_ClosingSignedFeeRange_set_min_fe
        LDKClosingSignedFeeRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ClosingSignedFeeRange_set_min_fee_satoshis(&this_ptr_conv, val);
 }
 
@@ -19885,6 +23505,7 @@ int64_t  __attribute__((visibility("default"))) TS_ClosingSignedFeeRange_get_max
        LDKClosingSignedFeeRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ClosingSignedFeeRange_get_max_fee_satoshis(&this_ptr_conv);
        return ret_val;
 }
@@ -19893,6 +23514,7 @@ void  __attribute__((visibility("default"))) TS_ClosingSignedFeeRange_set_max_fe
        LDKClosingSignedFeeRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ClosingSignedFeeRange_set_max_fee_satoshis(&this_ptr_conv, val);
 }
 
@@ -19901,6 +23523,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ClosingSignedFeeRange_new(in
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -19908,14 +23531,37 @@ uint32_t  __attribute__((visibility("default"))) TS_ClosingSignedFeeRange_new(in
        return ret_ref;
 }
 
+static inline uint64_t ClosingSignedFeeRange_clone_ptr(LDKClosingSignedFeeRange *NONNULL_PTR arg) {
+       LDKClosingSignedFeeRange ret_var = ClosingSignedFeeRange_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_ClosingSignedFeeRange_clone_ptr(uint32_t arg) {
+       LDKClosingSignedFeeRange arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ClosingSignedFeeRange_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_ClosingSignedFeeRange_clone(uint32_t orig) {
        LDKClosingSignedFeeRange orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKClosingSignedFeeRange ret_var = ClosingSignedFeeRange_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -19927,6 +23573,7 @@ void  __attribute__((visibility("default"))) TS_ClosingSigned_free(uint32_t this
        LDKClosingSigned this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ClosingSigned_free(this_obj_conv);
 }
 
@@ -19934,6 +23581,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ClosingSigned_get_channel
        LDKClosingSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *ClosingSigned_get_channel_id(&this_ptr_conv), 32);
        return ret_arr;
@@ -19943,6 +23591,7 @@ void  __attribute__((visibility("default"))) TS_ClosingSigned_set_channel_id(uin
        LDKClosingSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -19953,6 +23602,7 @@ int64_t  __attribute__((visibility("default"))) TS_ClosingSigned_get_fee_satoshi
        LDKClosingSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ClosingSigned_get_fee_satoshis(&this_ptr_conv);
        return ret_val;
 }
@@ -19961,6 +23611,7 @@ void  __attribute__((visibility("default"))) TS_ClosingSigned_set_fee_satoshis(u
        LDKClosingSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ClosingSigned_set_fee_satoshis(&this_ptr_conv, val);
 }
 
@@ -19968,6 +23619,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ClosingSigned_get_signatu
        LDKClosingSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(64, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ClosingSigned_get_signature(&this_ptr_conv).compact_form, 64);
        return ret_arr;
@@ -19977,6 +23629,7 @@ void  __attribute__((visibility("default"))) TS_ClosingSigned_set_signature(uint
        LDKClosingSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSignature val_ref;
        CHECK(*((uint32_t*)val) == 64);
        memcpy(val_ref.compact_form, (uint8_t*)(val + 4), 64);
@@ -19987,11 +23640,13 @@ uint32_t  __attribute__((visibility("default"))) TS_ClosingSigned_get_fee_range(
        LDKClosingSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKClosingSignedFeeRange ret_var = ClosingSigned_get_fee_range(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -20004,9 +23659,11 @@ void  __attribute__((visibility("default"))) TS_ClosingSigned_set_fee_range(uint
        LDKClosingSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKClosingSignedFeeRange val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = ClosingSignedFeeRange_clone(&val_conv);
        ClosingSigned_set_fee_range(&this_ptr_conv, val_conv);
 }
@@ -20021,11 +23678,13 @@ uint32_t  __attribute__((visibility("default"))) TS_ClosingSigned_new(int8_tArra
        LDKClosingSignedFeeRange fee_range_arg_conv;
        fee_range_arg_conv.inner = (void*)(fee_range_arg & (~1));
        fee_range_arg_conv.is_owned = (fee_range_arg & 1) || (fee_range_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(fee_range_arg_conv);
        fee_range_arg_conv = ClosingSignedFeeRange_clone(&fee_range_arg_conv);
        LDKClosingSigned ret_var = ClosingSigned_new(channel_id_arg_ref, fee_satoshis_arg, signature_arg_ref, fee_range_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20033,14 +23692,37 @@ uint32_t  __attribute__((visibility("default"))) TS_ClosingSigned_new(int8_tArra
        return ret_ref;
 }
 
+static inline uint64_t ClosingSigned_clone_ptr(LDKClosingSigned *NONNULL_PTR arg) {
+       LDKClosingSigned ret_var = ClosingSigned_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_ClosingSigned_clone_ptr(uint32_t arg) {
+       LDKClosingSigned arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ClosingSigned_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_ClosingSigned_clone(uint32_t orig) {
        LDKClosingSigned orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKClosingSigned ret_var = ClosingSigned_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20052,6 +23734,7 @@ void  __attribute__((visibility("default"))) TS_UpdateAddHTLC_free(uint32_t this
        LDKUpdateAddHTLC this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        UpdateAddHTLC_free(this_obj_conv);
 }
 
@@ -20059,6 +23742,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_UpdateAddHTLC_get_channel
        LDKUpdateAddHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *UpdateAddHTLC_get_channel_id(&this_ptr_conv), 32);
        return ret_arr;
@@ -20068,6 +23752,7 @@ void  __attribute__((visibility("default"))) TS_UpdateAddHTLC_set_channel_id(uin
        LDKUpdateAddHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -20078,6 +23763,7 @@ int64_t  __attribute__((visibility("default"))) TS_UpdateAddHTLC_get_htlc_id(uin
        LDKUpdateAddHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = UpdateAddHTLC_get_htlc_id(&this_ptr_conv);
        return ret_val;
 }
@@ -20086,6 +23772,7 @@ void  __attribute__((visibility("default"))) TS_UpdateAddHTLC_set_htlc_id(uint32
        LDKUpdateAddHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UpdateAddHTLC_set_htlc_id(&this_ptr_conv, val);
 }
 
@@ -20093,6 +23780,7 @@ int64_t  __attribute__((visibility("default"))) TS_UpdateAddHTLC_get_amount_msat
        LDKUpdateAddHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = UpdateAddHTLC_get_amount_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -20101,6 +23789,7 @@ void  __attribute__((visibility("default"))) TS_UpdateAddHTLC_set_amount_msat(ui
        LDKUpdateAddHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UpdateAddHTLC_set_amount_msat(&this_ptr_conv, val);
 }
 
@@ -20108,6 +23797,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_UpdateAddHTLC_get_payment
        LDKUpdateAddHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *UpdateAddHTLC_get_payment_hash(&this_ptr_conv), 32);
        return ret_arr;
@@ -20117,6 +23807,7 @@ void  __attribute__((visibility("default"))) TS_UpdateAddHTLC_set_payment_hash(u
        LDKUpdateAddHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -20127,6 +23818,7 @@ int32_t  __attribute__((visibility("default"))) TS_UpdateAddHTLC_get_cltv_expiry
        LDKUpdateAddHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = UpdateAddHTLC_get_cltv_expiry(&this_ptr_conv);
        return ret_val;
 }
@@ -20135,17 +23827,41 @@ void  __attribute__((visibility("default"))) TS_UpdateAddHTLC_set_cltv_expiry(ui
        LDKUpdateAddHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UpdateAddHTLC_set_cltv_expiry(&this_ptr_conv, val);
 }
 
+static inline uint64_t UpdateAddHTLC_clone_ptr(LDKUpdateAddHTLC *NONNULL_PTR arg) {
+       LDKUpdateAddHTLC ret_var = UpdateAddHTLC_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_UpdateAddHTLC_clone_ptr(uint32_t arg) {
+       LDKUpdateAddHTLC arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = UpdateAddHTLC_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_UpdateAddHTLC_clone(uint32_t orig) {
        LDKUpdateAddHTLC orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKUpdateAddHTLC ret_var = UpdateAddHTLC_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20157,6 +23873,7 @@ void  __attribute__((visibility("default"))) TS_UpdateFulfillHTLC_free(uint32_t
        LDKUpdateFulfillHTLC this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        UpdateFulfillHTLC_free(this_obj_conv);
 }
 
@@ -20164,6 +23881,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_UpdateFulfillHTLC_get_cha
        LDKUpdateFulfillHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *UpdateFulfillHTLC_get_channel_id(&this_ptr_conv), 32);
        return ret_arr;
@@ -20173,6 +23891,7 @@ void  __attribute__((visibility("default"))) TS_UpdateFulfillHTLC_set_channel_id
        LDKUpdateFulfillHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -20183,6 +23902,7 @@ int64_t  __attribute__((visibility("default"))) TS_UpdateFulfillHTLC_get_htlc_id
        LDKUpdateFulfillHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = UpdateFulfillHTLC_get_htlc_id(&this_ptr_conv);
        return ret_val;
 }
@@ -20191,6 +23911,7 @@ void  __attribute__((visibility("default"))) TS_UpdateFulfillHTLC_set_htlc_id(ui
        LDKUpdateFulfillHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UpdateFulfillHTLC_set_htlc_id(&this_ptr_conv, val);
 }
 
@@ -20198,6 +23919,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_UpdateFulfillHTLC_get_pay
        LDKUpdateFulfillHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *UpdateFulfillHTLC_get_payment_preimage(&this_ptr_conv), 32);
        return ret_arr;
@@ -20207,6 +23929,7 @@ void  __attribute__((visibility("default"))) TS_UpdateFulfillHTLC_set_payment_pr
        LDKUpdateFulfillHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -20224,6 +23947,7 @@ uint32_t  __attribute__((visibility("default"))) TS_UpdateFulfillHTLC_new(int8_t
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20231,14 +23955,37 @@ uint32_t  __attribute__((visibility("default"))) TS_UpdateFulfillHTLC_new(int8_t
        return ret_ref;
 }
 
+static inline uint64_t UpdateFulfillHTLC_clone_ptr(LDKUpdateFulfillHTLC *NONNULL_PTR arg) {
+       LDKUpdateFulfillHTLC ret_var = UpdateFulfillHTLC_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_UpdateFulfillHTLC_clone_ptr(uint32_t arg) {
+       LDKUpdateFulfillHTLC arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = UpdateFulfillHTLC_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_UpdateFulfillHTLC_clone(uint32_t orig) {
        LDKUpdateFulfillHTLC orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKUpdateFulfillHTLC ret_var = UpdateFulfillHTLC_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20250,6 +23997,7 @@ void  __attribute__((visibility("default"))) TS_UpdateFailHTLC_free(uint32_t thi
        LDKUpdateFailHTLC this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        UpdateFailHTLC_free(this_obj_conv);
 }
 
@@ -20257,6 +24005,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_UpdateFailHTLC_get_channe
        LDKUpdateFailHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *UpdateFailHTLC_get_channel_id(&this_ptr_conv), 32);
        return ret_arr;
@@ -20266,6 +24015,7 @@ void  __attribute__((visibility("default"))) TS_UpdateFailHTLC_set_channel_id(ui
        LDKUpdateFailHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -20276,6 +24026,7 @@ int64_t  __attribute__((visibility("default"))) TS_UpdateFailHTLC_get_htlc_id(ui
        LDKUpdateFailHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = UpdateFailHTLC_get_htlc_id(&this_ptr_conv);
        return ret_val;
 }
@@ -20284,17 +24035,41 @@ void  __attribute__((visibility("default"))) TS_UpdateFailHTLC_set_htlc_id(uint3
        LDKUpdateFailHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UpdateFailHTLC_set_htlc_id(&this_ptr_conv, val);
 }
 
+static inline uint64_t UpdateFailHTLC_clone_ptr(LDKUpdateFailHTLC *NONNULL_PTR arg) {
+       LDKUpdateFailHTLC ret_var = UpdateFailHTLC_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_UpdateFailHTLC_clone_ptr(uint32_t arg) {
+       LDKUpdateFailHTLC arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = UpdateFailHTLC_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_UpdateFailHTLC_clone(uint32_t orig) {
        LDKUpdateFailHTLC orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKUpdateFailHTLC ret_var = UpdateFailHTLC_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20306,6 +24081,7 @@ void  __attribute__((visibility("default"))) TS_UpdateFailMalformedHTLC_free(uin
        LDKUpdateFailMalformedHTLC this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        UpdateFailMalformedHTLC_free(this_obj_conv);
 }
 
@@ -20313,6 +24089,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_UpdateFailMalformedHTLC_g
        LDKUpdateFailMalformedHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *UpdateFailMalformedHTLC_get_channel_id(&this_ptr_conv), 32);
        return ret_arr;
@@ -20322,6 +24099,7 @@ void  __attribute__((visibility("default"))) TS_UpdateFailMalformedHTLC_set_chan
        LDKUpdateFailMalformedHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -20332,6 +24110,7 @@ int64_t  __attribute__((visibility("default"))) TS_UpdateFailMalformedHTLC_get_h
        LDKUpdateFailMalformedHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = UpdateFailMalformedHTLC_get_htlc_id(&this_ptr_conv);
        return ret_val;
 }
@@ -20340,6 +24119,7 @@ void  __attribute__((visibility("default"))) TS_UpdateFailMalformedHTLC_set_htlc
        LDKUpdateFailMalformedHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UpdateFailMalformedHTLC_set_htlc_id(&this_ptr_conv, val);
 }
 
@@ -20347,6 +24127,7 @@ int16_t  __attribute__((visibility("default"))) TS_UpdateFailMalformedHTLC_get_f
        LDKUpdateFailMalformedHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = UpdateFailMalformedHTLC_get_failure_code(&this_ptr_conv);
        return ret_val;
 }
@@ -20355,17 +24136,41 @@ void  __attribute__((visibility("default"))) TS_UpdateFailMalformedHTLC_set_fail
        LDKUpdateFailMalformedHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UpdateFailMalformedHTLC_set_failure_code(&this_ptr_conv, val);
 }
 
+static inline uint64_t UpdateFailMalformedHTLC_clone_ptr(LDKUpdateFailMalformedHTLC *NONNULL_PTR arg) {
+       LDKUpdateFailMalformedHTLC ret_var = UpdateFailMalformedHTLC_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_UpdateFailMalformedHTLC_clone_ptr(uint32_t arg) {
+       LDKUpdateFailMalformedHTLC arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = UpdateFailMalformedHTLC_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_UpdateFailMalformedHTLC_clone(uint32_t orig) {
        LDKUpdateFailMalformedHTLC orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKUpdateFailMalformedHTLC ret_var = UpdateFailMalformedHTLC_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20377,6 +24182,7 @@ void  __attribute__((visibility("default"))) TS_CommitmentSigned_free(uint32_t t
        LDKCommitmentSigned this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        CommitmentSigned_free(this_obj_conv);
 }
 
@@ -20384,6 +24190,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_CommitmentSigned_get_chan
        LDKCommitmentSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *CommitmentSigned_get_channel_id(&this_ptr_conv), 32);
        return ret_arr;
@@ -20393,6 +24200,7 @@ void  __attribute__((visibility("default"))) TS_CommitmentSigned_set_channel_id(
        LDKCommitmentSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -20403,6 +24211,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_CommitmentSigned_get_sign
        LDKCommitmentSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(64, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), CommitmentSigned_get_signature(&this_ptr_conv).compact_form, 64);
        return ret_arr;
@@ -20412,6 +24221,7 @@ void  __attribute__((visibility("default"))) TS_CommitmentSigned_set_signature(u
        LDKCommitmentSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSignature val_ref;
        CHECK(*((uint32_t*)val) == 64);
        memcpy(val_ref.compact_form, (uint8_t*)(val + 4), 64);
@@ -20422,6 +24232,7 @@ void  __attribute__((visibility("default"))) TS_CommitmentSigned_set_htlc_signat
        LDKCommitmentSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_SignatureZ val_constr;
        val_constr.datalen = *((uint32_t*)val);
        if (val_constr.datalen > 0)
@@ -20464,6 +24275,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CommitmentSigned_new(int8_tA
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20471,14 +24283,37 @@ uint32_t  __attribute__((visibility("default"))) TS_CommitmentSigned_new(int8_tA
        return ret_ref;
 }
 
+static inline uint64_t CommitmentSigned_clone_ptr(LDKCommitmentSigned *NONNULL_PTR arg) {
+       LDKCommitmentSigned ret_var = CommitmentSigned_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_CommitmentSigned_clone_ptr(uint32_t arg) {
+       LDKCommitmentSigned arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = CommitmentSigned_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CommitmentSigned_clone(uint32_t orig) {
        LDKCommitmentSigned orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKCommitmentSigned ret_var = CommitmentSigned_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20490,6 +24325,7 @@ void  __attribute__((visibility("default"))) TS_RevokeAndACK_free(uint32_t this_
        LDKRevokeAndACK this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        RevokeAndACK_free(this_obj_conv);
 }
 
@@ -20497,6 +24333,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_RevokeAndACK_get_channel_
        LDKRevokeAndACK this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *RevokeAndACK_get_channel_id(&this_ptr_conv), 32);
        return ret_arr;
@@ -20506,6 +24343,7 @@ void  __attribute__((visibility("default"))) TS_RevokeAndACK_set_channel_id(uint
        LDKRevokeAndACK this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -20516,6 +24354,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_RevokeAndACK_get_per_comm
        LDKRevokeAndACK this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *RevokeAndACK_get_per_commitment_secret(&this_ptr_conv), 32);
        return ret_arr;
@@ -20525,6 +24364,7 @@ void  __attribute__((visibility("default"))) TS_RevokeAndACK_set_per_commitment_
        LDKRevokeAndACK this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -20535,6 +24375,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_RevokeAndACK_get_next_per
        LDKRevokeAndACK this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), RevokeAndACK_get_next_per_commitment_point(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -20544,6 +24385,7 @@ void  __attribute__((visibility("default"))) TS_RevokeAndACK_set_next_per_commit
        LDKRevokeAndACK this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -20564,6 +24406,7 @@ uint32_t  __attribute__((visibility("default"))) TS_RevokeAndACK_new(int8_tArray
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20571,14 +24414,37 @@ uint32_t  __attribute__((visibility("default"))) TS_RevokeAndACK_new(int8_tArray
        return ret_ref;
 }
 
+static inline uint64_t RevokeAndACK_clone_ptr(LDKRevokeAndACK *NONNULL_PTR arg) {
+       LDKRevokeAndACK ret_var = RevokeAndACK_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_RevokeAndACK_clone_ptr(uint32_t arg) {
+       LDKRevokeAndACK arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = RevokeAndACK_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_RevokeAndACK_clone(uint32_t orig) {
        LDKRevokeAndACK orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKRevokeAndACK ret_var = RevokeAndACK_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20590,6 +24456,7 @@ void  __attribute__((visibility("default"))) TS_UpdateFee_free(uint32_t this_obj
        LDKUpdateFee this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        UpdateFee_free(this_obj_conv);
 }
 
@@ -20597,6 +24464,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_UpdateFee_get_channel_id(
        LDKUpdateFee this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *UpdateFee_get_channel_id(&this_ptr_conv), 32);
        return ret_arr;
@@ -20606,6 +24474,7 @@ void  __attribute__((visibility("default"))) TS_UpdateFee_set_channel_id(uint32_
        LDKUpdateFee this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -20616,6 +24485,7 @@ int32_t  __attribute__((visibility("default"))) TS_UpdateFee_get_feerate_per_kw(
        LDKUpdateFee this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = UpdateFee_get_feerate_per_kw(&this_ptr_conv);
        return ret_val;
 }
@@ -20624,6 +24494,7 @@ void  __attribute__((visibility("default"))) TS_UpdateFee_set_feerate_per_kw(uin
        LDKUpdateFee this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UpdateFee_set_feerate_per_kw(&this_ptr_conv, val);
 }
 
@@ -20635,6 +24506,7 @@ uint32_t  __attribute__((visibility("default"))) TS_UpdateFee_new(int8_tArray ch
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20642,14 +24514,37 @@ uint32_t  __attribute__((visibility("default"))) TS_UpdateFee_new(int8_tArray ch
        return ret_ref;
 }
 
+static inline uint64_t UpdateFee_clone_ptr(LDKUpdateFee *NONNULL_PTR arg) {
+       LDKUpdateFee ret_var = UpdateFee_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_UpdateFee_clone_ptr(uint32_t arg) {
+       LDKUpdateFee arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = UpdateFee_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_UpdateFee_clone(uint32_t orig) {
        LDKUpdateFee orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKUpdateFee ret_var = UpdateFee_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20661,6 +24556,7 @@ void  __attribute__((visibility("default"))) TS_DataLossProtect_free(uint32_t th
        LDKDataLossProtect this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        DataLossProtect_free(this_obj_conv);
 }
 
@@ -20668,6 +24564,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_DataLossProtect_get_your_
        LDKDataLossProtect this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *DataLossProtect_get_your_last_per_commitment_secret(&this_ptr_conv), 32);
        return ret_arr;
@@ -20677,6 +24574,7 @@ void  __attribute__((visibility("default"))) TS_DataLossProtect_set_your_last_pe
        LDKDataLossProtect this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -20687,6 +24585,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_DataLossProtect_get_my_cu
        LDKDataLossProtect this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), DataLossProtect_get_my_current_per_commitment_point(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -20696,6 +24595,7 @@ void  __attribute__((visibility("default"))) TS_DataLossProtect_set_my_current_p
        LDKDataLossProtect this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -20713,6 +24613,7 @@ uint32_t  __attribute__((visibility("default"))) TS_DataLossProtect_new(int8_tAr
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20720,14 +24621,37 @@ uint32_t  __attribute__((visibility("default"))) TS_DataLossProtect_new(int8_tAr
        return ret_ref;
 }
 
+static inline uint64_t DataLossProtect_clone_ptr(LDKDataLossProtect *NONNULL_PTR arg) {
+       LDKDataLossProtect ret_var = DataLossProtect_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_DataLossProtect_clone_ptr(uint32_t arg) {
+       LDKDataLossProtect arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = DataLossProtect_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_DataLossProtect_clone(uint32_t orig) {
        LDKDataLossProtect orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKDataLossProtect ret_var = DataLossProtect_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20739,6 +24663,7 @@ void  __attribute__((visibility("default"))) TS_ChannelReestablish_free(uint32_t
        LDKChannelReestablish this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelReestablish_free(this_obj_conv);
 }
 
@@ -20746,6 +24671,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ChannelReestablish_get_ch
        LDKChannelReestablish this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *ChannelReestablish_get_channel_id(&this_ptr_conv), 32);
        return ret_arr;
@@ -20755,6 +24681,7 @@ void  __attribute__((visibility("default"))) TS_ChannelReestablish_set_channel_i
        LDKChannelReestablish this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -20765,6 +24692,7 @@ int64_t  __attribute__((visibility("default"))) TS_ChannelReestablish_get_next_l
        LDKChannelReestablish this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelReestablish_get_next_local_commitment_number(&this_ptr_conv);
        return ret_val;
 }
@@ -20773,6 +24701,7 @@ void  __attribute__((visibility("default"))) TS_ChannelReestablish_set_next_loca
        LDKChannelReestablish this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelReestablish_set_next_local_commitment_number(&this_ptr_conv, val);
 }
 
@@ -20780,6 +24709,7 @@ int64_t  __attribute__((visibility("default"))) TS_ChannelReestablish_get_next_r
        LDKChannelReestablish this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelReestablish_get_next_remote_commitment_number(&this_ptr_conv);
        return ret_val;
 }
@@ -20788,17 +24718,41 @@ void  __attribute__((visibility("default"))) TS_ChannelReestablish_set_next_remo
        LDKChannelReestablish this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelReestablish_set_next_remote_commitment_number(&this_ptr_conv, val);
 }
 
+static inline uint64_t ChannelReestablish_clone_ptr(LDKChannelReestablish *NONNULL_PTR arg) {
+       LDKChannelReestablish ret_var = ChannelReestablish_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_ChannelReestablish_clone_ptr(uint32_t arg) {
+       LDKChannelReestablish arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChannelReestablish_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_ChannelReestablish_clone(uint32_t orig) {
        LDKChannelReestablish orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChannelReestablish ret_var = ChannelReestablish_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20810,6 +24764,7 @@ void  __attribute__((visibility("default"))) TS_AnnouncementSignatures_free(uint
        LDKAnnouncementSignatures this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        AnnouncementSignatures_free(this_obj_conv);
 }
 
@@ -20817,6 +24772,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_AnnouncementSignatures_ge
        LDKAnnouncementSignatures this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *AnnouncementSignatures_get_channel_id(&this_ptr_conv), 32);
        return ret_arr;
@@ -20826,6 +24782,7 @@ void  __attribute__((visibility("default"))) TS_AnnouncementSignatures_set_chann
        LDKAnnouncementSignatures this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -20836,6 +24793,7 @@ int64_t  __attribute__((visibility("default"))) TS_AnnouncementSignatures_get_sh
        LDKAnnouncementSignatures this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = AnnouncementSignatures_get_short_channel_id(&this_ptr_conv);
        return ret_val;
 }
@@ -20844,6 +24802,7 @@ void  __attribute__((visibility("default"))) TS_AnnouncementSignatures_set_short
        LDKAnnouncementSignatures this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        AnnouncementSignatures_set_short_channel_id(&this_ptr_conv, val);
 }
 
@@ -20851,6 +24810,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_AnnouncementSignatures_ge
        LDKAnnouncementSignatures this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(64, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), AnnouncementSignatures_get_node_signature(&this_ptr_conv).compact_form, 64);
        return ret_arr;
@@ -20860,6 +24820,7 @@ void  __attribute__((visibility("default"))) TS_AnnouncementSignatures_set_node_
        LDKAnnouncementSignatures this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSignature val_ref;
        CHECK(*((uint32_t*)val) == 64);
        memcpy(val_ref.compact_form, (uint8_t*)(val + 4), 64);
@@ -20870,6 +24831,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_AnnouncementSignatures_ge
        LDKAnnouncementSignatures this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(64, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), AnnouncementSignatures_get_bitcoin_signature(&this_ptr_conv).compact_form, 64);
        return ret_arr;
@@ -20879,6 +24841,7 @@ void  __attribute__((visibility("default"))) TS_AnnouncementSignatures_set_bitco
        LDKAnnouncementSignatures this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSignature val_ref;
        CHECK(*((uint32_t*)val) == 64);
        memcpy(val_ref.compact_form, (uint8_t*)(val + 4), 64);
@@ -20899,6 +24862,7 @@ uint32_t  __attribute__((visibility("default"))) TS_AnnouncementSignatures_new(i
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20906,14 +24870,37 @@ uint32_t  __attribute__((visibility("default"))) TS_AnnouncementSignatures_new(i
        return ret_ref;
 }
 
+static inline uint64_t AnnouncementSignatures_clone_ptr(LDKAnnouncementSignatures *NONNULL_PTR arg) {
+       LDKAnnouncementSignatures ret_var = AnnouncementSignatures_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_AnnouncementSignatures_clone_ptr(uint32_t arg) {
+       LDKAnnouncementSignatures arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = AnnouncementSignatures_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_AnnouncementSignatures_clone(uint32_t orig) {
        LDKAnnouncementSignatures orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKAnnouncementSignatures ret_var = AnnouncementSignatures_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20930,6 +24917,18 @@ void  __attribute__((visibility("default"))) TS_NetAddress_free(uint32_t this_pt
        NetAddress_free(this_ptr_conv);
 }
 
+static inline uint64_t NetAddress_clone_ptr(LDKNetAddress *NONNULL_PTR arg) {
+       LDKNetAddress *ret_copy = MALLOC(sizeof(LDKNetAddress), "LDKNetAddress");
+       *ret_copy = NetAddress_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_NetAddress_clone_ptr(uint32_t arg) {
+       LDKNetAddress* arg_conv = (LDKNetAddress*)arg;
+       int64_t ret_val = NetAddress_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_NetAddress_clone(uint32_t orig) {
        LDKNetAddress* orig_conv = (LDKNetAddress*)orig;
        LDKNetAddress *ret_copy = MALLOC(sizeof(LDKNetAddress), "LDKNetAddress");
@@ -21000,6 +24999,7 @@ void  __attribute__((visibility("default"))) TS_UnsignedNodeAnnouncement_free(ui
        LDKUnsignedNodeAnnouncement this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        UnsignedNodeAnnouncement_free(this_obj_conv);
 }
 
@@ -21007,10 +25007,12 @@ uint32_t  __attribute__((visibility("default"))) TS_UnsignedNodeAnnouncement_get
        LDKUnsignedNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNodeFeatures ret_var = UnsignedNodeAnnouncement_get_features(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -21022,9 +25024,11 @@ void  __attribute__((visibility("default"))) TS_UnsignedNodeAnnouncement_set_fea
        LDKUnsignedNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNodeFeatures val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = NodeFeatures_clone(&val_conv);
        UnsignedNodeAnnouncement_set_features(&this_ptr_conv, val_conv);
 }
@@ -21033,6 +25037,7 @@ int32_t  __attribute__((visibility("default"))) TS_UnsignedNodeAnnouncement_get_
        LDKUnsignedNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = UnsignedNodeAnnouncement_get_timestamp(&this_ptr_conv);
        return ret_val;
 }
@@ -21041,6 +25046,7 @@ void  __attribute__((visibility("default"))) TS_UnsignedNodeAnnouncement_set_tim
        LDKUnsignedNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UnsignedNodeAnnouncement_set_timestamp(&this_ptr_conv, val);
 }
 
@@ -21048,6 +25054,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_UnsignedNodeAnnouncement_
        LDKUnsignedNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), UnsignedNodeAnnouncement_get_node_id(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -21057,6 +25064,7 @@ void  __attribute__((visibility("default"))) TS_UnsignedNodeAnnouncement_set_nod
        LDKUnsignedNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -21067,6 +25075,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_UnsignedNodeAnnouncement_
        LDKUnsignedNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(3, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *UnsignedNodeAnnouncement_get_rgb(&this_ptr_conv), 3);
        return ret_arr;
@@ -21076,6 +25085,7 @@ void  __attribute__((visibility("default"))) TS_UnsignedNodeAnnouncement_set_rgb
        LDKUnsignedNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThreeBytes val_ref;
        CHECK(*((uint32_t*)val) == 3);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 3);
@@ -21086,6 +25096,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_UnsignedNodeAnnouncement_
        LDKUnsignedNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *UnsignedNodeAnnouncement_get_alias(&this_ptr_conv), 32);
        return ret_arr;
@@ -21095,6 +25106,7 @@ void  __attribute__((visibility("default"))) TS_UnsignedNodeAnnouncement_set_ali
        LDKUnsignedNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -21105,6 +25117,7 @@ void  __attribute__((visibility("default"))) TS_UnsignedNodeAnnouncement_set_add
        LDKUnsignedNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_NetAddressZ val_constr;
        val_constr.datalen = *((uint32_t*)val);
        if (val_constr.datalen > 0)
@@ -21123,14 +25136,37 @@ void  __attribute__((visibility("default"))) TS_UnsignedNodeAnnouncement_set_add
        UnsignedNodeAnnouncement_set_addresses(&this_ptr_conv, val_constr);
 }
 
+static inline uint64_t UnsignedNodeAnnouncement_clone_ptr(LDKUnsignedNodeAnnouncement *NONNULL_PTR arg) {
+       LDKUnsignedNodeAnnouncement ret_var = UnsignedNodeAnnouncement_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_UnsignedNodeAnnouncement_clone_ptr(uint32_t arg) {
+       LDKUnsignedNodeAnnouncement arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = UnsignedNodeAnnouncement_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_UnsignedNodeAnnouncement_clone(uint32_t orig) {
        LDKUnsignedNodeAnnouncement orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKUnsignedNodeAnnouncement ret_var = UnsignedNodeAnnouncement_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -21142,6 +25178,7 @@ void  __attribute__((visibility("default"))) TS_NodeAnnouncement_free(uint32_t t
        LDKNodeAnnouncement this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        NodeAnnouncement_free(this_obj_conv);
 }
 
@@ -21149,6 +25186,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_NodeAnnouncement_get_sign
        LDKNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(64, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), NodeAnnouncement_get_signature(&this_ptr_conv).compact_form, 64);
        return ret_arr;
@@ -21158,6 +25196,7 @@ void  __attribute__((visibility("default"))) TS_NodeAnnouncement_set_signature(u
        LDKNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSignature val_ref;
        CHECK(*((uint32_t*)val) == 64);
        memcpy(val_ref.compact_form, (uint8_t*)(val + 4), 64);
@@ -21168,10 +25207,12 @@ uint32_t  __attribute__((visibility("default"))) TS_NodeAnnouncement_get_content
        LDKNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKUnsignedNodeAnnouncement ret_var = NodeAnnouncement_get_contents(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -21183,9 +25224,11 @@ void  __attribute__((visibility("default"))) TS_NodeAnnouncement_set_contents(ui
        LDKNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKUnsignedNodeAnnouncement val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = UnsignedNodeAnnouncement_clone(&val_conv);
        NodeAnnouncement_set_contents(&this_ptr_conv, val_conv);
 }
@@ -21197,11 +25240,13 @@ uint32_t  __attribute__((visibility("default"))) TS_NodeAnnouncement_new(int8_tA
        LDKUnsignedNodeAnnouncement contents_arg_conv;
        contents_arg_conv.inner = (void*)(contents_arg & (~1));
        contents_arg_conv.is_owned = (contents_arg & 1) || (contents_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(contents_arg_conv);
        contents_arg_conv = UnsignedNodeAnnouncement_clone(&contents_arg_conv);
        LDKNodeAnnouncement ret_var = NodeAnnouncement_new(signature_arg_ref, contents_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -21209,14 +25254,37 @@ uint32_t  __attribute__((visibility("default"))) TS_NodeAnnouncement_new(int8_tA
        return ret_ref;
 }
 
+static inline uint64_t NodeAnnouncement_clone_ptr(LDKNodeAnnouncement *NONNULL_PTR arg) {
+       LDKNodeAnnouncement ret_var = NodeAnnouncement_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_NodeAnnouncement_clone_ptr(uint32_t arg) {
+       LDKNodeAnnouncement arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = NodeAnnouncement_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_NodeAnnouncement_clone(uint32_t orig) {
        LDKNodeAnnouncement orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKNodeAnnouncement ret_var = NodeAnnouncement_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -21228,6 +25296,7 @@ void  __attribute__((visibility("default"))) TS_UnsignedChannelAnnouncement_free
        LDKUnsignedChannelAnnouncement this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        UnsignedChannelAnnouncement_free(this_obj_conv);
 }
 
@@ -21235,10 +25304,12 @@ uint32_t  __attribute__((visibility("default"))) TS_UnsignedChannelAnnouncement_
        LDKUnsignedChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelFeatures ret_var = UnsignedChannelAnnouncement_get_features(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -21250,9 +25321,11 @@ void  __attribute__((visibility("default"))) TS_UnsignedChannelAnnouncement_set_
        LDKUnsignedChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelFeatures val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = ChannelFeatures_clone(&val_conv);
        UnsignedChannelAnnouncement_set_features(&this_ptr_conv, val_conv);
 }
@@ -21261,6 +25334,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_UnsignedChannelAnnounceme
        LDKUnsignedChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *UnsignedChannelAnnouncement_get_chain_hash(&this_ptr_conv), 32);
        return ret_arr;
@@ -21270,6 +25344,7 @@ void  __attribute__((visibility("default"))) TS_UnsignedChannelAnnouncement_set_
        LDKUnsignedChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -21280,6 +25355,7 @@ int64_t  __attribute__((visibility("default"))) TS_UnsignedChannelAnnouncement_g
        LDKUnsignedChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = UnsignedChannelAnnouncement_get_short_channel_id(&this_ptr_conv);
        return ret_val;
 }
@@ -21288,6 +25364,7 @@ void  __attribute__((visibility("default"))) TS_UnsignedChannelAnnouncement_set_
        LDKUnsignedChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UnsignedChannelAnnouncement_set_short_channel_id(&this_ptr_conv, val);
 }
 
@@ -21295,6 +25372,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_UnsignedChannelAnnounceme
        LDKUnsignedChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), UnsignedChannelAnnouncement_get_node_id_1(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -21304,6 +25382,7 @@ void  __attribute__((visibility("default"))) TS_UnsignedChannelAnnouncement_set_
        LDKUnsignedChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -21314,6 +25393,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_UnsignedChannelAnnounceme
        LDKUnsignedChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), UnsignedChannelAnnouncement_get_node_id_2(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -21323,6 +25403,7 @@ void  __attribute__((visibility("default"))) TS_UnsignedChannelAnnouncement_set_
        LDKUnsignedChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -21333,6 +25414,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_UnsignedChannelAnnounceme
        LDKUnsignedChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), UnsignedChannelAnnouncement_get_bitcoin_key_1(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -21342,6 +25424,7 @@ void  __attribute__((visibility("default"))) TS_UnsignedChannelAnnouncement_set_
        LDKUnsignedChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -21352,6 +25435,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_UnsignedChannelAnnounceme
        LDKUnsignedChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), UnsignedChannelAnnouncement_get_bitcoin_key_2(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -21361,20 +25445,44 @@ void  __attribute__((visibility("default"))) TS_UnsignedChannelAnnouncement_set_
        LDKUnsignedChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
        UnsignedChannelAnnouncement_set_bitcoin_key_2(&this_ptr_conv, val_ref);
 }
 
+static inline uint64_t UnsignedChannelAnnouncement_clone_ptr(LDKUnsignedChannelAnnouncement *NONNULL_PTR arg) {
+       LDKUnsignedChannelAnnouncement ret_var = UnsignedChannelAnnouncement_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_UnsignedChannelAnnouncement_clone_ptr(uint32_t arg) {
+       LDKUnsignedChannelAnnouncement arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = UnsignedChannelAnnouncement_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_UnsignedChannelAnnouncement_clone(uint32_t orig) {
        LDKUnsignedChannelAnnouncement orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKUnsignedChannelAnnouncement ret_var = UnsignedChannelAnnouncement_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -21386,6 +25494,7 @@ void  __attribute__((visibility("default"))) TS_ChannelAnnouncement_free(uint32_
        LDKChannelAnnouncement this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelAnnouncement_free(this_obj_conv);
 }
 
@@ -21393,6 +25502,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ChannelAnnouncement_get_n
        LDKChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(64, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ChannelAnnouncement_get_node_signature_1(&this_ptr_conv).compact_form, 64);
        return ret_arr;
@@ -21402,6 +25512,7 @@ void  __attribute__((visibility("default"))) TS_ChannelAnnouncement_set_node_sig
        LDKChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSignature val_ref;
        CHECK(*((uint32_t*)val) == 64);
        memcpy(val_ref.compact_form, (uint8_t*)(val + 4), 64);
@@ -21412,6 +25523,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ChannelAnnouncement_get_n
        LDKChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(64, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ChannelAnnouncement_get_node_signature_2(&this_ptr_conv).compact_form, 64);
        return ret_arr;
@@ -21421,6 +25533,7 @@ void  __attribute__((visibility("default"))) TS_ChannelAnnouncement_set_node_sig
        LDKChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSignature val_ref;
        CHECK(*((uint32_t*)val) == 64);
        memcpy(val_ref.compact_form, (uint8_t*)(val + 4), 64);
@@ -21431,6 +25544,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ChannelAnnouncement_get_b
        LDKChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(64, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ChannelAnnouncement_get_bitcoin_signature_1(&this_ptr_conv).compact_form, 64);
        return ret_arr;
@@ -21440,6 +25554,7 @@ void  __attribute__((visibility("default"))) TS_ChannelAnnouncement_set_bitcoin_
        LDKChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSignature val_ref;
        CHECK(*((uint32_t*)val) == 64);
        memcpy(val_ref.compact_form, (uint8_t*)(val + 4), 64);
@@ -21450,6 +25565,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ChannelAnnouncement_get_b
        LDKChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(64, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ChannelAnnouncement_get_bitcoin_signature_2(&this_ptr_conv).compact_form, 64);
        return ret_arr;
@@ -21459,6 +25575,7 @@ void  __attribute__((visibility("default"))) TS_ChannelAnnouncement_set_bitcoin_
        LDKChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSignature val_ref;
        CHECK(*((uint32_t*)val) == 64);
        memcpy(val_ref.compact_form, (uint8_t*)(val + 4), 64);
@@ -21469,10 +25586,12 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelAnnouncement_get_cont
        LDKChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKUnsignedChannelAnnouncement ret_var = ChannelAnnouncement_get_contents(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -21484,9 +25603,11 @@ void  __attribute__((visibility("default"))) TS_ChannelAnnouncement_set_contents
        LDKChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKUnsignedChannelAnnouncement val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = UnsignedChannelAnnouncement_clone(&val_conv);
        ChannelAnnouncement_set_contents(&this_ptr_conv, val_conv);
 }
@@ -21507,11 +25628,13 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelAnnouncement_new(int8
        LDKUnsignedChannelAnnouncement contents_arg_conv;
        contents_arg_conv.inner = (void*)(contents_arg & (~1));
        contents_arg_conv.is_owned = (contents_arg & 1) || (contents_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(contents_arg_conv);
        contents_arg_conv = UnsignedChannelAnnouncement_clone(&contents_arg_conv);
        LDKChannelAnnouncement ret_var = ChannelAnnouncement_new(node_signature_1_arg_ref, node_signature_2_arg_ref, bitcoin_signature_1_arg_ref, bitcoin_signature_2_arg_ref, contents_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -21519,14 +25642,37 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelAnnouncement_new(int8
        return ret_ref;
 }
 
+static inline uint64_t ChannelAnnouncement_clone_ptr(LDKChannelAnnouncement *NONNULL_PTR arg) {
+       LDKChannelAnnouncement ret_var = ChannelAnnouncement_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_ChannelAnnouncement_clone_ptr(uint32_t arg) {
+       LDKChannelAnnouncement arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChannelAnnouncement_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_ChannelAnnouncement_clone(uint32_t orig) {
        LDKChannelAnnouncement orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChannelAnnouncement ret_var = ChannelAnnouncement_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -21538,6 +25684,7 @@ void  __attribute__((visibility("default"))) TS_UnsignedChannelUpdate_free(uint3
        LDKUnsignedChannelUpdate this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        UnsignedChannelUpdate_free(this_obj_conv);
 }
 
@@ -21545,6 +25692,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_UnsignedChannelUpdate_get
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *UnsignedChannelUpdate_get_chain_hash(&this_ptr_conv), 32);
        return ret_arr;
@@ -21554,6 +25702,7 @@ void  __attribute__((visibility("default"))) TS_UnsignedChannelUpdate_set_chain_
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -21564,6 +25713,7 @@ int64_t  __attribute__((visibility("default"))) TS_UnsignedChannelUpdate_get_sho
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = UnsignedChannelUpdate_get_short_channel_id(&this_ptr_conv);
        return ret_val;
 }
@@ -21572,6 +25722,7 @@ void  __attribute__((visibility("default"))) TS_UnsignedChannelUpdate_set_short_
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UnsignedChannelUpdate_set_short_channel_id(&this_ptr_conv, val);
 }
 
@@ -21579,6 +25730,7 @@ int32_t  __attribute__((visibility("default"))) TS_UnsignedChannelUpdate_get_tim
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = UnsignedChannelUpdate_get_timestamp(&this_ptr_conv);
        return ret_val;
 }
@@ -21587,6 +25739,7 @@ void  __attribute__((visibility("default"))) TS_UnsignedChannelUpdate_set_timest
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UnsignedChannelUpdate_set_timestamp(&this_ptr_conv, val);
 }
 
@@ -21594,6 +25747,7 @@ int8_t  __attribute__((visibility("default"))) TS_UnsignedChannelUpdate_get_flag
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_t ret_val = UnsignedChannelUpdate_get_flags(&this_ptr_conv);
        return ret_val;
 }
@@ -21602,6 +25756,7 @@ void  __attribute__((visibility("default"))) TS_UnsignedChannelUpdate_set_flags(
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UnsignedChannelUpdate_set_flags(&this_ptr_conv, val);
 }
 
@@ -21609,6 +25764,7 @@ int16_t  __attribute__((visibility("default"))) TS_UnsignedChannelUpdate_get_clt
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = UnsignedChannelUpdate_get_cltv_expiry_delta(&this_ptr_conv);
        return ret_val;
 }
@@ -21617,6 +25773,7 @@ void  __attribute__((visibility("default"))) TS_UnsignedChannelUpdate_set_cltv_e
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UnsignedChannelUpdate_set_cltv_expiry_delta(&this_ptr_conv, val);
 }
 
@@ -21624,6 +25781,7 @@ int64_t  __attribute__((visibility("default"))) TS_UnsignedChannelUpdate_get_htl
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = UnsignedChannelUpdate_get_htlc_minimum_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -21632,6 +25790,7 @@ void  __attribute__((visibility("default"))) TS_UnsignedChannelUpdate_set_htlc_m
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UnsignedChannelUpdate_set_htlc_minimum_msat(&this_ptr_conv, val);
 }
 
@@ -21639,6 +25798,7 @@ int32_t  __attribute__((visibility("default"))) TS_UnsignedChannelUpdate_get_fee
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = UnsignedChannelUpdate_get_fee_base_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -21647,6 +25807,7 @@ void  __attribute__((visibility("default"))) TS_UnsignedChannelUpdate_set_fee_ba
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UnsignedChannelUpdate_set_fee_base_msat(&this_ptr_conv, val);
 }
 
@@ -21654,6 +25815,7 @@ int32_t  __attribute__((visibility("default"))) TS_UnsignedChannelUpdate_get_fee
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = UnsignedChannelUpdate_get_fee_proportional_millionths(&this_ptr_conv);
        return ret_val;
 }
@@ -21662,17 +25824,41 @@ void  __attribute__((visibility("default"))) TS_UnsignedChannelUpdate_set_fee_pr
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UnsignedChannelUpdate_set_fee_proportional_millionths(&this_ptr_conv, val);
 }
 
+static inline uint64_t UnsignedChannelUpdate_clone_ptr(LDKUnsignedChannelUpdate *NONNULL_PTR arg) {
+       LDKUnsignedChannelUpdate ret_var = UnsignedChannelUpdate_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_UnsignedChannelUpdate_clone_ptr(uint32_t arg) {
+       LDKUnsignedChannelUpdate arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = UnsignedChannelUpdate_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_UnsignedChannelUpdate_clone(uint32_t orig) {
        LDKUnsignedChannelUpdate orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKUnsignedChannelUpdate ret_var = UnsignedChannelUpdate_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -21684,6 +25870,7 @@ void  __attribute__((visibility("default"))) TS_ChannelUpdate_free(uint32_t this
        LDKChannelUpdate this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelUpdate_free(this_obj_conv);
 }
 
@@ -21691,6 +25878,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ChannelUpdate_get_signatu
        LDKChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(64, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ChannelUpdate_get_signature(&this_ptr_conv).compact_form, 64);
        return ret_arr;
@@ -21700,6 +25888,7 @@ void  __attribute__((visibility("default"))) TS_ChannelUpdate_set_signature(uint
        LDKChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSignature val_ref;
        CHECK(*((uint32_t*)val) == 64);
        memcpy(val_ref.compact_form, (uint8_t*)(val + 4), 64);
@@ -21710,10 +25899,12 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelUpdate_get_contents(u
        LDKChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKUnsignedChannelUpdate ret_var = ChannelUpdate_get_contents(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -21725,9 +25916,11 @@ void  __attribute__((visibility("default"))) TS_ChannelUpdate_set_contents(uint3
        LDKChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKUnsignedChannelUpdate val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = UnsignedChannelUpdate_clone(&val_conv);
        ChannelUpdate_set_contents(&this_ptr_conv, val_conv);
 }
@@ -21739,11 +25932,13 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelUpdate_new(int8_tArra
        LDKUnsignedChannelUpdate contents_arg_conv;
        contents_arg_conv.inner = (void*)(contents_arg & (~1));
        contents_arg_conv.is_owned = (contents_arg & 1) || (contents_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(contents_arg_conv);
        contents_arg_conv = UnsignedChannelUpdate_clone(&contents_arg_conv);
        LDKChannelUpdate ret_var = ChannelUpdate_new(signature_arg_ref, contents_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -21751,14 +25946,37 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelUpdate_new(int8_tArra
        return ret_ref;
 }
 
+static inline uint64_t ChannelUpdate_clone_ptr(LDKChannelUpdate *NONNULL_PTR arg) {
+       LDKChannelUpdate ret_var = ChannelUpdate_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_ChannelUpdate_clone_ptr(uint32_t arg) {
+       LDKChannelUpdate arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChannelUpdate_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_ChannelUpdate_clone(uint32_t orig) {
        LDKChannelUpdate orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChannelUpdate ret_var = ChannelUpdate_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -21770,6 +25988,7 @@ void  __attribute__((visibility("default"))) TS_QueryChannelRange_free(uint32_t
        LDKQueryChannelRange this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        QueryChannelRange_free(this_obj_conv);
 }
 
@@ -21777,6 +25996,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_QueryChannelRange_get_cha
        LDKQueryChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *QueryChannelRange_get_chain_hash(&this_ptr_conv), 32);
        return ret_arr;
@@ -21786,6 +26006,7 @@ void  __attribute__((visibility("default"))) TS_QueryChannelRange_set_chain_hash
        LDKQueryChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -21796,6 +26017,7 @@ int32_t  __attribute__((visibility("default"))) TS_QueryChannelRange_get_first_b
        LDKQueryChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = QueryChannelRange_get_first_blocknum(&this_ptr_conv);
        return ret_val;
 }
@@ -21804,6 +26026,7 @@ void  __attribute__((visibility("default"))) TS_QueryChannelRange_set_first_bloc
        LDKQueryChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        QueryChannelRange_set_first_blocknum(&this_ptr_conv, val);
 }
 
@@ -21811,6 +26034,7 @@ int32_t  __attribute__((visibility("default"))) TS_QueryChannelRange_get_number_
        LDKQueryChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = QueryChannelRange_get_number_of_blocks(&this_ptr_conv);
        return ret_val;
 }
@@ -21819,6 +26043,7 @@ void  __attribute__((visibility("default"))) TS_QueryChannelRange_set_number_of_
        LDKQueryChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        QueryChannelRange_set_number_of_blocks(&this_ptr_conv, val);
 }
 
@@ -21830,6 +26055,7 @@ uint32_t  __attribute__((visibility("default"))) TS_QueryChannelRange_new(int8_t
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -21837,14 +26063,37 @@ uint32_t  __attribute__((visibility("default"))) TS_QueryChannelRange_new(int8_t
        return ret_ref;
 }
 
+static inline uint64_t QueryChannelRange_clone_ptr(LDKQueryChannelRange *NONNULL_PTR arg) {
+       LDKQueryChannelRange ret_var = QueryChannelRange_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_QueryChannelRange_clone_ptr(uint32_t arg) {
+       LDKQueryChannelRange arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = QueryChannelRange_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_QueryChannelRange_clone(uint32_t orig) {
        LDKQueryChannelRange orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKQueryChannelRange ret_var = QueryChannelRange_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -21856,6 +26105,7 @@ void  __attribute__((visibility("default"))) TS_ReplyChannelRange_free(uint32_t
        LDKReplyChannelRange this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ReplyChannelRange_free(this_obj_conv);
 }
 
@@ -21863,6 +26113,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ReplyChannelRange_get_cha
        LDKReplyChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *ReplyChannelRange_get_chain_hash(&this_ptr_conv), 32);
        return ret_arr;
@@ -21872,6 +26123,7 @@ void  __attribute__((visibility("default"))) TS_ReplyChannelRange_set_chain_hash
        LDKReplyChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -21882,6 +26134,7 @@ int32_t  __attribute__((visibility("default"))) TS_ReplyChannelRange_get_first_b
        LDKReplyChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = ReplyChannelRange_get_first_blocknum(&this_ptr_conv);
        return ret_val;
 }
@@ -21890,6 +26143,7 @@ void  __attribute__((visibility("default"))) TS_ReplyChannelRange_set_first_bloc
        LDKReplyChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ReplyChannelRange_set_first_blocknum(&this_ptr_conv, val);
 }
 
@@ -21897,6 +26151,7 @@ int32_t  __attribute__((visibility("default"))) TS_ReplyChannelRange_get_number_
        LDKReplyChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = ReplyChannelRange_get_number_of_blocks(&this_ptr_conv);
        return ret_val;
 }
@@ -21905,6 +26160,7 @@ void  __attribute__((visibility("default"))) TS_ReplyChannelRange_set_number_of_
        LDKReplyChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ReplyChannelRange_set_number_of_blocks(&this_ptr_conv, val);
 }
 
@@ -21912,6 +26168,7 @@ jboolean  __attribute__((visibility("default"))) TS_ReplyChannelRange_get_sync_c
        LDKReplyChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        jboolean ret_val = ReplyChannelRange_get_sync_complete(&this_ptr_conv);
        return ret_val;
 }
@@ -21920,6 +26177,7 @@ void  __attribute__((visibility("default"))) TS_ReplyChannelRange_set_sync_compl
        LDKReplyChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ReplyChannelRange_set_sync_complete(&this_ptr_conv, val);
 }
 
@@ -21927,6 +26185,7 @@ void  __attribute__((visibility("default"))) TS_ReplyChannelRange_set_short_chan
        LDKReplyChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_u64Z val_constr;
        val_constr.datalen = *((uint32_t*)val);
        if (val_constr.datalen > 0)
@@ -21960,6 +26219,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ReplyChannelRange_new(int8_t
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -21967,14 +26227,37 @@ uint32_t  __attribute__((visibility("default"))) TS_ReplyChannelRange_new(int8_t
        return ret_ref;
 }
 
+static inline uint64_t ReplyChannelRange_clone_ptr(LDKReplyChannelRange *NONNULL_PTR arg) {
+       LDKReplyChannelRange ret_var = ReplyChannelRange_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_ReplyChannelRange_clone_ptr(uint32_t arg) {
+       LDKReplyChannelRange arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ReplyChannelRange_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_ReplyChannelRange_clone(uint32_t orig) {
        LDKReplyChannelRange orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKReplyChannelRange ret_var = ReplyChannelRange_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -21986,6 +26269,7 @@ void  __attribute__((visibility("default"))) TS_QueryShortChannelIds_free(uint32
        LDKQueryShortChannelIds this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        QueryShortChannelIds_free(this_obj_conv);
 }
 
@@ -21993,6 +26277,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_QueryShortChannelIds_get_
        LDKQueryShortChannelIds this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *QueryShortChannelIds_get_chain_hash(&this_ptr_conv), 32);
        return ret_arr;
@@ -22002,6 +26287,7 @@ void  __attribute__((visibility("default"))) TS_QueryShortChannelIds_set_chain_h
        LDKQueryShortChannelIds this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -22012,6 +26298,7 @@ void  __attribute__((visibility("default"))) TS_QueryShortChannelIds_set_short_c
        LDKQueryShortChannelIds this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_u64Z val_constr;
        val_constr.datalen = *((uint32_t*)val);
        if (val_constr.datalen > 0)
@@ -22045,6 +26332,7 @@ uint32_t  __attribute__((visibility("default"))) TS_QueryShortChannelIds_new(int
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -22052,14 +26340,37 @@ uint32_t  __attribute__((visibility("default"))) TS_QueryShortChannelIds_new(int
        return ret_ref;
 }
 
+static inline uint64_t QueryShortChannelIds_clone_ptr(LDKQueryShortChannelIds *NONNULL_PTR arg) {
+       LDKQueryShortChannelIds ret_var = QueryShortChannelIds_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_QueryShortChannelIds_clone_ptr(uint32_t arg) {
+       LDKQueryShortChannelIds arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = QueryShortChannelIds_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_QueryShortChannelIds_clone(uint32_t orig) {
        LDKQueryShortChannelIds orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKQueryShortChannelIds ret_var = QueryShortChannelIds_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -22071,6 +26382,7 @@ void  __attribute__((visibility("default"))) TS_ReplyShortChannelIdsEnd_free(uin
        LDKReplyShortChannelIdsEnd this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ReplyShortChannelIdsEnd_free(this_obj_conv);
 }
 
@@ -22078,6 +26390,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ReplyShortChannelIdsEnd_g
        LDKReplyShortChannelIdsEnd this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *ReplyShortChannelIdsEnd_get_chain_hash(&this_ptr_conv), 32);
        return ret_arr;
@@ -22087,6 +26400,7 @@ void  __attribute__((visibility("default"))) TS_ReplyShortChannelIdsEnd_set_chai
        LDKReplyShortChannelIdsEnd this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -22097,6 +26411,7 @@ jboolean  __attribute__((visibility("default"))) TS_ReplyShortChannelIdsEnd_get_
        LDKReplyShortChannelIdsEnd this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        jboolean ret_val = ReplyShortChannelIdsEnd_get_full_information(&this_ptr_conv);
        return ret_val;
 }
@@ -22105,6 +26420,7 @@ void  __attribute__((visibility("default"))) TS_ReplyShortChannelIdsEnd_set_full
        LDKReplyShortChannelIdsEnd this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ReplyShortChannelIdsEnd_set_full_information(&this_ptr_conv, val);
 }
 
@@ -22116,6 +26432,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ReplyShortChannelIdsEnd_new(
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -22123,14 +26440,37 @@ uint32_t  __attribute__((visibility("default"))) TS_ReplyShortChannelIdsEnd_new(
        return ret_ref;
 }
 
+static inline uint64_t ReplyShortChannelIdsEnd_clone_ptr(LDKReplyShortChannelIdsEnd *NONNULL_PTR arg) {
+       LDKReplyShortChannelIdsEnd ret_var = ReplyShortChannelIdsEnd_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_ReplyShortChannelIdsEnd_clone_ptr(uint32_t arg) {
+       LDKReplyShortChannelIdsEnd arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ReplyShortChannelIdsEnd_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_ReplyShortChannelIdsEnd_clone(uint32_t orig) {
        LDKReplyShortChannelIdsEnd orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKReplyShortChannelIdsEnd ret_var = ReplyShortChannelIdsEnd_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -22142,6 +26482,7 @@ void  __attribute__((visibility("default"))) TS_GossipTimestampFilter_free(uint3
        LDKGossipTimestampFilter this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        GossipTimestampFilter_free(this_obj_conv);
 }
 
@@ -22149,6 +26490,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_GossipTimestampFilter_get
        LDKGossipTimestampFilter this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *GossipTimestampFilter_get_chain_hash(&this_ptr_conv), 32);
        return ret_arr;
@@ -22158,6 +26500,7 @@ void  __attribute__((visibility("default"))) TS_GossipTimestampFilter_set_chain_
        LDKGossipTimestampFilter this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -22168,6 +26511,7 @@ int32_t  __attribute__((visibility("default"))) TS_GossipTimestampFilter_get_fir
        LDKGossipTimestampFilter this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = GossipTimestampFilter_get_first_timestamp(&this_ptr_conv);
        return ret_val;
 }
@@ -22176,6 +26520,7 @@ void  __attribute__((visibility("default"))) TS_GossipTimestampFilter_set_first_
        LDKGossipTimestampFilter this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        GossipTimestampFilter_set_first_timestamp(&this_ptr_conv, val);
 }
 
@@ -22183,6 +26528,7 @@ int32_t  __attribute__((visibility("default"))) TS_GossipTimestampFilter_get_tim
        LDKGossipTimestampFilter this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = GossipTimestampFilter_get_timestamp_range(&this_ptr_conv);
        return ret_val;
 }
@@ -22191,6 +26537,7 @@ void  __attribute__((visibility("default"))) TS_GossipTimestampFilter_set_timest
        LDKGossipTimestampFilter this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        GossipTimestampFilter_set_timestamp_range(&this_ptr_conv, val);
 }
 
@@ -22202,6 +26549,7 @@ uint32_t  __attribute__((visibility("default"))) TS_GossipTimestampFilter_new(in
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -22209,14 +26557,37 @@ uint32_t  __attribute__((visibility("default"))) TS_GossipTimestampFilter_new(in
        return ret_ref;
 }
 
+static inline uint64_t GossipTimestampFilter_clone_ptr(LDKGossipTimestampFilter *NONNULL_PTR arg) {
+       LDKGossipTimestampFilter ret_var = GossipTimestampFilter_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_GossipTimestampFilter_clone_ptr(uint32_t arg) {
+       LDKGossipTimestampFilter arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = GossipTimestampFilter_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_GossipTimestampFilter_clone(uint32_t orig) {
        LDKGossipTimestampFilter orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKGossipTimestampFilter ret_var = GossipTimestampFilter_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -22233,6 +26604,18 @@ void  __attribute__((visibility("default"))) TS_ErrorAction_free(uint32_t this_p
        ErrorAction_free(this_ptr_conv);
 }
 
+static inline uint64_t ErrorAction_clone_ptr(LDKErrorAction *NONNULL_PTR arg) {
+       LDKErrorAction *ret_copy = MALLOC(sizeof(LDKErrorAction), "LDKErrorAction");
+       *ret_copy = ErrorAction_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_ErrorAction_clone_ptr(uint32_t arg) {
+       LDKErrorAction* arg_conv = (LDKErrorAction*)arg;
+       int64_t ret_val = ErrorAction_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_ErrorAction_clone(uint32_t orig) {
        LDKErrorAction* orig_conv = (LDKErrorAction*)orig;
        LDKErrorAction *ret_copy = MALLOC(sizeof(LDKErrorAction), "LDKErrorAction");
@@ -22245,6 +26628,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ErrorAction_disconnect_peer(
        LDKErrorMessage msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = ErrorMessage_clone(&msg_conv);
        LDKErrorAction *ret_copy = MALLOC(sizeof(LDKErrorAction), "LDKErrorAction");
        *ret_copy = ErrorAction_disconnect_peer(msg_conv);
@@ -22271,6 +26655,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ErrorAction_send_error_messa
        LDKErrorMessage msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = ErrorMessage_clone(&msg_conv);
        LDKErrorAction *ret_copy = MALLOC(sizeof(LDKErrorAction), "LDKErrorAction");
        *ret_copy = ErrorAction_send_error_message(msg_conv);
@@ -22282,6 +26667,7 @@ void  __attribute__((visibility("default"))) TS_LightningError_free(uint32_t thi
        LDKLightningError this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        LightningError_free(this_obj_conv);
 }
 
@@ -22289,6 +26675,7 @@ jstring  __attribute__((visibility("default"))) TS_LightningError_get_err(uint32
        LDKLightningError this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKStr ret_str = LightningError_get_err(&this_ptr_conv);
        jstring ret_conv = str_ref_to_ts(ret_str.chars, ret_str.len);
        Str_free(ret_str);
@@ -22299,6 +26686,7 @@ void  __attribute__((visibility("default"))) TS_LightningError_set_err(uint32_t
        LDKLightningError this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKStr val_conv = str_ref_to_owned_c(val);
        LightningError_set_err(&this_ptr_conv, val_conv);
 }
@@ -22307,6 +26695,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LightningError_get_action(ui
        LDKLightningError this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKErrorAction *ret_copy = MALLOC(sizeof(LDKErrorAction), "LDKErrorAction");
        *ret_copy = LightningError_get_action(&this_ptr_conv);
        uint64_t ret_ref = (uint64_t)ret_copy;
@@ -22317,6 +26706,7 @@ void  __attribute__((visibility("default"))) TS_LightningError_set_action(uint32
        LDKLightningError this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKErrorAction val_conv = *(LDKErrorAction*)(val_ptr);
@@ -22334,6 +26724,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LightningError_new(jstring e
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -22341,14 +26732,37 @@ uint32_t  __attribute__((visibility("default"))) TS_LightningError_new(jstring e
        return ret_ref;
 }
 
+static inline uint64_t LightningError_clone_ptr(LDKLightningError *NONNULL_PTR arg) {
+       LDKLightningError ret_var = LightningError_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_LightningError_clone_ptr(uint32_t arg) {
+       LDKLightningError arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = LightningError_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_LightningError_clone(uint32_t orig) {
        LDKLightningError orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKLightningError ret_var = LightningError_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -22360,6 +26774,7 @@ void  __attribute__((visibility("default"))) TS_CommitmentUpdate_free(uint32_t t
        LDKCommitmentUpdate this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        CommitmentUpdate_free(this_obj_conv);
 }
 
@@ -22367,6 +26782,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_CommitmentUpdate_get_up
        LDKCommitmentUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_UpdateAddHTLCZ ret_var = CommitmentUpdate_get_update_add_htlcs(&this_ptr_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_arr(ret_var.datalen, sizeof(uint32_t), "Native uint32_tArray Bytes");
@@ -22376,6 +26792,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_CommitmentUpdate_get_up
                uint64_t ret_conv_15_ref = 0;
                CHECK((((uint64_t)ret_conv_15_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_conv_15_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_15_var);
                ret_conv_15_ref = (uint64_t)ret_conv_15_var.inner;
                if (ret_conv_15_var.is_owned) {
                        ret_conv_15_ref |= 1;
@@ -22391,6 +26808,7 @@ void  __attribute__((visibility("default"))) TS_CommitmentUpdate_set_update_add_
        LDKCommitmentUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_UpdateAddHTLCZ val_constr;
        val_constr.datalen = *((uint32_t*)val);
        if (val_constr.datalen > 0)
@@ -22403,6 +26821,7 @@ void  __attribute__((visibility("default"))) TS_CommitmentUpdate_set_update_add_
                LDKUpdateAddHTLC val_conv_15_conv;
                val_conv_15_conv.inner = (void*)(val_conv_15 & (~1));
                val_conv_15_conv.is_owned = (val_conv_15 & 1) || (val_conv_15 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_15_conv);
                val_conv_15_conv = UpdateAddHTLC_clone(&val_conv_15_conv);
                val_constr.data[p] = val_conv_15_conv;
        }
@@ -22413,6 +26832,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_CommitmentUpdate_get_up
        LDKCommitmentUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_UpdateFulfillHTLCZ ret_var = CommitmentUpdate_get_update_fulfill_htlcs(&this_ptr_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_arr(ret_var.datalen, sizeof(uint32_t), "Native uint32_tArray Bytes");
@@ -22422,6 +26842,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_CommitmentUpdate_get_up
                uint64_t ret_conv_19_ref = 0;
                CHECK((((uint64_t)ret_conv_19_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_conv_19_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_19_var);
                ret_conv_19_ref = (uint64_t)ret_conv_19_var.inner;
                if (ret_conv_19_var.is_owned) {
                        ret_conv_19_ref |= 1;
@@ -22437,6 +26858,7 @@ void  __attribute__((visibility("default"))) TS_CommitmentUpdate_set_update_fulf
        LDKCommitmentUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_UpdateFulfillHTLCZ val_constr;
        val_constr.datalen = *((uint32_t*)val);
        if (val_constr.datalen > 0)
@@ -22449,6 +26871,7 @@ void  __attribute__((visibility("default"))) TS_CommitmentUpdate_set_update_fulf
                LDKUpdateFulfillHTLC val_conv_19_conv;
                val_conv_19_conv.inner = (void*)(val_conv_19 & (~1));
                val_conv_19_conv.is_owned = (val_conv_19 & 1) || (val_conv_19 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_19_conv);
                val_conv_19_conv = UpdateFulfillHTLC_clone(&val_conv_19_conv);
                val_constr.data[t] = val_conv_19_conv;
        }
@@ -22459,6 +26882,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_CommitmentUpdate_get_up
        LDKCommitmentUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_UpdateFailHTLCZ ret_var = CommitmentUpdate_get_update_fail_htlcs(&this_ptr_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_arr(ret_var.datalen, sizeof(uint32_t), "Native uint32_tArray Bytes");
@@ -22468,6 +26892,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_CommitmentUpdate_get_up
                uint64_t ret_conv_16_ref = 0;
                CHECK((((uint64_t)ret_conv_16_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_conv_16_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_16_var);
                ret_conv_16_ref = (uint64_t)ret_conv_16_var.inner;
                if (ret_conv_16_var.is_owned) {
                        ret_conv_16_ref |= 1;
@@ -22483,6 +26908,7 @@ void  __attribute__((visibility("default"))) TS_CommitmentUpdate_set_update_fail
        LDKCommitmentUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_UpdateFailHTLCZ val_constr;
        val_constr.datalen = *((uint32_t*)val);
        if (val_constr.datalen > 0)
@@ -22495,6 +26921,7 @@ void  __attribute__((visibility("default"))) TS_CommitmentUpdate_set_update_fail
                LDKUpdateFailHTLC val_conv_16_conv;
                val_conv_16_conv.inner = (void*)(val_conv_16 & (~1));
                val_conv_16_conv.is_owned = (val_conv_16 & 1) || (val_conv_16 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_16_conv);
                val_conv_16_conv = UpdateFailHTLC_clone(&val_conv_16_conv);
                val_constr.data[q] = val_conv_16_conv;
        }
@@ -22505,6 +26932,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_CommitmentUpdate_get_up
        LDKCommitmentUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_UpdateFailMalformedHTLCZ ret_var = CommitmentUpdate_get_update_fail_malformed_htlcs(&this_ptr_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_arr(ret_var.datalen, sizeof(uint32_t), "Native uint32_tArray Bytes");
@@ -22514,6 +26942,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_CommitmentUpdate_get_up
                uint64_t ret_conv_25_ref = 0;
                CHECK((((uint64_t)ret_conv_25_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_conv_25_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_25_var);
                ret_conv_25_ref = (uint64_t)ret_conv_25_var.inner;
                if (ret_conv_25_var.is_owned) {
                        ret_conv_25_ref |= 1;
@@ -22529,6 +26958,7 @@ void  __attribute__((visibility("default"))) TS_CommitmentUpdate_set_update_fail
        LDKCommitmentUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_UpdateFailMalformedHTLCZ val_constr;
        val_constr.datalen = *((uint32_t*)val);
        if (val_constr.datalen > 0)
@@ -22541,6 +26971,7 @@ void  __attribute__((visibility("default"))) TS_CommitmentUpdate_set_update_fail
                LDKUpdateFailMalformedHTLC val_conv_25_conv;
                val_conv_25_conv.inner = (void*)(val_conv_25 & (~1));
                val_conv_25_conv.is_owned = (val_conv_25 & 1) || (val_conv_25 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_25_conv);
                val_conv_25_conv = UpdateFailMalformedHTLC_clone(&val_conv_25_conv);
                val_constr.data[z] = val_conv_25_conv;
        }
@@ -22551,11 +26982,13 @@ uint32_t  __attribute__((visibility("default"))) TS_CommitmentUpdate_get_update_
        LDKCommitmentUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKUpdateFee ret_var = CommitmentUpdate_get_update_fee(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -22568,9 +27001,11 @@ void  __attribute__((visibility("default"))) TS_CommitmentUpdate_set_update_fee(
        LDKCommitmentUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKUpdateFee val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = UpdateFee_clone(&val_conv);
        CommitmentUpdate_set_update_fee(&this_ptr_conv, val_conv);
 }
@@ -22579,10 +27014,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CommitmentUpdate_get_commitm
        LDKCommitmentUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCommitmentSigned ret_var = CommitmentUpdate_get_commitment_signed(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -22594,9 +27031,11 @@ void  __attribute__((visibility("default"))) TS_CommitmentUpdate_set_commitment_
        LDKCommitmentUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCommitmentSigned val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = CommitmentSigned_clone(&val_conv);
        CommitmentUpdate_set_commitment_signed(&this_ptr_conv, val_conv);
 }
@@ -22614,6 +27053,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CommitmentUpdate_new(uint32_
                LDKUpdateAddHTLC update_add_htlcs_arg_conv_15_conv;
                update_add_htlcs_arg_conv_15_conv.inner = (void*)(update_add_htlcs_arg_conv_15 & (~1));
                update_add_htlcs_arg_conv_15_conv.is_owned = (update_add_htlcs_arg_conv_15 & 1) || (update_add_htlcs_arg_conv_15 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(update_add_htlcs_arg_conv_15_conv);
                update_add_htlcs_arg_conv_15_conv = UpdateAddHTLC_clone(&update_add_htlcs_arg_conv_15_conv);
                update_add_htlcs_arg_constr.data[p] = update_add_htlcs_arg_conv_15_conv;
        }
@@ -22629,6 +27069,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CommitmentUpdate_new(uint32_
                LDKUpdateFulfillHTLC update_fulfill_htlcs_arg_conv_19_conv;
                update_fulfill_htlcs_arg_conv_19_conv.inner = (void*)(update_fulfill_htlcs_arg_conv_19 & (~1));
                update_fulfill_htlcs_arg_conv_19_conv.is_owned = (update_fulfill_htlcs_arg_conv_19 & 1) || (update_fulfill_htlcs_arg_conv_19 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(update_fulfill_htlcs_arg_conv_19_conv);
                update_fulfill_htlcs_arg_conv_19_conv = UpdateFulfillHTLC_clone(&update_fulfill_htlcs_arg_conv_19_conv);
                update_fulfill_htlcs_arg_constr.data[t] = update_fulfill_htlcs_arg_conv_19_conv;
        }
@@ -22644,6 +27085,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CommitmentUpdate_new(uint32_
                LDKUpdateFailHTLC update_fail_htlcs_arg_conv_16_conv;
                update_fail_htlcs_arg_conv_16_conv.inner = (void*)(update_fail_htlcs_arg_conv_16 & (~1));
                update_fail_htlcs_arg_conv_16_conv.is_owned = (update_fail_htlcs_arg_conv_16 & 1) || (update_fail_htlcs_arg_conv_16 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(update_fail_htlcs_arg_conv_16_conv);
                update_fail_htlcs_arg_conv_16_conv = UpdateFailHTLC_clone(&update_fail_htlcs_arg_conv_16_conv);
                update_fail_htlcs_arg_constr.data[q] = update_fail_htlcs_arg_conv_16_conv;
        }
@@ -22659,21 +27101,25 @@ uint32_t  __attribute__((visibility("default"))) TS_CommitmentUpdate_new(uint32_
                LDKUpdateFailMalformedHTLC update_fail_malformed_htlcs_arg_conv_25_conv;
                update_fail_malformed_htlcs_arg_conv_25_conv.inner = (void*)(update_fail_malformed_htlcs_arg_conv_25 & (~1));
                update_fail_malformed_htlcs_arg_conv_25_conv.is_owned = (update_fail_malformed_htlcs_arg_conv_25 & 1) || (update_fail_malformed_htlcs_arg_conv_25 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(update_fail_malformed_htlcs_arg_conv_25_conv);
                update_fail_malformed_htlcs_arg_conv_25_conv = UpdateFailMalformedHTLC_clone(&update_fail_malformed_htlcs_arg_conv_25_conv);
                update_fail_malformed_htlcs_arg_constr.data[z] = update_fail_malformed_htlcs_arg_conv_25_conv;
        }
        LDKUpdateFee update_fee_arg_conv;
        update_fee_arg_conv.inner = (void*)(update_fee_arg & (~1));
        update_fee_arg_conv.is_owned = (update_fee_arg & 1) || (update_fee_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_fee_arg_conv);
        update_fee_arg_conv = UpdateFee_clone(&update_fee_arg_conv);
        LDKCommitmentSigned commitment_signed_arg_conv;
        commitment_signed_arg_conv.inner = (void*)(commitment_signed_arg & (~1));
        commitment_signed_arg_conv.is_owned = (commitment_signed_arg & 1) || (commitment_signed_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(commitment_signed_arg_conv);
        commitment_signed_arg_conv = CommitmentSigned_clone(&commitment_signed_arg_conv);
        LDKCommitmentUpdate ret_var = CommitmentUpdate_new(update_add_htlcs_arg_constr, update_fulfill_htlcs_arg_constr, update_fail_htlcs_arg_constr, update_fail_malformed_htlcs_arg_constr, update_fee_arg_conv, commitment_signed_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -22681,14 +27127,37 @@ uint32_t  __attribute__((visibility("default"))) TS_CommitmentUpdate_new(uint32_
        return ret_ref;
 }
 
+static inline uint64_t CommitmentUpdate_clone_ptr(LDKCommitmentUpdate *NONNULL_PTR arg) {
+       LDKCommitmentUpdate ret_var = CommitmentUpdate_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_CommitmentUpdate_clone_ptr(uint32_t arg) {
+       LDKCommitmentUpdate arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = CommitmentUpdate_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CommitmentUpdate_clone(uint32_t orig) {
        LDKCommitmentUpdate orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKCommitmentUpdate ret_var = CommitmentUpdate_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -22718,6 +27187,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_AcceptChannel_write(uint3
        LDKAcceptChannel obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = AcceptChannel_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -22738,6 +27208,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_AnnouncementSignatures_wr
        LDKAnnouncementSignatures obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = AnnouncementSignatures_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -22758,6 +27229,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ChannelReestablish_write(
        LDKChannelReestablish obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ChannelReestablish_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -22778,6 +27250,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ClosingSigned_write(uint3
        LDKClosingSigned obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ClosingSigned_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -22798,6 +27271,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ClosingSignedFeeRange_wri
        LDKClosingSignedFeeRange obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ClosingSignedFeeRange_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -22818,6 +27292,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_CommitmentSigned_write(ui
        LDKCommitmentSigned obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = CommitmentSigned_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -22838,6 +27313,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_FundingCreated_write(uint
        LDKFundingCreated obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = FundingCreated_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -22858,6 +27334,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_FundingSigned_write(uint3
        LDKFundingSigned obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = FundingSigned_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -22878,6 +27355,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_FundingLocked_write(uint3
        LDKFundingLocked obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = FundingLocked_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -22898,6 +27376,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_Init_write(uint32_t obj)
        LDKInit obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = Init_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -22918,6 +27397,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_OpenChannel_write(uint32_
        LDKOpenChannel obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = OpenChannel_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -22938,6 +27418,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_RevokeAndACK_write(uint32
        LDKRevokeAndACK obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = RevokeAndACK_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -22958,6 +27439,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_Shutdown_write(uint32_t o
        LDKShutdown obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = Shutdown_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -22978,6 +27460,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_UpdateFailHTLC_write(uint
        LDKUpdateFailHTLC obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = UpdateFailHTLC_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -22998,6 +27481,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_UpdateFailMalformedHTLC_w
        LDKUpdateFailMalformedHTLC obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = UpdateFailMalformedHTLC_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -23018,6 +27502,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_UpdateFee_write(uint32_t
        LDKUpdateFee obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = UpdateFee_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -23038,6 +27523,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_UpdateFulfillHTLC_write(u
        LDKUpdateFulfillHTLC obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = UpdateFulfillHTLC_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -23058,6 +27544,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_UpdateAddHTLC_write(uint3
        LDKUpdateAddHTLC obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = UpdateAddHTLC_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -23078,6 +27565,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_Ping_write(uint32_t obj)
        LDKPing obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = Ping_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -23098,6 +27586,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_Pong_write(uint32_t obj)
        LDKPong obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = Pong_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -23118,6 +27607,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_UnsignedChannelAnnounceme
        LDKUnsignedChannelAnnouncement obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = UnsignedChannelAnnouncement_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -23138,6 +27628,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ChannelAnnouncement_write
        LDKChannelAnnouncement obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ChannelAnnouncement_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -23158,6 +27649,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_UnsignedChannelUpdate_wri
        LDKUnsignedChannelUpdate obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = UnsignedChannelUpdate_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -23178,6 +27670,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ChannelUpdate_write(uint3
        LDKChannelUpdate obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ChannelUpdate_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -23198,6 +27691,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ErrorMessage_write(uint32
        LDKErrorMessage obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ErrorMessage_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -23218,6 +27712,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_UnsignedNodeAnnouncement_
        LDKUnsignedNodeAnnouncement obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = UnsignedNodeAnnouncement_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -23238,6 +27733,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_NodeAnnouncement_write(ui
        LDKNodeAnnouncement obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = NodeAnnouncement_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -23267,6 +27763,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_QueryShortChannelIds_writ
        LDKQueryShortChannelIds obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = QueryShortChannelIds_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -23278,6 +27775,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ReplyShortChannelIdsEnd_w
        LDKReplyShortChannelIdsEnd obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ReplyShortChannelIdsEnd_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -23298,6 +27796,7 @@ int32_t  __attribute__((visibility("default"))) TS_QueryChannelRange_end_blocknu
        LDKQueryChannelRange this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int32_t ret_val = QueryChannelRange_end_blocknum(&this_arg_conv);
        return ret_val;
 }
@@ -23306,6 +27805,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_QueryChannelRange_write(u
        LDKQueryChannelRange obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = QueryChannelRange_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -23335,6 +27835,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ReplyChannelRange_write(u
        LDKReplyChannelRange obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ReplyChannelRange_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -23346,6 +27847,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_GossipTimestampFilter_wri
        LDKGossipTimestampFilter obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = GossipTimestampFilter_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -23375,6 +27877,7 @@ void  __attribute__((visibility("default"))) TS_IgnoringMessageHandler_free(uint
        LDKIgnoringMessageHandler this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        IgnoringMessageHandler_free(this_obj_conv);
 }
 
@@ -23383,6 +27886,7 @@ uint32_t  __attribute__((visibility("default"))) TS_IgnoringMessageHandler_new()
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -23394,6 +27898,7 @@ uint32_t  __attribute__((visibility("default"))) TS_IgnoringMessageHandler_as_Me
        LDKIgnoringMessageHandler this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKMessageSendEventsProvider* ret_ret = MALLOC(sizeof(LDKMessageSendEventsProvider), "LDKMessageSendEventsProvider");
        *ret_ret = IgnoringMessageHandler_as_MessageSendEventsProvider(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -23403,6 +27908,7 @@ uint32_t  __attribute__((visibility("default"))) TS_IgnoringMessageHandler_as_Ro
        LDKIgnoringMessageHandler this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKRoutingMessageHandler* ret_ret = MALLOC(sizeof(LDKRoutingMessageHandler), "LDKRoutingMessageHandler");
        *ret_ret = IgnoringMessageHandler_as_RoutingMessageHandler(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -23412,6 +27918,7 @@ uint32_t  __attribute__((visibility("default"))) TS_IgnoringMessageHandler_as_Cu
        LDKIgnoringMessageHandler this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCustomMessageReader* ret_ret = MALLOC(sizeof(LDKCustomMessageReader), "LDKCustomMessageReader");
        *ret_ret = IgnoringMessageHandler_as_CustomMessageReader(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -23421,6 +27928,7 @@ uint32_t  __attribute__((visibility("default"))) TS_IgnoringMessageHandler_as_Cu
        LDKIgnoringMessageHandler this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCustomMessageHandler* ret_ret = MALLOC(sizeof(LDKCustomMessageHandler), "LDKCustomMessageHandler");
        *ret_ret = IgnoringMessageHandler_as_CustomMessageHandler(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -23430,6 +27938,7 @@ void  __attribute__((visibility("default"))) TS_ErroringMessageHandler_free(uint
        LDKErroringMessageHandler this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ErroringMessageHandler_free(this_obj_conv);
 }
 
@@ -23438,6 +27947,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ErroringMessageHandler_new()
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -23449,6 +27959,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ErroringMessageHandler_as_Me
        LDKErroringMessageHandler this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKMessageSendEventsProvider* ret_ret = MALLOC(sizeof(LDKMessageSendEventsProvider), "LDKMessageSendEventsProvider");
        *ret_ret = ErroringMessageHandler_as_MessageSendEventsProvider(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -23458,6 +27969,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ErroringMessageHandler_as_Ch
        LDKErroringMessageHandler this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKChannelMessageHandler* ret_ret = MALLOC(sizeof(LDKChannelMessageHandler), "LDKChannelMessageHandler");
        *ret_ret = ErroringMessageHandler_as_ChannelMessageHandler(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -23467,6 +27979,7 @@ void  __attribute__((visibility("default"))) TS_MessageHandler_free(uint32_t thi
        LDKMessageHandler this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        MessageHandler_free(this_obj_conv);
 }
 
@@ -23474,6 +27987,7 @@ uint32_t  __attribute__((visibility("default"))) TS_MessageHandler_get_chan_hand
        LDKMessageHandler this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        // WARNING: This object doesn't live past this scope, needs clone!
        uint64_t ret_ret = ((uint64_t)MessageHandler_get_chan_handler(&this_ptr_conv)) | 1;
        return ret_ret;
@@ -23483,6 +27997,7 @@ void  __attribute__((visibility("default"))) TS_MessageHandler_set_chan_handler(
        LDKMessageHandler this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKChannelMessageHandler val_conv = *(LDKChannelMessageHandler*)(val_ptr);
@@ -23493,6 +28008,7 @@ uint32_t  __attribute__((visibility("default"))) TS_MessageHandler_get_route_han
        LDKMessageHandler this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        // WARNING: This object doesn't live past this scope, needs clone!
        uint64_t ret_ret = ((uint64_t)MessageHandler_get_route_handler(&this_ptr_conv)) | 1;
        return ret_ret;
@@ -23502,6 +28018,7 @@ void  __attribute__((visibility("default"))) TS_MessageHandler_set_route_handler
        LDKMessageHandler this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKRoutingMessageHandler val_conv = *(LDKRoutingMessageHandler*)(val_ptr);
@@ -23519,6 +28036,7 @@ uint32_t  __attribute__((visibility("default"))) TS_MessageHandler_new(uint32_t
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -23526,6 +28044,19 @@ uint32_t  __attribute__((visibility("default"))) TS_MessageHandler_new(uint32_t
        return ret_ref;
 }
 
+static inline uint64_t SocketDescriptor_clone_ptr(LDKSocketDescriptor *NONNULL_PTR arg) {
+       LDKSocketDescriptor* ret_ret = MALLOC(sizeof(LDKSocketDescriptor), "LDKSocketDescriptor");
+       *ret_ret = SocketDescriptor_clone(arg);
+       return (uint64_t)ret_ret;
+}
+int64_t  __attribute__((visibility("default"))) TS_SocketDescriptor_clone_ptr(uint32_t arg) {
+       void* arg_ptr = (void*)(((uint64_t)arg) & ~1);
+       if (!(arg & 1)) { CHECK_ACCESS(arg_ptr); }
+       LDKSocketDescriptor* arg_conv = (LDKSocketDescriptor*)arg_ptr;
+       int64_t ret_val = SocketDescriptor_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_SocketDescriptor_clone(uint32_t orig) {
        void* orig_ptr = (void*)(((uint64_t)orig) & ~1);
        if (!(orig & 1)) { CHECK_ACCESS(orig_ptr); }
@@ -23548,6 +28079,7 @@ void  __attribute__((visibility("default"))) TS_PeerHandleError_free(uint32_t th
        LDKPeerHandleError this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        PeerHandleError_free(this_obj_conv);
 }
 
@@ -23555,6 +28087,7 @@ jboolean  __attribute__((visibility("default"))) TS_PeerHandleError_get_no_conne
        LDKPeerHandleError this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        jboolean ret_val = PeerHandleError_get_no_connection_possible(&this_ptr_conv);
        return ret_val;
 }
@@ -23563,6 +28096,7 @@ void  __attribute__((visibility("default"))) TS_PeerHandleError_set_no_connectio
        LDKPeerHandleError this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        PeerHandleError_set_no_connection_possible(&this_ptr_conv, val);
 }
 
@@ -23571,6 +28105,7 @@ uint32_t  __attribute__((visibility("default"))) TS_PeerHandleError_new(jboolean
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -23578,14 +28113,37 @@ uint32_t  __attribute__((visibility("default"))) TS_PeerHandleError_new(jboolean
        return ret_ref;
 }
 
+static inline uint64_t PeerHandleError_clone_ptr(LDKPeerHandleError *NONNULL_PTR arg) {
+       LDKPeerHandleError ret_var = PeerHandleError_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_PeerHandleError_clone_ptr(uint32_t arg) {
+       LDKPeerHandleError arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = PeerHandleError_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_PeerHandleError_clone(uint32_t orig) {
        LDKPeerHandleError orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKPeerHandleError ret_var = PeerHandleError_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -23597,6 +28155,7 @@ void  __attribute__((visibility("default"))) TS_PeerManager_free(uint32_t this_o
        LDKPeerManager this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        PeerManager_free(this_obj_conv);
 }
 
@@ -23604,6 +28163,7 @@ uint32_t  __attribute__((visibility("default"))) TS_PeerManager_new(uint32_t mes
        LDKMessageHandler message_handler_conv;
        message_handler_conv.inner = (void*)(message_handler & (~1));
        message_handler_conv.is_owned = (message_handler & 1) || (message_handler == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(message_handler_conv);
        // Warning: we need a move here but no clone is available for LDKMessageHandler
        LDKSecretKey our_node_secret_ref;
        CHECK(*((uint32_t*)our_node_secret) == 32);
@@ -23622,6 +28182,7 @@ uint32_t  __attribute__((visibility("default"))) TS_PeerManager_new(uint32_t mes
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -23633,6 +28194,7 @@ ptrArray  __attribute__((visibility("default"))) TS_PeerManager_get_peer_node_id
        LDKPeerManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCVec_PublicKeyZ ret_var = PeerManager_get_peer_node_ids(&this_arg_conv);
        ptrArray ret_arr = NULL;
        ret_arr = init_arr(ret_var.datalen, sizeof(uint32_t), "Native ptrArray Bytes");
@@ -23651,6 +28213,7 @@ uint32_t  __attribute__((visibility("default"))) TS_PeerManager_new_outbound_con
        LDKPeerManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKPublicKey their_node_id_ref;
        CHECK(*((uint32_t*)their_node_id) == 33);
        memcpy(their_node_id_ref.compressed_form, (uint8_t*)(their_node_id + 4), 33);
@@ -23666,6 +28229,7 @@ uint32_t  __attribute__((visibility("default"))) TS_PeerManager_new_inbound_conn
        LDKPeerManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        void* descriptor_ptr = (void*)(((uint64_t)descriptor) & ~1);
        CHECK_ACCESS(descriptor_ptr);
        LDKSocketDescriptor descriptor_conv = *(LDKSocketDescriptor*)(descriptor_ptr);
@@ -23678,6 +28242,7 @@ uint32_t  __attribute__((visibility("default"))) TS_PeerManager_write_buffer_spa
        LDKPeerManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        void* descriptor_ptr = (void*)(((uint64_t)descriptor) & ~1);
        if (!(descriptor & 1)) { CHECK_ACCESS(descriptor_ptr); }
        LDKSocketDescriptor* descriptor_conv = (LDKSocketDescriptor*)descriptor_ptr;
@@ -23690,6 +28255,7 @@ uint32_t  __attribute__((visibility("default"))) TS_PeerManager_read_event(uint3
        LDKPeerManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        void* peer_descriptor_ptr = (void*)(((uint64_t)peer_descriptor) & ~1);
        if (!(peer_descriptor & 1)) { CHECK_ACCESS(peer_descriptor_ptr); }
        LDKSocketDescriptor* peer_descriptor_conv = (LDKSocketDescriptor*)peer_descriptor_ptr;
@@ -23705,6 +28271,7 @@ void  __attribute__((visibility("default"))) TS_PeerManager_process_events(uint3
        LDKPeerManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        PeerManager_process_events(&this_arg_conv);
 }
 
@@ -23712,6 +28279,7 @@ void  __attribute__((visibility("default"))) TS_PeerManager_socket_disconnected(
        LDKPeerManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        void* descriptor_ptr = (void*)(((uint64_t)descriptor) & ~1);
        if (!(descriptor & 1)) { CHECK_ACCESS(descriptor_ptr); }
        LDKSocketDescriptor* descriptor_conv = (LDKSocketDescriptor*)descriptor_ptr;
@@ -23722,6 +28290,7 @@ void  __attribute__((visibility("default"))) TS_PeerManager_disconnect_by_node_i
        LDKPeerManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKPublicKey node_id_ref;
        CHECK(*((uint32_t*)node_id) == 33);
        memcpy(node_id_ref.compressed_form, (uint8_t*)(node_id + 4), 33);
@@ -23732,6 +28301,7 @@ void  __attribute__((visibility("default"))) TS_PeerManager_disconnect_all_peers
        LDKPeerManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        PeerManager_disconnect_all_peers(&this_arg_conv);
 }
 
@@ -23739,6 +28309,7 @@ void  __attribute__((visibility("default"))) TS_PeerManager_timer_tick_occurred(
        LDKPeerManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        PeerManager_timer_tick_occurred(&this_arg_conv);
 }
 
@@ -23764,6 +28335,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_build_closing_transaction
        LDKOutPoint funding_outpoint_conv;
        funding_outpoint_conv.inner = (void*)(funding_outpoint & (~1));
        funding_outpoint_conv.is_owned = (funding_outpoint & 1) || (funding_outpoint == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_outpoint_conv);
        funding_outpoint_conv = OutPoint_clone(&funding_outpoint_conv);
        LDKTransaction ret_var = build_closing_transaction(to_holder_value_sat, to_counterparty_value_sat, to_holder_script_ref, to_counterparty_script_ref, funding_outpoint_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
@@ -23827,6 +28399,7 @@ void  __attribute__((visibility("default"))) TS_TxCreationKeys_free(uint32_t thi
        LDKTxCreationKeys this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        TxCreationKeys_free(this_obj_conv);
 }
 
@@ -23834,6 +28407,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_TxCreationKeys_get_per_co
        LDKTxCreationKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), TxCreationKeys_get_per_commitment_point(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -23843,6 +28417,7 @@ void  __attribute__((visibility("default"))) TS_TxCreationKeys_set_per_commitmen
        LDKTxCreationKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -23853,6 +28428,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_TxCreationKeys_get_revoca
        LDKTxCreationKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), TxCreationKeys_get_revocation_key(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -23862,6 +28438,7 @@ void  __attribute__((visibility("default"))) TS_TxCreationKeys_set_revocation_ke
        LDKTxCreationKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -23872,6 +28449,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_TxCreationKeys_get_broadc
        LDKTxCreationKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), TxCreationKeys_get_broadcaster_htlc_key(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -23881,6 +28459,7 @@ void  __attribute__((visibility("default"))) TS_TxCreationKeys_set_broadcaster_h
        LDKTxCreationKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -23891,6 +28470,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_TxCreationKeys_get_counte
        LDKTxCreationKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), TxCreationKeys_get_countersignatory_htlc_key(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -23900,6 +28480,7 @@ void  __attribute__((visibility("default"))) TS_TxCreationKeys_set_countersignat
        LDKTxCreationKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -23910,6 +28491,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_TxCreationKeys_get_broadc
        LDKTxCreationKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), TxCreationKeys_get_broadcaster_delayed_payment_key(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -23919,6 +28501,7 @@ void  __attribute__((visibility("default"))) TS_TxCreationKeys_set_broadcaster_d
        LDKTxCreationKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -23945,6 +28528,7 @@ uint32_t  __attribute__((visibility("default"))) TS_TxCreationKeys_new(int8_tArr
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -23952,14 +28536,37 @@ uint32_t  __attribute__((visibility("default"))) TS_TxCreationKeys_new(int8_tArr
        return ret_ref;
 }
 
+static inline uint64_t TxCreationKeys_clone_ptr(LDKTxCreationKeys *NONNULL_PTR arg) {
+       LDKTxCreationKeys ret_var = TxCreationKeys_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_TxCreationKeys_clone_ptr(uint32_t arg) {
+       LDKTxCreationKeys arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = TxCreationKeys_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_TxCreationKeys_clone(uint32_t orig) {
        LDKTxCreationKeys orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKTxCreationKeys ret_var = TxCreationKeys_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -23971,6 +28578,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_TxCreationKeys_write(uint
        LDKTxCreationKeys obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = TxCreationKeys_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -23991,6 +28599,7 @@ void  __attribute__((visibility("default"))) TS_ChannelPublicKeys_free(uint32_t
        LDKChannelPublicKeys this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelPublicKeys_free(this_obj_conv);
 }
 
@@ -23998,6 +28607,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ChannelPublicKeys_get_fun
        LDKChannelPublicKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ChannelPublicKeys_get_funding_pubkey(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -24007,6 +28617,7 @@ void  __attribute__((visibility("default"))) TS_ChannelPublicKeys_set_funding_pu
        LDKChannelPublicKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -24017,6 +28628,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ChannelPublicKeys_get_rev
        LDKChannelPublicKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ChannelPublicKeys_get_revocation_basepoint(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -24026,6 +28638,7 @@ void  __attribute__((visibility("default"))) TS_ChannelPublicKeys_set_revocation
        LDKChannelPublicKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -24036,6 +28649,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ChannelPublicKeys_get_pay
        LDKChannelPublicKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ChannelPublicKeys_get_payment_point(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -24045,6 +28659,7 @@ void  __attribute__((visibility("default"))) TS_ChannelPublicKeys_set_payment_po
        LDKChannelPublicKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -24055,6 +28670,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ChannelPublicKeys_get_del
        LDKChannelPublicKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ChannelPublicKeys_get_delayed_payment_basepoint(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -24064,6 +28680,7 @@ void  __attribute__((visibility("default"))) TS_ChannelPublicKeys_set_delayed_pa
        LDKChannelPublicKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -24074,6 +28691,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ChannelPublicKeys_get_htl
        LDKChannelPublicKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ChannelPublicKeys_get_htlc_basepoint(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -24083,6 +28701,7 @@ void  __attribute__((visibility("default"))) TS_ChannelPublicKeys_set_htlc_basep
        LDKChannelPublicKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -24109,6 +28728,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelPublicKeys_new(int8_t
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24116,14 +28736,37 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelPublicKeys_new(int8_t
        return ret_ref;
 }
 
+static inline uint64_t ChannelPublicKeys_clone_ptr(LDKChannelPublicKeys *NONNULL_PTR arg) {
+       LDKChannelPublicKeys ret_var = ChannelPublicKeys_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_ChannelPublicKeys_clone_ptr(uint32_t arg) {
+       LDKChannelPublicKeys arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChannelPublicKeys_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_ChannelPublicKeys_clone(uint32_t orig) {
        LDKChannelPublicKeys orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChannelPublicKeys ret_var = ChannelPublicKeys_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24135,6 +28778,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ChannelPublicKeys_write(u
        LDKChannelPublicKeys obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ChannelPublicKeys_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -24179,9 +28823,11 @@ uint32_t  __attribute__((visibility("default"))) TS_TxCreationKeys_from_channel_
        LDKChannelPublicKeys broadcaster_keys_conv;
        broadcaster_keys_conv.inner = (void*)(broadcaster_keys & (~1));
        broadcaster_keys_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(broadcaster_keys_conv);
        LDKChannelPublicKeys countersignatory_keys_conv;
        countersignatory_keys_conv.inner = (void*)(countersignatory_keys & (~1));
        countersignatory_keys_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(countersignatory_keys_conv);
        LDKCResult_TxCreationKeysErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxCreationKeysErrorZ), "LDKCResult_TxCreationKeysErrorZ");
        *ret_conv = TxCreationKeys_from_channel_static_keys(per_commitment_point_ref, &broadcaster_keys_conv, &countersignatory_keys_conv);
        return (uint64_t)ret_conv;
@@ -24205,6 +28851,7 @@ void  __attribute__((visibility("default"))) TS_HTLCOutputInCommitment_free(uint
        LDKHTLCOutputInCommitment this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        HTLCOutputInCommitment_free(this_obj_conv);
 }
 
@@ -24212,6 +28859,7 @@ jboolean  __attribute__((visibility("default"))) TS_HTLCOutputInCommitment_get_o
        LDKHTLCOutputInCommitment this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        jboolean ret_val = HTLCOutputInCommitment_get_offered(&this_ptr_conv);
        return ret_val;
 }
@@ -24220,6 +28868,7 @@ void  __attribute__((visibility("default"))) TS_HTLCOutputInCommitment_set_offer
        LDKHTLCOutputInCommitment this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        HTLCOutputInCommitment_set_offered(&this_ptr_conv, val);
 }
 
@@ -24227,6 +28876,7 @@ int64_t  __attribute__((visibility("default"))) TS_HTLCOutputInCommitment_get_am
        LDKHTLCOutputInCommitment this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = HTLCOutputInCommitment_get_amount_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -24235,6 +28885,7 @@ void  __attribute__((visibility("default"))) TS_HTLCOutputInCommitment_set_amoun
        LDKHTLCOutputInCommitment this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        HTLCOutputInCommitment_set_amount_msat(&this_ptr_conv, val);
 }
 
@@ -24242,6 +28893,7 @@ int32_t  __attribute__((visibility("default"))) TS_HTLCOutputInCommitment_get_cl
        LDKHTLCOutputInCommitment this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = HTLCOutputInCommitment_get_cltv_expiry(&this_ptr_conv);
        return ret_val;
 }
@@ -24250,6 +28902,7 @@ void  __attribute__((visibility("default"))) TS_HTLCOutputInCommitment_set_cltv_
        LDKHTLCOutputInCommitment this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        HTLCOutputInCommitment_set_cltv_expiry(&this_ptr_conv, val);
 }
 
@@ -24257,6 +28910,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_HTLCOutputInCommitment_ge
        LDKHTLCOutputInCommitment this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *HTLCOutputInCommitment_get_payment_hash(&this_ptr_conv), 32);
        return ret_arr;
@@ -24266,6 +28920,7 @@ void  __attribute__((visibility("default"))) TS_HTLCOutputInCommitment_set_payme
        LDKHTLCOutputInCommitment this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -24276,6 +28931,7 @@ uint32_t  __attribute__((visibility("default"))) TS_HTLCOutputInCommitment_get_t
        LDKHTLCOutputInCommitment this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCOption_u32Z *ret_copy = MALLOC(sizeof(LDKCOption_u32Z), "LDKCOption_u32Z");
        *ret_copy = HTLCOutputInCommitment_get_transaction_output_index(&this_ptr_conv);
        uint64_t ret_ref = (uint64_t)ret_copy;
@@ -24286,6 +28942,7 @@ void  __attribute__((visibility("default"))) TS_HTLCOutputInCommitment_set_trans
        LDKHTLCOutputInCommitment this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKCOption_u32Z val_conv = *(LDKCOption_u32Z*)(val_ptr);
@@ -24305,6 +28962,7 @@ uint32_t  __attribute__((visibility("default"))) TS_HTLCOutputInCommitment_new(j
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24312,14 +28970,37 @@ uint32_t  __attribute__((visibility("default"))) TS_HTLCOutputInCommitment_new(j
        return ret_ref;
 }
 
+static inline uint64_t HTLCOutputInCommitment_clone_ptr(LDKHTLCOutputInCommitment *NONNULL_PTR arg) {
+       LDKHTLCOutputInCommitment ret_var = HTLCOutputInCommitment_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_HTLCOutputInCommitment_clone_ptr(uint32_t arg) {
+       LDKHTLCOutputInCommitment arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = HTLCOutputInCommitment_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_HTLCOutputInCommitment_clone(uint32_t orig) {
        LDKHTLCOutputInCommitment orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKHTLCOutputInCommitment ret_var = HTLCOutputInCommitment_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24331,6 +29012,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_HTLCOutputInCommitment_wr
        LDKHTLCOutputInCommitment obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = HTLCOutputInCommitment_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -24351,9 +29033,11 @@ int8_tArray  __attribute__((visibility("default"))) TS_get_htlc_redeemscript(uin
        LDKHTLCOutputInCommitment htlc_conv;
        htlc_conv.inner = (void*)(htlc & (~1));
        htlc_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(htlc_conv);
        LDKTxCreationKeys keys_conv;
        keys_conv.inner = (void*)(keys & (~1));
        keys_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(keys_conv);
        LDKCVec_u8Z ret_var = get_htlc_redeemscript(&htlc_conv, &keys_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -24383,6 +29067,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_build_htlc_transaction(in
        LDKHTLCOutputInCommitment htlc_conv;
        htlc_conv.inner = (void*)(htlc & (~1));
        htlc_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(htlc_conv);
        LDKPublicKey broadcaster_delayed_payment_key_ref;
        CHECK(*((uint32_t*)broadcaster_delayed_payment_key) == 33);
        memcpy(broadcaster_delayed_payment_key_ref.compressed_form, (uint8_t*)(broadcaster_delayed_payment_key + 4), 33);
@@ -24400,6 +29085,7 @@ void  __attribute__((visibility("default"))) TS_ChannelTransactionParameters_fre
        LDKChannelTransactionParameters this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelTransactionParameters_free(this_obj_conv);
 }
 
@@ -24407,10 +29093,12 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelTransactionParameters
        LDKChannelTransactionParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelPublicKeys ret_var = ChannelTransactionParameters_get_holder_pubkeys(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24422,9 +29110,11 @@ void  __attribute__((visibility("default"))) TS_ChannelTransactionParameters_set
        LDKChannelTransactionParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelPublicKeys val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = ChannelPublicKeys_clone(&val_conv);
        ChannelTransactionParameters_set_holder_pubkeys(&this_ptr_conv, val_conv);
 }
@@ -24433,6 +29123,7 @@ int16_t  __attribute__((visibility("default"))) TS_ChannelTransactionParameters_
        LDKChannelTransactionParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = ChannelTransactionParameters_get_holder_selected_contest_delay(&this_ptr_conv);
        return ret_val;
 }
@@ -24441,6 +29132,7 @@ void  __attribute__((visibility("default"))) TS_ChannelTransactionParameters_set
        LDKChannelTransactionParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelTransactionParameters_set_holder_selected_contest_delay(&this_ptr_conv, val);
 }
 
@@ -24448,6 +29140,7 @@ jboolean  __attribute__((visibility("default"))) TS_ChannelTransactionParameters
        LDKChannelTransactionParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        jboolean ret_val = ChannelTransactionParameters_get_is_outbound_from_holder(&this_ptr_conv);
        return ret_val;
 }
@@ -24456,6 +29149,7 @@ void  __attribute__((visibility("default"))) TS_ChannelTransactionParameters_set
        LDKChannelTransactionParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelTransactionParameters_set_is_outbound_from_holder(&this_ptr_conv, val);
 }
 
@@ -24463,11 +29157,13 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelTransactionParameters
        LDKChannelTransactionParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCounterpartyChannelTransactionParameters ret_var = ChannelTransactionParameters_get_counterparty_parameters(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -24480,9 +29176,11 @@ void  __attribute__((visibility("default"))) TS_ChannelTransactionParameters_set
        LDKChannelTransactionParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCounterpartyChannelTransactionParameters val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = CounterpartyChannelTransactionParameters_clone(&val_conv);
        ChannelTransactionParameters_set_counterparty_parameters(&this_ptr_conv, val_conv);
 }
@@ -24491,11 +29189,13 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelTransactionParameters
        LDKChannelTransactionParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKOutPoint ret_var = ChannelTransactionParameters_get_funding_outpoint(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -24508,9 +29208,11 @@ void  __attribute__((visibility("default"))) TS_ChannelTransactionParameters_set
        LDKChannelTransactionParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKOutPoint val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = OutPoint_clone(&val_conv);
        ChannelTransactionParameters_set_funding_outpoint(&this_ptr_conv, val_conv);
 }
@@ -24519,19 +29221,23 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelTransactionParameters
        LDKChannelPublicKeys holder_pubkeys_arg_conv;
        holder_pubkeys_arg_conv.inner = (void*)(holder_pubkeys_arg & (~1));
        holder_pubkeys_arg_conv.is_owned = (holder_pubkeys_arg & 1) || (holder_pubkeys_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(holder_pubkeys_arg_conv);
        holder_pubkeys_arg_conv = ChannelPublicKeys_clone(&holder_pubkeys_arg_conv);
        LDKCounterpartyChannelTransactionParameters counterparty_parameters_arg_conv;
        counterparty_parameters_arg_conv.inner = (void*)(counterparty_parameters_arg & (~1));
        counterparty_parameters_arg_conv.is_owned = (counterparty_parameters_arg & 1) || (counterparty_parameters_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(counterparty_parameters_arg_conv);
        counterparty_parameters_arg_conv = CounterpartyChannelTransactionParameters_clone(&counterparty_parameters_arg_conv);
        LDKOutPoint funding_outpoint_arg_conv;
        funding_outpoint_arg_conv.inner = (void*)(funding_outpoint_arg & (~1));
        funding_outpoint_arg_conv.is_owned = (funding_outpoint_arg & 1) || (funding_outpoint_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_outpoint_arg_conv);
        funding_outpoint_arg_conv = OutPoint_clone(&funding_outpoint_arg_conv);
        LDKChannelTransactionParameters ret_var = ChannelTransactionParameters_new(holder_pubkeys_arg_conv, holder_selected_contest_delay_arg, is_outbound_from_holder_arg, counterparty_parameters_arg_conv, funding_outpoint_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24539,14 +29245,37 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelTransactionParameters
        return ret_ref;
 }
 
+static inline uint64_t ChannelTransactionParameters_clone_ptr(LDKChannelTransactionParameters *NONNULL_PTR arg) {
+       LDKChannelTransactionParameters ret_var = ChannelTransactionParameters_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_ChannelTransactionParameters_clone_ptr(uint32_t arg) {
+       LDKChannelTransactionParameters arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChannelTransactionParameters_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_ChannelTransactionParameters_clone(uint32_t orig) {
        LDKChannelTransactionParameters orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChannelTransactionParameters ret_var = ChannelTransactionParameters_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24558,6 +29287,7 @@ void  __attribute__((visibility("default"))) TS_CounterpartyChannelTransactionPa
        LDKCounterpartyChannelTransactionParameters this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        CounterpartyChannelTransactionParameters_free(this_obj_conv);
 }
 
@@ -24565,10 +29295,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CounterpartyChannelTransacti
        LDKCounterpartyChannelTransactionParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelPublicKeys ret_var = CounterpartyChannelTransactionParameters_get_pubkeys(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24580,9 +29312,11 @@ void  __attribute__((visibility("default"))) TS_CounterpartyChannelTransactionPa
        LDKCounterpartyChannelTransactionParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelPublicKeys val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = ChannelPublicKeys_clone(&val_conv);
        CounterpartyChannelTransactionParameters_set_pubkeys(&this_ptr_conv, val_conv);
 }
@@ -24591,6 +29325,7 @@ int16_t  __attribute__((visibility("default"))) TS_CounterpartyChannelTransactio
        LDKCounterpartyChannelTransactionParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = CounterpartyChannelTransactionParameters_get_selected_contest_delay(&this_ptr_conv);
        return ret_val;
 }
@@ -24599,6 +29334,7 @@ void  __attribute__((visibility("default"))) TS_CounterpartyChannelTransactionPa
        LDKCounterpartyChannelTransactionParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        CounterpartyChannelTransactionParameters_set_selected_contest_delay(&this_ptr_conv, val);
 }
 
@@ -24606,11 +29342,13 @@ uint32_t  __attribute__((visibility("default"))) TS_CounterpartyChannelTransacti
        LDKChannelPublicKeys pubkeys_arg_conv;
        pubkeys_arg_conv.inner = (void*)(pubkeys_arg & (~1));
        pubkeys_arg_conv.is_owned = (pubkeys_arg & 1) || (pubkeys_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(pubkeys_arg_conv);
        pubkeys_arg_conv = ChannelPublicKeys_clone(&pubkeys_arg_conv);
        LDKCounterpartyChannelTransactionParameters ret_var = CounterpartyChannelTransactionParameters_new(pubkeys_arg_conv, selected_contest_delay_arg);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24618,14 +29356,37 @@ uint32_t  __attribute__((visibility("default"))) TS_CounterpartyChannelTransacti
        return ret_ref;
 }
 
+static inline uint64_t CounterpartyChannelTransactionParameters_clone_ptr(LDKCounterpartyChannelTransactionParameters *NONNULL_PTR arg) {
+       LDKCounterpartyChannelTransactionParameters ret_var = CounterpartyChannelTransactionParameters_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_CounterpartyChannelTransactionParameters_clone_ptr(uint32_t arg) {
+       LDKCounterpartyChannelTransactionParameters arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = CounterpartyChannelTransactionParameters_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CounterpartyChannelTransactionParameters_clone(uint32_t orig) {
        LDKCounterpartyChannelTransactionParameters orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKCounterpartyChannelTransactionParameters ret_var = CounterpartyChannelTransactionParameters_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24637,6 +29398,7 @@ jboolean  __attribute__((visibility("default"))) TS_ChannelTransactionParameters
        LDKChannelTransactionParameters this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        jboolean ret_val = ChannelTransactionParameters_is_populated(&this_arg_conv);
        return ret_val;
 }
@@ -24645,10 +29407,12 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelTransactionParameters
        LDKChannelTransactionParameters this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKDirectedChannelTransactionParameters ret_var = ChannelTransactionParameters_as_holder_broadcastable(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24660,10 +29424,12 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelTransactionParameters
        LDKChannelTransactionParameters this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKDirectedChannelTransactionParameters ret_var = ChannelTransactionParameters_as_counterparty_broadcastable(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24675,6 +29441,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_CounterpartyChannelTransa
        LDKCounterpartyChannelTransactionParameters obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = CounterpartyChannelTransactionParameters_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -24695,6 +29462,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ChannelTransactionParamet
        LDKChannelTransactionParameters obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ChannelTransactionParameters_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -24715,6 +29483,7 @@ void  __attribute__((visibility("default"))) TS_DirectedChannelTransactionParame
        LDKDirectedChannelTransactionParameters this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        DirectedChannelTransactionParameters_free(this_obj_conv);
 }
 
@@ -24722,10 +29491,12 @@ uint32_t  __attribute__((visibility("default"))) TS_DirectedChannelTransactionPa
        LDKDirectedChannelTransactionParameters this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKChannelPublicKeys ret_var = DirectedChannelTransactionParameters_broadcaster_pubkeys(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24737,10 +29508,12 @@ uint32_t  __attribute__((visibility("default"))) TS_DirectedChannelTransactionPa
        LDKDirectedChannelTransactionParameters this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKChannelPublicKeys ret_var = DirectedChannelTransactionParameters_countersignatory_pubkeys(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24752,6 +29525,7 @@ int16_t  __attribute__((visibility("default"))) TS_DirectedChannelTransactionPar
        LDKDirectedChannelTransactionParameters this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int16_t ret_val = DirectedChannelTransactionParameters_contest_delay(&this_arg_conv);
        return ret_val;
 }
@@ -24760,6 +29534,7 @@ jboolean  __attribute__((visibility("default"))) TS_DirectedChannelTransactionPa
        LDKDirectedChannelTransactionParameters this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        jboolean ret_val = DirectedChannelTransactionParameters_is_outbound(&this_arg_conv);
        return ret_val;
 }
@@ -24768,10 +29543,12 @@ uint32_t  __attribute__((visibility("default"))) TS_DirectedChannelTransactionPa
        LDKDirectedChannelTransactionParameters this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKOutPoint ret_var = DirectedChannelTransactionParameters_funding_outpoint(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24783,6 +29560,7 @@ void  __attribute__((visibility("default"))) TS_HolderCommitmentTransaction_free
        LDKHolderCommitmentTransaction this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        HolderCommitmentTransaction_free(this_obj_conv);
 }
 
@@ -24790,6 +29568,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_HolderCommitmentTransacti
        LDKHolderCommitmentTransaction this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(64, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), HolderCommitmentTransaction_get_counterparty_sig(&this_ptr_conv).compact_form, 64);
        return ret_arr;
@@ -24799,6 +29578,7 @@ void  __attribute__((visibility("default"))) TS_HolderCommitmentTransaction_set_
        LDKHolderCommitmentTransaction this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSignature val_ref;
        CHECK(*((uint32_t*)val) == 64);
        memcpy(val_ref.compact_form, (uint8_t*)(val + 4), 64);
@@ -24809,6 +29589,7 @@ void  __attribute__((visibility("default"))) TS_HolderCommitmentTransaction_set_
        LDKHolderCommitmentTransaction this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_SignatureZ val_constr;
        val_constr.datalen = *((uint32_t*)val);
        if (val_constr.datalen > 0)
@@ -24826,14 +29607,37 @@ void  __attribute__((visibility("default"))) TS_HolderCommitmentTransaction_set_
        HolderCommitmentTransaction_set_counterparty_htlc_sigs(&this_ptr_conv, val_constr);
 }
 
+static inline uint64_t HolderCommitmentTransaction_clone_ptr(LDKHolderCommitmentTransaction *NONNULL_PTR arg) {
+       LDKHolderCommitmentTransaction ret_var = HolderCommitmentTransaction_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_HolderCommitmentTransaction_clone_ptr(uint32_t arg) {
+       LDKHolderCommitmentTransaction arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = HolderCommitmentTransaction_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_HolderCommitmentTransaction_clone(uint32_t orig) {
        LDKHolderCommitmentTransaction orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKHolderCommitmentTransaction ret_var = HolderCommitmentTransaction_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24845,6 +29649,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_HolderCommitmentTransacti
        LDKHolderCommitmentTransaction obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = HolderCommitmentTransaction_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -24865,6 +29670,7 @@ uint32_t  __attribute__((visibility("default"))) TS_HolderCommitmentTransaction_
        LDKCommitmentTransaction commitment_tx_conv;
        commitment_tx_conv.inner = (void*)(commitment_tx & (~1));
        commitment_tx_conv.is_owned = (commitment_tx & 1) || (commitment_tx == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(commitment_tx_conv);
        commitment_tx_conv = CommitmentTransaction_clone(&commitment_tx_conv);
        LDKSignature counterparty_sig_ref;
        CHECK(*((uint32_t*)counterparty_sig) == 64);
@@ -24893,6 +29699,7 @@ uint32_t  __attribute__((visibility("default"))) TS_HolderCommitmentTransaction_
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24904,6 +29711,7 @@ void  __attribute__((visibility("default"))) TS_BuiltCommitmentTransaction_free(
        LDKBuiltCommitmentTransaction this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        BuiltCommitmentTransaction_free(this_obj_conv);
 }
 
@@ -24911,6 +29719,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_BuiltCommitmentTransactio
        LDKBuiltCommitmentTransaction this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKTransaction ret_var = BuiltCommitmentTransaction_get_transaction(&this_ptr_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -24922,6 +29731,7 @@ void  __attribute__((visibility("default"))) TS_BuiltCommitmentTransaction_set_t
        LDKBuiltCommitmentTransaction this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKTransaction val_ref;
        val_ref.datalen = *((uint32_t*)val);
        val_ref.data = MALLOC(val_ref.datalen, "LDKTransaction Bytes");
@@ -24934,6 +29744,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_BuiltCommitmentTransactio
        LDKBuiltCommitmentTransaction this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *BuiltCommitmentTransaction_get_txid(&this_ptr_conv), 32);
        return ret_arr;
@@ -24943,6 +29754,7 @@ void  __attribute__((visibility("default"))) TS_BuiltCommitmentTransaction_set_t
        LDKBuiltCommitmentTransaction this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -24962,6 +29774,7 @@ uint32_t  __attribute__((visibility("default"))) TS_BuiltCommitmentTransaction_n
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24969,14 +29782,37 @@ uint32_t  __attribute__((visibility("default"))) TS_BuiltCommitmentTransaction_n
        return ret_ref;
 }
 
+static inline uint64_t BuiltCommitmentTransaction_clone_ptr(LDKBuiltCommitmentTransaction *NONNULL_PTR arg) {
+       LDKBuiltCommitmentTransaction ret_var = BuiltCommitmentTransaction_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_BuiltCommitmentTransaction_clone_ptr(uint32_t arg) {
+       LDKBuiltCommitmentTransaction arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = BuiltCommitmentTransaction_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_BuiltCommitmentTransaction_clone(uint32_t orig) {
        LDKBuiltCommitmentTransaction orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKBuiltCommitmentTransaction ret_var = BuiltCommitmentTransaction_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24988,6 +29824,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_BuiltCommitmentTransactio
        LDKBuiltCommitmentTransaction obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = BuiltCommitmentTransaction_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -25008,6 +29845,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_BuiltCommitmentTransactio
        LDKBuiltCommitmentTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKu8slice funding_redeemscript_ref;
        funding_redeemscript_ref.datalen = *((uint32_t*)funding_redeemscript);
        funding_redeemscript_ref.data = (int8_t*)(funding_redeemscript + 4);
@@ -25020,6 +29858,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_BuiltCommitmentTransactio
        LDKBuiltCommitmentTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char funding_key_arr[32];
        CHECK(*((uint32_t*)funding_key) == 32);
        memcpy(funding_key_arr, (uint8_t*)(funding_key + 4), 32);
@@ -25036,17 +29875,41 @@ void  __attribute__((visibility("default"))) TS_ClosingTransaction_free(uint32_t
        LDKClosingTransaction this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ClosingTransaction_free(this_obj_conv);
 }
 
+static inline uint64_t ClosingTransaction_clone_ptr(LDKClosingTransaction *NONNULL_PTR arg) {
+       LDKClosingTransaction ret_var = ClosingTransaction_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_ClosingTransaction_clone_ptr(uint32_t arg) {
+       LDKClosingTransaction arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ClosingTransaction_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_ClosingTransaction_clone(uint32_t orig) {
        LDKClosingTransaction orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKClosingTransaction ret_var = ClosingTransaction_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25058,6 +29921,7 @@ int64_t  __attribute__((visibility("default"))) TS_ClosingTransaction_hash(uint3
        LDKClosingTransaction o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = ClosingTransaction_hash(&o_conv);
        return ret_val;
 }
@@ -25074,11 +29938,13 @@ uint32_t  __attribute__((visibility("default"))) TS_ClosingTransaction_new(int64
        LDKOutPoint funding_outpoint_conv;
        funding_outpoint_conv.inner = (void*)(funding_outpoint & (~1));
        funding_outpoint_conv.is_owned = (funding_outpoint & 1) || (funding_outpoint == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_outpoint_conv);
        funding_outpoint_conv = OutPoint_clone(&funding_outpoint_conv);
        LDKClosingTransaction ret_var = ClosingTransaction_new(to_holder_value_sat, to_counterparty_value_sat, to_holder_script_ref, to_counterparty_script_ref, funding_outpoint_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25090,10 +29956,12 @@ uint32_t  __attribute__((visibility("default"))) TS_ClosingTransaction_trust(uin
        LDKClosingTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKTrustedClosingTransaction ret_var = ClosingTransaction_trust(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25105,9 +29973,11 @@ uint32_t  __attribute__((visibility("default"))) TS_ClosingTransaction_verify(ui
        LDKClosingTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKOutPoint funding_outpoint_conv;
        funding_outpoint_conv.inner = (void*)(funding_outpoint & (~1));
        funding_outpoint_conv.is_owned = (funding_outpoint & 1) || (funding_outpoint == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_outpoint_conv);
        funding_outpoint_conv = OutPoint_clone(&funding_outpoint_conv);
        LDKCResult_TrustedClosingTransactionNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_TrustedClosingTransactionNoneZ), "LDKCResult_TrustedClosingTransactionNoneZ");
        *ret_conv = ClosingTransaction_verify(&this_arg_conv, funding_outpoint_conv);
@@ -25118,6 +29988,7 @@ int64_t  __attribute__((visibility("default"))) TS_ClosingTransaction_to_holder_
        LDKClosingTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = ClosingTransaction_to_holder_value_sat(&this_arg_conv);
        return ret_val;
 }
@@ -25126,6 +29997,7 @@ int64_t  __attribute__((visibility("default"))) TS_ClosingTransaction_to_counter
        LDKClosingTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = ClosingTransaction_to_counterparty_value_sat(&this_arg_conv);
        return ret_val;
 }
@@ -25134,6 +30006,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ClosingTransaction_to_hol
        LDKClosingTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKu8slice ret_var = ClosingTransaction_to_holder_script(&this_arg_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -25144,6 +30017,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ClosingTransaction_to_cou
        LDKClosingTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKu8slice ret_var = ClosingTransaction_to_counterparty_script(&this_arg_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -25154,6 +30028,7 @@ void  __attribute__((visibility("default"))) TS_TrustedClosingTransaction_free(u
        LDKTrustedClosingTransaction this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        TrustedClosingTransaction_free(this_obj_conv);
 }
 
@@ -25161,6 +30036,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_TrustedClosingTransaction
        LDKTrustedClosingTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKTransaction ret_var = TrustedClosingTransaction_built_transaction(&this_arg_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -25172,6 +30048,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_TrustedClosingTransaction
        LDKTrustedClosingTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKu8slice funding_redeemscript_ref;
        funding_redeemscript_ref.datalen = *((uint32_t*)funding_redeemscript);
        funding_redeemscript_ref.data = (int8_t*)(funding_redeemscript + 4);
@@ -25184,6 +30061,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_TrustedClosingTransaction
        LDKTrustedClosingTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char funding_key_arr[32];
        CHECK(*((uint32_t*)funding_key) == 32);
        memcpy(funding_key_arr, (uint8_t*)(funding_key + 4), 32);
@@ -25200,17 +30078,41 @@ void  __attribute__((visibility("default"))) TS_CommitmentTransaction_free(uint3
        LDKCommitmentTransaction this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        CommitmentTransaction_free(this_obj_conv);
 }
 
+static inline uint64_t CommitmentTransaction_clone_ptr(LDKCommitmentTransaction *NONNULL_PTR arg) {
+       LDKCommitmentTransaction ret_var = CommitmentTransaction_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_CommitmentTransaction_clone_ptr(uint32_t arg) {
+       LDKCommitmentTransaction arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = CommitmentTransaction_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CommitmentTransaction_clone(uint32_t orig) {
        LDKCommitmentTransaction orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKCommitmentTransaction ret_var = CommitmentTransaction_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25222,6 +30124,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_CommitmentTransaction_wri
        LDKCommitmentTransaction obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = CommitmentTransaction_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -25242,6 +30145,7 @@ int64_t  __attribute__((visibility("default"))) TS_CommitmentTransaction_commitm
        LDKCommitmentTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = CommitmentTransaction_commitment_number(&this_arg_conv);
        return ret_val;
 }
@@ -25250,6 +30154,7 @@ int64_t  __attribute__((visibility("default"))) TS_CommitmentTransaction_to_broa
        LDKCommitmentTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = CommitmentTransaction_to_broadcaster_value_sat(&this_arg_conv);
        return ret_val;
 }
@@ -25258,6 +30163,7 @@ int64_t  __attribute__((visibility("default"))) TS_CommitmentTransaction_to_coun
        LDKCommitmentTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = CommitmentTransaction_to_countersignatory_value_sat(&this_arg_conv);
        return ret_val;
 }
@@ -25266,6 +30172,7 @@ int32_t  __attribute__((visibility("default"))) TS_CommitmentTransaction_feerate
        LDKCommitmentTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int32_t ret_val = CommitmentTransaction_feerate_per_kw(&this_arg_conv);
        return ret_val;
 }
@@ -25274,10 +30181,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CommitmentTransaction_trust(
        LDKCommitmentTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKTrustedCommitmentTransaction ret_var = CommitmentTransaction_trust(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25289,15 +30198,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CommitmentTransaction_verify
        LDKCommitmentTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKDirectedChannelTransactionParameters channel_parameters_conv;
        channel_parameters_conv.inner = (void*)(channel_parameters & (~1));
        channel_parameters_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_parameters_conv);
        LDKChannelPublicKeys broadcaster_keys_conv;
        broadcaster_keys_conv.inner = (void*)(broadcaster_keys & (~1));
        broadcaster_keys_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(broadcaster_keys_conv);
        LDKChannelPublicKeys countersignatory_keys_conv;
        countersignatory_keys_conv.inner = (void*)(countersignatory_keys & (~1));
        countersignatory_keys_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(countersignatory_keys_conv);
        LDKCResult_TrustedCommitmentTransactionNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_TrustedCommitmentTransactionNoneZ), "LDKCResult_TrustedCommitmentTransactionNoneZ");
        *ret_conv = CommitmentTransaction_verify(&this_arg_conv, &channel_parameters_conv, &broadcaster_keys_conv, &countersignatory_keys_conv);
        return (uint64_t)ret_conv;
@@ -25307,6 +30220,7 @@ void  __attribute__((visibility("default"))) TS_TrustedCommitmentTransaction_fre
        LDKTrustedCommitmentTransaction this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        TrustedCommitmentTransaction_free(this_obj_conv);
 }
 
@@ -25314,6 +30228,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_TrustedCommitmentTransact
        LDKTrustedCommitmentTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), TrustedCommitmentTransaction_txid(&this_arg_conv).data, 32);
        return ret_arr;
@@ -25323,10 +30238,12 @@ uint32_t  __attribute__((visibility("default"))) TS_TrustedCommitmentTransaction
        LDKTrustedCommitmentTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKBuiltCommitmentTransaction ret_var = TrustedCommitmentTransaction_built_transaction(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25338,10 +30255,12 @@ uint32_t  __attribute__((visibility("default"))) TS_TrustedCommitmentTransaction
        LDKTrustedCommitmentTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKTxCreationKeys ret_var = TrustedCommitmentTransaction_keys(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25353,6 +30272,7 @@ uint32_t  __attribute__((visibility("default"))) TS_TrustedCommitmentTransaction
        LDKTrustedCommitmentTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char htlc_base_key_arr[32];
        CHECK(*((uint32_t*)htlc_base_key) == 32);
        memcpy(htlc_base_key_arr, (uint8_t*)(htlc_base_key + 4), 32);
@@ -25360,6 +30280,7 @@ uint32_t  __attribute__((visibility("default"))) TS_TrustedCommitmentTransaction
        LDKDirectedChannelTransactionParameters channel_parameters_conv;
        channel_parameters_conv.inner = (void*)(channel_parameters & (~1));
        channel_parameters_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_parameters_conv);
        LDKCResult_CVec_SignatureZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_SignatureZNoneZ), "LDKCResult_CVec_SignatureZNoneZ");
        *ret_conv = TrustedCommitmentTransaction_get_htlc_sigs(&this_arg_conv, htlc_base_key_ref, &channel_parameters_conv);
        return (uint64_t)ret_conv;
@@ -25380,9 +30301,11 @@ jboolean  __attribute__((visibility("default"))) TS_InitFeatures_eq(uint32_t a,
        LDKInitFeatures a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKInitFeatures b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = InitFeatures_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -25391,9 +30314,11 @@ jboolean  __attribute__((visibility("default"))) TS_NodeFeatures_eq(uint32_t a,
        LDKNodeFeatures a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKNodeFeatures b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = NodeFeatures_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -25402,9 +30327,11 @@ jboolean  __attribute__((visibility("default"))) TS_ChannelFeatures_eq(uint32_t
        LDKChannelFeatures a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKChannelFeatures b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = ChannelFeatures_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -25413,21 +30340,46 @@ jboolean  __attribute__((visibility("default"))) TS_InvoiceFeatures_eq(uint32_t
        LDKInvoiceFeatures a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKInvoiceFeatures b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = InvoiceFeatures_eq(&a_conv, &b_conv);
        return ret_val;
 }
 
+static inline uint64_t InitFeatures_clone_ptr(LDKInitFeatures *NONNULL_PTR arg) {
+       LDKInitFeatures ret_var = InitFeatures_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_InitFeatures_clone_ptr(uint32_t arg) {
+       LDKInitFeatures arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = InitFeatures_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_InitFeatures_clone(uint32_t orig) {
        LDKInitFeatures orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKInitFeatures ret_var = InitFeatures_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25435,14 +30387,37 @@ uint32_t  __attribute__((visibility("default"))) TS_InitFeatures_clone(uint32_t
        return ret_ref;
 }
 
+static inline uint64_t NodeFeatures_clone_ptr(LDKNodeFeatures *NONNULL_PTR arg) {
+       LDKNodeFeatures ret_var = NodeFeatures_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_NodeFeatures_clone_ptr(uint32_t arg) {
+       LDKNodeFeatures arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = NodeFeatures_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_NodeFeatures_clone(uint32_t orig) {
        LDKNodeFeatures orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKNodeFeatures ret_var = NodeFeatures_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25450,14 +30425,37 @@ uint32_t  __attribute__((visibility("default"))) TS_NodeFeatures_clone(uint32_t
        return ret_ref;
 }
 
+static inline uint64_t ChannelFeatures_clone_ptr(LDKChannelFeatures *NONNULL_PTR arg) {
+       LDKChannelFeatures ret_var = ChannelFeatures_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_ChannelFeatures_clone_ptr(uint32_t arg) {
+       LDKChannelFeatures arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChannelFeatures_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_ChannelFeatures_clone(uint32_t orig) {
        LDKChannelFeatures orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChannelFeatures ret_var = ChannelFeatures_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25465,14 +30463,37 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelFeatures_clone(uint32
        return ret_ref;
 }
 
+static inline uint64_t InvoiceFeatures_clone_ptr(LDKInvoiceFeatures *NONNULL_PTR arg) {
+       LDKInvoiceFeatures ret_var = InvoiceFeatures_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_InvoiceFeatures_clone_ptr(uint32_t arg) {
+       LDKInvoiceFeatures arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = InvoiceFeatures_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_InvoiceFeatures_clone(uint32_t orig) {
        LDKInvoiceFeatures orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKInvoiceFeatures ret_var = InvoiceFeatures_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25484,6 +30505,7 @@ void  __attribute__((visibility("default"))) TS_InitFeatures_free(uint32_t this_
        LDKInitFeatures this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        InitFeatures_free(this_obj_conv);
 }
 
@@ -25491,6 +30513,7 @@ void  __attribute__((visibility("default"))) TS_NodeFeatures_free(uint32_t this_
        LDKNodeFeatures this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        NodeFeatures_free(this_obj_conv);
 }
 
@@ -25498,6 +30521,7 @@ void  __attribute__((visibility("default"))) TS_ChannelFeatures_free(uint32_t th
        LDKChannelFeatures this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelFeatures_free(this_obj_conv);
 }
 
@@ -25505,6 +30529,7 @@ void  __attribute__((visibility("default"))) TS_InvoiceFeatures_free(uint32_t th
        LDKInvoiceFeatures this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        InvoiceFeatures_free(this_obj_conv);
 }
 
@@ -25513,6 +30538,7 @@ uint32_t  __attribute__((visibility("default"))) TS_InitFeatures_empty() {
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25525,6 +30551,7 @@ uint32_t  __attribute__((visibility("default"))) TS_InitFeatures_known() {
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25536,6 +30563,7 @@ jboolean  __attribute__((visibility("default"))) TS_InitFeatures_requires_unknow
        LDKInitFeatures this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        jboolean ret_val = InitFeatures_requires_unknown_bits(&this_arg_conv);
        return ret_val;
 }
@@ -25545,6 +30573,7 @@ uint32_t  __attribute__((visibility("default"))) TS_NodeFeatures_empty() {
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25557,6 +30586,7 @@ uint32_t  __attribute__((visibility("default"))) TS_NodeFeatures_known() {
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25568,6 +30598,7 @@ jboolean  __attribute__((visibility("default"))) TS_NodeFeatures_requires_unknow
        LDKNodeFeatures this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        jboolean ret_val = NodeFeatures_requires_unknown_bits(&this_arg_conv);
        return ret_val;
 }
@@ -25577,6 +30608,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelFeatures_empty() {
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25589,6 +30621,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelFeatures_known() {
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25600,6 +30633,7 @@ jboolean  __attribute__((visibility("default"))) TS_ChannelFeatures_requires_unk
        LDKChannelFeatures this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        jboolean ret_val = ChannelFeatures_requires_unknown_bits(&this_arg_conv);
        return ret_val;
 }
@@ -25609,6 +30643,7 @@ uint32_t  __attribute__((visibility("default"))) TS_InvoiceFeatures_empty() {
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25621,6 +30656,7 @@ uint32_t  __attribute__((visibility("default"))) TS_InvoiceFeatures_known() {
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25632,6 +30668,7 @@ jboolean  __attribute__((visibility("default"))) TS_InvoiceFeatures_requires_unk
        LDKInvoiceFeatures this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        jboolean ret_val = InvoiceFeatures_requires_unknown_bits(&this_arg_conv);
        return ret_val;
 }
@@ -25640,6 +30677,7 @@ jboolean  __attribute__((visibility("default"))) TS_InitFeatures_supports_paymen
        LDKInitFeatures this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        jboolean ret_val = InitFeatures_supports_payment_secret(&this_arg_conv);
        return ret_val;
 }
@@ -25648,6 +30686,7 @@ jboolean  __attribute__((visibility("default"))) TS_NodeFeatures_supports_paymen
        LDKNodeFeatures this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        jboolean ret_val = NodeFeatures_supports_payment_secret(&this_arg_conv);
        return ret_val;
 }
@@ -25656,6 +30695,7 @@ jboolean  __attribute__((visibility("default"))) TS_InvoiceFeatures_supports_pay
        LDKInvoiceFeatures this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        jboolean ret_val = InvoiceFeatures_supports_payment_secret(&this_arg_conv);
        return ret_val;
 }
@@ -25664,6 +30704,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_InitFeatures_write(uint32
        LDKInitFeatures obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = InitFeatures_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -25675,6 +30716,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_NodeFeatures_write(uint32
        LDKNodeFeatures obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = NodeFeatures_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -25686,6 +30728,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ChannelFeatures_write(uin
        LDKChannelFeatures obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ChannelFeatures_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -25697,6 +30740,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_InvoiceFeatures_write(uin
        LDKInvoiceFeatures obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = InvoiceFeatures_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -25744,17 +30788,41 @@ void  __attribute__((visibility("default"))) TS_ShutdownScript_free(uint32_t thi
        LDKShutdownScript this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ShutdownScript_free(this_obj_conv);
 }
 
+static inline uint64_t ShutdownScript_clone_ptr(LDKShutdownScript *NONNULL_PTR arg) {
+       LDKShutdownScript ret_var = ShutdownScript_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_ShutdownScript_clone_ptr(uint32_t arg) {
+       LDKShutdownScript arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ShutdownScript_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_ShutdownScript_clone(uint32_t orig) {
        LDKShutdownScript orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKShutdownScript ret_var = ShutdownScript_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25766,6 +30834,7 @@ void  __attribute__((visibility("default"))) TS_InvalidShutdownScript_free(uint3
        LDKInvalidShutdownScript this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        InvalidShutdownScript_free(this_obj_conv);
 }
 
@@ -25773,6 +30842,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_InvalidShutdownScript_get
        LDKInvalidShutdownScript this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKu8slice ret_var = InvalidShutdownScript_get_script(&this_ptr_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -25783,6 +30853,7 @@ void  __attribute__((visibility("default"))) TS_InvalidShutdownScript_set_script
        LDKInvalidShutdownScript this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_u8Z val_ref;
        val_ref.datalen = *((uint32_t*)val);
        val_ref.data = MALLOC(val_ref.datalen, "LDKCVec_u8Z Bytes");
@@ -25799,6 +30870,7 @@ uint32_t  __attribute__((visibility("default"))) TS_InvalidShutdownScript_new(in
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25806,14 +30878,37 @@ uint32_t  __attribute__((visibility("default"))) TS_InvalidShutdownScript_new(in
        return ret_ref;
 }
 
+static inline uint64_t InvalidShutdownScript_clone_ptr(LDKInvalidShutdownScript *NONNULL_PTR arg) {
+       LDKInvalidShutdownScript ret_var = InvalidShutdownScript_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_InvalidShutdownScript_clone_ptr(uint32_t arg) {
+       LDKInvalidShutdownScript arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = InvalidShutdownScript_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_InvalidShutdownScript_clone(uint32_t orig) {
        LDKInvalidShutdownScript orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKInvalidShutdownScript ret_var = InvalidShutdownScript_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25825,6 +30920,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ShutdownScript_write(uint
        LDKShutdownScript obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ShutdownScript_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -25850,6 +30946,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ShutdownScript_new_p2wpkh(in
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25866,6 +30963,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ShutdownScript_new_p2wsh(int
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25886,6 +30984,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ShutdownScript_into_inner
        LDKShutdownScript this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = (this_arg & 1) || (this_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv = ShutdownScript_clone(&this_arg_conv);
        LDKCVec_u8Z ret_var = ShutdownScript_into_inner(this_arg_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
@@ -25898,6 +30997,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ShutdownScript_as_legacy_
        LDKShutdownScript this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ShutdownScript_as_legacy_pubkey(&this_arg_conv).compressed_form, 33);
        return ret_arr;
@@ -25907,9 +31007,11 @@ jboolean  __attribute__((visibility("default"))) TS_ShutdownScript_is_compatible
        LDKShutdownScript this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKInitFeatures features_conv;
        features_conv.inner = (void*)(features & (~1));
        features_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_conv);
        jboolean ret_val = ShutdownScript_is_compatible(&this_arg_conv, &features_conv);
        return ret_val;
 }
@@ -25923,6 +31025,19 @@ void  __attribute__((visibility("default"))) TS_CustomMessageReader_free(uint32_
        CustomMessageReader_free(this_ptr_conv);
 }
 
+static inline uint64_t Type_clone_ptr(LDKType *NONNULL_PTR arg) {
+       LDKType* ret_ret = MALLOC(sizeof(LDKType), "LDKType");
+       *ret_ret = Type_clone(arg);
+       return (uint64_t)ret_ret;
+}
+int64_t  __attribute__((visibility("default"))) TS_Type_clone_ptr(uint32_t arg) {
+       void* arg_ptr = (void*)(((uint64_t)arg) & ~1);
+       if (!(arg & 1)) { CHECK_ACCESS(arg_ptr); }
+       LDKType* arg_conv = (LDKType*)arg_ptr;
+       int64_t ret_val = Type_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_Type_clone(uint32_t orig) {
        void* orig_ptr = (void*)(((uint64_t)orig) & ~1);
        if (!(orig & 1)) { CHECK_ACCESS(orig_ptr); }
@@ -25954,6 +31069,7 @@ void  __attribute__((visibility("default"))) TS_LockableScore_free(uint32_t this
        LDKLockableScore this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        LockableScore_free(this_obj_conv);
 }
 
@@ -25965,6 +31081,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LockableScore_new(uint32_t s
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25976,6 +31093,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_LockableScore_write(uint3
        LDKLockableScore obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = LockableScore_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -25987,17 +31105,41 @@ void  __attribute__((visibility("default"))) TS_NodeId_free(uint32_t this_obj) {
        LDKNodeId this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        NodeId_free(this_obj_conv);
 }
 
+static inline uint64_t NodeId_clone_ptr(LDKNodeId *NONNULL_PTR arg) {
+       LDKNodeId ret_var = NodeId_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_NodeId_clone_ptr(uint32_t arg) {
+       LDKNodeId arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = NodeId_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_NodeId_clone(uint32_t orig) {
        LDKNodeId orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKNodeId ret_var = NodeId_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -26013,6 +31155,7 @@ uint32_t  __attribute__((visibility("default"))) TS_NodeId_from_pubkey(int8_tArr
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -26024,6 +31167,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_NodeId_as_slice(uint32_t
        LDKNodeId this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKu8slice ret_var = NodeId_as_slice(&this_arg_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -26034,6 +31178,7 @@ int64_t  __attribute__((visibility("default"))) TS_NodeId_hash(uint32_t o) {
        LDKNodeId o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = NodeId_hash(&o_conv);
        return ret_val;
 }
@@ -26042,6 +31187,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_NodeId_write(uint32_t obj
        LDKNodeId obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = NodeId_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -26062,17 +31208,41 @@ void  __attribute__((visibility("default"))) TS_NetworkGraph_free(uint32_t this_
        LDKNetworkGraph this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        NetworkGraph_free(this_obj_conv);
 }
 
+static inline uint64_t NetworkGraph_clone_ptr(LDKNetworkGraph *NONNULL_PTR arg) {
+       LDKNetworkGraph ret_var = NetworkGraph_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_NetworkGraph_clone_ptr(uint32_t arg) {
+       LDKNetworkGraph arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = NetworkGraph_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_NetworkGraph_clone(uint32_t orig) {
        LDKNetworkGraph orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKNetworkGraph ret_var = NetworkGraph_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -26084,6 +31254,7 @@ void  __attribute__((visibility("default"))) TS_ReadOnlyNetworkGraph_free(uint32
        LDKReadOnlyNetworkGraph this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ReadOnlyNetworkGraph_free(this_obj_conv);
 }
 
@@ -26096,6 +31267,18 @@ void  __attribute__((visibility("default"))) TS_NetworkUpdate_free(uint32_t this
        NetworkUpdate_free(this_ptr_conv);
 }
 
+static inline uint64_t NetworkUpdate_clone_ptr(LDKNetworkUpdate *NONNULL_PTR arg) {
+       LDKNetworkUpdate *ret_copy = MALLOC(sizeof(LDKNetworkUpdate), "LDKNetworkUpdate");
+       *ret_copy = NetworkUpdate_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_NetworkUpdate_clone_ptr(uint32_t arg) {
+       LDKNetworkUpdate* arg_conv = (LDKNetworkUpdate*)arg;
+       int64_t ret_val = NetworkUpdate_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_NetworkUpdate_clone(uint32_t orig) {
        LDKNetworkUpdate* orig_conv = (LDKNetworkUpdate*)orig;
        LDKNetworkUpdate *ret_copy = MALLOC(sizeof(LDKNetworkUpdate), "LDKNetworkUpdate");
@@ -26108,6 +31291,7 @@ uint32_t  __attribute__((visibility("default"))) TS_NetworkUpdate_channel_update
        LDKChannelUpdate msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = ChannelUpdate_clone(&msg_conv);
        LDKNetworkUpdate *ret_copy = MALLOC(sizeof(LDKNetworkUpdate), "LDKNetworkUpdate");
        *ret_copy = NetworkUpdate_channel_update_message(msg_conv);
@@ -26141,10 +31325,20 @@ int8_tArray  __attribute__((visibility("default"))) TS_NetworkUpdate_write(uint3
        return ret_arr;
 }
 
+uint32_t  __attribute__((visibility("default"))) TS_NetworkUpdate_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = *((uint32_t*)ser);
+       ser_ref.data = (int8_t*)(ser + 4);
+       LDKCResult_COption_NetworkUpdateZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_NetworkUpdateZDecodeErrorZ), "LDKCResult_COption_NetworkUpdateZDecodeErrorZ");
+       *ret_conv = NetworkUpdate_read(ser_ref);
+       return (uint64_t)ret_conv;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_NetGraphMsgHandler_as_EventHandler(uint32_t this_arg) {
        LDKNetGraphMsgHandler this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKEventHandler* ret_ret = MALLOC(sizeof(LDKEventHandler), "LDKEventHandler");
        *ret_ret = NetGraphMsgHandler_as_EventHandler(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -26154,6 +31348,7 @@ void  __attribute__((visibility("default"))) TS_NetGraphMsgHandler_free(uint32_t
        LDKNetGraphMsgHandler this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        NetGraphMsgHandler_free(this_obj_conv);
 }
 
@@ -26161,6 +31356,7 @@ uint32_t  __attribute__((visibility("default"))) TS_NetGraphMsgHandler_new(uint3
        LDKNetworkGraph network_graph_conv;
        network_graph_conv.inner = (void*)(network_graph & (~1));
        network_graph_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
        void* chain_access_ptr = (void*)(((uint64_t)chain_access) & ~1);
        CHECK_ACCESS(chain_access_ptr);
        LDKCOption_AccessZ chain_access_conv = *(LDKCOption_AccessZ*)(chain_access_ptr);
@@ -26175,6 +31371,7 @@ uint32_t  __attribute__((visibility("default"))) TS_NetGraphMsgHandler_new(uint3
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -26186,6 +31383,7 @@ void  __attribute__((visibility("default"))) TS_NetGraphMsgHandler_add_chain_acc
        LDKNetGraphMsgHandler this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        void* chain_access_ptr = (void*)(((uint64_t)chain_access) & ~1);
        CHECK_ACCESS(chain_access_ptr);
        LDKCOption_AccessZ chain_access_conv = *(LDKCOption_AccessZ*)(chain_access_ptr);
@@ -26200,6 +31398,7 @@ uint32_t  __attribute__((visibility("default"))) TS_NetGraphMsgHandler_as_Routin
        LDKNetGraphMsgHandler this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKRoutingMessageHandler* ret_ret = MALLOC(sizeof(LDKRoutingMessageHandler), "LDKRoutingMessageHandler");
        *ret_ret = NetGraphMsgHandler_as_RoutingMessageHandler(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -26209,6 +31408,7 @@ uint32_t  __attribute__((visibility("default"))) TS_NetGraphMsgHandler_as_Messag
        LDKNetGraphMsgHandler this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKMessageSendEventsProvider* ret_ret = MALLOC(sizeof(LDKMessageSendEventsProvider), "LDKMessageSendEventsProvider");
        *ret_ret = NetGraphMsgHandler_as_MessageSendEventsProvider(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -26218,6 +31418,7 @@ void  __attribute__((visibility("default"))) TS_DirectionalChannelInfo_free(uint
        LDKDirectionalChannelInfo this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        DirectionalChannelInfo_free(this_obj_conv);
 }
 
@@ -26225,6 +31426,7 @@ int32_t  __attribute__((visibility("default"))) TS_DirectionalChannelInfo_get_la
        LDKDirectionalChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = DirectionalChannelInfo_get_last_update(&this_ptr_conv);
        return ret_val;
 }
@@ -26233,6 +31435,7 @@ void  __attribute__((visibility("default"))) TS_DirectionalChannelInfo_set_last_
        LDKDirectionalChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        DirectionalChannelInfo_set_last_update(&this_ptr_conv, val);
 }
 
@@ -26240,6 +31443,7 @@ jboolean  __attribute__((visibility("default"))) TS_DirectionalChannelInfo_get_e
        LDKDirectionalChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        jboolean ret_val = DirectionalChannelInfo_get_enabled(&this_ptr_conv);
        return ret_val;
 }
@@ -26248,6 +31452,7 @@ void  __attribute__((visibility("default"))) TS_DirectionalChannelInfo_set_enabl
        LDKDirectionalChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        DirectionalChannelInfo_set_enabled(&this_ptr_conv, val);
 }
 
@@ -26255,6 +31460,7 @@ int16_t  __attribute__((visibility("default"))) TS_DirectionalChannelInfo_get_cl
        LDKDirectionalChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = DirectionalChannelInfo_get_cltv_expiry_delta(&this_ptr_conv);
        return ret_val;
 }
@@ -26263,6 +31469,7 @@ void  __attribute__((visibility("default"))) TS_DirectionalChannelInfo_set_cltv_
        LDKDirectionalChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        DirectionalChannelInfo_set_cltv_expiry_delta(&this_ptr_conv, val);
 }
 
@@ -26270,6 +31477,7 @@ int64_t  __attribute__((visibility("default"))) TS_DirectionalChannelInfo_get_ht
        LDKDirectionalChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = DirectionalChannelInfo_get_htlc_minimum_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -26278,6 +31486,7 @@ void  __attribute__((visibility("default"))) TS_DirectionalChannelInfo_set_htlc_
        LDKDirectionalChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        DirectionalChannelInfo_set_htlc_minimum_msat(&this_ptr_conv, val);
 }
 
@@ -26285,6 +31494,7 @@ uint32_t  __attribute__((visibility("default"))) TS_DirectionalChannelInfo_get_h
        LDKDirectionalChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
        *ret_copy = DirectionalChannelInfo_get_htlc_maximum_msat(&this_ptr_conv);
        uint64_t ret_ref = (uint64_t)ret_copy;
@@ -26295,6 +31505,7 @@ void  __attribute__((visibility("default"))) TS_DirectionalChannelInfo_set_htlc_
        LDKDirectionalChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
@@ -26306,10 +31517,12 @@ uint32_t  __attribute__((visibility("default"))) TS_DirectionalChannelInfo_get_f
        LDKDirectionalChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKRoutingFees ret_var = DirectionalChannelInfo_get_fees(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -26321,9 +31534,11 @@ void  __attribute__((visibility("default"))) TS_DirectionalChannelInfo_set_fees(
        LDKDirectionalChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKRoutingFees val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = RoutingFees_clone(&val_conv);
        DirectionalChannelInfo_set_fees(&this_ptr_conv, val_conv);
 }
@@ -26332,11 +31547,13 @@ uint32_t  __attribute__((visibility("default"))) TS_DirectionalChannelInfo_get_l
        LDKDirectionalChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelUpdate ret_var = DirectionalChannelInfo_get_last_update_message(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -26349,9 +31566,11 @@ void  __attribute__((visibility("default"))) TS_DirectionalChannelInfo_set_last_
        LDKDirectionalChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelUpdate val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = ChannelUpdate_clone(&val_conv);
        DirectionalChannelInfo_set_last_update_message(&this_ptr_conv, val_conv);
 }
@@ -26364,15 +31583,18 @@ uint32_t  __attribute__((visibility("default"))) TS_DirectionalChannelInfo_new(i
        LDKRoutingFees fees_arg_conv;
        fees_arg_conv.inner = (void*)(fees_arg & (~1));
        fees_arg_conv.is_owned = (fees_arg & 1) || (fees_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(fees_arg_conv);
        fees_arg_conv = RoutingFees_clone(&fees_arg_conv);
        LDKChannelUpdate last_update_message_arg_conv;
        last_update_message_arg_conv.inner = (void*)(last_update_message_arg & (~1));
        last_update_message_arg_conv.is_owned = (last_update_message_arg & 1) || (last_update_message_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(last_update_message_arg_conv);
        last_update_message_arg_conv = ChannelUpdate_clone(&last_update_message_arg_conv);
        LDKDirectionalChannelInfo ret_var = DirectionalChannelInfo_new(last_update_arg, enabled_arg, cltv_expiry_delta_arg, htlc_minimum_msat_arg, htlc_maximum_msat_arg_conv, fees_arg_conv, last_update_message_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -26380,14 +31602,37 @@ uint32_t  __attribute__((visibility("default"))) TS_DirectionalChannelInfo_new(i
        return ret_ref;
 }
 
+static inline uint64_t DirectionalChannelInfo_clone_ptr(LDKDirectionalChannelInfo *NONNULL_PTR arg) {
+       LDKDirectionalChannelInfo ret_var = DirectionalChannelInfo_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_DirectionalChannelInfo_clone_ptr(uint32_t arg) {
+       LDKDirectionalChannelInfo arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = DirectionalChannelInfo_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_DirectionalChannelInfo_clone(uint32_t orig) {
        LDKDirectionalChannelInfo orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKDirectionalChannelInfo ret_var = DirectionalChannelInfo_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -26399,6 +31644,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_DirectionalChannelInfo_wr
        LDKDirectionalChannelInfo obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = DirectionalChannelInfo_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -26419,6 +31665,7 @@ void  __attribute__((visibility("default"))) TS_ChannelInfo_free(uint32_t this_o
        LDKChannelInfo this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelInfo_free(this_obj_conv);
 }
 
@@ -26426,10 +31673,12 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelInfo_get_features(uin
        LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelFeatures ret_var = ChannelInfo_get_features(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -26441,9 +31690,11 @@ void  __attribute__((visibility("default"))) TS_ChannelInfo_set_features(uint32_
        LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelFeatures val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = ChannelFeatures_clone(&val_conv);
        ChannelInfo_set_features(&this_ptr_conv, val_conv);
 }
@@ -26452,10 +31703,12 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelInfo_get_node_one(uin
        LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNodeId ret_var = ChannelInfo_get_node_one(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -26467,9 +31720,11 @@ void  __attribute__((visibility("default"))) TS_ChannelInfo_set_node_one(uint32_
        LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNodeId val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = NodeId_clone(&val_conv);
        ChannelInfo_set_node_one(&this_ptr_conv, val_conv);
 }
@@ -26478,11 +31733,13 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelInfo_get_one_to_two(u
        LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKDirectionalChannelInfo ret_var = ChannelInfo_get_one_to_two(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -26495,9 +31752,11 @@ void  __attribute__((visibility("default"))) TS_ChannelInfo_set_one_to_two(uint3
        LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKDirectionalChannelInfo val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = DirectionalChannelInfo_clone(&val_conv);
        ChannelInfo_set_one_to_two(&this_ptr_conv, val_conv);
 }
@@ -26506,10 +31765,12 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelInfo_get_node_two(uin
        LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNodeId ret_var = ChannelInfo_get_node_two(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -26521,9 +31782,11 @@ void  __attribute__((visibility("default"))) TS_ChannelInfo_set_node_two(uint32_
        LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNodeId val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = NodeId_clone(&val_conv);
        ChannelInfo_set_node_two(&this_ptr_conv, val_conv);
 }
@@ -26532,11 +31795,13 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelInfo_get_two_to_one(u
        LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKDirectionalChannelInfo ret_var = ChannelInfo_get_two_to_one(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -26549,9 +31814,11 @@ void  __attribute__((visibility("default"))) TS_ChannelInfo_set_two_to_one(uint3
        LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKDirectionalChannelInfo val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = DirectionalChannelInfo_clone(&val_conv);
        ChannelInfo_set_two_to_one(&this_ptr_conv, val_conv);
 }
@@ -26560,6 +31827,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelInfo_get_capacity_sat
        LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
        *ret_copy = ChannelInfo_get_capacity_sats(&this_ptr_conv);
        uint64_t ret_ref = (uint64_t)ret_copy;
@@ -26570,6 +31838,7 @@ void  __attribute__((visibility("default"))) TS_ChannelInfo_set_capacity_sats(ui
        LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
@@ -26581,11 +31850,13 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelInfo_get_announcement
        LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelAnnouncement ret_var = ChannelInfo_get_announcement_message(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -26598,9 +31869,11 @@ void  __attribute__((visibility("default"))) TS_ChannelInfo_set_announcement_mes
        LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelAnnouncement val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = ChannelAnnouncement_clone(&val_conv);
        ChannelInfo_set_announcement_message(&this_ptr_conv, val_conv);
 }
@@ -26609,22 +31882,27 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelInfo_new(uint32_t fea
        LDKChannelFeatures features_arg_conv;
        features_arg_conv.inner = (void*)(features_arg & (~1));
        features_arg_conv.is_owned = (features_arg & 1) || (features_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_arg_conv);
        features_arg_conv = ChannelFeatures_clone(&features_arg_conv);
        LDKNodeId node_one_arg_conv;
        node_one_arg_conv.inner = (void*)(node_one_arg & (~1));
        node_one_arg_conv.is_owned = (node_one_arg & 1) || (node_one_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_one_arg_conv);
        node_one_arg_conv = NodeId_clone(&node_one_arg_conv);
        LDKDirectionalChannelInfo one_to_two_arg_conv;
        one_to_two_arg_conv.inner = (void*)(one_to_two_arg & (~1));
        one_to_two_arg_conv.is_owned = (one_to_two_arg & 1) || (one_to_two_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(one_to_two_arg_conv);
        one_to_two_arg_conv = DirectionalChannelInfo_clone(&one_to_two_arg_conv);
        LDKNodeId node_two_arg_conv;
        node_two_arg_conv.inner = (void*)(node_two_arg & (~1));
        node_two_arg_conv.is_owned = (node_two_arg & 1) || (node_two_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_two_arg_conv);
        node_two_arg_conv = NodeId_clone(&node_two_arg_conv);
        LDKDirectionalChannelInfo two_to_one_arg_conv;
        two_to_one_arg_conv.inner = (void*)(two_to_one_arg & (~1));
        two_to_one_arg_conv.is_owned = (two_to_one_arg & 1) || (two_to_one_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(two_to_one_arg_conv);
        two_to_one_arg_conv = DirectionalChannelInfo_clone(&two_to_one_arg_conv);
        void* capacity_sats_arg_ptr = (void*)(((uint64_t)capacity_sats_arg) & ~1);
        CHECK_ACCESS(capacity_sats_arg_ptr);
@@ -26633,11 +31911,13 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelInfo_new(uint32_t fea
        LDKChannelAnnouncement announcement_message_arg_conv;
        announcement_message_arg_conv.inner = (void*)(announcement_message_arg & (~1));
        announcement_message_arg_conv.is_owned = (announcement_message_arg & 1) || (announcement_message_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(announcement_message_arg_conv);
        announcement_message_arg_conv = ChannelAnnouncement_clone(&announcement_message_arg_conv);
        LDKChannelInfo ret_var = ChannelInfo_new(features_arg_conv, node_one_arg_conv, one_to_two_arg_conv, node_two_arg_conv, two_to_one_arg_conv, capacity_sats_arg_conv, announcement_message_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -26645,14 +31925,37 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelInfo_new(uint32_t fea
        return ret_ref;
 }
 
+static inline uint64_t ChannelInfo_clone_ptr(LDKChannelInfo *NONNULL_PTR arg) {
+       LDKChannelInfo ret_var = ChannelInfo_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_ChannelInfo_clone_ptr(uint32_t arg) {
+       LDKChannelInfo arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChannelInfo_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_ChannelInfo_clone(uint32_t orig) {
        LDKChannelInfo orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChannelInfo ret_var = ChannelInfo_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -26664,6 +31967,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ChannelInfo_write(uint32_
        LDKChannelInfo obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ChannelInfo_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -26684,6 +31988,7 @@ void  __attribute__((visibility("default"))) TS_RoutingFees_free(uint32_t this_o
        LDKRoutingFees this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        RoutingFees_free(this_obj_conv);
 }
 
@@ -26691,6 +31996,7 @@ int32_t  __attribute__((visibility("default"))) TS_RoutingFees_get_base_msat(uin
        LDKRoutingFees this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = RoutingFees_get_base_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -26699,6 +32005,7 @@ void  __attribute__((visibility("default"))) TS_RoutingFees_set_base_msat(uint32
        LDKRoutingFees this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        RoutingFees_set_base_msat(&this_ptr_conv, val);
 }
 
@@ -26706,6 +32013,7 @@ int32_t  __attribute__((visibility("default"))) TS_RoutingFees_get_proportional_
        LDKRoutingFees this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = RoutingFees_get_proportional_millionths(&this_ptr_conv);
        return ret_val;
 }
@@ -26714,6 +32022,7 @@ void  __attribute__((visibility("default"))) TS_RoutingFees_set_proportional_mil
        LDKRoutingFees this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        RoutingFees_set_proportional_millionths(&this_ptr_conv, val);
 }
 
@@ -26722,6 +32031,7 @@ uint32_t  __attribute__((visibility("default"))) TS_RoutingFees_new(int32_t base
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -26733,21 +32043,46 @@ jboolean  __attribute__((visibility("default"))) TS_RoutingFees_eq(uint32_t a, u
        LDKRoutingFees a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKRoutingFees b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = RoutingFees_eq(&a_conv, &b_conv);
        return ret_val;
 }
 
+static inline uint64_t RoutingFees_clone_ptr(LDKRoutingFees *NONNULL_PTR arg) {
+       LDKRoutingFees ret_var = RoutingFees_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_RoutingFees_clone_ptr(uint32_t arg) {
+       LDKRoutingFees arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = RoutingFees_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_RoutingFees_clone(uint32_t orig) {
        LDKRoutingFees orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKRoutingFees ret_var = RoutingFees_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -26759,6 +32094,7 @@ int64_t  __attribute__((visibility("default"))) TS_RoutingFees_hash(uint32_t o)
        LDKRoutingFees o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = RoutingFees_hash(&o_conv);
        return ret_val;
 }
@@ -26767,6 +32103,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_RoutingFees_write(uint32_
        LDKRoutingFees obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = RoutingFees_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -26787,6 +32124,7 @@ void  __attribute__((visibility("default"))) TS_NodeAnnouncementInfo_free(uint32
        LDKNodeAnnouncementInfo this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        NodeAnnouncementInfo_free(this_obj_conv);
 }
 
@@ -26794,10 +32132,12 @@ uint32_t  __attribute__((visibility("default"))) TS_NodeAnnouncementInfo_get_fea
        LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNodeFeatures ret_var = NodeAnnouncementInfo_get_features(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -26809,9 +32149,11 @@ void  __attribute__((visibility("default"))) TS_NodeAnnouncementInfo_set_feature
        LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNodeFeatures val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = NodeFeatures_clone(&val_conv);
        NodeAnnouncementInfo_set_features(&this_ptr_conv, val_conv);
 }
@@ -26820,6 +32162,7 @@ int32_t  __attribute__((visibility("default"))) TS_NodeAnnouncementInfo_get_last
        LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = NodeAnnouncementInfo_get_last_update(&this_ptr_conv);
        return ret_val;
 }
@@ -26828,6 +32171,7 @@ void  __attribute__((visibility("default"))) TS_NodeAnnouncementInfo_set_last_up
        LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        NodeAnnouncementInfo_set_last_update(&this_ptr_conv, val);
 }
 
@@ -26835,6 +32179,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_NodeAnnouncementInfo_get_
        LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(3, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *NodeAnnouncementInfo_get_rgb(&this_ptr_conv), 3);
        return ret_arr;
@@ -26844,6 +32189,7 @@ void  __attribute__((visibility("default"))) TS_NodeAnnouncementInfo_set_rgb(uin
        LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThreeBytes val_ref;
        CHECK(*((uint32_t*)val) == 3);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 3);
@@ -26854,6 +32200,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_NodeAnnouncementInfo_get_
        LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *NodeAnnouncementInfo_get_alias(&this_ptr_conv), 32);
        return ret_arr;
@@ -26863,6 +32210,7 @@ void  __attribute__((visibility("default"))) TS_NodeAnnouncementInfo_set_alias(u
        LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -26873,6 +32221,7 @@ void  __attribute__((visibility("default"))) TS_NodeAnnouncementInfo_set_address
        LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_NetAddressZ val_constr;
        val_constr.datalen = *((uint32_t*)val);
        if (val_constr.datalen > 0)
@@ -26895,11 +32244,13 @@ uint32_t  __attribute__((visibility("default"))) TS_NodeAnnouncementInfo_get_ann
        LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNodeAnnouncement ret_var = NodeAnnouncementInfo_get_announcement_message(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -26912,9 +32263,11 @@ void  __attribute__((visibility("default"))) TS_NodeAnnouncementInfo_set_announc
        LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNodeAnnouncement val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = NodeAnnouncement_clone(&val_conv);
        NodeAnnouncementInfo_set_announcement_message(&this_ptr_conv, val_conv);
 }
@@ -26923,6 +32276,7 @@ uint32_t  __attribute__((visibility("default"))) TS_NodeAnnouncementInfo_new(uin
        LDKNodeFeatures features_arg_conv;
        features_arg_conv.inner = (void*)(features_arg & (~1));
        features_arg_conv.is_owned = (features_arg & 1) || (features_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_arg_conv);
        features_arg_conv = NodeFeatures_clone(&features_arg_conv);
        LDKThreeBytes rgb_arg_ref;
        CHECK(*((uint32_t*)rgb_arg) == 3);
@@ -26947,11 +32301,13 @@ uint32_t  __attribute__((visibility("default"))) TS_NodeAnnouncementInfo_new(uin
        LDKNodeAnnouncement announcement_message_arg_conv;
        announcement_message_arg_conv.inner = (void*)(announcement_message_arg & (~1));
        announcement_message_arg_conv.is_owned = (announcement_message_arg & 1) || (announcement_message_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(announcement_message_arg_conv);
        announcement_message_arg_conv = NodeAnnouncement_clone(&announcement_message_arg_conv);
        LDKNodeAnnouncementInfo ret_var = NodeAnnouncementInfo_new(features_arg_conv, last_update_arg, rgb_arg_ref, alias_arg_ref, addresses_arg_constr, announcement_message_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -26959,14 +32315,37 @@ uint32_t  __attribute__((visibility("default"))) TS_NodeAnnouncementInfo_new(uin
        return ret_ref;
 }
 
+static inline uint64_t NodeAnnouncementInfo_clone_ptr(LDKNodeAnnouncementInfo *NONNULL_PTR arg) {
+       LDKNodeAnnouncementInfo ret_var = NodeAnnouncementInfo_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_NodeAnnouncementInfo_clone_ptr(uint32_t arg) {
+       LDKNodeAnnouncementInfo arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = NodeAnnouncementInfo_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_NodeAnnouncementInfo_clone(uint32_t orig) {
        LDKNodeAnnouncementInfo orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKNodeAnnouncementInfo ret_var = NodeAnnouncementInfo_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -26978,6 +32357,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_NodeAnnouncementInfo_writ
        LDKNodeAnnouncementInfo obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = NodeAnnouncementInfo_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -26998,6 +32378,7 @@ void  __attribute__((visibility("default"))) TS_NodeInfo_free(uint32_t this_obj)
        LDKNodeInfo this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        NodeInfo_free(this_obj_conv);
 }
 
@@ -27005,6 +32386,7 @@ void  __attribute__((visibility("default"))) TS_NodeInfo_set_channels(uint32_t t
        LDKNodeInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_u64Z val_constr;
        val_constr.datalen = *((uint32_t*)val);
        if (val_constr.datalen > 0)
@@ -27023,11 +32405,13 @@ uint32_t  __attribute__((visibility("default"))) TS_NodeInfo_get_lowest_inbound_
        LDKNodeInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKRoutingFees ret_var = NodeInfo_get_lowest_inbound_channel_fees(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -27040,9 +32424,11 @@ void  __attribute__((visibility("default"))) TS_NodeInfo_set_lowest_inbound_chan
        LDKNodeInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKRoutingFees val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = RoutingFees_clone(&val_conv);
        NodeInfo_set_lowest_inbound_channel_fees(&this_ptr_conv, val_conv);
 }
@@ -27051,11 +32437,13 @@ uint32_t  __attribute__((visibility("default"))) TS_NodeInfo_get_announcement_in
        LDKNodeInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNodeAnnouncementInfo ret_var = NodeInfo_get_announcement_info(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -27068,9 +32456,11 @@ void  __attribute__((visibility("default"))) TS_NodeInfo_set_announcement_info(u
        LDKNodeInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNodeAnnouncementInfo val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = NodeAnnouncementInfo_clone(&val_conv);
        NodeInfo_set_announcement_info(&this_ptr_conv, val_conv);
 }
@@ -27090,15 +32480,18 @@ uint32_t  __attribute__((visibility("default"))) TS_NodeInfo_new(int64_tArray ch
        LDKRoutingFees lowest_inbound_channel_fees_arg_conv;
        lowest_inbound_channel_fees_arg_conv.inner = (void*)(lowest_inbound_channel_fees_arg & (~1));
        lowest_inbound_channel_fees_arg_conv.is_owned = (lowest_inbound_channel_fees_arg & 1) || (lowest_inbound_channel_fees_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(lowest_inbound_channel_fees_arg_conv);
        lowest_inbound_channel_fees_arg_conv = RoutingFees_clone(&lowest_inbound_channel_fees_arg_conv);
        LDKNodeAnnouncementInfo announcement_info_arg_conv;
        announcement_info_arg_conv.inner = (void*)(announcement_info_arg & (~1));
        announcement_info_arg_conv.is_owned = (announcement_info_arg & 1) || (announcement_info_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(announcement_info_arg_conv);
        announcement_info_arg_conv = NodeAnnouncementInfo_clone(&announcement_info_arg_conv);
        LDKNodeInfo ret_var = NodeInfo_new(channels_arg_constr, lowest_inbound_channel_fees_arg_conv, announcement_info_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -27106,14 +32499,37 @@ uint32_t  __attribute__((visibility("default"))) TS_NodeInfo_new(int64_tArray ch
        return ret_ref;
 }
 
+static inline uint64_t NodeInfo_clone_ptr(LDKNodeInfo *NONNULL_PTR arg) {
+       LDKNodeInfo ret_var = NodeInfo_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_NodeInfo_clone_ptr(uint32_t arg) {
+       LDKNodeInfo arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = NodeInfo_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_NodeInfo_clone(uint32_t orig) {
        LDKNodeInfo orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKNodeInfo ret_var = NodeInfo_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -27125,6 +32541,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_NodeInfo_write(uint32_t o
        LDKNodeInfo obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = NodeInfo_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -27145,6 +32562,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_NetworkGraph_write(uint32
        LDKNetworkGraph obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = NetworkGraph_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -27169,6 +32587,7 @@ uint32_t  __attribute__((visibility("default"))) TS_NetworkGraph_new(int8_tArray
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -27180,10 +32599,12 @@ uint32_t  __attribute__((visibility("default"))) TS_NetworkGraph_read_only(uint3
        LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKReadOnlyNetworkGraph ret_var = NetworkGraph_read_only(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -27195,9 +32616,11 @@ uint32_t  __attribute__((visibility("default"))) TS_NetworkGraph_update_node_fro
        LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKNodeAnnouncement msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
        *ret_conv = NetworkGraph_update_node_from_announcement(&this_arg_conv, &msg_conv);
        return (uint64_t)ret_conv;
@@ -27207,9 +32630,11 @@ uint32_t  __attribute__((visibility("default"))) TS_NetworkGraph_update_node_fro
        LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKUnsignedNodeAnnouncement msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
        *ret_conv = NetworkGraph_update_node_from_unsigned_announcement(&this_arg_conv, &msg_conv);
        return (uint64_t)ret_conv;
@@ -27219,9 +32644,11 @@ uint32_t  __attribute__((visibility("default"))) TS_NetworkGraph_update_channel_
        LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKChannelAnnouncement msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        void* chain_access_ptr = (void*)(((uint64_t)chain_access) & ~1);
        CHECK_ACCESS(chain_access_ptr);
        LDKCOption_AccessZ chain_access_conv = *(LDKCOption_AccessZ*)(chain_access_ptr);
@@ -27238,9 +32665,11 @@ uint32_t  __attribute__((visibility("default"))) TS_NetworkGraph_update_channel_
        LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKUnsignedChannelAnnouncement msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        void* chain_access_ptr = (void*)(((uint64_t)chain_access) & ~1);
        CHECK_ACCESS(chain_access_ptr);
        LDKCOption_AccessZ chain_access_conv = *(LDKCOption_AccessZ*)(chain_access_ptr);
@@ -27257,6 +32686,7 @@ void  __attribute__((visibility("default"))) TS_NetworkGraph_close_channel_from_
        LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        NetworkGraph_close_channel_from_update(&this_arg_conv, short_channel_id, is_permanent);
 }
 
@@ -27264,6 +32694,7 @@ void  __attribute__((visibility("default"))) TS_NetworkGraph_fail_node(uint32_t
        LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKPublicKey _node_id_ref;
        CHECK(*((uint32_t*)_node_id) == 33);
        memcpy(_node_id_ref.compressed_form, (uint8_t*)(_node_id + 4), 33);
@@ -27274,9 +32705,11 @@ uint32_t  __attribute__((visibility("default"))) TS_NetworkGraph_update_channel(
        LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKChannelUpdate msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
        *ret_conv = NetworkGraph_update_channel(&this_arg_conv, &msg_conv);
        return (uint64_t)ret_conv;
@@ -27286,9 +32719,11 @@ uint32_t  __attribute__((visibility("default"))) TS_NetworkGraph_update_channel_
        LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKUnsignedChannelUpdate msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
        *ret_conv = NetworkGraph_update_channel_unsigned(&this_arg_conv, &msg_conv);
        return (uint64_t)ret_conv;
@@ -27298,6 +32733,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ReadOnlyNetworkGraph_get_add
        LDKReadOnlyNetworkGraph this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKPublicKey pubkey_ref;
        CHECK(*((uint32_t*)pubkey) == 33);
        memcpy(pubkey_ref.compressed_form, (uint8_t*)(pubkey + 4), 33);
@@ -27311,6 +32747,7 @@ void  __attribute__((visibility("default"))) TS_RouteHop_free(uint32_t this_obj)
        LDKRouteHop this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        RouteHop_free(this_obj_conv);
 }
 
@@ -27318,6 +32755,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_RouteHop_get_pubkey(uint3
        LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), RouteHop_get_pubkey(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -27327,6 +32765,7 @@ void  __attribute__((visibility("default"))) TS_RouteHop_set_pubkey(uint32_t thi
        LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -27337,10 +32776,12 @@ uint32_t  __attribute__((visibility("default"))) TS_RouteHop_get_node_features(u
        LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNodeFeatures ret_var = RouteHop_get_node_features(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -27352,9 +32793,11 @@ void  __attribute__((visibility("default"))) TS_RouteHop_set_node_features(uint3
        LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNodeFeatures val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = NodeFeatures_clone(&val_conv);
        RouteHop_set_node_features(&this_ptr_conv, val_conv);
 }
@@ -27363,6 +32806,7 @@ int64_t  __attribute__((visibility("default"))) TS_RouteHop_get_short_channel_id
        LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = RouteHop_get_short_channel_id(&this_ptr_conv);
        return ret_val;
 }
@@ -27371,6 +32815,7 @@ void  __attribute__((visibility("default"))) TS_RouteHop_set_short_channel_id(ui
        LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        RouteHop_set_short_channel_id(&this_ptr_conv, val);
 }
 
@@ -27378,10 +32823,12 @@ uint32_t  __attribute__((visibility("default"))) TS_RouteHop_get_channel_feature
        LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelFeatures ret_var = RouteHop_get_channel_features(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -27393,9 +32840,11 @@ void  __attribute__((visibility("default"))) TS_RouteHop_set_channel_features(ui
        LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelFeatures val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = ChannelFeatures_clone(&val_conv);
        RouteHop_set_channel_features(&this_ptr_conv, val_conv);
 }
@@ -27404,6 +32853,7 @@ int64_t  __attribute__((visibility("default"))) TS_RouteHop_get_fee_msat(uint32_
        LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = RouteHop_get_fee_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -27412,6 +32862,7 @@ void  __attribute__((visibility("default"))) TS_RouteHop_set_fee_msat(uint32_t t
        LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        RouteHop_set_fee_msat(&this_ptr_conv, val);
 }
 
@@ -27419,6 +32870,7 @@ int32_t  __attribute__((visibility("default"))) TS_RouteHop_get_cltv_expiry_delt
        LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = RouteHop_get_cltv_expiry_delta(&this_ptr_conv);
        return ret_val;
 }
@@ -27427,6 +32879,7 @@ void  __attribute__((visibility("default"))) TS_RouteHop_set_cltv_expiry_delta(u
        LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        RouteHop_set_cltv_expiry_delta(&this_ptr_conv, val);
 }
 
@@ -27437,15 +32890,18 @@ uint32_t  __attribute__((visibility("default"))) TS_RouteHop_new(int8_tArray pub
        LDKNodeFeatures node_features_arg_conv;
        node_features_arg_conv.inner = (void*)(node_features_arg & (~1));
        node_features_arg_conv.is_owned = (node_features_arg & 1) || (node_features_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_features_arg_conv);
        node_features_arg_conv = NodeFeatures_clone(&node_features_arg_conv);
        LDKChannelFeatures channel_features_arg_conv;
        channel_features_arg_conv.inner = (void*)(channel_features_arg & (~1));
        channel_features_arg_conv.is_owned = (channel_features_arg & 1) || (channel_features_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_features_arg_conv);
        channel_features_arg_conv = ChannelFeatures_clone(&channel_features_arg_conv);
        LDKRouteHop ret_var = RouteHop_new(pubkey_arg_ref, node_features_arg_conv, short_channel_id_arg, channel_features_arg_conv, fee_msat_arg, cltv_expiry_delta_arg);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -27453,14 +32909,37 @@ uint32_t  __attribute__((visibility("default"))) TS_RouteHop_new(int8_tArray pub
        return ret_ref;
 }
 
+static inline uint64_t RouteHop_clone_ptr(LDKRouteHop *NONNULL_PTR arg) {
+       LDKRouteHop ret_var = RouteHop_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_RouteHop_clone_ptr(uint32_t arg) {
+       LDKRouteHop arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = RouteHop_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_RouteHop_clone(uint32_t orig) {
        LDKRouteHop orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKRouteHop ret_var = RouteHop_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -27472,6 +32951,7 @@ int64_t  __attribute__((visibility("default"))) TS_RouteHop_hash(uint32_t o) {
        LDKRouteHop o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = RouteHop_hash(&o_conv);
        return ret_val;
 }
@@ -27480,9 +32960,11 @@ jboolean  __attribute__((visibility("default"))) TS_RouteHop_eq(uint32_t a, uint
        LDKRouteHop a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKRouteHop b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = RouteHop_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -27491,6 +32973,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_RouteHop_write(uint32_t o
        LDKRouteHop obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = RouteHop_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -27511,6 +32994,7 @@ void  __attribute__((visibility("default"))) TS_Route_free(uint32_t this_obj) {
        LDKRoute this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        Route_free(this_obj_conv);
 }
 
@@ -27518,6 +33002,7 @@ ptrArray  __attribute__((visibility("default"))) TS_Route_get_paths(uint32_t thi
        LDKRoute this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_CVec_RouteHopZZ ret_var = Route_get_paths(&this_ptr_conv);
        ptrArray ret_arr = NULL;
        ret_arr = init_arr(ret_var.datalen, sizeof(uint32_t), "Native ptrArray Bytes");
@@ -27532,6 +33017,7 @@ ptrArray  __attribute__((visibility("default"))) TS_Route_get_paths(uint32_t thi
                        uint64_t ret_conv_12_conv_10_ref = 0;
                        CHECK((((uint64_t)ret_conv_12_conv_10_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&ret_conv_12_conv_10_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_12_conv_10_var);
                        ret_conv_12_conv_10_ref = (uint64_t)ret_conv_12_conv_10_var.inner;
                        if (ret_conv_12_conv_10_var.is_owned) {
                                ret_conv_12_conv_10_ref |= 1;
@@ -27551,6 +33037,7 @@ void  __attribute__((visibility("default"))) TS_Route_set_paths(uint32_t this_pt
        LDKRoute this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_CVec_RouteHopZZ val_constr;
        val_constr.datalen = *((uint32_t*)val);
        if (val_constr.datalen > 0)
@@ -27572,6 +33059,7 @@ void  __attribute__((visibility("default"))) TS_Route_set_paths(uint32_t this_pt
                        LDKRouteHop val_conv_12_conv_10_conv;
                        val_conv_12_conv_10_conv.inner = (void*)(val_conv_12_conv_10 & (~1));
                        val_conv_12_conv_10_conv.is_owned = (val_conv_12_conv_10 & 1) || (val_conv_12_conv_10 == 0);
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_12_conv_10_conv);
                        val_conv_12_conv_10_conv = RouteHop_clone(&val_conv_12_conv_10_conv);
                        val_conv_12_constr.data[k] = val_conv_12_conv_10_conv;
                }
@@ -27584,11 +33072,13 @@ uint32_t  __attribute__((visibility("default"))) TS_Route_get_payee(uint32_t thi
        LDKRoute this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPayee ret_var = Route_get_payee(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -27601,9 +33091,11 @@ void  __attribute__((visibility("default"))) TS_Route_set_payee(uint32_t this_pt
        LDKRoute this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPayee val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = Payee_clone(&val_conv);
        Route_set_payee(&this_ptr_conv, val_conv);
 }
@@ -27630,6 +33122,7 @@ uint32_t  __attribute__((visibility("default"))) TS_Route_new(ptrArray paths_arg
                        LDKRouteHop paths_arg_conv_12_conv_10_conv;
                        paths_arg_conv_12_conv_10_conv.inner = (void*)(paths_arg_conv_12_conv_10 & (~1));
                        paths_arg_conv_12_conv_10_conv.is_owned = (paths_arg_conv_12_conv_10 & 1) || (paths_arg_conv_12_conv_10 == 0);
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(paths_arg_conv_12_conv_10_conv);
                        paths_arg_conv_12_conv_10_conv = RouteHop_clone(&paths_arg_conv_12_conv_10_conv);
                        paths_arg_conv_12_constr.data[k] = paths_arg_conv_12_conv_10_conv;
                }
@@ -27638,11 +33131,13 @@ uint32_t  __attribute__((visibility("default"))) TS_Route_new(ptrArray paths_arg
        LDKPayee payee_arg_conv;
        payee_arg_conv.inner = (void*)(payee_arg & (~1));
        payee_arg_conv.is_owned = (payee_arg & 1) || (payee_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(payee_arg_conv);
        payee_arg_conv = Payee_clone(&payee_arg_conv);
        LDKRoute ret_var = Route_new(paths_arg_constr, payee_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -27650,14 +33145,37 @@ uint32_t  __attribute__((visibility("default"))) TS_Route_new(ptrArray paths_arg
        return ret_ref;
 }
 
+static inline uint64_t Route_clone_ptr(LDKRoute *NONNULL_PTR arg) {
+       LDKRoute ret_var = Route_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_Route_clone_ptr(uint32_t arg) {
+       LDKRoute arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = Route_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_Route_clone(uint32_t orig) {
        LDKRoute orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKRoute ret_var = Route_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -27669,6 +33187,7 @@ int64_t  __attribute__((visibility("default"))) TS_Route_hash(uint32_t o) {
        LDKRoute o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = Route_hash(&o_conv);
        return ret_val;
 }
@@ -27677,9 +33196,11 @@ jboolean  __attribute__((visibility("default"))) TS_Route_eq(uint32_t a, uint32_
        LDKRoute a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKRoute b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = Route_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -27688,6 +33209,7 @@ int64_t  __attribute__((visibility("default"))) TS_Route_get_total_fees(uint32_t
        LDKRoute this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = Route_get_total_fees(&this_arg_conv);
        return ret_val;
 }
@@ -27696,6 +33218,7 @@ int64_t  __attribute__((visibility("default"))) TS_Route_get_total_amount(uint32
        LDKRoute this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = Route_get_total_amount(&this_arg_conv);
        return ret_val;
 }
@@ -27704,6 +33227,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_Route_write(uint32_t obj)
        LDKRoute obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = Route_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -27724,6 +33248,7 @@ void  __attribute__((visibility("default"))) TS_RouteParameters_free(uint32_t th
        LDKRouteParameters this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        RouteParameters_free(this_obj_conv);
 }
 
@@ -27731,10 +33256,12 @@ uint32_t  __attribute__((visibility("default"))) TS_RouteParameters_get_payee(ui
        LDKRouteParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPayee ret_var = RouteParameters_get_payee(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -27746,9 +33273,11 @@ void  __attribute__((visibility("default"))) TS_RouteParameters_set_payee(uint32
        LDKRouteParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPayee val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = Payee_clone(&val_conv);
        RouteParameters_set_payee(&this_ptr_conv, val_conv);
 }
@@ -27757,6 +33286,7 @@ int64_t  __attribute__((visibility("default"))) TS_RouteParameters_get_final_val
        LDKRouteParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = RouteParameters_get_final_value_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -27765,6 +33295,7 @@ void  __attribute__((visibility("default"))) TS_RouteParameters_set_final_value_
        LDKRouteParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        RouteParameters_set_final_value_msat(&this_ptr_conv, val);
 }
 
@@ -27772,6 +33303,7 @@ int32_t  __attribute__((visibility("default"))) TS_RouteParameters_get_final_clt
        LDKRouteParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = RouteParameters_get_final_cltv_expiry_delta(&this_ptr_conv);
        return ret_val;
 }
@@ -27780,6 +33312,7 @@ void  __attribute__((visibility("default"))) TS_RouteParameters_set_final_cltv_e
        LDKRouteParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        RouteParameters_set_final_cltv_expiry_delta(&this_ptr_conv, val);
 }
 
@@ -27787,11 +33320,13 @@ uint32_t  __attribute__((visibility("default"))) TS_RouteParameters_new(uint32_t
        LDKPayee payee_arg_conv;
        payee_arg_conv.inner = (void*)(payee_arg & (~1));
        payee_arg_conv.is_owned = (payee_arg & 1) || (payee_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(payee_arg_conv);
        payee_arg_conv = Payee_clone(&payee_arg_conv);
        LDKRouteParameters ret_var = RouteParameters_new(payee_arg_conv, final_value_msat_arg, final_cltv_expiry_delta_arg);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -27799,14 +33334,37 @@ uint32_t  __attribute__((visibility("default"))) TS_RouteParameters_new(uint32_t
        return ret_ref;
 }
 
+static inline uint64_t RouteParameters_clone_ptr(LDKRouteParameters *NONNULL_PTR arg) {
+       LDKRouteParameters ret_var = RouteParameters_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_RouteParameters_clone_ptr(uint32_t arg) {
+       LDKRouteParameters arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = RouteParameters_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_RouteParameters_clone(uint32_t orig) {
        LDKRouteParameters orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKRouteParameters ret_var = RouteParameters_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -27818,6 +33376,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_RouteParameters_write(uin
        LDKRouteParameters obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = RouteParameters_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -27838,6 +33397,7 @@ void  __attribute__((visibility("default"))) TS_Payee_free(uint32_t this_obj) {
        LDKPayee this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        Payee_free(this_obj_conv);
 }
 
@@ -27845,6 +33405,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_Payee_get_pubkey(uint32_t
        LDKPayee this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), Payee_get_pubkey(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -27854,6 +33415,7 @@ void  __attribute__((visibility("default"))) TS_Payee_set_pubkey(uint32_t this_p
        LDKPayee this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -27864,11 +33426,13 @@ uint32_t  __attribute__((visibility("default"))) TS_Payee_get_features(uint32_t
        LDKPayee this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKInvoiceFeatures ret_var = Payee_get_features(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -27881,9 +33445,11 @@ void  __attribute__((visibility("default"))) TS_Payee_set_features(uint32_t this
        LDKPayee this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKInvoiceFeatures val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = InvoiceFeatures_clone(&val_conv);
        Payee_set_features(&this_ptr_conv, val_conv);
 }
@@ -27892,6 +33458,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_Payee_get_route_hints(u
        LDKPayee this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_RouteHintZ ret_var = Payee_get_route_hints(&this_ptr_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_arr(ret_var.datalen, sizeof(uint32_t), "Native uint32_tArray Bytes");
@@ -27901,6 +33468,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_Payee_get_route_hints(u
                uint64_t ret_conv_11_ref = 0;
                CHECK((((uint64_t)ret_conv_11_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_conv_11_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_11_var);
                ret_conv_11_ref = (uint64_t)ret_conv_11_var.inner;
                if (ret_conv_11_var.is_owned) {
                        ret_conv_11_ref |= 1;
@@ -27916,6 +33484,7 @@ void  __attribute__((visibility("default"))) TS_Payee_set_route_hints(uint32_t t
        LDKPayee this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_RouteHintZ val_constr;
        val_constr.datalen = *((uint32_t*)val);
        if (val_constr.datalen > 0)
@@ -27928,6 +33497,7 @@ void  __attribute__((visibility("default"))) TS_Payee_set_route_hints(uint32_t t
                LDKRouteHint val_conv_11_conv;
                val_conv_11_conv.inner = (void*)(val_conv_11 & (~1));
                val_conv_11_conv.is_owned = (val_conv_11 & 1) || (val_conv_11 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_11_conv);
                val_conv_11_conv = RouteHint_clone(&val_conv_11_conv);
                val_constr.data[l] = val_conv_11_conv;
        }
@@ -27938,6 +33508,7 @@ uint32_t  __attribute__((visibility("default"))) TS_Payee_get_expiry_time(uint32
        LDKPayee this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
        *ret_copy = Payee_get_expiry_time(&this_ptr_conv);
        uint64_t ret_ref = (uint64_t)ret_copy;
@@ -27948,6 +33519,7 @@ void  __attribute__((visibility("default"))) TS_Payee_set_expiry_time(uint32_t t
        LDKPayee this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
@@ -27962,6 +33534,7 @@ uint32_t  __attribute__((visibility("default"))) TS_Payee_new(int8_tArray pubkey
        LDKInvoiceFeatures features_arg_conv;
        features_arg_conv.inner = (void*)(features_arg & (~1));
        features_arg_conv.is_owned = (features_arg & 1) || (features_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_arg_conv);
        features_arg_conv = InvoiceFeatures_clone(&features_arg_conv);
        LDKCVec_RouteHintZ route_hints_arg_constr;
        route_hints_arg_constr.datalen = *((uint32_t*)route_hints_arg);
@@ -27975,6 +33548,7 @@ uint32_t  __attribute__((visibility("default"))) TS_Payee_new(int8_tArray pubkey
                LDKRouteHint route_hints_arg_conv_11_conv;
                route_hints_arg_conv_11_conv.inner = (void*)(route_hints_arg_conv_11 & (~1));
                route_hints_arg_conv_11_conv.is_owned = (route_hints_arg_conv_11 & 1) || (route_hints_arg_conv_11 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(route_hints_arg_conv_11_conv);
                route_hints_arg_conv_11_conv = RouteHint_clone(&route_hints_arg_conv_11_conv);
                route_hints_arg_constr.data[l] = route_hints_arg_conv_11_conv;
        }
@@ -27986,6 +33560,7 @@ uint32_t  __attribute__((visibility("default"))) TS_Payee_new(int8_tArray pubkey
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -27993,14 +33568,37 @@ uint32_t  __attribute__((visibility("default"))) TS_Payee_new(int8_tArray pubkey
        return ret_ref;
 }
 
+static inline uint64_t Payee_clone_ptr(LDKPayee *NONNULL_PTR arg) {
+       LDKPayee ret_var = Payee_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_Payee_clone_ptr(uint32_t arg) {
+       LDKPayee arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = Payee_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_Payee_clone(uint32_t orig) {
        LDKPayee orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKPayee ret_var = Payee_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28012,6 +33610,7 @@ int64_t  __attribute__((visibility("default"))) TS_Payee_hash(uint32_t o) {
        LDKPayee o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = Payee_hash(&o_conv);
        return ret_val;
 }
@@ -28020,9 +33619,11 @@ jboolean  __attribute__((visibility("default"))) TS_Payee_eq(uint32_t a, uint32_
        LDKPayee a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKPayee b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = Payee_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -28031,6 +33632,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_Payee_write(uint32_t obj)
        LDKPayee obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = Payee_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -28055,6 +33657,7 @@ uint32_t  __attribute__((visibility("default"))) TS_Payee_from_node_id(int8_tArr
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28070,6 +33673,7 @@ uint32_t  __attribute__((visibility("default"))) TS_Payee_for_keysend(int8_tArra
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28081,6 +33685,7 @@ void  __attribute__((visibility("default"))) TS_RouteHint_free(uint32_t this_obj
        LDKRouteHint this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        RouteHint_free(this_obj_conv);
 }
 
@@ -28088,6 +33693,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_RouteHint_get_a(uint32_
        LDKRouteHint this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_RouteHintHopZ ret_var = RouteHint_get_a(&this_ptr_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_arr(ret_var.datalen, sizeof(uint32_t), "Native uint32_tArray Bytes");
@@ -28097,6 +33703,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_RouteHint_get_a(uint32_
                uint64_t ret_conv_14_ref = 0;
                CHECK((((uint64_t)ret_conv_14_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_conv_14_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_14_var);
                ret_conv_14_ref = (uint64_t)ret_conv_14_var.inner;
                if (ret_conv_14_var.is_owned) {
                        ret_conv_14_ref |= 1;
@@ -28112,6 +33719,7 @@ void  __attribute__((visibility("default"))) TS_RouteHint_set_a(uint32_t this_pt
        LDKRouteHint this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_RouteHintHopZ val_constr;
        val_constr.datalen = *((uint32_t*)val);
        if (val_constr.datalen > 0)
@@ -28124,6 +33732,7 @@ void  __attribute__((visibility("default"))) TS_RouteHint_set_a(uint32_t this_pt
                LDKRouteHintHop val_conv_14_conv;
                val_conv_14_conv.inner = (void*)(val_conv_14 & (~1));
                val_conv_14_conv.is_owned = (val_conv_14 & 1) || (val_conv_14 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_14_conv);
                val_conv_14_conv = RouteHintHop_clone(&val_conv_14_conv);
                val_constr.data[o] = val_conv_14_conv;
        }
@@ -28143,6 +33752,7 @@ uint32_t  __attribute__((visibility("default"))) TS_RouteHint_new(uint32_tArray
                LDKRouteHintHop a_arg_conv_14_conv;
                a_arg_conv_14_conv.inner = (void*)(a_arg_conv_14 & (~1));
                a_arg_conv_14_conv.is_owned = (a_arg_conv_14 & 1) || (a_arg_conv_14 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(a_arg_conv_14_conv);
                a_arg_conv_14_conv = RouteHintHop_clone(&a_arg_conv_14_conv);
                a_arg_constr.data[o] = a_arg_conv_14_conv;
        }
@@ -28150,6 +33760,7 @@ uint32_t  __attribute__((visibility("default"))) TS_RouteHint_new(uint32_tArray
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28157,14 +33768,37 @@ uint32_t  __attribute__((visibility("default"))) TS_RouteHint_new(uint32_tArray
        return ret_ref;
 }
 
+static inline uint64_t RouteHint_clone_ptr(LDKRouteHint *NONNULL_PTR arg) {
+       LDKRouteHint ret_var = RouteHint_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_RouteHint_clone_ptr(uint32_t arg) {
+       LDKRouteHint arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = RouteHint_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_RouteHint_clone(uint32_t orig) {
        LDKRouteHint orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKRouteHint ret_var = RouteHint_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28176,6 +33810,7 @@ int64_t  __attribute__((visibility("default"))) TS_RouteHint_hash(uint32_t o) {
        LDKRouteHint o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = RouteHint_hash(&o_conv);
        return ret_val;
 }
@@ -28184,9 +33819,11 @@ jboolean  __attribute__((visibility("default"))) TS_RouteHint_eq(uint32_t a, uin
        LDKRouteHint a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKRouteHint b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = RouteHint_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -28195,6 +33832,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_RouteHint_write(uint32_t
        LDKRouteHint obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = RouteHint_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -28215,6 +33853,7 @@ void  __attribute__((visibility("default"))) TS_RouteHintHop_free(uint32_t this_
        LDKRouteHintHop this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        RouteHintHop_free(this_obj_conv);
 }
 
@@ -28222,6 +33861,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_RouteHintHop_get_src_node
        LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), RouteHintHop_get_src_node_id(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -28231,6 +33871,7 @@ void  __attribute__((visibility("default"))) TS_RouteHintHop_set_src_node_id(uin
        LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -28241,6 +33882,7 @@ int64_t  __attribute__((visibility("default"))) TS_RouteHintHop_get_short_channe
        LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = RouteHintHop_get_short_channel_id(&this_ptr_conv);
        return ret_val;
 }
@@ -28249,6 +33891,7 @@ void  __attribute__((visibility("default"))) TS_RouteHintHop_set_short_channel_i
        LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        RouteHintHop_set_short_channel_id(&this_ptr_conv, val);
 }
 
@@ -28256,10 +33899,12 @@ uint32_t  __attribute__((visibility("default"))) TS_RouteHintHop_get_fees(uint32
        LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKRoutingFees ret_var = RouteHintHop_get_fees(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28271,9 +33916,11 @@ void  __attribute__((visibility("default"))) TS_RouteHintHop_set_fees(uint32_t t
        LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKRoutingFees val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = RoutingFees_clone(&val_conv);
        RouteHintHop_set_fees(&this_ptr_conv, val_conv);
 }
@@ -28282,6 +33929,7 @@ int16_t  __attribute__((visibility("default"))) TS_RouteHintHop_get_cltv_expiry_
        LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = RouteHintHop_get_cltv_expiry_delta(&this_ptr_conv);
        return ret_val;
 }
@@ -28290,6 +33938,7 @@ void  __attribute__((visibility("default"))) TS_RouteHintHop_set_cltv_expiry_del
        LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        RouteHintHop_set_cltv_expiry_delta(&this_ptr_conv, val);
 }
 
@@ -28297,6 +33946,7 @@ uint32_t  __attribute__((visibility("default"))) TS_RouteHintHop_get_htlc_minimu
        LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
        *ret_copy = RouteHintHop_get_htlc_minimum_msat(&this_ptr_conv);
        uint64_t ret_ref = (uint64_t)ret_copy;
@@ -28307,6 +33957,7 @@ void  __attribute__((visibility("default"))) TS_RouteHintHop_set_htlc_minimum_ms
        LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
@@ -28318,6 +33969,7 @@ uint32_t  __attribute__((visibility("default"))) TS_RouteHintHop_get_htlc_maximu
        LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
        *ret_copy = RouteHintHop_get_htlc_maximum_msat(&this_ptr_conv);
        uint64_t ret_ref = (uint64_t)ret_copy;
@@ -28328,6 +33980,7 @@ void  __attribute__((visibility("default"))) TS_RouteHintHop_set_htlc_maximum_ms
        LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
@@ -28342,6 +33995,7 @@ uint32_t  __attribute__((visibility("default"))) TS_RouteHintHop_new(int8_tArray
        LDKRoutingFees fees_arg_conv;
        fees_arg_conv.inner = (void*)(fees_arg & (~1));
        fees_arg_conv.is_owned = (fees_arg & 1) || (fees_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(fees_arg_conv);
        fees_arg_conv = RoutingFees_clone(&fees_arg_conv);
        void* htlc_minimum_msat_arg_ptr = (void*)(((uint64_t)htlc_minimum_msat_arg) & ~1);
        CHECK_ACCESS(htlc_minimum_msat_arg_ptr);
@@ -28355,6 +34009,7 @@ uint32_t  __attribute__((visibility("default"))) TS_RouteHintHop_new(int8_tArray
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28362,14 +34017,37 @@ uint32_t  __attribute__((visibility("default"))) TS_RouteHintHop_new(int8_tArray
        return ret_ref;
 }
 
+static inline uint64_t RouteHintHop_clone_ptr(LDKRouteHintHop *NONNULL_PTR arg) {
+       LDKRouteHintHop ret_var = RouteHintHop_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_RouteHintHop_clone_ptr(uint32_t arg) {
+       LDKRouteHintHop arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = RouteHintHop_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_RouteHintHop_clone(uint32_t orig) {
        LDKRouteHintHop orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKRouteHintHop ret_var = RouteHintHop_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28381,6 +34059,7 @@ int64_t  __attribute__((visibility("default"))) TS_RouteHintHop_hash(uint32_t o)
        LDKRouteHintHop o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = RouteHintHop_hash(&o_conv);
        return ret_val;
 }
@@ -28389,9 +34068,11 @@ jboolean  __attribute__((visibility("default"))) TS_RouteHintHop_eq(uint32_t a,
        LDKRouteHintHop a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKRouteHintHop b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = RouteHintHop_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -28400,6 +34081,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_RouteHintHop_write(uint32
        LDKRouteHintHop obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = RouteHintHop_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -28423,9 +34105,11 @@ uint32_t  __attribute__((visibility("default"))) TS_find_route(int8_tArray our_n
        LDKRouteParameters params_conv;
        params_conv.inner = (void*)(params & (~1));
        params_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(params_conv);
        LDKNetworkGraph network_conv;
        network_conv.inner = (void*)(network & (~1));
        network_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_conv);
        LDKCVec_ChannelDetailsZ first_hops_constr;
        LDKCVec_ChannelDetailsZ *first_hops_ptr = NULL;
        if (first_hops != 0) {
@@ -28440,6 +34124,7 @@ uint32_t  __attribute__((visibility("default"))) TS_find_route(int8_tArray our_n
                        LDKChannelDetails first_hops_conv_16_conv;
                        first_hops_conv_16_conv.inner = (void*)(first_hops_conv_16 & (~1));
                        first_hops_conv_16_conv.is_owned = (first_hops_conv_16 & 1) || (first_hops_conv_16 == 0);
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(first_hops_conv_16_conv);
                        first_hops_constr.data[q] = first_hops_conv_16_conv;
                }
                first_hops_ptr = &first_hops_constr;
@@ -28460,6 +34145,7 @@ void  __attribute__((visibility("default"))) TS_Scorer_free(uint32_t this_obj) {
        LDKScorer this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        Scorer_free(this_obj_conv);
 }
 
@@ -28467,6 +34153,7 @@ void  __attribute__((visibility("default"))) TS_ScoringParameters_free(uint32_t
        LDKScoringParameters this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ScoringParameters_free(this_obj_conv);
 }
 
@@ -28474,6 +34161,7 @@ int64_t  __attribute__((visibility("default"))) TS_ScoringParameters_get_base_pe
        LDKScoringParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ScoringParameters_get_base_penalty_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -28482,6 +34170,7 @@ void  __attribute__((visibility("default"))) TS_ScoringParameters_set_base_penal
        LDKScoringParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ScoringParameters_set_base_penalty_msat(&this_ptr_conv, val);
 }
 
@@ -28489,6 +34178,7 @@ int64_t  __attribute__((visibility("default"))) TS_ScoringParameters_get_failure
        LDKScoringParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ScoringParameters_get_failure_penalty_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -28497,6 +34187,7 @@ void  __attribute__((visibility("default"))) TS_ScoringParameters_set_failure_pe
        LDKScoringParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ScoringParameters_set_failure_penalty_msat(&this_ptr_conv, val);
 }
 
@@ -28504,6 +34195,7 @@ int64_t  __attribute__((visibility("default"))) TS_ScoringParameters_get_failure
        LDKScoringParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ScoringParameters_get_failure_penalty_half_life(&this_ptr_conv);
        return ret_val;
 }
@@ -28512,6 +34204,7 @@ void  __attribute__((visibility("default"))) TS_ScoringParameters_set_failure_pe
        LDKScoringParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ScoringParameters_set_failure_penalty_half_life(&this_ptr_conv, val);
 }
 
@@ -28520,6 +34213,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ScoringParameters_new(int64_
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28531,6 +34225,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ScoringParameters_write(u
        LDKScoringParameters obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ScoringParameters_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -28551,11 +34246,13 @@ uint32_t  __attribute__((visibility("default"))) TS_Scorer_new(uint32_t params)
        LDKScoringParameters params_conv;
        params_conv.inner = (void*)(params & (~1));
        params_conv.is_owned = (params & 1) || (params == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(params_conv);
        // Warning: we need a move here but no clone is available for LDKScoringParameters
        LDKScorer ret_var = Scorer_new(params_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28568,6 +34265,7 @@ uint32_t  __attribute__((visibility("default"))) TS_Scorer_default() {
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28580,6 +34278,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ScoringParameters_default()
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28591,6 +34290,7 @@ uint32_t  __attribute__((visibility("default"))) TS_Scorer_as_Score(uint32_t thi
        LDKScorer this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKScore* ret_ret = MALLOC(sizeof(LDKScore), "LDKScore");
        *ret_ret = Scorer_as_Score(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -28600,6 +34300,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_Scorer_write(uint32_t obj
        LDKScorer obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = Scorer_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -28620,6 +34321,7 @@ void  __attribute__((visibility("default"))) TS_FilesystemPersister_free(uint32_
        LDKFilesystemPersister this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        FilesystemPersister_free(this_obj_conv);
 }
 
@@ -28629,6 +34331,7 @@ uint32_t  __attribute__((visibility("default"))) TS_FilesystemPersister_new(jstr
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28640,6 +34343,7 @@ jstring  __attribute__((visibility("default"))) TS_FilesystemPersister_get_data_
        LDKFilesystemPersister this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKStr ret_str = FilesystemPersister_get_data_dir(&this_arg_conv);
        jstring ret_conv = str_ref_to_ts(ret_str.chars, ret_str.len);
        Str_free(ret_str);
@@ -28651,6 +34355,7 @@ uint32_t  __attribute__((visibility("default"))) TS_FilesystemPersister_persist_
        LDKChannelManager manager_conv;
        manager_conv.inner = (void*)(manager & (~1));
        manager_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(manager_conv);
        LDKCResult_NoneErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneErrorZ), "LDKCResult_NoneErrorZ");
        *ret_conv = FilesystemPersister_persist_manager(data_dir_conv, &manager_conv);
        return (uint64_t)ret_conv;
@@ -28660,6 +34365,7 @@ uint32_t  __attribute__((visibility("default"))) TS_FilesystemPersister_read_cha
        LDKFilesystemPersister this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        void* keys_manager_ptr = (void*)(((uint64_t)keys_manager) & ~1);
        CHECK_ACCESS(keys_manager_ptr);
        LDKKeysInterface keys_manager_conv = *(LDKKeysInterface*)(keys_manager_ptr);
@@ -28672,6 +34378,7 @@ uint32_t  __attribute__((visibility("default"))) TS_FilesystemPersister_as_Persi
        LDKFilesystemPersister this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKPersist* ret_ret = MALLOC(sizeof(LDKPersist), "LDKPersist");
        *ret_ret = FilesystemPersister_as_Persist(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -28681,6 +34388,7 @@ void  __attribute__((visibility("default"))) TS_BackgroundProcessor_free(uint32_
        LDKBackgroundProcessor this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        BackgroundProcessor_free(this_obj_conv);
 }
 
@@ -28703,15 +34411,19 @@ uint32_t  __attribute__((visibility("default"))) TS_BackgroundProcessor_start(ui
        LDKChainMonitor chain_monitor_conv;
        chain_monitor_conv.inner = (void*)(chain_monitor & (~1));
        chain_monitor_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(chain_monitor_conv);
        LDKChannelManager channel_manager_conv;
        channel_manager_conv.inner = (void*)(channel_manager & (~1));
        channel_manager_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_manager_conv);
        LDKNetGraphMsgHandler net_graph_msg_handler_conv;
        net_graph_msg_handler_conv.inner = (void*)(net_graph_msg_handler & (~1));
        net_graph_msg_handler_conv.is_owned = (net_graph_msg_handler & 1) || (net_graph_msg_handler == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(net_graph_msg_handler_conv);
        LDKPeerManager peer_manager_conv;
        peer_manager_conv.inner = (void*)(peer_manager & (~1));
        peer_manager_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(peer_manager_conv);
        void* logger_ptr = (void*)(((uint64_t)logger) & ~1);
        CHECK_ACCESS(logger_ptr);
        LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
@@ -28719,6 +34431,7 @@ uint32_t  __attribute__((visibility("default"))) TS_BackgroundProcessor_start(ui
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28730,6 +34443,7 @@ uint32_t  __attribute__((visibility("default"))) TS_BackgroundProcessor_join(uin
        LDKBackgroundProcessor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = (this_arg & 1) || (this_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        // Warning: we need a move here but no clone is available for LDKBackgroundProcessor
        LDKCResult_NoneErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneErrorZ), "LDKCResult_NoneErrorZ");
        *ret_conv = BackgroundProcessor_join(this_arg_conv);
@@ -28740,6 +34454,7 @@ uint32_t  __attribute__((visibility("default"))) TS_BackgroundProcessor_stop(uin
        LDKBackgroundProcessor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = (this_arg & 1) || (this_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        // Warning: we need a move here but no clone is available for LDKBackgroundProcessor
        LDKCResult_NoneErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneErrorZ), "LDKCResult_NoneErrorZ");
        *ret_conv = BackgroundProcessor_stop(this_arg_conv);
@@ -28754,6 +34469,7 @@ void  __attribute__((visibility("default"))) TS_Invoice_free(uint32_t this_obj)
        LDKInvoice this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        Invoice_free(this_obj_conv);
 }
 
@@ -28761,21 +34477,46 @@ jboolean  __attribute__((visibility("default"))) TS_Invoice_eq(uint32_t a, uint3
        LDKInvoice a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKInvoice b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = Invoice_eq(&a_conv, &b_conv);
        return ret_val;
 }
 
+static inline uint64_t Invoice_clone_ptr(LDKInvoice *NONNULL_PTR arg) {
+       LDKInvoice ret_var = Invoice_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_Invoice_clone_ptr(uint32_t arg) {
+       LDKInvoice arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = Invoice_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_Invoice_clone(uint32_t orig) {
        LDKInvoice orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKInvoice ret_var = Invoice_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28787,6 +34528,7 @@ void  __attribute__((visibility("default"))) TS_SignedRawInvoice_free(uint32_t t
        LDKSignedRawInvoice this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        SignedRawInvoice_free(this_obj_conv);
 }
 
@@ -28794,21 +34536,46 @@ jboolean  __attribute__((visibility("default"))) TS_SignedRawInvoice_eq(uint32_t
        LDKSignedRawInvoice a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKSignedRawInvoice b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = SignedRawInvoice_eq(&a_conv, &b_conv);
        return ret_val;
 }
 
+static inline uint64_t SignedRawInvoice_clone_ptr(LDKSignedRawInvoice *NONNULL_PTR arg) {
+       LDKSignedRawInvoice ret_var = SignedRawInvoice_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_SignedRawInvoice_clone_ptr(uint32_t arg) {
+       LDKSignedRawInvoice arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = SignedRawInvoice_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_SignedRawInvoice_clone(uint32_t orig) {
        LDKSignedRawInvoice orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKSignedRawInvoice ret_var = SignedRawInvoice_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28820,6 +34587,7 @@ void  __attribute__((visibility("default"))) TS_RawInvoice_free(uint32_t this_ob
        LDKRawInvoice this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        RawInvoice_free(this_obj_conv);
 }
 
@@ -28827,10 +34595,12 @@ uint32_t  __attribute__((visibility("default"))) TS_RawInvoice_get_data(uint32_t
        LDKRawInvoice this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKRawDataPart ret_var = RawInvoice_get_data(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28842,9 +34612,11 @@ void  __attribute__((visibility("default"))) TS_RawInvoice_set_data(uint32_t thi
        LDKRawInvoice this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKRawDataPart val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = RawDataPart_clone(&val_conv);
        RawInvoice_set_data(&this_ptr_conv, val_conv);
 }
@@ -28853,21 +34625,46 @@ jboolean  __attribute__((visibility("default"))) TS_RawInvoice_eq(uint32_t a, ui
        LDKRawInvoice a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKRawInvoice b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = RawInvoice_eq(&a_conv, &b_conv);
        return ret_val;
 }
 
+static inline uint64_t RawInvoice_clone_ptr(LDKRawInvoice *NONNULL_PTR arg) {
+       LDKRawInvoice ret_var = RawInvoice_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_RawInvoice_clone_ptr(uint32_t arg) {
+       LDKRawInvoice arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = RawInvoice_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_RawInvoice_clone(uint32_t orig) {
        LDKRawInvoice orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKRawInvoice ret_var = RawInvoice_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28879,6 +34676,7 @@ void  __attribute__((visibility("default"))) TS_RawDataPart_free(uint32_t this_o
        LDKRawDataPart this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        RawDataPart_free(this_obj_conv);
 }
 
@@ -28886,10 +34684,12 @@ uint32_t  __attribute__((visibility("default"))) TS_RawDataPart_get_timestamp(ui
        LDKRawDataPart this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPositiveTimestamp ret_var = RawDataPart_get_timestamp(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28901,9 +34701,11 @@ void  __attribute__((visibility("default"))) TS_RawDataPart_set_timestamp(uint32
        LDKRawDataPart this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPositiveTimestamp val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = PositiveTimestamp_clone(&val_conv);
        RawDataPart_set_timestamp(&this_ptr_conv, val_conv);
 }
@@ -28912,21 +34714,46 @@ jboolean  __attribute__((visibility("default"))) TS_RawDataPart_eq(uint32_t a, u
        LDKRawDataPart a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKRawDataPart b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = RawDataPart_eq(&a_conv, &b_conv);
        return ret_val;
 }
 
+static inline uint64_t RawDataPart_clone_ptr(LDKRawDataPart *NONNULL_PTR arg) {
+       LDKRawDataPart ret_var = RawDataPart_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_RawDataPart_clone_ptr(uint32_t arg) {
+       LDKRawDataPart arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = RawDataPart_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_RawDataPart_clone(uint32_t orig) {
        LDKRawDataPart orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKRawDataPart ret_var = RawDataPart_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28938,6 +34765,7 @@ void  __attribute__((visibility("default"))) TS_PositiveTimestamp_free(uint32_t
        LDKPositiveTimestamp this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        PositiveTimestamp_free(this_obj_conv);
 }
 
@@ -28945,21 +34773,46 @@ jboolean  __attribute__((visibility("default"))) TS_PositiveTimestamp_eq(uint32_
        LDKPositiveTimestamp a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKPositiveTimestamp b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = PositiveTimestamp_eq(&a_conv, &b_conv);
        return ret_val;
 }
 
+static inline uint64_t PositiveTimestamp_clone_ptr(LDKPositiveTimestamp *NONNULL_PTR arg) {
+       LDKPositiveTimestamp ret_var = PositiveTimestamp_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_PositiveTimestamp_clone_ptr(uint32_t arg) {
+       LDKPositiveTimestamp arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = PositiveTimestamp_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_PositiveTimestamp_clone(uint32_t orig) {
        LDKPositiveTimestamp orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKPositiveTimestamp ret_var = PositiveTimestamp_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29054,17 +34907,41 @@ void  __attribute__((visibility("default"))) TS_Sha256_free(uint32_t this_obj) {
        LDKSha256 this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        Sha256_free(this_obj_conv);
 }
 
+static inline uint64_t Sha256_clone_ptr(LDKSha256 *NONNULL_PTR arg) {
+       LDKSha256 ret_var = Sha256_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_Sha256_clone_ptr(uint32_t arg) {
+       LDKSha256 arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = Sha256_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_Sha256_clone(uint32_t orig) {
        LDKSha256 orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKSha256 ret_var = Sha256_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29076,6 +34953,7 @@ int64_t  __attribute__((visibility("default"))) TS_Sha256_hash(uint32_t o) {
        LDKSha256 o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = Sha256_hash(&o_conv);
        return ret_val;
 }
@@ -29084,9 +34962,11 @@ jboolean  __attribute__((visibility("default"))) TS_Sha256_eq(uint32_t a, uint32
        LDKSha256 a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKSha256 b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = Sha256_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -29095,17 +34975,41 @@ void  __attribute__((visibility("default"))) TS_Description_free(uint32_t this_o
        LDKDescription this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        Description_free(this_obj_conv);
 }
 
+static inline uint64_t Description_clone_ptr(LDKDescription *NONNULL_PTR arg) {
+       LDKDescription ret_var = Description_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_Description_clone_ptr(uint32_t arg) {
+       LDKDescription arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = Description_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_Description_clone(uint32_t orig) {
        LDKDescription orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKDescription ret_var = Description_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29117,6 +35021,7 @@ int64_t  __attribute__((visibility("default"))) TS_Description_hash(uint32_t o)
        LDKDescription o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = Description_hash(&o_conv);
        return ret_val;
 }
@@ -29125,9 +35030,11 @@ jboolean  __attribute__((visibility("default"))) TS_Description_eq(uint32_t a, u
        LDKDescription a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKDescription b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = Description_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -29136,6 +35043,7 @@ void  __attribute__((visibility("default"))) TS_PayeePubKey_free(uint32_t this_o
        LDKPayeePubKey this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        PayeePubKey_free(this_obj_conv);
 }
 
@@ -29143,6 +35051,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_PayeePubKey_get_a(uint32_
        LDKPayeePubKey this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), PayeePubKey_get_a(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -29152,6 +35061,7 @@ void  __attribute__((visibility("default"))) TS_PayeePubKey_set_a(uint32_t this_
        LDKPayeePubKey this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -29166,6 +35076,7 @@ uint32_t  __attribute__((visibility("default"))) TS_PayeePubKey_new(int8_tArray
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29173,14 +35084,37 @@ uint32_t  __attribute__((visibility("default"))) TS_PayeePubKey_new(int8_tArray
        return ret_ref;
 }
 
+static inline uint64_t PayeePubKey_clone_ptr(LDKPayeePubKey *NONNULL_PTR arg) {
+       LDKPayeePubKey ret_var = PayeePubKey_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_PayeePubKey_clone_ptr(uint32_t arg) {
+       LDKPayeePubKey arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = PayeePubKey_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_PayeePubKey_clone(uint32_t orig) {
        LDKPayeePubKey orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKPayeePubKey ret_var = PayeePubKey_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29192,6 +35126,7 @@ int64_t  __attribute__((visibility("default"))) TS_PayeePubKey_hash(uint32_t o)
        LDKPayeePubKey o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = PayeePubKey_hash(&o_conv);
        return ret_val;
 }
@@ -29200,9 +35135,11 @@ jboolean  __attribute__((visibility("default"))) TS_PayeePubKey_eq(uint32_t a, u
        LDKPayeePubKey a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKPayeePubKey b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = PayeePubKey_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -29211,17 +35148,41 @@ void  __attribute__((visibility("default"))) TS_ExpiryTime_free(uint32_t this_ob
        LDKExpiryTime this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ExpiryTime_free(this_obj_conv);
 }
 
+static inline uint64_t ExpiryTime_clone_ptr(LDKExpiryTime *NONNULL_PTR arg) {
+       LDKExpiryTime ret_var = ExpiryTime_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_ExpiryTime_clone_ptr(uint32_t arg) {
+       LDKExpiryTime arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ExpiryTime_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_ExpiryTime_clone(uint32_t orig) {
        LDKExpiryTime orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKExpiryTime ret_var = ExpiryTime_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29233,6 +35194,7 @@ int64_t  __attribute__((visibility("default"))) TS_ExpiryTime_hash(uint32_t o) {
        LDKExpiryTime o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = ExpiryTime_hash(&o_conv);
        return ret_val;
 }
@@ -29241,9 +35203,11 @@ jboolean  __attribute__((visibility("default"))) TS_ExpiryTime_eq(uint32_t a, ui
        LDKExpiryTime a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKExpiryTime b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = ExpiryTime_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -29252,6 +35216,7 @@ void  __attribute__((visibility("default"))) TS_MinFinalCltvExpiry_free(uint32_t
        LDKMinFinalCltvExpiry this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        MinFinalCltvExpiry_free(this_obj_conv);
 }
 
@@ -29259,6 +35224,7 @@ int64_t  __attribute__((visibility("default"))) TS_MinFinalCltvExpiry_get_a(uint
        LDKMinFinalCltvExpiry this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = MinFinalCltvExpiry_get_a(&this_ptr_conv);
        return ret_val;
 }
@@ -29267,6 +35233,7 @@ void  __attribute__((visibility("default"))) TS_MinFinalCltvExpiry_set_a(uint32_
        LDKMinFinalCltvExpiry this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        MinFinalCltvExpiry_set_a(&this_ptr_conv, val);
 }
 
@@ -29275,6 +35242,7 @@ uint32_t  __attribute__((visibility("default"))) TS_MinFinalCltvExpiry_new(int64
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29282,14 +35250,37 @@ uint32_t  __attribute__((visibility("default"))) TS_MinFinalCltvExpiry_new(int64
        return ret_ref;
 }
 
+static inline uint64_t MinFinalCltvExpiry_clone_ptr(LDKMinFinalCltvExpiry *NONNULL_PTR arg) {
+       LDKMinFinalCltvExpiry ret_var = MinFinalCltvExpiry_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_MinFinalCltvExpiry_clone_ptr(uint32_t arg) {
+       LDKMinFinalCltvExpiry arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = MinFinalCltvExpiry_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_MinFinalCltvExpiry_clone(uint32_t orig) {
        LDKMinFinalCltvExpiry orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKMinFinalCltvExpiry ret_var = MinFinalCltvExpiry_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29301,6 +35292,7 @@ int64_t  __attribute__((visibility("default"))) TS_MinFinalCltvExpiry_hash(uint3
        LDKMinFinalCltvExpiry o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = MinFinalCltvExpiry_hash(&o_conv);
        return ret_val;
 }
@@ -29309,9 +35301,11 @@ jboolean  __attribute__((visibility("default"))) TS_MinFinalCltvExpiry_eq(uint32
        LDKMinFinalCltvExpiry a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKMinFinalCltvExpiry b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = MinFinalCltvExpiry_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -29325,6 +35319,18 @@ void  __attribute__((visibility("default"))) TS_Fallback_free(uint32_t this_ptr)
        Fallback_free(this_ptr_conv);
 }
 
+static inline uint64_t Fallback_clone_ptr(LDKFallback *NONNULL_PTR arg) {
+       LDKFallback *ret_copy = MALLOC(sizeof(LDKFallback), "LDKFallback");
+       *ret_copy = Fallback_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_Fallback_clone_ptr(uint32_t arg) {
+       LDKFallback* arg_conv = (LDKFallback*)arg;
+       int64_t ret_val = Fallback_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_Fallback_clone(uint32_t orig) {
        LDKFallback* orig_conv = (LDKFallback*)orig;
        LDKFallback *ret_copy = MALLOC(sizeof(LDKFallback), "LDKFallback");
@@ -29382,17 +35388,41 @@ void  __attribute__((visibility("default"))) TS_InvoiceSignature_free(uint32_t t
        LDKInvoiceSignature this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        InvoiceSignature_free(this_obj_conv);
 }
 
+static inline uint64_t InvoiceSignature_clone_ptr(LDKInvoiceSignature *NONNULL_PTR arg) {
+       LDKInvoiceSignature ret_var = InvoiceSignature_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_InvoiceSignature_clone_ptr(uint32_t arg) {
+       LDKInvoiceSignature arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = InvoiceSignature_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_InvoiceSignature_clone(uint32_t orig) {
        LDKInvoiceSignature orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKInvoiceSignature ret_var = InvoiceSignature_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29404,9 +35434,11 @@ jboolean  __attribute__((visibility("default"))) TS_InvoiceSignature_eq(uint32_t
        LDKInvoiceSignature a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKInvoiceSignature b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = InvoiceSignature_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -29415,17 +35447,41 @@ void  __attribute__((visibility("default"))) TS_PrivateRoute_free(uint32_t this_
        LDKPrivateRoute this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        PrivateRoute_free(this_obj_conv);
 }
 
+static inline uint64_t PrivateRoute_clone_ptr(LDKPrivateRoute *NONNULL_PTR arg) {
+       LDKPrivateRoute ret_var = PrivateRoute_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_PrivateRoute_clone_ptr(uint32_t arg) {
+       LDKPrivateRoute arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = PrivateRoute_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_PrivateRoute_clone(uint32_t orig) {
        LDKPrivateRoute orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKPrivateRoute ret_var = PrivateRoute_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29437,6 +35493,7 @@ int64_t  __attribute__((visibility("default"))) TS_PrivateRoute_hash(uint32_t o)
        LDKPrivateRoute o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = PrivateRoute_hash(&o_conv);
        return ret_val;
 }
@@ -29445,9 +35502,11 @@ jboolean  __attribute__((visibility("default"))) TS_PrivateRoute_eq(uint32_t a,
        LDKPrivateRoute a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKPrivateRoute b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = PrivateRoute_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -29456,6 +35515,7 @@ uint32_t  __attribute__((visibility("default"))) TS_SignedRawInvoice_into_parts(
        LDKSignedRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = (this_arg & 1) || (this_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv = SignedRawInvoice_clone(&this_arg_conv);
        LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ* ret_conv = MALLOC(sizeof(LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ), "LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ");
        *ret_conv = SignedRawInvoice_into_parts(this_arg_conv);
@@ -29466,10 +35526,12 @@ uint32_t  __attribute__((visibility("default"))) TS_SignedRawInvoice_raw_invoice
        LDKSignedRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKRawInvoice ret_var = SignedRawInvoice_raw_invoice(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29481,6 +35543,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_SignedRawInvoice_hash(uin
        LDKSignedRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *SignedRawInvoice_hash(&this_arg_conv), 32);
        return ret_arr;
@@ -29490,10 +35553,12 @@ uint32_t  __attribute__((visibility("default"))) TS_SignedRawInvoice_signature(u
        LDKSignedRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKInvoiceSignature ret_var = SignedRawInvoice_signature(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29505,6 +35570,7 @@ uint32_t  __attribute__((visibility("default"))) TS_SignedRawInvoice_recover_pay
        LDKSignedRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCResult_PayeePubKeyErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PayeePubKeyErrorZ), "LDKCResult_PayeePubKeyErrorZ");
        *ret_conv = SignedRawInvoice_recover_payee_pub_key(&this_arg_conv);
        return (uint64_t)ret_conv;
@@ -29514,6 +35580,7 @@ jboolean  __attribute__((visibility("default"))) TS_SignedRawInvoice_check_signa
        LDKSignedRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        jboolean ret_val = SignedRawInvoice_check_signature(&this_arg_conv);
        return ret_val;
 }
@@ -29522,6 +35589,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_RawInvoice_hash(uint32_t
        LDKRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), RawInvoice_hash(&this_arg_conv).data, 32);
        return ret_arr;
@@ -29531,11 +35599,13 @@ uint32_t  __attribute__((visibility("default"))) TS_RawInvoice_payment_hash(uint
        LDKRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKSha256 ret_var = RawInvoice_payment_hash(&this_arg_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -29548,11 +35618,13 @@ uint32_t  __attribute__((visibility("default"))) TS_RawInvoice_description(uint3
        LDKRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKDescription ret_var = RawInvoice_description(&this_arg_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -29565,11 +35637,13 @@ uint32_t  __attribute__((visibility("default"))) TS_RawInvoice_payee_pub_key(uin
        LDKRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKPayeePubKey ret_var = RawInvoice_payee_pub_key(&this_arg_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -29582,11 +35656,13 @@ uint32_t  __attribute__((visibility("default"))) TS_RawInvoice_description_hash(
        LDKRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKSha256 ret_var = RawInvoice_description_hash(&this_arg_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -29599,11 +35675,13 @@ uint32_t  __attribute__((visibility("default"))) TS_RawInvoice_expiry_time(uint3
        LDKRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKExpiryTime ret_var = RawInvoice_expiry_time(&this_arg_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -29616,11 +35694,13 @@ uint32_t  __attribute__((visibility("default"))) TS_RawInvoice_min_final_cltv_ex
        LDKRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKMinFinalCltvExpiry ret_var = RawInvoice_min_final_cltv_expiry(&this_arg_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -29633,6 +35713,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_RawInvoice_payment_secret
        LDKRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), RawInvoice_payment_secret(&this_arg_conv).data, 32);
        return ret_arr;
@@ -29642,11 +35723,13 @@ uint32_t  __attribute__((visibility("default"))) TS_RawInvoice_features(uint32_t
        LDKRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKInvoiceFeatures ret_var = RawInvoice_features(&this_arg_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -29659,6 +35742,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_RawInvoice_private_rout
        LDKRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCVec_PrivateRouteZ ret_var = RawInvoice_private_routes(&this_arg_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_arr(ret_var.datalen, sizeof(uint32_t), "Native uint32_tArray Bytes");
@@ -29668,6 +35752,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_RawInvoice_private_rout
                uint64_t ret_conv_14_ref = 0;
                CHECK((((uint64_t)ret_conv_14_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_conv_14_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_14_var);
                ret_conv_14_ref = (uint64_t)ret_conv_14_var.inner;
                if (ret_conv_14_var.is_owned) {
                        ret_conv_14_ref |= 1;
@@ -29683,6 +35768,7 @@ uint32_t  __attribute__((visibility("default"))) TS_RawInvoice_amount_pico_btc(u
        LDKRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
        *ret_copy = RawInvoice_amount_pico_btc(&this_arg_conv);
        uint64_t ret_ref = (uint64_t)ret_copy;
@@ -29693,6 +35779,7 @@ uint32_t  __attribute__((visibility("default"))) TS_RawInvoice_currency(uint32_t
        LDKRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        uint32_t ret_conv = LDKCurrency_to_js(RawInvoice_currency(&this_arg_conv));
        return ret_conv;
 }
@@ -29713,6 +35800,7 @@ int64_t  __attribute__((visibility("default"))) TS_PositiveTimestamp_as_unix_tim
        LDKPositiveTimestamp this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = PositiveTimestamp_as_unix_timestamp(&this_arg_conv);
        return ret_val;
 }
@@ -29721,6 +35809,7 @@ int64_t  __attribute__((visibility("default"))) TS_PositiveTimestamp_as_time(uin
        LDKPositiveTimestamp this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = PositiveTimestamp_as_time(&this_arg_conv);
        return ret_val;
 }
@@ -29729,11 +35818,13 @@ uint32_t  __attribute__((visibility("default"))) TS_Invoice_into_signed_raw(uint
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = (this_arg & 1) || (this_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv = Invoice_clone(&this_arg_conv);
        LDKSignedRawInvoice ret_var = Invoice_into_signed_raw(this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29745,6 +35836,7 @@ uint32_t  __attribute__((visibility("default"))) TS_Invoice_check_signature(uint
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCResult_NoneSemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneSemanticErrorZ), "LDKCResult_NoneSemanticErrorZ");
        *ret_conv = Invoice_check_signature(&this_arg_conv);
        return (uint64_t)ret_conv;
@@ -29754,6 +35846,7 @@ uint32_t  __attribute__((visibility("default"))) TS_Invoice_from_signed(uint32_t
        LDKSignedRawInvoice signed_invoice_conv;
        signed_invoice_conv.inner = (void*)(signed_invoice & (~1));
        signed_invoice_conv.is_owned = (signed_invoice & 1) || (signed_invoice == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(signed_invoice_conv);
        signed_invoice_conv = SignedRawInvoice_clone(&signed_invoice_conv);
        LDKCResult_InvoiceSemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceSemanticErrorZ), "LDKCResult_InvoiceSemanticErrorZ");
        *ret_conv = Invoice_from_signed(signed_invoice_conv);
@@ -29764,6 +35857,7 @@ int64_t  __attribute__((visibility("default"))) TS_Invoice_timestamp(uint32_t th
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = Invoice_timestamp(&this_arg_conv);
        return ret_val;
 }
@@ -29772,6 +35866,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_Invoice_payment_hash(uint
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *Invoice_payment_hash(&this_arg_conv), 32);
        return ret_arr;
@@ -29781,6 +35876,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_Invoice_payee_pub_key(uin
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), Invoice_payee_pub_key(&this_arg_conv).compressed_form, 33);
        return ret_arr;
@@ -29790,6 +35886,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_Invoice_payment_secret(ui
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *Invoice_payment_secret(&this_arg_conv), 32);
        return ret_arr;
@@ -29799,11 +35896,13 @@ uint32_t  __attribute__((visibility("default"))) TS_Invoice_features(uint32_t th
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKInvoiceFeatures ret_var = Invoice_features(&this_arg_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -29816,6 +35915,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_Invoice_recover_payee_pub
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), Invoice_recover_payee_pub_key(&this_arg_conv).compressed_form, 33);
        return ret_arr;
@@ -29825,6 +35925,7 @@ int64_t  __attribute__((visibility("default"))) TS_Invoice_expiry_time(uint32_t
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = Invoice_expiry_time(&this_arg_conv);
        return ret_val;
 }
@@ -29833,6 +35934,7 @@ jboolean  __attribute__((visibility("default"))) TS_Invoice_is_expired(uint32_t
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        jboolean ret_val = Invoice_is_expired(&this_arg_conv);
        return ret_val;
 }
@@ -29841,6 +35943,7 @@ int64_t  __attribute__((visibility("default"))) TS_Invoice_min_final_cltv_expiry
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = Invoice_min_final_cltv_expiry(&this_arg_conv);
        return ret_val;
 }
@@ -29849,6 +35952,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_Invoice_private_routes(
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCVec_PrivateRouteZ ret_var = Invoice_private_routes(&this_arg_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_arr(ret_var.datalen, sizeof(uint32_t), "Native uint32_tArray Bytes");
@@ -29858,6 +35962,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_Invoice_private_routes(
                uint64_t ret_conv_14_ref = 0;
                CHECK((((uint64_t)ret_conv_14_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_conv_14_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_14_var);
                ret_conv_14_ref = (uint64_t)ret_conv_14_var.inner;
                if (ret_conv_14_var.is_owned) {
                        ret_conv_14_ref |= 1;
@@ -29873,6 +35978,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_Invoice_route_hints(uin
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCVec_RouteHintZ ret_var = Invoice_route_hints(&this_arg_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_arr(ret_var.datalen, sizeof(uint32_t), "Native uint32_tArray Bytes");
@@ -29882,6 +35988,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_Invoice_route_hints(uin
                uint64_t ret_conv_11_ref = 0;
                CHECK((((uint64_t)ret_conv_11_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_conv_11_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_11_var);
                ret_conv_11_ref = (uint64_t)ret_conv_11_var.inner;
                if (ret_conv_11_var.is_owned) {
                        ret_conv_11_ref |= 1;
@@ -29897,6 +36004,7 @@ uint32_t  __attribute__((visibility("default"))) TS_Invoice_currency(uint32_t th
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        uint32_t ret_conv = LDKCurrency_to_js(Invoice_currency(&this_arg_conv));
        return ret_conv;
 }
@@ -29905,6 +36013,7 @@ uint32_t  __attribute__((visibility("default"))) TS_Invoice_amount_milli_satoshi
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
        *ret_copy = Invoice_amount_milli_satoshis(&this_arg_conv);
        uint64_t ret_ref = (uint64_t)ret_copy;
@@ -29922,6 +36031,7 @@ jstring  __attribute__((visibility("default"))) TS_Description_into_inner(uint32
        LDKDescription this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = (this_arg & 1) || (this_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv = Description_clone(&this_arg_conv);
        LDKStr ret_str = Description_into_inner(this_arg_conv);
        jstring ret_conv = str_ref_to_ts(ret_str.chars, ret_str.len);
@@ -29945,6 +36055,7 @@ int64_t  __attribute__((visibility("default"))) TS_ExpiryTime_as_seconds(uint32_
        LDKExpiryTime this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = ExpiryTime_as_seconds(&this_arg_conv);
        return ret_val;
 }
@@ -29953,6 +36064,7 @@ int64_t  __attribute__((visibility("default"))) TS_ExpiryTime_as_duration(uint32
        LDKExpiryTime this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = ExpiryTime_as_duration(&this_arg_conv);
        return ret_val;
 }
@@ -29961,6 +36073,7 @@ uint32_t  __attribute__((visibility("default"))) TS_PrivateRoute_new(uint32_t ho
        LDKRouteHint hops_conv;
        hops_conv.inner = (void*)(hops & (~1));
        hops_conv.is_owned = (hops & 1) || (hops == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(hops_conv);
        hops_conv = RouteHint_clone(&hops_conv);
        LDKCResult_PrivateRouteCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PrivateRouteCreationErrorZ), "LDKCResult_PrivateRouteCreationErrorZ");
        *ret_conv = PrivateRoute_new(hops_conv);
@@ -29971,11 +36084,13 @@ uint32_t  __attribute__((visibility("default"))) TS_PrivateRoute_into_inner(uint
        LDKPrivateRoute this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = (this_arg & 1) || (this_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv = PrivateRoute_clone(&this_arg_conv);
        LDKRouteHint ret_var = PrivateRoute_into_inner(this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -30104,6 +36219,18 @@ void  __attribute__((visibility("default"))) TS_SignOrCreationError_free(uint32_
        SignOrCreationError_free(this_ptr_conv);
 }
 
+static inline uint64_t SignOrCreationError_clone_ptr(LDKSignOrCreationError *NONNULL_PTR arg) {
+       LDKSignOrCreationError *ret_copy = MALLOC(sizeof(LDKSignOrCreationError), "LDKSignOrCreationError");
+       *ret_copy = SignOrCreationError_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_SignOrCreationError_clone_ptr(uint32_t arg) {
+       LDKSignOrCreationError* arg_conv = (LDKSignOrCreationError*)arg;
+       int64_t ret_val = SignOrCreationError_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_SignOrCreationError_clone(uint32_t orig) {
        LDKSignOrCreationError* orig_conv = (LDKSignOrCreationError*)orig;
        LDKSignOrCreationError *ret_copy = MALLOC(sizeof(LDKSignOrCreationError), "LDKSignOrCreationError");
@@ -30146,6 +36273,7 @@ void  __attribute__((visibility("default"))) TS_InvoicePayer_free(uint32_t this_
        LDKInvoicePayer this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        InvoicePayer_free(this_obj_conv);
 }
 
@@ -30171,6 +36299,7 @@ void  __attribute__((visibility("default"))) TS_RetryAttempts_free(uint32_t this
        LDKRetryAttempts this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        RetryAttempts_free(this_obj_conv);
 }
 
@@ -30178,6 +36307,7 @@ int64_t  __attribute__((visibility("default"))) TS_RetryAttempts_get_a(uint32_t
        LDKRetryAttempts this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = RetryAttempts_get_a(&this_ptr_conv);
        return ret_val;
 }
@@ -30186,6 +36316,7 @@ void  __attribute__((visibility("default"))) TS_RetryAttempts_set_a(uint32_t thi
        LDKRetryAttempts this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        RetryAttempts_set_a(&this_ptr_conv, val);
 }
 
@@ -30194,6 +36325,7 @@ uint32_t  __attribute__((visibility("default"))) TS_RetryAttempts_new(int64_t a_
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -30201,14 +36333,37 @@ uint32_t  __attribute__((visibility("default"))) TS_RetryAttempts_new(int64_t a_
        return ret_ref;
 }
 
+static inline uint64_t RetryAttempts_clone_ptr(LDKRetryAttempts *NONNULL_PTR arg) {
+       LDKRetryAttempts ret_var = RetryAttempts_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_RetryAttempts_clone_ptr(uint32_t arg) {
+       LDKRetryAttempts arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = RetryAttempts_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_RetryAttempts_clone(uint32_t orig) {
        LDKRetryAttempts orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKRetryAttempts ret_var = RetryAttempts_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -30220,9 +36375,11 @@ jboolean  __attribute__((visibility("default"))) TS_RetryAttempts_eq(uint32_t a,
        LDKRetryAttempts a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKRetryAttempts b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = RetryAttempts_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -30231,6 +36388,7 @@ int64_t  __attribute__((visibility("default"))) TS_RetryAttempts_hash(uint32_t o
        LDKRetryAttempts o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = RetryAttempts_hash(&o_conv);
        return ret_val;
 }
@@ -30244,6 +36402,18 @@ void  __attribute__((visibility("default"))) TS_PaymentError_free(uint32_t this_
        PaymentError_free(this_ptr_conv);
 }
 
+static inline uint64_t PaymentError_clone_ptr(LDKPaymentError *NONNULL_PTR arg) {
+       LDKPaymentError *ret_copy = MALLOC(sizeof(LDKPaymentError), "LDKPaymentError");
+       *ret_copy = PaymentError_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_PaymentError_clone_ptr(uint32_t arg) {
+       LDKPaymentError* arg_conv = (LDKPaymentError*)arg;
+       int64_t ret_val = PaymentError_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_PaymentError_clone(uint32_t orig) {
        LDKPaymentError* orig_conv = (LDKPaymentError*)orig;
        LDKPaymentError *ret_copy = MALLOC(sizeof(LDKPaymentError), "LDKPaymentError");
@@ -30264,6 +36434,7 @@ uint32_t  __attribute__((visibility("default"))) TS_PaymentError_routing(uint32_
        LDKLightningError a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = (a & 1) || (a == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv = LightningError_clone(&a_conv);
        LDKPaymentError *ret_copy = MALLOC(sizeof(LDKPaymentError), "LDKPaymentError");
        *ret_copy = PaymentError_routing(a_conv);
@@ -30292,6 +36463,7 @@ uint32_t  __attribute__((visibility("default"))) TS_InvoicePayer_new(uint32_t pa
        LDKLockableScore scorer_conv;
        scorer_conv.inner = (void*)(scorer & (~1));
        scorer_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(scorer_conv);
        void* logger_ptr = (void*)(((uint64_t)logger) & ~1);
        CHECK_ACCESS(logger_ptr);
        LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
@@ -30301,11 +36473,13 @@ uint32_t  __attribute__((visibility("default"))) TS_InvoicePayer_new(uint32_t pa
        LDKRetryAttempts retry_attempts_conv;
        retry_attempts_conv.inner = (void*)(retry_attempts & (~1));
        retry_attempts_conv.is_owned = (retry_attempts & 1) || (retry_attempts == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(retry_attempts_conv);
        retry_attempts_conv = RetryAttempts_clone(&retry_attempts_conv);
        LDKInvoicePayer ret_var = InvoicePayer_new(payer_conv, router_conv, &scorer_conv, logger_conv, event_handler_conv, retry_attempts_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -30317,9 +36491,11 @@ uint32_t  __attribute__((visibility("default"))) TS_InvoicePayer_pay_invoice(uin
        LDKInvoicePayer this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKInvoice invoice_conv;
        invoice_conv.inner = (void*)(invoice & (~1));
        invoice_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(invoice_conv);
        LDKCResult_PaymentIdPaymentErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentIdPaymentErrorZ), "LDKCResult_PaymentIdPaymentErrorZ");
        *ret_conv = InvoicePayer_pay_invoice(&this_arg_conv, &invoice_conv);
        return (uint64_t)ret_conv;
@@ -30329,9 +36505,11 @@ uint32_t  __attribute__((visibility("default"))) TS_InvoicePayer_pay_zero_value_
        LDKInvoicePayer this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKInvoice invoice_conv;
        invoice_conv.inner = (void*)(invoice & (~1));
        invoice_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(invoice_conv);
        LDKCResult_PaymentIdPaymentErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentIdPaymentErrorZ), "LDKCResult_PaymentIdPaymentErrorZ");
        *ret_conv = InvoicePayer_pay_zero_value_invoice(&this_arg_conv, &invoice_conv, amount_msats);
        return (uint64_t)ret_conv;
@@ -30341,6 +36519,7 @@ void  __attribute__((visibility("default"))) TS_InvoicePayer_remove_cached_payme
        LDKInvoicePayer this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char payment_hash_arr[32];
        CHECK(*((uint32_t*)payment_hash) == 32);
        memcpy(payment_hash_arr, (uint8_t*)(payment_hash + 4), 32);
@@ -30352,6 +36531,7 @@ uint32_t  __attribute__((visibility("default"))) TS_InvoicePayer_as_EventHandler
        LDKInvoicePayer this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKEventHandler* ret_ret = MALLOC(sizeof(LDKEventHandler), "LDKEventHandler");
        *ret_ret = InvoicePayer_as_EventHandler(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -30361,6 +36541,7 @@ uint32_t  __attribute__((visibility("default"))) TS_create_invoice_from_channelm
        LDKChannelManager channelmanager_conv;
        channelmanager_conv.inner = (void*)(channelmanager & (~1));
        channelmanager_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channelmanager_conv);
        void* keys_manager_ptr = (void*)(((uint64_t)keys_manager) & ~1);
        CHECK_ACCESS(keys_manager_ptr);
        LDKKeysInterface keys_manager_conv = *(LDKKeysInterface*)(keys_manager_ptr);
@@ -30379,6 +36560,7 @@ void  __attribute__((visibility("default"))) TS_DefaultRouter_free(uint32_t this
        LDKDefaultRouter this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        DefaultRouter_free(this_obj_conv);
 }
 
@@ -30386,6 +36568,7 @@ uint32_t  __attribute__((visibility("default"))) TS_DefaultRouter_new(uint32_t n
        LDKNetworkGraph network_graph_conv;
        network_graph_conv.inner = (void*)(network_graph & (~1));
        network_graph_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
        void* logger_ptr = (void*)(((uint64_t)logger) & ~1);
        CHECK_ACCESS(logger_ptr);
        LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
@@ -30393,6 +36576,7 @@ uint32_t  __attribute__((visibility("default"))) TS_DefaultRouter_new(uint32_t n
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -30404,6 +36588,7 @@ uint32_t  __attribute__((visibility("default"))) TS_DefaultRouter_as_Router(uint
        LDKDefaultRouter this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKRouter* ret_ret = MALLOC(sizeof(LDKRouter), "LDKRouter");
        *ret_ret = DefaultRouter_as_Router(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -30413,6 +36598,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelManager_as_Payer(uint
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKPayer* ret_ret = MALLOC(sizeof(LDKPayer), "LDKPayer");
        *ret_ret = ChannelManager_as_Payer(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -30443,6 +36629,7 @@ jstring  __attribute__((visibility("default"))) TS_Invoice_to_str(uint32_t o) {
        LDKInvoice o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        LDKStr ret_str = Invoice_to_str(&o_conv);
        jstring ret_conv = str_ref_to_ts(ret_str.chars, ret_str.len);
        Str_free(ret_str);
@@ -30453,6 +36640,7 @@ jstring  __attribute__((visibility("default"))) TS_SignedRawInvoice_to_str(uint3
        LDKSignedRawInvoice o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        LDKStr ret_str = SignedRawInvoice_to_str(&o_conv);
        jstring ret_conv = str_ref_to_ts(ret_str.chars, ret_str.len);
        Str_free(ret_str);
index b9a8cdc69b797f3ea488f9154b42af5bab344f39..27e3925500fc7adf2297619157bb9525959f7626 100644 (file)
@@ -20,6 +20,7 @@ void free(void *ptr);
 #define DO_ASSERT(a) (void)(a)
 #define CHECK(a)
 #define CHECK_ACCESS(p)
+#define CHECK_INNER_FIELD_ACCESS_OR_NULL(v)
 
 // We assume that CVec_u8Z and u8slice are the same size and layout (and thus pointers to the two can be mixed)
 _Static_assert(sizeof(LDKCVec_u8Z) == sizeof(LDKu8slice), "Vec<u8> and [u8] need to have been mapped identically");
@@ -310,20 +311,6 @@ static inline int32_t LDKSiPrefix_to_js(LDKSiPrefix val) {
                default: abort();
        }
 }
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_u8Z_new(int8_tArray elems) {
-       LDKCVec_u8Z *ret = MALLOC(sizeof(LDKCVec_u8Z), "LDKCVec_u8Z");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(uint8_t) * ret->datalen, "LDKCVec_u8Z Data");
-               int8_t *java_elems = (int8_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       ret->data[i] = java_elems[i];
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_u8Z CVec_u8Z_clone(const LDKCVec_u8Z *orig) {
        LDKCVec_u8Z ret = { .data = MALLOC(sizeof(int8_t) * orig->datalen, "LDKCVec_u8Z clone bytes"), .datalen = orig->datalen };
        memcpy(ret.data, orig->data, sizeof(int8_t) * ret.datalen);
@@ -344,9 +331,6 @@ uint64_t TxOut_get_value (struct LDKTxOut* thing) { return thing->value;}int64_t
        return ret_val;
 }
 
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_SecretKeyErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_SecretKeyErrorZ*)arg)->result_ok;
-}
 int8_tArray  __attribute__((visibility("default"))) TS_LDKCResult_SecretKeyErrorZ_get_ok(uint32_t arg) {
        LDKCResult_SecretKeyErrorZ *val = (LDKCResult_SecretKeyErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -360,9 +344,6 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_SecretKeyErrorZ_g
        uint32_t err_conv = LDKSecp256k1Error_to_js((*val->contents.err));
        return err_conv;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_PublicKeyErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_PublicKeyErrorZ*)arg)->result_ok;
-}
 int8_tArray  __attribute__((visibility("default"))) TS_LDKCResult_PublicKeyErrorZ_get_ok(uint32_t arg) {
        LDKCResult_PublicKeyErrorZ *val = (LDKCResult_PublicKeyErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -376,9 +357,6 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_PublicKeyErrorZ_g
        uint32_t err_conv = LDKSecp256k1Error_to_js((*val->contents.err));
        return err_conv;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_TxCreationKeysDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_TxCreationKeysDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_TxCreationKeysDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_TxCreationKeysDecodeErrorZ *val = (LDKCResult_TxCreationKeysDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -386,6 +364,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_TxCreationKeysDec
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -396,12 +375,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_TxCreationKeysDec
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_ChannelPublicKeysDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_ChannelPublicKeysDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ChannelPublicKeysDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_ChannelPublicKeysDecodeErrorZ *val = (LDKCResult_ChannelPublicKeysDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -409,6 +386,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ChannelPublicKeys
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -419,12 +397,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ChannelPublicKeys
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_TxCreationKeysErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_TxCreationKeysErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_TxCreationKeysErrorZ_get_ok(uint32_t arg) {
        LDKCResult_TxCreationKeysErrorZ *val = (LDKCResult_TxCreationKeysErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -432,6 +408,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_TxCreationKeysErr
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -453,9 +430,6 @@ uint32_t __attribute__((visibility("default"))) TS_LDKCOption_u32Z_ref_from_ptr(
                default: abort();
        }
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_HTLCOutputInCommitmentDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_HTLCOutputInCommitmentDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_HTLCOutputInCommitmentDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_HTLCOutputInCommitmentDecodeErrorZ *val = (LDKCResult_HTLCOutputInCommitmentDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -463,6 +437,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_HTLCOutputInCommi
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -473,12 +448,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_HTLCOutputInCommi
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ *val = (LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -486,6 +459,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_CounterpartyChann
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -496,12 +470,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_CounterpartyChann
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_ChannelTransactionParametersDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_ChannelTransactionParametersDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ChannelTransactionParametersDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_ChannelTransactionParametersDecodeErrorZ *val = (LDKCResult_ChannelTransactionParametersDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -509,6 +481,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ChannelTransactio
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -519,12 +492,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ChannelTransactio
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_HolderCommitmentTransactionDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_HolderCommitmentTransactionDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_HolderCommitmentTransactionDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_HolderCommitmentTransactionDecodeErrorZ *val = (LDKCResult_HolderCommitmentTransactionDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -532,6 +503,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_HolderCommitmentT
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -542,12 +514,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_HolderCommitmentT
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_BuiltCommitmentTransactionDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_BuiltCommitmentTransactionDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_BuiltCommitmentTransactionDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_BuiltCommitmentTransactionDecodeErrorZ *val = (LDKCResult_BuiltCommitmentTransactionDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -555,6 +525,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_BuiltCommitmentTr
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -565,12 +536,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_BuiltCommitmentTr
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_TrustedClosingTransactionNoneZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_TrustedClosingTransactionNoneZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_TrustedClosingTransactionNoneZ_get_ok(uint32_t arg) {
        LDKCResult_TrustedClosingTransactionNoneZ *val = (LDKCResult_TrustedClosingTransactionNoneZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -578,6 +547,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_TrustedClosingTra
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -586,9 +556,6 @@ void  __attribute__((visibility("default"))) TS_LDKCResult_TrustedClosingTransac
        CHECK(!val->result_ok);
        return *val->contents.err;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_CommitmentTransactionDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_CommitmentTransactionDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_CommitmentTransactionDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_CommitmentTransactionDecodeErrorZ *val = (LDKCResult_CommitmentTransactionDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -596,6 +563,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_CommitmentTransac
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -606,12 +574,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_CommitmentTransac
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_TrustedCommitmentTransactionNoneZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_TrustedCommitmentTransactionNoneZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_TrustedCommitmentTransactionNoneZ_get_ok(uint32_t arg) {
        LDKCResult_TrustedCommitmentTransactionNoneZ *val = (LDKCResult_TrustedCommitmentTransactionNoneZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -619,6 +585,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_TrustedCommitment
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -627,9 +594,6 @@ void  __attribute__((visibility("default"))) TS_LDKCResult_TrustedCommitmentTran
        CHECK(!val->result_ok);
        return *val->contents.err;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_CVec_SignatureZNoneZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_CVec_SignatureZNoneZ*)arg)->result_ok;
-}
 ptrArray  __attribute__((visibility("default"))) TS_LDKCResult_CVec_SignatureZNoneZ_get_ok(uint32_t arg) {
        LDKCResult_CVec_SignatureZNoneZ *val = (LDKCResult_CVec_SignatureZNoneZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -650,9 +614,6 @@ void  __attribute__((visibility("default"))) TS_LDKCResult_CVec_SignatureZNoneZ_
        CHECK(!val->result_ok);
        return *val->contents.err;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_ShutdownScriptDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_ShutdownScriptDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ShutdownScriptDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_ShutdownScriptDecodeErrorZ *val = (LDKCResult_ShutdownScriptDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -660,6 +621,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ShutdownScriptDec
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -670,12 +632,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ShutdownScriptDec
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_ShutdownScriptInvalidShutdownScriptZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_ShutdownScriptInvalidShutdownScriptZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ShutdownScriptInvalidShutdownScriptZ_get_ok(uint32_t arg) {
        LDKCResult_ShutdownScriptInvalidShutdownScriptZ *val = (LDKCResult_ShutdownScriptInvalidShutdownScriptZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -683,6 +643,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ShutdownScriptInv
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -693,12 +654,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ShutdownScriptInv
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_NoneErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_NoneErrorZ*)arg)->result_ok;
-}
 void  __attribute__((visibility("default"))) TS_LDKCResult_NoneErrorZ_get_ok(uint32_t arg) {
        LDKCResult_NoneErrorZ *val = (LDKCResult_NoneErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -710,9 +669,6 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_NoneErrorZ_get_er
        uint32_t err_conv = LDKIOError_to_js((*val->contents.err));
        return err_conv;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_RouteHopDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_RouteHopDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_RouteHopDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_RouteHopDecodeErrorZ *val = (LDKCResult_RouteHopDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -720,6 +676,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_RouteHopDecodeErr
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -730,28 +687,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_RouteHopDecodeErr
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_RouteHopZ_new(uint32_tArray elems) {
-       LDKCVec_RouteHopZ *ret = MALLOC(sizeof(LDKCVec_RouteHopZ), "LDKCVec_RouteHopZ");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKRouteHop) * ret->datalen, "LDKCVec_RouteHopZ Data");
-               uint32_t *java_elems = (uint32_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       uint32_t arr_elem = java_elems[i];
-                       LDKRouteHop arr_elem_conv;
-                       arr_elem_conv.inner = (void*)(arr_elem & (~1));
-                       arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0);
-                       arr_elem_conv = RouteHop_clone(&arr_elem_conv);
-                       ret->data[i] = arr_elem_conv;
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_RouteHopZ CVec_RouteHopZ_clone(const LDKCVec_RouteHopZ *orig) {
        LDKCVec_RouteHopZ ret = { .data = MALLOC(sizeof(LDKRouteHop) * orig->datalen, "LDKCVec_RouteHopZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -766,9 +705,6 @@ static inline LDKCVec_CVec_RouteHopZZ CVec_CVec_RouteHopZZ_clone(const LDKCVec_C
        }
        return ret;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_RouteDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_RouteDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_RouteDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_RouteDecodeErrorZ *val = (LDKCResult_RouteDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -776,6 +712,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_RouteDecodeErrorZ
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -786,12 +723,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_RouteDecodeErrorZ
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_RouteParametersDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_RouteParametersDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_RouteParametersDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_RouteParametersDecodeErrorZ *val = (LDKCResult_RouteParametersDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -799,6 +734,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_RouteParametersDe
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -809,28 +745,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_RouteParametersDe
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_RouteHintZ_new(uint32_tArray elems) {
-       LDKCVec_RouteHintZ *ret = MALLOC(sizeof(LDKCVec_RouteHintZ), "LDKCVec_RouteHintZ");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKRouteHint) * ret->datalen, "LDKCVec_RouteHintZ Data");
-               uint32_t *java_elems = (uint32_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       uint32_t arr_elem = java_elems[i];
-                       LDKRouteHint arr_elem_conv;
-                       arr_elem_conv.inner = (void*)(arr_elem & (~1));
-                       arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0);
-                       arr_elem_conv = RouteHint_clone(&arr_elem_conv);
-                       ret->data[i] = arr_elem_conv;
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_RouteHintZ CVec_RouteHintZ_clone(const LDKCVec_RouteHintZ *orig) {
        LDKCVec_RouteHintZ ret = { .data = MALLOC(sizeof(LDKRouteHint) * orig->datalen, "LDKCVec_RouteHintZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -850,9 +768,6 @@ uint32_t __attribute__((visibility("default"))) TS_LDKCOption_u64Z_ref_from_ptr(
                default: abort();
        }
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_PayeeDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_PayeeDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_PayeeDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_PayeeDecodeErrorZ *val = (LDKCResult_PayeeDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -860,6 +775,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_PayeeDecodeErrorZ
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -870,28 +786,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_PayeeDecodeErrorZ
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_RouteHintHopZ_new(uint32_tArray elems) {
-       LDKCVec_RouteHintHopZ *ret = MALLOC(sizeof(LDKCVec_RouteHintHopZ), "LDKCVec_RouteHintHopZ");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKRouteHintHop) * ret->datalen, "LDKCVec_RouteHintHopZ Data");
-               uint32_t *java_elems = (uint32_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       uint32_t arr_elem = java_elems[i];
-                       LDKRouteHintHop arr_elem_conv;
-                       arr_elem_conv.inner = (void*)(arr_elem & (~1));
-                       arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0);
-                       arr_elem_conv = RouteHintHop_clone(&arr_elem_conv);
-                       ret->data[i] = arr_elem_conv;
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_RouteHintHopZ CVec_RouteHintHopZ_clone(const LDKCVec_RouteHintHopZ *orig) {
        LDKCVec_RouteHintHopZ ret = { .data = MALLOC(sizeof(LDKRouteHintHop) * orig->datalen, "LDKCVec_RouteHintHopZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -899,9 +797,6 @@ static inline LDKCVec_RouteHintHopZ CVec_RouteHintHopZ_clone(const LDKCVec_Route
        }
        return ret;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_RouteHintDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_RouteHintDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_RouteHintDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_RouteHintDecodeErrorZ *val = (LDKCResult_RouteHintDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -909,6 +804,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_RouteHintDecodeEr
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -919,12 +815,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_RouteHintDecodeEr
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_RouteHintHopDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_RouteHintHopDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_RouteHintHopDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_RouteHintHopDecodeErrorZ *val = (LDKCResult_RouteHintHopDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -932,6 +826,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_RouteHintHopDecod
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -942,28 +837,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_RouteHintHopDecod
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_ChannelDetailsZ_new(uint32_tArray elems) {
-       LDKCVec_ChannelDetailsZ *ret = MALLOC(sizeof(LDKCVec_ChannelDetailsZ), "LDKCVec_ChannelDetailsZ");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKChannelDetails) * ret->datalen, "LDKCVec_ChannelDetailsZ Data");
-               uint32_t *java_elems = (uint32_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       uint32_t arr_elem = java_elems[i];
-                       LDKChannelDetails arr_elem_conv;
-                       arr_elem_conv.inner = (void*)(arr_elem & (~1));
-                       arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0);
-                       arr_elem_conv = ChannelDetails_clone(&arr_elem_conv);
-                       ret->data[i] = arr_elem_conv;
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_ChannelDetailsZ CVec_ChannelDetailsZ_clone(const LDKCVec_ChannelDetailsZ *orig) {
        LDKCVec_ChannelDetailsZ ret = { .data = MALLOC(sizeof(LDKChannelDetails) * orig->datalen, "LDKCVec_ChannelDetailsZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -971,9 +848,6 @@ static inline LDKCVec_ChannelDetailsZ CVec_ChannelDetailsZ_clone(const LDKCVec_C
        }
        return ret;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_RouteLightningErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_RouteLightningErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_RouteLightningErrorZ_get_ok(uint32_t arg) {
        LDKCResult_RouteLightningErrorZ *val = (LDKCResult_RouteLightningErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -981,6 +855,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_RouteLightningErr
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -991,12 +866,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_RouteLightningErr
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_TxOutAccessErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_TxOutAccessErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_TxOutAccessErrorZ_get_ok(uint32_t arg) {
        LDKCResult_TxOutAccessErrorZ *val = (LDKCResult_TxOutAccessErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1030,25 +903,6 @@ int8_tArray  __attribute__((visibility("default"))) TS_C2Tuple_usizeTransactionZ
        return ret_arr;
 }
 
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_C2Tuple_usizeTransactionZZ_new(uint32_tArray elems) {
-       LDKCVec_C2Tuple_usizeTransactionZZ *ret = MALLOC(sizeof(LDKCVec_C2Tuple_usizeTransactionZZ), "LDKCVec_C2Tuple_usizeTransactionZZ");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKC2Tuple_usizeTransactionZ) * ret->datalen, "LDKCVec_C2Tuple_usizeTransactionZZ Data");
-               uint32_t *java_elems = (uint32_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       uint32_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKC2Tuple_usizeTransactionZ arr_elem_conv = *(LDKC2Tuple_usizeTransactionZ*)(arr_elem_ptr);
-                       arr_elem_conv = C2Tuple_usizeTransactionZ_clone((LDKC2Tuple_usizeTransactionZ*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_C2Tuple_usizeTransactionZZ CVec_C2Tuple_usizeTransactionZZ_clone(const LDKCVec_C2Tuple_usizeTransactionZZ *orig) {
        LDKCVec_C2Tuple_usizeTransactionZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_usizeTransactionZ) * orig->datalen, "LDKCVec_C2Tuple_usizeTransactionZZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -1063,9 +917,6 @@ static inline LDKCVec_TxidZ CVec_ThirtyTwoBytesZ_clone(const LDKCVec_TxidZ *orig
        }
        return ret;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_NoneChannelMonitorUpdateErrZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_NoneChannelMonitorUpdateErrZ*)arg)->result_ok;
-}
 void  __attribute__((visibility("default"))) TS_LDKCResult_NoneChannelMonitorUpdateErrZ_get_ok(uint32_t arg) {
        LDKCResult_NoneChannelMonitorUpdateErrZ *val = (LDKCResult_NoneChannelMonitorUpdateErrZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1085,6 +936,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKMonitorEvent_ref_from_ptr(
                        uint64_t htlc_event_ref = 0;
                        CHECK((((uint64_t)htlc_event_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&htlc_event_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(htlc_event_var);
                        htlc_event_ref = (uint64_t)htlc_event_var.inner & ~1;
                        return 0 /* LDKMonitorEvent - HTLCEvent */; (void) htlc_event_ref;
                }
@@ -1093,6 +945,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKMonitorEvent_ref_from_ptr(
                        uint64_t commitment_tx_confirmed_ref = 0;
                        CHECK((((uint64_t)commitment_tx_confirmed_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&commitment_tx_confirmed_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(commitment_tx_confirmed_var);
                        commitment_tx_confirmed_ref = (uint64_t)commitment_tx_confirmed_var.inner & ~1;
                        return 0 /* LDKMonitorEvent - CommitmentTxConfirmed */; (void) commitment_tx_confirmed_ref;
                }
@@ -1101,6 +954,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKMonitorEvent_ref_from_ptr(
                        uint64_t funding_txo_ref = 0;
                        CHECK((((uint64_t)funding_txo_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&funding_txo_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_txo_var);
                        funding_txo_ref = (uint64_t)funding_txo_var.inner & ~1;
                        return 0 /* LDKMonitorEvent - UpdateCompleted */; (void) funding_txo_ref; (void) obj->update_completed.monitor_update_id;
                }
@@ -1109,31 +963,13 @@ uint32_t __attribute__((visibility("default"))) TS_LDKMonitorEvent_ref_from_ptr(
                        uint64_t update_failed_ref = 0;
                        CHECK((((uint64_t)update_failed_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&update_failed_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_failed_var);
                        update_failed_ref = (uint64_t)update_failed_var.inner & ~1;
                        return 0 /* LDKMonitorEvent - UpdateFailed */; (void) update_failed_ref;
                }
                default: abort();
        }
 }
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_MonitorEventZ_new(uint32_tArray elems) {
-       LDKCVec_MonitorEventZ *ret = MALLOC(sizeof(LDKCVec_MonitorEventZ), "LDKCVec_MonitorEventZ");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKMonitorEvent) * ret->datalen, "LDKCVec_MonitorEventZ Data");
-               uint32_t *java_elems = (uint32_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       uint32_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKMonitorEvent arr_elem_conv = *(LDKMonitorEvent*)(arr_elem_ptr);
-                       arr_elem_conv = MonitorEvent_clone((LDKMonitorEvent*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_MonitorEventZ CVec_MonitorEventZ_clone(const LDKCVec_MonitorEventZ *orig) {
        LDKCVec_MonitorEventZ ret = { .data = MALLOC(sizeof(LDKMonitorEvent) * orig->datalen, "LDKCVec_MonitorEventZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -1156,6 +992,67 @@ uint32_t __attribute__((visibility("default"))) TS_LDKCOption_C2Tuple_usizeTrans
                default: abort();
        }
 }
+uint32_t __attribute__((visibility("default"))) TS_LDKClosureReason_ref_from_ptr(uint32_t ptr) {
+       LDKClosureReason *obj = (LDKClosureReason*)(ptr & ~1);
+       switch(obj->tag) {
+               case LDKClosureReason_CounterpartyForceClosed: {
+                       LDKStr peer_msg_str = obj->counterparty_force_closed.peer_msg;
+                       jstring peer_msg_conv = str_ref_to_ts(peer_msg_str.chars, peer_msg_str.len);
+                       return 0 /* LDKClosureReason - CounterpartyForceClosed */; (void) peer_msg_conv;
+               }
+               case LDKClosureReason_HolderForceClosed: {
+                       return 0 /* LDKClosureReason - HolderForceClosed */;
+               }
+               case LDKClosureReason_CooperativeClosure: {
+                       return 0 /* LDKClosureReason - CooperativeClosure */;
+               }
+               case LDKClosureReason_CommitmentTxConfirmed: {
+                       return 0 /* LDKClosureReason - CommitmentTxConfirmed */;
+               }
+               case LDKClosureReason_ProcessingError: {
+                       LDKStr err_str = obj->processing_error.err;
+                       jstring err_conv = str_ref_to_ts(err_str.chars, err_str.len);
+                       return 0 /* LDKClosureReason - ProcessingError */; (void) err_conv;
+               }
+               case LDKClosureReason_DisconnectedPeer: {
+                       return 0 /* LDKClosureReason - DisconnectedPeer */;
+               }
+               case LDKClosureReason_OutdatedChannelManager: {
+                       return 0 /* LDKClosureReason - OutdatedChannelManager */;
+               }
+               default: abort();
+       }
+}
+uint32_t __attribute__((visibility("default"))) TS_LDKCOption_ClosureReasonZ_ref_from_ptr(uint32_t ptr) {
+       LDKCOption_ClosureReasonZ *obj = (LDKCOption_ClosureReasonZ*)(ptr & ~1);
+       switch(obj->tag) {
+               case LDKCOption_ClosureReasonZ_Some: {
+                       uint64_t some_ref = ((uint64_t)&obj->some) | 1;
+                       return 0 /* LDKCOption_ClosureReasonZ - Some */; (void) some_ref;
+               }
+               case LDKCOption_ClosureReasonZ_None: {
+                       return 0 /* LDKCOption_ClosureReasonZ - None */;
+               }
+               default: abort();
+       }
+}
+uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_COption_ClosureReasonZDecodeErrorZ_get_ok(uint32_t arg) {
+       LDKCResult_COption_ClosureReasonZDecodeErrorZ *val = (LDKCResult_COption_ClosureReasonZDecodeErrorZ*)(arg & ~1);
+       CHECK(val->result_ok);
+       uint64_t res_ref = ((uint64_t)&(*val->contents.result)) | 1;
+       return res_ref;
+}
+uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_COption_ClosureReasonZDecodeErrorZ_get_err(uint32_t arg) {
+       LDKCResult_COption_ClosureReasonZDecodeErrorZ *val = (LDKCResult_COption_ClosureReasonZDecodeErrorZ*)(arg & ~1);
+       CHECK(!val->result_ok);
+       LDKDecodeError err_var = (*val->contents.err);
+       uint64_t err_ref = 0;
+       CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+       CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
+       err_ref = (uint64_t)err_var.inner & ~1;
+       return err_ref;
+}
 uint32_t __attribute__((visibility("default"))) TS_LDKNetworkUpdate_ref_from_ptr(uint32_t ptr) {
        LDKNetworkUpdate *obj = (LDKNetworkUpdate*)(ptr & ~1);
        switch(obj->tag) {
@@ -1164,6 +1061,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKNetworkUpdate_ref_from_ptr
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return 0 /* LDKNetworkUpdate - ChannelUpdateMessage */; (void) msg_ref;
                }
@@ -1199,6 +1097,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKSpendableOutputDescriptor_
                        uint64_t outpoint_ref = 0;
                        CHECK((((uint64_t)outpoint_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&outpoint_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_var);
                        outpoint_ref = (uint64_t)outpoint_var.inner & ~1;
                        uint64_t output_ref = ((uint64_t)&obj->static_output.output) | 1;
                        return 0 /* LDKSpendableOutputDescriptor - StaticOutput */; (void) outpoint_ref; (void) (uint64_t)output_ref;
@@ -1208,6 +1107,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKSpendableOutputDescriptor_
                        uint64_t delayed_payment_output_ref = 0;
                        CHECK((((uint64_t)delayed_payment_output_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&delayed_payment_output_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(delayed_payment_output_var);
                        delayed_payment_output_ref = (uint64_t)delayed_payment_output_var.inner & ~1;
                        return 0 /* LDKSpendableOutputDescriptor - DelayedPaymentOutput */; (void) delayed_payment_output_ref;
                }
@@ -1216,31 +1116,13 @@ uint32_t __attribute__((visibility("default"))) TS_LDKSpendableOutputDescriptor_
                        uint64_t static_payment_output_ref = 0;
                        CHECK((((uint64_t)static_payment_output_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&static_payment_output_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(static_payment_output_var);
                        static_payment_output_ref = (uint64_t)static_payment_output_var.inner & ~1;
                        return 0 /* LDKSpendableOutputDescriptor - StaticPaymentOutput */; (void) static_payment_output_ref;
                }
                default: abort();
        }
 }
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_SpendableOutputDescriptorZ_new(uint32_tArray elems) {
-       LDKCVec_SpendableOutputDescriptorZ *ret = MALLOC(sizeof(LDKCVec_SpendableOutputDescriptorZ), "LDKCVec_SpendableOutputDescriptorZ");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKSpendableOutputDescriptor) * ret->datalen, "LDKCVec_SpendableOutputDescriptorZ Data");
-               uint32_t *java_elems = (uint32_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       uint32_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKSpendableOutputDescriptor arr_elem_conv = *(LDKSpendableOutputDescriptor*)(arr_elem_ptr);
-                       arr_elem_conv = SpendableOutputDescriptor_clone((LDKSpendableOutputDescriptor*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_SpendableOutputDescriptorZ CVec_SpendableOutputDescriptorZ_clone(const LDKCVec_SpendableOutputDescriptorZ *orig) {
        LDKCVec_SpendableOutputDescriptorZ ret = { .data = MALLOC(sizeof(LDKSpendableOutputDescriptor) * orig->datalen, "LDKCVec_SpendableOutputDescriptorZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -1248,6 +1130,148 @@ static inline LDKCVec_SpendableOutputDescriptorZ CVec_SpendableOutputDescriptorZ
        }
        return ret;
 }
+uint32_t __attribute__((visibility("default"))) TS_LDKPaymentPurpose_ref_from_ptr(uint32_t ptr) {
+       LDKPaymentPurpose *obj = (LDKPaymentPurpose*)(ptr & ~1);
+       switch(obj->tag) {
+               case LDKPaymentPurpose_InvoicePayment: {
+                       int8_tArray payment_preimage_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
+                       memcpy((uint8_t*)(payment_preimage_arr + 4), obj->invoice_payment.payment_preimage.data, 32);
+                       int8_tArray payment_secret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
+                       memcpy((uint8_t*)(payment_secret_arr + 4), obj->invoice_payment.payment_secret.data, 32);
+                       return 0 /* LDKPaymentPurpose - InvoicePayment */; (void) payment_preimage_arr; (void) payment_secret_arr; (void) obj->invoice_payment.user_payment_id;
+               }
+               case LDKPaymentPurpose_SpontaneousPayment: {
+                       int8_tArray spontaneous_payment_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
+                       memcpy((uint8_t*)(spontaneous_payment_arr + 4), obj->spontaneous_payment.data, 32);
+                       return 0 /* LDKPaymentPurpose - SpontaneousPayment */; (void) spontaneous_payment_arr;
+               }
+               default: abort();
+       }
+}
+uint32_t __attribute__((visibility("default"))) TS_LDKEvent_ref_from_ptr(uint32_t ptr) {
+       LDKEvent *obj = (LDKEvent*)(ptr & ~1);
+       switch(obj->tag) {
+               case LDKEvent_FundingGenerationReady: {
+                       int8_tArray temporary_channel_id_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
+                       memcpy((uint8_t*)(temporary_channel_id_arr + 4), obj->funding_generation_ready.temporary_channel_id.data, 32);
+                       LDKCVec_u8Z output_script_var = obj->funding_generation_ready.output_script;
+                       int8_tArray output_script_arr = init_arr(output_script_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
+                       memcpy((uint8_t*)(output_script_arr + 4), output_script_var.data, output_script_var.datalen);
+                       return 0 /* LDKEvent - FundingGenerationReady */; (void) temporary_channel_id_arr; (void) obj->funding_generation_ready.channel_value_satoshis; (void) output_script_arr; (void) obj->funding_generation_ready.user_channel_id;
+               }
+               case LDKEvent_PaymentReceived: {
+                       int8_tArray payment_hash_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
+                       memcpy((uint8_t*)(payment_hash_arr + 4), obj->payment_received.payment_hash.data, 32);
+                       uint64_t purpose_ref = ((uint64_t)&obj->payment_received.purpose) | 1;
+                       return 0 /* LDKEvent - PaymentReceived */; (void) payment_hash_arr; (void) obj->payment_received.amt; (void) purpose_ref;
+               }
+               case LDKEvent_PaymentSent: {
+                       int8_tArray payment_id_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
+                       memcpy((uint8_t*)(payment_id_arr + 4), obj->payment_sent.payment_id.data, 32);
+                       int8_tArray payment_preimage_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
+                       memcpy((uint8_t*)(payment_preimage_arr + 4), obj->payment_sent.payment_preimage.data, 32);
+                       int8_tArray payment_hash_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
+                       memcpy((uint8_t*)(payment_hash_arr + 4), obj->payment_sent.payment_hash.data, 32);
+                       uint64_t fee_paid_msat_ref = ((uint64_t)&obj->payment_sent.fee_paid_msat) | 1;
+                       return 0 /* LDKEvent - PaymentSent */; (void) payment_id_arr; (void) payment_preimage_arr; (void) payment_hash_arr; (void) fee_paid_msat_ref;
+               }
+               case LDKEvent_PaymentPathFailed: {
+                       int8_tArray payment_id_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
+                       memcpy((uint8_t*)(payment_id_arr + 4), obj->payment_path_failed.payment_id.data, 32);
+                       int8_tArray payment_hash_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
+                       memcpy((uint8_t*)(payment_hash_arr + 4), obj->payment_path_failed.payment_hash.data, 32);
+                       uint64_t network_update_ref = ((uint64_t)&obj->payment_path_failed.network_update) | 1;
+                       LDKCVec_RouteHopZ path_var = obj->payment_path_failed.path;
+                       uint32_tArray path_arr = NULL;
+                       path_arr = init_arr(path_var.datalen, sizeof(uint32_t), "Native uint32_tArray Bytes");
+                       uint32_t *path_arr_ptr = (uint32_t*)(path_arr + 4);
+                       for (size_t k = 0; k < path_var.datalen; k++) {
+                               LDKRouteHop path_conv_10_var = path_var.data[k];
+                               uint64_t path_conv_10_ref = 0;
+                               CHECK((((uint64_t)path_conv_10_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+                               CHECK((((uint64_t)&path_conv_10_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                               CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv_10_var);
+                               path_conv_10_ref = (uint64_t)path_conv_10_var.inner & ~1;
+                               path_arr_ptr[k] = path_conv_10_ref;
+                       }
+                       
+                       uint64_t short_channel_id_ref = ((uint64_t)&obj->payment_path_failed.short_channel_id) | 1;
+                       LDKRouteParameters retry_var = obj->payment_path_failed.retry;
+                       uint64_t retry_ref = 0;
+                       if ((uint64_t)retry_var.inner > 4096) {
+                               CHECK((((uint64_t)retry_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+                               CHECK((((uint64_t)&retry_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(retry_var);
+                               retry_ref = (uint64_t)retry_var.inner & ~1;
+                       }
+                       return 0 /* LDKEvent - PaymentPathFailed */; (void) payment_id_arr; (void) payment_hash_arr; (void) obj->payment_path_failed.rejected_by_dest; (void) network_update_ref; (void) obj->payment_path_failed.all_paths_failed; (void) path_arr; (void) short_channel_id_ref; (void) retry_ref;
+               }
+               case LDKEvent_PendingHTLCsForwardable: {
+                       return 0 /* LDKEvent - PendingHTLCsForwardable */; (void) obj->pending_htl_cs_forwardable.time_forwardable;
+               }
+               case LDKEvent_SpendableOutputs: {
+                       LDKCVec_SpendableOutputDescriptorZ outputs_var = obj->spendable_outputs.outputs;
+                       uint32_tArray outputs_arr = NULL;
+                       outputs_arr = init_arr(outputs_var.datalen, sizeof(uint32_t), "Native uint32_tArray Bytes");
+                       uint32_t *outputs_arr_ptr = (uint32_t*)(outputs_arr + 4);
+                       for (size_t b = 0; b < outputs_var.datalen; b++) {
+                               uint64_t outputs_conv_27_ref = ((uint64_t)&outputs_var.data[b]) | 1;
+                               outputs_arr_ptr[b] = outputs_conv_27_ref;
+                       }
+                       
+                       return 0 /* LDKEvent - SpendableOutputs */; (void) outputs_arr;
+               }
+               case LDKEvent_PaymentForwarded: {
+                       uint64_t fee_earned_msat_ref = ((uint64_t)&obj->payment_forwarded.fee_earned_msat) | 1;
+                       return 0 /* LDKEvent - PaymentForwarded */; (void) fee_earned_msat_ref; (void) obj->payment_forwarded.claim_from_onchain_tx;
+               }
+               case LDKEvent_ChannelClosed: {
+                       int8_tArray channel_id_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
+                       memcpy((uint8_t*)(channel_id_arr + 4), obj->channel_closed.channel_id.data, 32);
+                       uint64_t reason_ref = ((uint64_t)&obj->channel_closed.reason) | 1;
+                       return 0 /* LDKEvent - ChannelClosed */; (void) channel_id_arr; (void) obj->channel_closed.user_channel_id; (void) reason_ref;
+               }
+               case LDKEvent_DiscardFunding: {
+                       int8_tArray channel_id_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
+                       memcpy((uint8_t*)(channel_id_arr + 4), obj->discard_funding.channel_id.data, 32);
+                       LDKTransaction transaction_var = obj->discard_funding.transaction;
+                       int8_tArray transaction_arr = init_arr(transaction_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
+                       memcpy((uint8_t*)(transaction_arr + 4), transaction_var.data, transaction_var.datalen);
+                       return 0 /* LDKEvent - DiscardFunding */; (void) channel_id_arr; (void) transaction_arr;
+               }
+               default: abort();
+       }
+}
+uint32_t __attribute__((visibility("default"))) TS_LDKCOption_EventZ_ref_from_ptr(uint32_t ptr) {
+       LDKCOption_EventZ *obj = (LDKCOption_EventZ*)(ptr & ~1);
+       switch(obj->tag) {
+               case LDKCOption_EventZ_Some: {
+                       uint64_t some_ref = ((uint64_t)&obj->some) | 1;
+                       return 0 /* LDKCOption_EventZ - Some */; (void) some_ref;
+               }
+               case LDKCOption_EventZ_None: {
+                       return 0 /* LDKCOption_EventZ - None */;
+               }
+               default: abort();
+       }
+}
+uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_COption_EventZDecodeErrorZ_get_ok(uint32_t arg) {
+       LDKCResult_COption_EventZDecodeErrorZ *val = (LDKCResult_COption_EventZDecodeErrorZ*)(arg & ~1);
+       CHECK(val->result_ok);
+       uint64_t res_ref = ((uint64_t)&(*val->contents.result)) | 1;
+       return res_ref;
+}
+uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_COption_EventZDecodeErrorZ_get_err(uint32_t arg) {
+       LDKCResult_COption_EventZDecodeErrorZ *val = (LDKCResult_COption_EventZDecodeErrorZ*)(arg & ~1);
+       CHECK(!val->result_ok);
+       LDKDecodeError err_var = (*val->contents.err);
+       uint64_t err_ref = 0;
+       CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+       CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
+       err_ref = (uint64_t)err_var.inner & ~1;
+       return err_ref;
+}
 uint32_t __attribute__((visibility("default"))) TS_LDKErrorAction_ref_from_ptr(uint32_t ptr) {
        LDKErrorAction *obj = (LDKErrorAction*)(ptr & ~1);
        switch(obj->tag) {
@@ -1257,6 +1281,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKErrorAction_ref_from_ptr(u
                        if ((uint64_t)msg_var.inner > 4096) {
                                CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                                CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                                msg_ref = (uint64_t)msg_var.inner & ~1;
                        }
                        return 0 /* LDKErrorAction - DisconnectPeer */; (void) msg_ref;
@@ -1273,6 +1298,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKErrorAction_ref_from_ptr(u
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return 0 /* LDKErrorAction - SendErrorMessage */; (void) msg_ref;
                }
@@ -1289,6 +1315,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKMessageSendEvent_ref_from_
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return 0 /* LDKMessageSendEvent - SendAcceptChannel */; (void) node_id_arr; (void) msg_ref;
                }
@@ -1299,6 +1326,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKMessageSendEvent_ref_from_
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return 0 /* LDKMessageSendEvent - SendOpenChannel */; (void) node_id_arr; (void) msg_ref;
                }
@@ -1309,6 +1337,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKMessageSendEvent_ref_from_
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return 0 /* LDKMessageSendEvent - SendFundingCreated */; (void) node_id_arr; (void) msg_ref;
                }
@@ -1319,6 +1348,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKMessageSendEvent_ref_from_
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return 0 /* LDKMessageSendEvent - SendFundingSigned */; (void) node_id_arr; (void) msg_ref;
                }
@@ -1329,6 +1359,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKMessageSendEvent_ref_from_
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return 0 /* LDKMessageSendEvent - SendFundingLocked */; (void) node_id_arr; (void) msg_ref;
                }
@@ -1339,6 +1370,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKMessageSendEvent_ref_from_
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return 0 /* LDKMessageSendEvent - SendAnnouncementSignatures */; (void) node_id_arr; (void) msg_ref;
                }
@@ -1349,6 +1381,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKMessageSendEvent_ref_from_
                        uint64_t updates_ref = 0;
                        CHECK((((uint64_t)updates_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&updates_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(updates_var);
                        updates_ref = (uint64_t)updates_var.inner & ~1;
                        return 0 /* LDKMessageSendEvent - UpdateHTLCs */; (void) node_id_arr; (void) updates_ref;
                }
@@ -1359,6 +1392,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKMessageSendEvent_ref_from_
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return 0 /* LDKMessageSendEvent - SendRevokeAndACK */; (void) node_id_arr; (void) msg_ref;
                }
@@ -1369,6 +1403,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKMessageSendEvent_ref_from_
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return 0 /* LDKMessageSendEvent - SendClosingSigned */; (void) node_id_arr; (void) msg_ref;
                }
@@ -1379,6 +1414,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKMessageSendEvent_ref_from_
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return 0 /* LDKMessageSendEvent - SendShutdown */; (void) node_id_arr; (void) msg_ref;
                }
@@ -1389,6 +1425,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKMessageSendEvent_ref_from_
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return 0 /* LDKMessageSendEvent - SendChannelReestablish */; (void) node_id_arr; (void) msg_ref;
                }
@@ -1397,11 +1434,13 @@ uint32_t __attribute__((visibility("default"))) TS_LDKMessageSendEvent_ref_from_
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        LDKChannelUpdate update_msg_var = obj->broadcast_channel_announcement.update_msg;
                        uint64_t update_msg_ref = 0;
                        CHECK((((uint64_t)update_msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&update_msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_msg_var);
                        update_msg_ref = (uint64_t)update_msg_var.inner & ~1;
                        return 0 /* LDKMessageSendEvent - BroadcastChannelAnnouncement */; (void) msg_ref; (void) update_msg_ref;
                }
@@ -1410,6 +1449,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKMessageSendEvent_ref_from_
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return 0 /* LDKMessageSendEvent - BroadcastNodeAnnouncement */; (void) msg_ref;
                }
@@ -1418,6 +1458,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKMessageSendEvent_ref_from_
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return 0 /* LDKMessageSendEvent - BroadcastChannelUpdate */; (void) msg_ref;
                }
@@ -1428,6 +1469,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKMessageSendEvent_ref_from_
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return 0 /* LDKMessageSendEvent - SendChannelUpdate */; (void) node_id_arr; (void) msg_ref;
                }
@@ -1444,6 +1486,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKMessageSendEvent_ref_from_
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return 0 /* LDKMessageSendEvent - SendChannelRangeQuery */; (void) node_id_arr; (void) msg_ref;
                }
@@ -1454,6 +1497,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKMessageSendEvent_ref_from_
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return 0 /* LDKMessageSendEvent - SendShortIdsQuery */; (void) node_id_arr; (void) msg_ref;
                }
@@ -1464,31 +1508,13 @@ uint32_t __attribute__((visibility("default"))) TS_LDKMessageSendEvent_ref_from_
                        uint64_t msg_ref = 0;
                        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
                        msg_ref = (uint64_t)msg_var.inner & ~1;
                        return 0 /* LDKMessageSendEvent - SendReplyChannelRange */; (void) node_id_arr; (void) msg_ref;
                }
                default: abort();
        }
 }
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_MessageSendEventZ_new(uint32_tArray elems) {
-       LDKCVec_MessageSendEventZ *ret = MALLOC(sizeof(LDKCVec_MessageSendEventZ), "LDKCVec_MessageSendEventZ");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKMessageSendEvent) * ret->datalen, "LDKCVec_MessageSendEventZ Data");
-               uint32_t *java_elems = (uint32_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       uint32_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKMessageSendEvent arr_elem_conv = *(LDKMessageSendEvent*)(arr_elem_ptr);
-                       arr_elem_conv = MessageSendEvent_clone((LDKMessageSendEvent*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_MessageSendEventZ CVec_MessageSendEventZ_clone(const LDKCVec_MessageSendEventZ *orig) {
        LDKCVec_MessageSendEventZ ret = { .data = MALLOC(sizeof(LDKMessageSendEvent) * orig->datalen, "LDKCVec_MessageSendEventZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -1496,9 +1522,6 @@ static inline LDKCVec_MessageSendEventZ CVec_MessageSendEventZ_clone(const LDKCV
        }
        return ret;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_InitFeaturesDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_InitFeaturesDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_InitFeaturesDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_InitFeaturesDecodeErrorZ *val = (LDKCResult_InitFeaturesDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1506,6 +1529,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_InitFeaturesDecod
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -1516,12 +1540,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_InitFeaturesDecod
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_NodeFeaturesDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_NodeFeaturesDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_NodeFeaturesDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_NodeFeaturesDecodeErrorZ *val = (LDKCResult_NodeFeaturesDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1529,6 +1551,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_NodeFeaturesDecod
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -1539,12 +1562,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_NodeFeaturesDecod
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_ChannelFeaturesDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_ChannelFeaturesDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ChannelFeaturesDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_ChannelFeaturesDecodeErrorZ *val = (LDKCResult_ChannelFeaturesDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1552,6 +1573,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ChannelFeaturesDe
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -1562,12 +1584,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ChannelFeaturesDe
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_InvoiceFeaturesDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_InvoiceFeaturesDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_InvoiceFeaturesDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_InvoiceFeaturesDecodeErrorZ *val = (LDKCResult_InvoiceFeaturesDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1575,6 +1595,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_InvoiceFeaturesDe
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -1585,12 +1606,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_InvoiceFeaturesDe
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_ScoringParametersDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_ScoringParametersDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ScoringParametersDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_ScoringParametersDecodeErrorZ *val = (LDKCResult_ScoringParametersDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1598,6 +1617,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ScoringParameters
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -1608,12 +1628,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ScoringParameters
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_ScorerDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_ScorerDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ScorerDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_ScorerDecodeErrorZ *val = (LDKCResult_ScorerDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1621,6 +1639,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ScorerDecodeError
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -1631,12 +1650,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ScorerDecodeError
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ *val = (LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1644,6 +1661,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_DelayedPaymentOut
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -1654,12 +1672,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_DelayedPaymentOut
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ *val = (LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1667,6 +1683,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_StaticPaymentOutp
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -1677,12 +1694,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_StaticPaymentOutp
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_SpendableOutputDescriptorDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_SpendableOutputDescriptorDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_SpendableOutputDescriptorDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_SpendableOutputDescriptorDecodeErrorZ *val = (LDKCResult_SpendableOutputDescriptorDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1696,12 +1711,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_SpendableOutputDe
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_NoneNoneZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_NoneNoneZ*)arg)->result_ok;
-}
 void  __attribute__((visibility("default"))) TS_LDKCResult_NoneNoneZ_get_ok(uint32_t arg) {
        LDKCResult_NoneNoneZ *val = (LDKCResult_NoneNoneZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1741,9 +1754,6 @@ ptrArray  __attribute__((visibility("default"))) TS_C2Tuple_SignatureCVec_Signat
        return ret_arr;
 }
 
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_get_ok(uint32_t arg) {
        LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ *val = (LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1757,9 +1767,6 @@ void  __attribute__((visibility("default"))) TS_LDKCResult_C2Tuple_SignatureCVec
        CHECK(!val->result_ok);
        return *val->contents.err;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_SignatureNoneZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_SignatureNoneZ*)arg)->result_ok;
-}
 int8_tArray  __attribute__((visibility("default"))) TS_LDKCResult_SignatureNoneZ_get_ok(uint32_t arg) {
        LDKCResult_SignatureNoneZ *val = (LDKCResult_SignatureNoneZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -1830,6 +1837,7 @@ LDKCResult_NoneNoneZ validate_holder_commitment_LDKBaseSign_jcall(const void* th
        holder_tx_var = HolderCommitmentTransaction_clone(holder_tx);
        CHECK((((uint64_t)holder_tx_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&holder_tx_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(holder_tx_var);
        holder_tx_ref = (uint64_t)holder_tx_var.inner;
        if (holder_tx_var.is_owned) {
                holder_tx_ref |= 1;
@@ -1838,7 +1846,7 @@ LDKCResult_NoneNoneZ validate_holder_commitment_LDKBaseSign_jcall(const void* th
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneNoneZ ret_conv = *(LDKCResult_NoneNoneZ*)(ret_ptr);
-       ret_conv = CResult_NoneNoneZ_clone((LDKCResult_NoneNoneZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 LDKThirtyTwoBytes channel_keys_id_LDKBaseSign_jcall(const void* this_arg) {
@@ -1856,6 +1864,7 @@ LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ sign_counterparty_commitment_L
        commitment_tx_var = CommitmentTransaction_clone(commitment_tx);
        CHECK((((uint64_t)commitment_tx_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&commitment_tx_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(commitment_tx_var);
        commitment_tx_ref = (uint64_t)commitment_tx_var.inner;
        if (commitment_tx_var.is_owned) {
                commitment_tx_ref |= 1;
@@ -1864,7 +1873,7 @@ LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ sign_counterparty_commitment_L
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ ret_conv = *(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)(ret_ptr);
-       ret_conv = CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone((LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 LDKCResult_NoneNoneZ validate_counterparty_revocation_LDKBaseSign_jcall(const void* this_arg, uint64_t idx, const uint8_t (* secret)[32]) {
@@ -1875,7 +1884,7 @@ LDKCResult_NoneNoneZ validate_counterparty_revocation_LDKBaseSign_jcall(const vo
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneNoneZ ret_conv = *(LDKCResult_NoneNoneZ*)(ret_ptr);
-       ret_conv = CResult_NoneNoneZ_clone((LDKCResult_NoneNoneZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ sign_holder_commitment_and_htlcs_LDKBaseSign_jcall(const void* this_arg, const LDKHolderCommitmentTransaction * commitment_tx) {
@@ -1885,6 +1894,7 @@ LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ sign_holder_commitment_and_htl
        commitment_tx_var = HolderCommitmentTransaction_clone(commitment_tx);
        CHECK((((uint64_t)commitment_tx_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&commitment_tx_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(commitment_tx_var);
        commitment_tx_ref = (uint64_t)commitment_tx_var.inner;
        if (commitment_tx_var.is_owned) {
                commitment_tx_ref |= 1;
@@ -1893,7 +1903,7 @@ LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ sign_holder_commitment_and_htl
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ ret_conv = *(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)(ret_ptr);
-       ret_conv = CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone((LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 LDKCResult_SignatureNoneZ sign_justice_revoked_output_LDKBaseSign_jcall(const void* this_arg, LDKTransaction justice_tx, uintptr_t input, uint64_t amount, const uint8_t (* per_commitment_key)[32]) {
@@ -1908,7 +1918,7 @@ LDKCResult_SignatureNoneZ sign_justice_revoked_output_LDKBaseSign_jcall(const vo
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)(ret_ptr);
-       ret_conv = CResult_SignatureNoneZ_clone((LDKCResult_SignatureNoneZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 LDKCResult_SignatureNoneZ sign_justice_revoked_htlc_LDKBaseSign_jcall(const void* this_arg, LDKTransaction justice_tx, uintptr_t input, uint64_t amount, const uint8_t (* per_commitment_key)[32], const LDKHTLCOutputInCommitment * htlc) {
@@ -1924,6 +1934,7 @@ LDKCResult_SignatureNoneZ sign_justice_revoked_htlc_LDKBaseSign_jcall(const void
        htlc_var = HTLCOutputInCommitment_clone(htlc);
        CHECK((((uint64_t)htlc_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&htlc_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(htlc_var);
        htlc_ref = (uint64_t)htlc_var.inner;
        if (htlc_var.is_owned) {
                htlc_ref |= 1;
@@ -1932,7 +1943,7 @@ LDKCResult_SignatureNoneZ sign_justice_revoked_htlc_LDKBaseSign_jcall(const void
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)(ret_ptr);
-       ret_conv = CResult_SignatureNoneZ_clone((LDKCResult_SignatureNoneZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 LDKCResult_SignatureNoneZ sign_counterparty_htlc_transaction_LDKBaseSign_jcall(const void* this_arg, LDKTransaction htlc_tx, uintptr_t input, uint64_t amount, LDKPublicKey per_commitment_point, const LDKHTLCOutputInCommitment * htlc) {
@@ -1948,6 +1959,7 @@ LDKCResult_SignatureNoneZ sign_counterparty_htlc_transaction_LDKBaseSign_jcall(c
        htlc_var = HTLCOutputInCommitment_clone(htlc);
        CHECK((((uint64_t)htlc_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&htlc_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(htlc_var);
        htlc_ref = (uint64_t)htlc_var.inner;
        if (htlc_var.is_owned) {
                htlc_ref |= 1;
@@ -1956,7 +1968,7 @@ LDKCResult_SignatureNoneZ sign_counterparty_htlc_transaction_LDKBaseSign_jcall(c
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)(ret_ptr);
-       ret_conv = CResult_SignatureNoneZ_clone((LDKCResult_SignatureNoneZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 LDKCResult_SignatureNoneZ sign_closing_transaction_LDKBaseSign_jcall(const void* this_arg, const LDKClosingTransaction * closing_tx) {
@@ -1966,6 +1978,7 @@ LDKCResult_SignatureNoneZ sign_closing_transaction_LDKBaseSign_jcall(const void*
        closing_tx_var = ClosingTransaction_clone(closing_tx);
        CHECK((((uint64_t)closing_tx_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&closing_tx_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(closing_tx_var);
        closing_tx_ref = (uint64_t)closing_tx_var.inner;
        if (closing_tx_var.is_owned) {
                closing_tx_ref |= 1;
@@ -1974,7 +1987,7 @@ LDKCResult_SignatureNoneZ sign_closing_transaction_LDKBaseSign_jcall(const void*
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)(ret_ptr);
-       ret_conv = CResult_SignatureNoneZ_clone((LDKCResult_SignatureNoneZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 LDKCResult_SignatureNoneZ sign_channel_announcement_LDKBaseSign_jcall(const void* this_arg, const LDKUnsignedChannelAnnouncement * msg) {
@@ -1984,6 +1997,7 @@ LDKCResult_SignatureNoneZ sign_channel_announcement_LDKBaseSign_jcall(const void
        msg_var = UnsignedChannelAnnouncement_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -1992,7 +2006,7 @@ LDKCResult_SignatureNoneZ sign_channel_announcement_LDKBaseSign_jcall(const void
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_SignatureNoneZ ret_conv = *(LDKCResult_SignatureNoneZ*)(ret_ptr);
-       ret_conv = CResult_SignatureNoneZ_clone((LDKCResult_SignatureNoneZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 void ready_channel_LDKBaseSign_jcall(void* this_arg, const LDKChannelTransactionParameters * channel_parameters) {
@@ -2002,6 +2016,7 @@ void ready_channel_LDKBaseSign_jcall(void* this_arg, const LDKChannelTransaction
        channel_parameters_var = ChannelTransactionParameters_clone(channel_parameters);
        CHECK((((uint64_t)channel_parameters_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&channel_parameters_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_parameters_var);
        channel_parameters_ref = (uint64_t)channel_parameters_var.inner;
        if (channel_parameters_var.is_owned) {
                channel_parameters_ref |= 1;
@@ -2020,7 +2035,7 @@ static inline LDKBaseSign LDKBaseSign_init (/*TODO: JS Object Reference */void*
        LDKChannelPublicKeys pubkeys_conv;
        pubkeys_conv.inner = (void*)(pubkeys & (~1));
        pubkeys_conv.is_owned = (pubkeys & 1) || (pubkeys == 0);
-       pubkeys_conv = ChannelPublicKeys_clone(&pubkeys_conv);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(pubkeys_conv);
 
        LDKBaseSign ret = {
                .this_arg = (void*) calls,
@@ -2073,6 +2088,7 @@ uint32_t  __attribute__((visibility("default"))) TS_BaseSign_validate_holder_com
        LDKHolderCommitmentTransaction holder_tx_conv;
        holder_tx_conv.inner = (void*)(holder_tx & (~1));
        holder_tx_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(holder_tx_conv);
        LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
        *ret_conv = (this_arg_conv->validate_holder_commitment)(this_arg_conv->this_arg, &holder_tx_conv);
        return (uint64_t)ret_conv;
@@ -2094,6 +2110,7 @@ uint32_t  __attribute__((visibility("default"))) TS_BaseSign_sign_counterparty_c
        LDKCommitmentTransaction commitment_tx_conv;
        commitment_tx_conv.inner = (void*)(commitment_tx & (~1));
        commitment_tx_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(commitment_tx_conv);
        LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ), "LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ");
        *ret_conv = (this_arg_conv->sign_counterparty_commitment)(this_arg_conv->this_arg, &commitment_tx_conv);
        return (uint64_t)ret_conv;
@@ -2119,6 +2136,7 @@ uint32_t  __attribute__((visibility("default"))) TS_BaseSign_sign_holder_commitm
        LDKHolderCommitmentTransaction commitment_tx_conv;
        commitment_tx_conv.inner = (void*)(commitment_tx & (~1));
        commitment_tx_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(commitment_tx_conv);
        LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ), "LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ");
        *ret_conv = (this_arg_conv->sign_holder_commitment_and_htlcs)(this_arg_conv->this_arg, &commitment_tx_conv);
        return (uint64_t)ret_conv;
@@ -2158,6 +2176,7 @@ uint32_t  __attribute__((visibility("default"))) TS_BaseSign_sign_justice_revoke
        LDKHTLCOutputInCommitment htlc_conv;
        htlc_conv.inner = (void*)(htlc & (~1));
        htlc_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(htlc_conv);
        LDKCResult_SignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignatureNoneZ), "LDKCResult_SignatureNoneZ");
        *ret_conv = (this_arg_conv->sign_justice_revoked_htlc)(this_arg_conv->this_arg, justice_tx_ref, input, amount, per_commitment_key_ref, &htlc_conv);
        return (uint64_t)ret_conv;
@@ -2178,6 +2197,7 @@ uint32_t  __attribute__((visibility("default"))) TS_BaseSign_sign_counterparty_h
        LDKHTLCOutputInCommitment htlc_conv;
        htlc_conv.inner = (void*)(htlc & (~1));
        htlc_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(htlc_conv);
        LDKCResult_SignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignatureNoneZ), "LDKCResult_SignatureNoneZ");
        *ret_conv = (this_arg_conv->sign_counterparty_htlc_transaction)(this_arg_conv->this_arg, htlc_tx_ref, input, amount, per_commitment_point_ref, &htlc_conv);
        return (uint64_t)ret_conv;
@@ -2190,6 +2210,7 @@ uint32_t  __attribute__((visibility("default"))) TS_BaseSign_sign_closing_transa
        LDKClosingTransaction closing_tx_conv;
        closing_tx_conv.inner = (void*)(closing_tx & (~1));
        closing_tx_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(closing_tx_conv);
        LDKCResult_SignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignatureNoneZ), "LDKCResult_SignatureNoneZ");
        *ret_conv = (this_arg_conv->sign_closing_transaction)(this_arg_conv->this_arg, &closing_tx_conv);
        return (uint64_t)ret_conv;
@@ -2202,6 +2223,7 @@ uint32_t  __attribute__((visibility("default"))) TS_BaseSign_sign_channel_announ
        LDKUnsignedChannelAnnouncement msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        LDKCResult_SignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignatureNoneZ), "LDKCResult_SignatureNoneZ");
        *ret_conv = (this_arg_conv->sign_channel_announcement)(this_arg_conv->this_arg, &msg_conv);
        return (uint64_t)ret_conv;
@@ -2214,6 +2236,7 @@ void  __attribute__((visibility("default"))) TS_BaseSign_ready_channel(uint32_t
        LDKChannelTransactionParameters channel_parameters_conv;
        channel_parameters_conv.inner = (void*)(channel_parameters & (~1));
        channel_parameters_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_parameters_conv);
        (this_arg_conv->ready_channel)(this_arg_conv->this_arg, &channel_parameters_conv);
 }
 
@@ -2230,6 +2253,7 @@ uint32_t  __attribute__((visibility("default"))) TS_BaseSign_get_pubkeys(uint32_
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -2271,7 +2295,7 @@ static inline LDKSign LDKSign_init (/*TODO: JS Object Reference */void* o, /*TOD
        LDKChannelPublicKeys pubkeys_conv;
        pubkeys_conv.inner = (void*)(pubkeys & (~1));
        pubkeys_conv.is_owned = (pubkeys & 1) || (pubkeys == 0);
-       pubkeys_conv = ChannelPublicKeys_clone(&pubkeys_conv);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(pubkeys_conv);
 
        LDKSign ret = {
                .this_arg = (void*) calls,
@@ -2299,9 +2323,6 @@ int8_tArray  __attribute__((visibility("default"))) TS_Sign_write(uint32_t this_
        return ret_arr;
 }
 
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_SignDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_SignDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_SignDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_SignDecodeErrorZ *val = (LDKCResult_SignDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -2316,12 +2337,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_SignDecodeErrorZ_
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_RecoverableSignatureNoneZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_RecoverableSignatureNoneZ*)arg)->result_ok;
-}
 int8_tArray  __attribute__((visibility("default"))) TS_LDKCResult_RecoverableSignatureNoneZ_get_ok(uint32_t arg) {
        LDKCResult_RecoverableSignatureNoneZ *val = (LDKCResult_RecoverableSignatureNoneZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -2341,9 +2360,6 @@ static inline LDKCVec_CVec_u8ZZ CVec_CVec_u8ZZ_clone(const LDKCVec_CVec_u8ZZ *or
        }
        return ret;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_CVec_CVec_u8ZZNoneZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_CVec_CVec_u8ZZNoneZ*)arg)->result_ok;
-}
 ptrArray  __attribute__((visibility("default"))) TS_LDKCResult_CVec_CVec_u8ZZNoneZ_get_ok(uint32_t arg) {
        LDKCResult_CVec_CVec_u8ZZNoneZ *val = (LDKCResult_CVec_CVec_u8ZZNoneZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -2365,9 +2381,6 @@ void  __attribute__((visibility("default"))) TS_LDKCResult_CVec_CVec_u8ZZNoneZ_g
        CHECK(!val->result_ok);
        return *val->contents.err;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_InMemorySignerDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_InMemorySignerDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_InMemorySignerDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_InMemorySignerDecodeErrorZ *val = (LDKCResult_InMemorySignerDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -2375,6 +2388,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_InMemorySignerDec
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -2385,28 +2399,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_InMemorySignerDec
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_TxOutZ_new(uint32_tArray elems) {
-       LDKCVec_TxOutZ *ret = MALLOC(sizeof(LDKCVec_TxOutZ), "LDKCVec_TxOutZ");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKTxOut) * ret->datalen, "LDKCVec_TxOutZ Data");
-               uint32_t *java_elems = (uint32_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       uint32_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKTxOut arr_elem_conv = *(LDKTxOut*)(arr_elem_ptr);
-                       arr_elem_conv = TxOut_clone((LDKTxOut*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_TxOutZ CVec_TxOutZ_clone(const LDKCVec_TxOutZ *orig) {
        LDKCVec_TxOutZ ret = { .data = MALLOC(sizeof(LDKTxOut) * orig->datalen, "LDKCVec_TxOutZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -2414,9 +2410,6 @@ static inline LDKCVec_TxOutZ CVec_TxOutZ_clone(const LDKCVec_TxOutZ *orig) {
        }
        return ret;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_TransactionNoneZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_TransactionNoneZ*)arg)->result_ok;
-}
 int8_tArray  __attribute__((visibility("default"))) TS_LDKCResult_TransactionNoneZ_get_ok(uint32_t arg) {
        LDKCResult_TransactionNoneZ *val = (LDKCResult_TransactionNoneZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -2449,6 +2442,7 @@ uint32_t  __attribute__((visibility("default"))) TS_C2Tuple_BlockHashChannelMoni
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -2456,25 +2450,6 @@ uint32_t  __attribute__((visibility("default"))) TS_C2Tuple_BlockHashChannelMoni
        return ret_ref;
 }
 
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_C2Tuple_BlockHashChannelMonitorZZ_new(uint32_tArray elems) {
-       LDKCVec_C2Tuple_BlockHashChannelMonitorZZ *ret = MALLOC(sizeof(LDKCVec_C2Tuple_BlockHashChannelMonitorZZ), "LDKCVec_C2Tuple_BlockHashChannelMonitorZZ");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKC2Tuple_BlockHashChannelMonitorZ) * ret->datalen, "LDKCVec_C2Tuple_BlockHashChannelMonitorZZ Data");
-               uint32_t *java_elems = (uint32_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       uint32_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKC2Tuple_BlockHashChannelMonitorZ arr_elem_conv = *(LDKC2Tuple_BlockHashChannelMonitorZ*)(arr_elem_ptr);
-                       arr_elem_conv = C2Tuple_BlockHashChannelMonitorZ_clone((LDKC2Tuple_BlockHashChannelMonitorZ*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_C2Tuple_BlockHashChannelMonitorZZ CVec_C2Tuple_BlockHashChannelMonitorZZ_clone(const LDKCVec_C2Tuple_BlockHashChannelMonitorZZ *orig) {
        LDKCVec_C2Tuple_BlockHashChannelMonitorZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_BlockHashChannelMonitorZ) * orig->datalen, "LDKCVec_C2Tuple_BlockHashChannelMonitorZZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -2482,9 +2457,6 @@ static inline LDKCVec_C2Tuple_BlockHashChannelMonitorZZ CVec_C2Tuple_BlockHashCh
        }
        return ret;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ*)arg)->result_ok;
-}
 uint32_tArray  __attribute__((visibility("default"))) TS_LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_get_ok(uint32_t arg) {
        LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ *val = (LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -2550,15 +2522,13 @@ uint32_t __attribute__((visibility("default"))) TS_LDKAPIError_ref_from_ptr(uint
                        uint64_t script_ref = 0;
                        CHECK((((uint64_t)script_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&script_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(script_var);
                        script_ref = (uint64_t)script_var.inner & ~1;
                        return 0 /* LDKAPIError - IncompatibleShutdownScript */; (void) script_ref;
                }
                default: abort();
        }
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_NoneAPIErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_NoneAPIErrorZ*)arg)->result_ok;
-}
 void  __attribute__((visibility("default"))) TS_LDKCResult_NoneAPIErrorZ_get_ok(uint32_t arg) {
        LDKCResult_NoneAPIErrorZ *val = (LDKCResult_NoneAPIErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -2570,25 +2540,6 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_NoneAPIErrorZ_get
        uint64_t err_ref = ((uint64_t)&(*val->contents.err)) | 1;
        return err_ref;
 }
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_CResult_NoneAPIErrorZZ_new(uint32_tArray elems) {
-       LDKCVec_CResult_NoneAPIErrorZZ *ret = MALLOC(sizeof(LDKCVec_CResult_NoneAPIErrorZZ), "LDKCVec_CResult_NoneAPIErrorZZ");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKCResult_NoneAPIErrorZ) * ret->datalen, "LDKCVec_CResult_NoneAPIErrorZZ Data");
-               uint32_t *java_elems = (uint32_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       uint32_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKCResult_NoneAPIErrorZ arr_elem_conv = *(LDKCResult_NoneAPIErrorZ*)(arr_elem_ptr);
-                       arr_elem_conv = CResult_NoneAPIErrorZ_clone((LDKCResult_NoneAPIErrorZ*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_CResult_NoneAPIErrorZZ CVec_CResult_NoneAPIErrorZZ_clone(const LDKCVec_CResult_NoneAPIErrorZZ *orig) {
        LDKCVec_CResult_NoneAPIErrorZZ ret = { .data = MALLOC(sizeof(LDKCResult_NoneAPIErrorZ) * orig->datalen, "LDKCVec_CResult_NoneAPIErrorZZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -2596,25 +2547,6 @@ static inline LDKCVec_CResult_NoneAPIErrorZZ CVec_CResult_NoneAPIErrorZZ_clone(c
        }
        return ret;
 }
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_APIErrorZ_new(uint32_tArray elems) {
-       LDKCVec_APIErrorZ *ret = MALLOC(sizeof(LDKCVec_APIErrorZ), "LDKCVec_APIErrorZ");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKAPIError) * ret->datalen, "LDKCVec_APIErrorZ Data");
-               uint32_t *java_elems = (uint32_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       uint32_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKAPIError arr_elem_conv = *(LDKAPIError*)(arr_elem_ptr);
-                       arr_elem_conv = APIError_clone((LDKAPIError*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_APIErrorZ CVec_APIErrorZ_clone(const LDKCVec_APIErrorZ *orig) {
        LDKCVec_APIErrorZ ret = { .data = MALLOC(sizeof(LDKAPIError) * orig->datalen, "LDKCVec_APIErrorZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -2622,9 +2554,6 @@ static inline LDKCVec_APIErrorZ CVec_APIErrorZ_clone(const LDKCVec_APIErrorZ *or
        }
        return ret;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult__u832APIErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult__u832APIErrorZ*)arg)->result_ok;
-}
 int8_tArray  __attribute__((visibility("default"))) TS_LDKCResult__u832APIErrorZ_get_ok(uint32_t arg) {
        LDKCResult__u832APIErrorZ *val = (LDKCResult__u832APIErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -2688,6 +2617,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKPaymentSendFailure_ref_fro
                        if ((uint64_t)failed_paths_retry_var.inner > 4096) {
                                CHECK((((uint64_t)failed_paths_retry_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                                CHECK((((uint64_t)&failed_paths_retry_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(failed_paths_retry_var);
                                failed_paths_retry_ref = (uint64_t)failed_paths_retry_var.inner & ~1;
                        }
                        int8_tArray payment_id_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
@@ -2697,9 +2627,6 @@ uint32_t __attribute__((visibility("default"))) TS_LDKPaymentSendFailure_ref_fro
                default: abort();
        }
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_PaymentIdPaymentSendFailureZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_PaymentIdPaymentSendFailureZ*)arg)->result_ok;
-}
 int8_tArray  __attribute__((visibility("default"))) TS_LDKCResult_PaymentIdPaymentSendFailureZ_get_ok(uint32_t arg) {
        LDKCResult_PaymentIdPaymentSendFailureZ *val = (LDKCResult_PaymentIdPaymentSendFailureZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -2713,9 +2640,6 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_PaymentIdPaymentS
        uint64_t err_ref = ((uint64_t)&(*val->contents.err)) | 1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_NonePaymentSendFailureZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_NonePaymentSendFailureZ*)arg)->result_ok;
-}
 void  __attribute__((visibility("default"))) TS_LDKCResult_NonePaymentSendFailureZ_get_ok(uint32_t arg) {
        LDKCResult_NonePaymentSendFailureZ *val = (LDKCResult_NonePaymentSendFailureZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -2747,9 +2671,6 @@ int8_tArray  __attribute__((visibility("default"))) TS_C2Tuple_PaymentHashPaymen
        return ret_arr;
 }
 
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_get_ok(uint32_t arg) {
        LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ *val = (LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -2790,25 +2711,6 @@ uint32_t __attribute__((visibility("default"))) TS_LDKNetAddress_ref_from_ptr(ui
                default: abort();
        }
 }
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_NetAddressZ_new(uint32_tArray elems) {
-       LDKCVec_NetAddressZ *ret = MALLOC(sizeof(LDKCVec_NetAddressZ), "LDKCVec_NetAddressZ");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKNetAddress) * ret->datalen, "LDKCVec_NetAddressZ Data");
-               uint32_t *java_elems = (uint32_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       uint32_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKNetAddress arr_elem_conv = *(LDKNetAddress*)(arr_elem_ptr);
-                       arr_elem_conv = NetAddress_clone((LDKNetAddress*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_NetAddressZ CVec_NetAddressZ_clone(const LDKCVec_NetAddressZ *orig) {
        LDKCVec_NetAddressZ ret = { .data = MALLOC(sizeof(LDKNetAddress) * orig->datalen, "LDKCVec_NetAddressZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -2836,9 +2738,6 @@ int8_tArray  __attribute__((visibility("default"))) TS_C2Tuple_PaymentHashPaymen
        return ret_arr;
 }
 
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_PaymentSecretAPIErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_PaymentSecretAPIErrorZ*)arg)->result_ok;
-}
 int8_tArray  __attribute__((visibility("default"))) TS_LDKCResult_PaymentSecretAPIErrorZ_get_ok(uint32_t arg) {
        LDKCResult_PaymentSecretAPIErrorZ *val = (LDKCResult_PaymentSecretAPIErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -2852,25 +2751,6 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_PaymentSecretAPIE
        uint64_t err_ref = ((uint64_t)&(*val->contents.err)) | 1;
        return err_ref;
 }
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_ChannelMonitorZ_new(uint32_tArray elems) {
-       LDKCVec_ChannelMonitorZ *ret = MALLOC(sizeof(LDKCVec_ChannelMonitorZ), "LDKCVec_ChannelMonitorZ");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKChannelMonitor) * ret->datalen, "LDKCVec_ChannelMonitorZ Data");
-               uint32_t *java_elems = (uint32_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       uint32_t arr_elem = java_elems[i];
-                       LDKChannelMonitor arr_elem_conv;
-                       arr_elem_conv.inner = (void*)(arr_elem & (~1));
-                       arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0);
-                       arr_elem_conv = ChannelMonitor_clone(&arr_elem_conv);
-                       ret->data[i] = arr_elem_conv;
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_ChannelMonitorZ CVec_ChannelMonitorZ_clone(const LDKCVec_ChannelMonitorZ *orig) {
        LDKCVec_ChannelMonitorZ ret = { .data = MALLOC(sizeof(LDKChannelMonitor) * orig->datalen, "LDKCVec_ChannelMonitorZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -2899,6 +2779,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ watch_channel_LDKWatch_jcall(const void*
        uint64_t funding_txo_ref = 0;
        CHECK((((uint64_t)funding_txo_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&funding_txo_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_txo_var);
        funding_txo_ref = (uint64_t)funding_txo_var.inner;
        if (funding_txo_var.is_owned) {
                funding_txo_ref |= 1;
@@ -2907,6 +2788,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ watch_channel_LDKWatch_jcall(const void*
        uint64_t monitor_ref = 0;
        CHECK((((uint64_t)monitor_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&monitor_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(monitor_var);
        monitor_ref = (uint64_t)monitor_var.inner;
        if (monitor_var.is_owned) {
                monitor_ref |= 1;
@@ -2915,7 +2797,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ watch_channel_LDKWatch_jcall(const void*
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneChannelMonitorUpdateErrZ ret_conv = *(LDKCResult_NoneChannelMonitorUpdateErrZ*)(ret_ptr);
-       ret_conv = CResult_NoneChannelMonitorUpdateErrZ_clone((LDKCResult_NoneChannelMonitorUpdateErrZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 LDKCResult_NoneChannelMonitorUpdateErrZ update_channel_LDKWatch_jcall(const void* this_arg, LDKOutPoint funding_txo, LDKChannelMonitorUpdate update) {
@@ -2924,6 +2806,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ update_channel_LDKWatch_jcall(const void
        uint64_t funding_txo_ref = 0;
        CHECK((((uint64_t)funding_txo_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&funding_txo_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_txo_var);
        funding_txo_ref = (uint64_t)funding_txo_var.inner;
        if (funding_txo_var.is_owned) {
                funding_txo_ref |= 1;
@@ -2932,6 +2815,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ update_channel_LDKWatch_jcall(const void
        uint64_t update_ref = 0;
        CHECK((((uint64_t)update_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&update_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_var);
        update_ref = (uint64_t)update_var.inner;
        if (update_var.is_owned) {
                update_ref |= 1;
@@ -2940,7 +2824,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ update_channel_LDKWatch_jcall(const void
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneChannelMonitorUpdateErrZ ret_conv = *(LDKCResult_NoneChannelMonitorUpdateErrZ*)(ret_ptr);
-       ret_conv = CResult_NoneChannelMonitorUpdateErrZ_clone((LDKCResult_NoneChannelMonitorUpdateErrZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 LDKCVec_MonitorEventZ release_pending_monitor_events_LDKWatch_jcall(const void* this_arg) {
@@ -2958,7 +2842,7 @@ LDKCVec_MonitorEventZ release_pending_monitor_events_LDKWatch_jcall(const void*
                void* ret_conv_14_ptr = (void*)(((uint64_t)ret_conv_14) & ~1);
                CHECK_ACCESS(ret_conv_14_ptr);
                LDKMonitorEvent ret_conv_14_conv = *(LDKMonitorEvent*)(ret_conv_14_ptr);
-               ret_conv_14_conv = MonitorEvent_clone((LDKMonitorEvent*)(((uint64_t)ret_conv_14) & ~1));
+               FREE((void*)ret_conv_14);
                ret_constr.data[o] = ret_conv_14_conv;
        }
        return ret_constr;
@@ -2993,10 +2877,12 @@ uint32_t  __attribute__((visibility("default"))) TS_Watch_watch_channel(uint32_t
        LDKOutPoint funding_txo_conv;
        funding_txo_conv.inner = (void*)(funding_txo & (~1));
        funding_txo_conv.is_owned = (funding_txo & 1) || (funding_txo == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_txo_conv);
        funding_txo_conv = OutPoint_clone(&funding_txo_conv);
        LDKChannelMonitor monitor_conv;
        monitor_conv.inner = (void*)(monitor & (~1));
        monitor_conv.is_owned = (monitor & 1) || (monitor == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(monitor_conv);
        monitor_conv = ChannelMonitor_clone(&monitor_conv);
        LDKCResult_NoneChannelMonitorUpdateErrZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneChannelMonitorUpdateErrZ), "LDKCResult_NoneChannelMonitorUpdateErrZ");
        *ret_conv = (this_arg_conv->watch_channel)(this_arg_conv->this_arg, funding_txo_conv, monitor_conv);
@@ -3010,10 +2896,12 @@ uint32_t  __attribute__((visibility("default"))) TS_Watch_update_channel(uint32_
        LDKOutPoint funding_txo_conv;
        funding_txo_conv.inner = (void*)(funding_txo & (~1));
        funding_txo_conv.is_owned = (funding_txo & 1) || (funding_txo == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_txo_conv);
        funding_txo_conv = OutPoint_clone(&funding_txo_conv);
        LDKChannelMonitorUpdate update_conv;
        update_conv.inner = (void*)(update & (~1));
        update_conv.is_owned = (update & 1) || (update == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_conv);
        update_conv = ChannelMonitorUpdate_clone(&update_conv);
        LDKCResult_NoneChannelMonitorUpdateErrZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneChannelMonitorUpdateErrZ), "LDKCResult_NoneChannelMonitorUpdateErrZ");
        *ret_conv = (this_arg_conv->update_channel)(this_arg_conv->this_arg, funding_txo_conv, update_conv);
@@ -3137,7 +3025,7 @@ LDKShutdownScript get_shutdown_scriptpubkey_LDKKeysInterface_jcall(const void* t
        LDKShutdownScript ret_conv;
        ret_conv.inner = (void*)(ret & (~1));
        ret_conv.is_owned = (ret & 1) || (ret == 0);
-       ret_conv = ShutdownScript_clone(&ret_conv);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv);
        return ret_conv;
 }
 LDKSign get_channel_signer_LDKKeysInterface_jcall(const void* this_arg, bool inbound, uint64_t channel_value_satoshis) {
@@ -3146,7 +3034,7 @@ LDKSign get_channel_signer_LDKKeysInterface_jcall(const void* this_arg, bool inb
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKSign ret_conv = *(LDKSign*)(ret_ptr);
-       ret_conv = Sign_clone(&ret_conv);
+       FREE((void*)ret);
        return ret_conv;
 }
 LDKThirtyTwoBytes get_secure_random_bytes_LDKKeysInterface_jcall(const void* this_arg) {
@@ -3166,7 +3054,7 @@ LDKCResult_SignDecodeErrorZ read_chan_signer_LDKKeysInterface_jcall(const void*
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_SignDecodeErrorZ ret_conv = *(LDKCResult_SignDecodeErrorZ*)(ret_ptr);
-       ret_conv = CResult_SignDecodeErrorZ_clone((LDKCResult_SignDecodeErrorZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 LDKCResult_RecoverableSignatureNoneZ sign_invoice_LDKKeysInterface_jcall(const void* this_arg, LDKCVec_u8Z invoice_preimage) {
@@ -3179,7 +3067,7 @@ LDKCResult_RecoverableSignatureNoneZ sign_invoice_LDKKeysInterface_jcall(const v
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_RecoverableSignatureNoneZ ret_conv = *(LDKCResult_RecoverableSignatureNoneZ*)(ret_ptr);
-       ret_conv = CResult_RecoverableSignatureNoneZ_clone((LDKCResult_RecoverableSignatureNoneZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 static void LDKKeysInterface_JCalls_cloned(LDKKeysInterface* new_obj) {
@@ -3237,6 +3125,7 @@ uint32_t  __attribute__((visibility("default"))) TS_KeysInterface_get_shutdown_s
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -3344,11 +3233,19 @@ static void LDKLogger_JCalls_free(void* this_arg) {
                FREE(j_calls);
        }
 }
-void log_LDKLogger_jcall(const void* this_arg, const char* record) {
+void log_LDKLogger_jcall(const void* this_arg, const LDKRecord * record) {
        LDKLogger_JCalls *j_calls = (LDKLogger_JCalls*) this_arg;
-       const char* record_str = record;
-       jstring record_conv = str_ref_to_ts(record_str, strlen(record_str));
-       js_invoke_function_1(j_calls->log_meth, record_conv);
+       LDKRecord record_var = *record;
+       uint64_t record_ref = 0;
+       record_var = Record_clone(record);
+       CHECK((((uint64_t)record_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+       CHECK((((uint64_t)&record_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(record_var);
+       record_ref = (uint64_t)record_var.inner;
+       if (record_var.is_owned) {
+               record_ref |= 1;
+       }
+       js_invoke_function_1(j_calls->log_meth, record_ref);
 }
 static void LDKLogger_JCalls_cloned(LDKLogger* new_obj) {
        LDKLogger_JCalls *j_calls = (LDKLogger_JCalls*) new_obj->this_arg;
@@ -3390,13 +3287,11 @@ uint32_t  __attribute__((visibility("default"))) TS_C2Tuple_BlockHashChannelMana
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner & ~1;
        return ret_ref;
 }
 
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ *val = (LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3411,12 +3306,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_C2Tuple_BlockHash
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_ChannelConfigDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_ChannelConfigDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ChannelConfigDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_ChannelConfigDecodeErrorZ *val = (LDKCResult_ChannelConfigDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3424,6 +3317,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ChannelConfigDeco
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -3434,12 +3328,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ChannelConfigDeco
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_OutPointDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_OutPointDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_OutPointDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_OutPointDecodeErrorZ *val = (LDKCResult_OutPointDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3447,6 +3339,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_OutPointDecodeErr
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -3457,6 +3350,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_OutPointDecodeErr
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
@@ -3561,9 +3455,6 @@ uint32_t __attribute__((visibility("default"))) TS_LDKCOption_TypeZ_ref_from_ptr
                default: abort();
        }
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_COption_TypeZDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_COption_TypeZDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_COption_TypeZDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_COption_TypeZDecodeErrorZ *val = (LDKCResult_COption_TypeZDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3577,6 +3468,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_COption_TypeZDeco
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
@@ -3593,6 +3485,7 @@ uint32_t __attribute__((visibility("default"))) TS_LDKPaymentError_ref_from_ptr(
                        uint64_t routing_ref = 0;
                        CHECK((((uint64_t)routing_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&routing_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(routing_var);
                        routing_ref = (uint64_t)routing_var.inner & ~1;
                        return 0 /* LDKPaymentError - Routing */; (void) routing_ref;
                }
@@ -3603,9 +3496,6 @@ uint32_t __attribute__((visibility("default"))) TS_LDKPaymentError_ref_from_ptr(
                default: abort();
        }
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_PaymentIdPaymentErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_PaymentIdPaymentErrorZ*)arg)->result_ok;
-}
 int8_tArray  __attribute__((visibility("default"))) TS_LDKCResult_PaymentIdPaymentErrorZ_get_ok(uint32_t arg) {
        LDKCResult_PaymentIdPaymentErrorZ *val = (LDKCResult_PaymentIdPaymentErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3619,9 +3509,6 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_PaymentIdPaymentE
        uint64_t err_ref = ((uint64_t)&(*val->contents.err)) | 1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_SiPrefixNoneZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_SiPrefixNoneZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_SiPrefixNoneZ_get_ok(uint32_t arg) {
        LDKCResult_SiPrefixNoneZ *val = (LDKCResult_SiPrefixNoneZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3633,9 +3520,6 @@ void  __attribute__((visibility("default"))) TS_LDKCResult_SiPrefixNoneZ_get_err
        CHECK(!val->result_ok);
        return *val->contents.err;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_InvoiceNoneZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_InvoiceNoneZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_InvoiceNoneZ_get_ok(uint32_t arg) {
        LDKCResult_InvoiceNoneZ *val = (LDKCResult_InvoiceNoneZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3643,6 +3527,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_InvoiceNoneZ_get_
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -3651,9 +3536,6 @@ void  __attribute__((visibility("default"))) TS_LDKCResult_InvoiceNoneZ_get_err(
        CHECK(!val->result_ok);
        return *val->contents.err;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_SignedRawInvoiceNoneZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_SignedRawInvoiceNoneZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_SignedRawInvoiceNoneZ_get_ok(uint32_t arg) {
        LDKCResult_SignedRawInvoiceNoneZ *val = (LDKCResult_SignedRawInvoiceNoneZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3661,6 +3543,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_SignedRawInvoiceN
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -3678,6 +3561,7 @@ uint32_t  __attribute__((visibility("default"))) TS_C3Tuple_RawInvoice_u832Invoi
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -3704,6 +3588,7 @@ uint32_t  __attribute__((visibility("default"))) TS_C3Tuple_RawInvoice_u832Invoi
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -3711,9 +3596,6 @@ uint32_t  __attribute__((visibility("default"))) TS_C3Tuple_RawInvoice_u832Invoi
        return ret_ref;
 }
 
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_PayeePubKeyErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_PayeePubKeyErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_PayeePubKeyErrorZ_get_ok(uint32_t arg) {
        LDKCResult_PayeePubKeyErrorZ *val = (LDKCResult_PayeePubKeyErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3721,6 +3603,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_PayeePubKeyErrorZ
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -3730,25 +3613,6 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_PayeePubKeyErrorZ
        uint32_t err_conv = LDKSecp256k1Error_to_js((*val->contents.err));
        return err_conv;
 }
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_PrivateRouteZ_new(uint32_tArray elems) {
-       LDKCVec_PrivateRouteZ *ret = MALLOC(sizeof(LDKCVec_PrivateRouteZ), "LDKCVec_PrivateRouteZ");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKPrivateRoute) * ret->datalen, "LDKCVec_PrivateRouteZ Data");
-               uint32_t *java_elems = (uint32_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       uint32_t arr_elem = java_elems[i];
-                       LDKPrivateRoute arr_elem_conv;
-                       arr_elem_conv.inner = (void*)(arr_elem & (~1));
-                       arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0);
-                       arr_elem_conv = PrivateRoute_clone(&arr_elem_conv);
-                       ret->data[i] = arr_elem_conv;
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_PrivateRouteZ CVec_PrivateRouteZ_clone(const LDKCVec_PrivateRouteZ *orig) {
        LDKCVec_PrivateRouteZ ret = { .data = MALLOC(sizeof(LDKPrivateRoute) * orig->datalen, "LDKCVec_PrivateRouteZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -3756,9 +3620,6 @@ static inline LDKCVec_PrivateRouteZ CVec_PrivateRouteZ_clone(const LDKCVec_Priva
        }
        return ret;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_PositiveTimestampCreationErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_PositiveTimestampCreationErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_PositiveTimestampCreationErrorZ_get_ok(uint32_t arg) {
        LDKCResult_PositiveTimestampCreationErrorZ *val = (LDKCResult_PositiveTimestampCreationErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3766,6 +3627,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_PositiveTimestamp
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -3775,9 +3637,6 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_PositiveTimestamp
        uint32_t err_conv = LDKCreationError_to_js((*val->contents.err));
        return err_conv;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_NoneSemanticErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_NoneSemanticErrorZ*)arg)->result_ok;
-}
 void  __attribute__((visibility("default"))) TS_LDKCResult_NoneSemanticErrorZ_get_ok(uint32_t arg) {
        LDKCResult_NoneSemanticErrorZ *val = (LDKCResult_NoneSemanticErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3789,9 +3648,6 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_NoneSemanticError
        uint32_t err_conv = LDKSemanticError_to_js((*val->contents.err));
        return err_conv;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_InvoiceSemanticErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_InvoiceSemanticErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_InvoiceSemanticErrorZ_get_ok(uint32_t arg) {
        LDKCResult_InvoiceSemanticErrorZ *val = (LDKCResult_InvoiceSemanticErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3799,6 +3655,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_InvoiceSemanticEr
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -3808,9 +3665,6 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_InvoiceSemanticEr
        uint32_t err_conv = LDKSemanticError_to_js((*val->contents.err));
        return err_conv;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_DescriptionCreationErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_DescriptionCreationErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_DescriptionCreationErrorZ_get_ok(uint32_t arg) {
        LDKCResult_DescriptionCreationErrorZ *val = (LDKCResult_DescriptionCreationErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3818,6 +3672,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_DescriptionCreati
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -3827,9 +3682,6 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_DescriptionCreati
        uint32_t err_conv = LDKCreationError_to_js((*val->contents.err));
        return err_conv;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_ExpiryTimeCreationErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_ExpiryTimeCreationErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ExpiryTimeCreationErrorZ_get_ok(uint32_t arg) {
        LDKCResult_ExpiryTimeCreationErrorZ *val = (LDKCResult_ExpiryTimeCreationErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3837,6 +3689,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ExpiryTimeCreatio
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -3846,9 +3699,6 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ExpiryTimeCreatio
        uint32_t err_conv = LDKCreationError_to_js((*val->contents.err));
        return err_conv;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_PrivateRouteCreationErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_PrivateRouteCreationErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_PrivateRouteCreationErrorZ_get_ok(uint32_t arg) {
        LDKCResult_PrivateRouteCreationErrorZ *val = (LDKCResult_PrivateRouteCreationErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3856,6 +3706,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_PrivateRouteCreat
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -3865,9 +3716,6 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_PrivateRouteCreat
        uint32_t err_conv = LDKCreationError_to_js((*val->contents.err));
        return err_conv;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_StringErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_StringErrorZ*)arg)->result_ok;
-}
 jstring  __attribute__((visibility("default"))) TS_LDKCResult_StringErrorZ_get_ok(uint32_t arg) {
        LDKCResult_StringErrorZ *val = (LDKCResult_StringErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3881,9 +3729,6 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_StringErrorZ_get_
        uint32_t err_conv = LDKSecp256k1Error_to_js((*val->contents.err));
        return err_conv;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_ChannelMonitorUpdateDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_ChannelMonitorUpdateDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ChannelMonitorUpdateDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_ChannelMonitorUpdateDecodeErrorZ *val = (LDKCResult_ChannelMonitorUpdateDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3891,6 +3736,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ChannelMonitorUpd
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -3901,11 +3747,39 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ChannelMonitorUpd
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_HTLCUpdateDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_HTLCUpdateDecodeErrorZ*)arg)->result_ok;
+uint32_t __attribute__((visibility("default"))) TS_LDKCOption_MonitorEventZ_ref_from_ptr(uint32_t ptr) {
+       LDKCOption_MonitorEventZ *obj = (LDKCOption_MonitorEventZ*)(ptr & ~1);
+       switch(obj->tag) {
+               case LDKCOption_MonitorEventZ_Some: {
+                       uint64_t some_ref = ((uint64_t)&obj->some) | 1;
+                       return 0 /* LDKCOption_MonitorEventZ - Some */; (void) some_ref;
+               }
+               case LDKCOption_MonitorEventZ_None: {
+                       return 0 /* LDKCOption_MonitorEventZ - None */;
+               }
+               default: abort();
+       }
+}
+uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_COption_MonitorEventZDecodeErrorZ_get_ok(uint32_t arg) {
+       LDKCResult_COption_MonitorEventZDecodeErrorZ *val = (LDKCResult_COption_MonitorEventZDecodeErrorZ*)(arg & ~1);
+       CHECK(val->result_ok);
+       uint64_t res_ref = ((uint64_t)&(*val->contents.result)) | 1;
+       return res_ref;
+}
+uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_COption_MonitorEventZDecodeErrorZ_get_err(uint32_t arg) {
+       LDKCResult_COption_MonitorEventZDecodeErrorZ *val = (LDKCResult_COption_MonitorEventZDecodeErrorZ*)(arg & ~1);
+       CHECK(!val->result_ok);
+       LDKDecodeError err_var = (*val->contents.err);
+       uint64_t err_ref = 0;
+       CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+       CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
+       err_ref = (uint64_t)err_var.inner & ~1;
+       return err_ref;
 }
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_HTLCUpdateDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_HTLCUpdateDecodeErrorZ *val = (LDKCResult_HTLCUpdateDecodeErrorZ*)(arg & ~1);
@@ -3914,6 +3788,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_HTLCUpdateDecodeE
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -3924,12 +3799,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_HTLCUpdateDecodeE
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_NoneMonitorUpdateErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_NoneMonitorUpdateErrorZ*)arg)->result_ok;
-}
 void  __attribute__((visibility("default"))) TS_LDKCResult_NoneMonitorUpdateErrorZ_get_ok(uint32_t arg) {
        LDKCResult_NoneMonitorUpdateErrorZ *val = (LDKCResult_NoneMonitorUpdateErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -3942,6 +3815,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_NoneMonitorUpdate
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
@@ -3954,6 +3828,7 @@ uint32_t  __attribute__((visibility("default"))) TS_C2Tuple_OutPointScriptZ_get_
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -3994,25 +3869,6 @@ int8_tArray  __attribute__((visibility("default"))) TS_C2Tuple_u32ScriptZ_get_b(
        return ret_arr;
 }
 
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_C2Tuple_u32ScriptZZ_new(uint32_tArray elems) {
-       LDKCVec_C2Tuple_u32ScriptZZ *ret = MALLOC(sizeof(LDKCVec_C2Tuple_u32ScriptZZ), "LDKCVec_C2Tuple_u32ScriptZZ");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKC2Tuple_u32ScriptZ) * ret->datalen, "LDKCVec_C2Tuple_u32ScriptZZ Data");
-               uint32_t *java_elems = (uint32_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       uint32_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKC2Tuple_u32ScriptZ arr_elem_conv = *(LDKC2Tuple_u32ScriptZ*)(arr_elem_ptr);
-                       arr_elem_conv = C2Tuple_u32ScriptZ_clone((LDKC2Tuple_u32ScriptZ*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_C2Tuple_u32ScriptZZ CVec_C2Tuple_u32ScriptZZ_clone(const LDKCVec_C2Tuple_u32ScriptZZ *orig) {
        LDKCVec_C2Tuple_u32ScriptZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_u32ScriptZ) * orig->datalen, "LDKCVec_C2Tuple_u32ScriptZZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -4049,25 +3905,6 @@ uint32_tArray  __attribute__((visibility("default"))) TS_C2Tuple_TxidCVec_C2Tupl
        return ret_arr;
 }
 
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ_new(uint32_tArray elems) {
-       LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ *ret = MALLOC(sizeof(LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ), "LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ) * ret->datalen, "LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ Data");
-               uint32_t *java_elems = (uint32_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       uint32_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ arr_elem_conv = *(LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ*)(arr_elem_ptr);
-                       arr_elem_conv = C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_clone((LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ CVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ_clone(const LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ *orig) {
        LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ) * orig->datalen, "LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -4075,166 +3912,6 @@ static inline LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ CVec_C2Tuple_TxidCV
        }
        return ret;
 }
-uint32_t __attribute__((visibility("default"))) TS_LDKPaymentPurpose_ref_from_ptr(uint32_t ptr) {
-       LDKPaymentPurpose *obj = (LDKPaymentPurpose*)(ptr & ~1);
-       switch(obj->tag) {
-               case LDKPaymentPurpose_InvoicePayment: {
-                       int8_tArray payment_preimage_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
-                       memcpy((uint8_t*)(payment_preimage_arr + 4), obj->invoice_payment.payment_preimage.data, 32);
-                       int8_tArray payment_secret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
-                       memcpy((uint8_t*)(payment_secret_arr + 4), obj->invoice_payment.payment_secret.data, 32);
-                       return 0 /* LDKPaymentPurpose - InvoicePayment */; (void) payment_preimage_arr; (void) payment_secret_arr; (void) obj->invoice_payment.user_payment_id;
-               }
-               case LDKPaymentPurpose_SpontaneousPayment: {
-                       int8_tArray spontaneous_payment_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
-                       memcpy((uint8_t*)(spontaneous_payment_arr + 4), obj->spontaneous_payment.data, 32);
-                       return 0 /* LDKPaymentPurpose - SpontaneousPayment */; (void) spontaneous_payment_arr;
-               }
-               default: abort();
-       }
-}
-uint32_t __attribute__((visibility("default"))) TS_LDKClosureReason_ref_from_ptr(uint32_t ptr) {
-       LDKClosureReason *obj = (LDKClosureReason*)(ptr & ~1);
-       switch(obj->tag) {
-               case LDKClosureReason_CounterpartyForceClosed: {
-                       LDKStr peer_msg_str = obj->counterparty_force_closed.peer_msg;
-                       jstring peer_msg_conv = str_ref_to_ts(peer_msg_str.chars, peer_msg_str.len);
-                       return 0 /* LDKClosureReason - CounterpartyForceClosed */; (void) peer_msg_conv;
-               }
-               case LDKClosureReason_HolderForceClosed: {
-                       return 0 /* LDKClosureReason - HolderForceClosed */;
-               }
-               case LDKClosureReason_CooperativeClosure: {
-                       return 0 /* LDKClosureReason - CooperativeClosure */;
-               }
-               case LDKClosureReason_CommitmentTxConfirmed: {
-                       return 0 /* LDKClosureReason - CommitmentTxConfirmed */;
-               }
-               case LDKClosureReason_ProcessingError: {
-                       LDKStr err_str = obj->processing_error.err;
-                       jstring err_conv = str_ref_to_ts(err_str.chars, err_str.len);
-                       return 0 /* LDKClosureReason - ProcessingError */; (void) err_conv;
-               }
-               case LDKClosureReason_DisconnectedPeer: {
-                       return 0 /* LDKClosureReason - DisconnectedPeer */;
-               }
-               case LDKClosureReason_OutdatedChannelManager: {
-                       return 0 /* LDKClosureReason - OutdatedChannelManager */;
-               }
-               default: abort();
-       }
-}
-uint32_t __attribute__((visibility("default"))) TS_LDKEvent_ref_from_ptr(uint32_t ptr) {
-       LDKEvent *obj = (LDKEvent*)(ptr & ~1);
-       switch(obj->tag) {
-               case LDKEvent_FundingGenerationReady: {
-                       int8_tArray temporary_channel_id_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
-                       memcpy((uint8_t*)(temporary_channel_id_arr + 4), obj->funding_generation_ready.temporary_channel_id.data, 32);
-                       LDKCVec_u8Z output_script_var = obj->funding_generation_ready.output_script;
-                       int8_tArray output_script_arr = init_arr(output_script_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
-                       memcpy((uint8_t*)(output_script_arr + 4), output_script_var.data, output_script_var.datalen);
-                       return 0 /* LDKEvent - FundingGenerationReady */; (void) temporary_channel_id_arr; (void) obj->funding_generation_ready.channel_value_satoshis; (void) output_script_arr; (void) obj->funding_generation_ready.user_channel_id;
-               }
-               case LDKEvent_PaymentReceived: {
-                       int8_tArray payment_hash_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
-                       memcpy((uint8_t*)(payment_hash_arr + 4), obj->payment_received.payment_hash.data, 32);
-                       uint64_t purpose_ref = ((uint64_t)&obj->payment_received.purpose) | 1;
-                       return 0 /* LDKEvent - PaymentReceived */; (void) payment_hash_arr; (void) obj->payment_received.amt; (void) purpose_ref;
-               }
-               case LDKEvent_PaymentSent: {
-                       int8_tArray payment_id_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
-                       memcpy((uint8_t*)(payment_id_arr + 4), obj->payment_sent.payment_id.data, 32);
-                       int8_tArray payment_preimage_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
-                       memcpy((uint8_t*)(payment_preimage_arr + 4), obj->payment_sent.payment_preimage.data, 32);
-                       int8_tArray payment_hash_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
-                       memcpy((uint8_t*)(payment_hash_arr + 4), obj->payment_sent.payment_hash.data, 32);
-                       uint64_t fee_paid_msat_ref = ((uint64_t)&obj->payment_sent.fee_paid_msat) | 1;
-                       return 0 /* LDKEvent - PaymentSent */; (void) payment_id_arr; (void) payment_preimage_arr; (void) payment_hash_arr; (void) fee_paid_msat_ref;
-               }
-               case LDKEvent_PaymentPathFailed: {
-                       int8_tArray payment_id_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
-                       memcpy((uint8_t*)(payment_id_arr + 4), obj->payment_path_failed.payment_id.data, 32);
-                       int8_tArray payment_hash_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
-                       memcpy((uint8_t*)(payment_hash_arr + 4), obj->payment_path_failed.payment_hash.data, 32);
-                       uint64_t network_update_ref = ((uint64_t)&obj->payment_path_failed.network_update) | 1;
-                       LDKCVec_RouteHopZ path_var = obj->payment_path_failed.path;
-                       uint32_tArray path_arr = NULL;
-                       path_arr = init_arr(path_var.datalen, sizeof(uint32_t), "Native uint32_tArray Bytes");
-                       uint32_t *path_arr_ptr = (uint32_t*)(path_arr + 4);
-                       for (size_t k = 0; k < path_var.datalen; k++) {
-                               LDKRouteHop path_conv_10_var = path_var.data[k];
-                               uint64_t path_conv_10_ref = 0;
-                               CHECK((((uint64_t)path_conv_10_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
-                               CHECK((((uint64_t)&path_conv_10_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
-                               path_conv_10_ref = (uint64_t)path_conv_10_var.inner & ~1;
-                               path_arr_ptr[k] = path_conv_10_ref;
-                       }
-                       
-                       uint64_t short_channel_id_ref = ((uint64_t)&obj->payment_path_failed.short_channel_id) | 1;
-                       LDKRouteParameters retry_var = obj->payment_path_failed.retry;
-                       uint64_t retry_ref = 0;
-                       if ((uint64_t)retry_var.inner > 4096) {
-                               CHECK((((uint64_t)retry_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
-                               CHECK((((uint64_t)&retry_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
-                               retry_ref = (uint64_t)retry_var.inner & ~1;
-                       }
-                       return 0 /* LDKEvent - PaymentPathFailed */; (void) payment_id_arr; (void) payment_hash_arr; (void) obj->payment_path_failed.rejected_by_dest; (void) network_update_ref; (void) obj->payment_path_failed.all_paths_failed; (void) path_arr; (void) short_channel_id_ref; (void) retry_ref;
-               }
-               case LDKEvent_PendingHTLCsForwardable: {
-                       return 0 /* LDKEvent - PendingHTLCsForwardable */; (void) obj->pending_htl_cs_forwardable.time_forwardable;
-               }
-               case LDKEvent_SpendableOutputs: {
-                       LDKCVec_SpendableOutputDescriptorZ outputs_var = obj->spendable_outputs.outputs;
-                       uint32_tArray outputs_arr = NULL;
-                       outputs_arr = init_arr(outputs_var.datalen, sizeof(uint32_t), "Native uint32_tArray Bytes");
-                       uint32_t *outputs_arr_ptr = (uint32_t*)(outputs_arr + 4);
-                       for (size_t b = 0; b < outputs_var.datalen; b++) {
-                               uint64_t outputs_conv_27_ref = ((uint64_t)&outputs_var.data[b]) | 1;
-                               outputs_arr_ptr[b] = outputs_conv_27_ref;
-                       }
-                       
-                       return 0 /* LDKEvent - SpendableOutputs */; (void) outputs_arr;
-               }
-               case LDKEvent_PaymentForwarded: {
-                       uint64_t fee_earned_msat_ref = ((uint64_t)&obj->payment_forwarded.fee_earned_msat) | 1;
-                       return 0 /* LDKEvent - PaymentForwarded */; (void) fee_earned_msat_ref; (void) obj->payment_forwarded.claim_from_onchain_tx;
-               }
-               case LDKEvent_ChannelClosed: {
-                       int8_tArray channel_id_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
-                       memcpy((uint8_t*)(channel_id_arr + 4), obj->channel_closed.channel_id.data, 32);
-                       uint64_t reason_ref = ((uint64_t)&obj->channel_closed.reason) | 1;
-                       return 0 /* LDKEvent - ChannelClosed */; (void) channel_id_arr; (void) obj->channel_closed.user_channel_id; (void) reason_ref;
-               }
-               case LDKEvent_DiscardFunding: {
-                       int8_tArray channel_id_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
-                       memcpy((uint8_t*)(channel_id_arr + 4), obj->discard_funding.channel_id.data, 32);
-                       LDKTransaction transaction_var = obj->discard_funding.transaction;
-                       int8_tArray transaction_arr = init_arr(transaction_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
-                       memcpy((uint8_t*)(transaction_arr + 4), transaction_var.data, transaction_var.datalen);
-                       return 0 /* LDKEvent - DiscardFunding */; (void) channel_id_arr; (void) transaction_arr;
-               }
-               default: abort();
-       }
-}
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_EventZ_new(uint32_tArray elems) {
-       LDKCVec_EventZ *ret = MALLOC(sizeof(LDKCVec_EventZ), "LDKCVec_EventZ");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKEvent) * ret->datalen, "LDKCVec_EventZ Data");
-               uint32_t *java_elems = (uint32_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       uint32_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKEvent arr_elem_conv = *(LDKEvent*)(arr_elem_ptr);
-                       arr_elem_conv = Event_clone((LDKEvent*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_EventZ CVec_EventZ_clone(const LDKCVec_EventZ *orig) {
        LDKCVec_EventZ ret = { .data = MALLOC(sizeof(LDKEvent) * orig->datalen, "LDKCVec_EventZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -4261,25 +3938,6 @@ uint32_t  __attribute__((visibility("default"))) TS_C2Tuple_u32TxOutZ_get_b(uint
        return (uint64_t)ret_ref;
 }
 
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_C2Tuple_u32TxOutZZ_new(uint32_tArray elems) {
-       LDKCVec_C2Tuple_u32TxOutZZ *ret = MALLOC(sizeof(LDKCVec_C2Tuple_u32TxOutZZ), "LDKCVec_C2Tuple_u32TxOutZZ");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKC2Tuple_u32TxOutZ) * ret->datalen, "LDKCVec_C2Tuple_u32TxOutZZ Data");
-               uint32_t *java_elems = (uint32_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       uint32_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKC2Tuple_u32TxOutZ arr_elem_conv = *(LDKC2Tuple_u32TxOutZ*)(arr_elem_ptr);
-                       arr_elem_conv = C2Tuple_u32TxOutZ_clone((LDKC2Tuple_u32TxOutZ*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_C2Tuple_u32TxOutZZ CVec_C2Tuple_u32TxOutZZ_clone(const LDKCVec_C2Tuple_u32TxOutZZ *orig) {
        LDKCVec_C2Tuple_u32TxOutZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_u32TxOutZ) * orig->datalen, "LDKCVec_C2Tuple_u32TxOutZZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -4316,25 +3974,6 @@ uint32_tArray  __attribute__((visibility("default"))) TS_C2Tuple_TxidCVec_C2Tupl
        return ret_arr;
 }
 
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ_new(uint32_tArray elems) {
-       LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ *ret = MALLOC(sizeof(LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ), "LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ) * ret->datalen, "LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ Data");
-               uint32_t *java_elems = (uint32_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       uint32_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ arr_elem_conv = *(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ*)(arr_elem_ptr);
-                       arr_elem_conv = C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_clone((LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ CVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ_clone(const LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ *orig) {
        LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ) * orig->datalen, "LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -4360,25 +3999,6 @@ uint32_t __attribute__((visibility("default"))) TS_LDKBalance_ref_from_ptr(uint3
                default: abort();
        }
 }
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_BalanceZ_new(uint32_tArray elems) {
-       LDKCVec_BalanceZ *ret = MALLOC(sizeof(LDKCVec_BalanceZ), "LDKCVec_BalanceZ");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKBalance) * ret->datalen, "LDKCVec_BalanceZ Data");
-               uint32_t *java_elems = (uint32_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       uint32_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKBalance arr_elem_conv = *(LDKBalance*)(arr_elem_ptr);
-                       arr_elem_conv = Balance_clone((LDKBalance*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_BalanceZ CVec_BalanceZ_clone(const LDKCVec_BalanceZ *orig) {
        LDKCVec_BalanceZ ret = { .data = MALLOC(sizeof(LDKBalance) * orig->datalen, "LDKCVec_BalanceZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -4386,9 +4006,6 @@ static inline LDKCVec_BalanceZ CVec_BalanceZ_clone(const LDKCVec_BalanceZ *orig)
        }
        return ret;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ *val = (LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -4404,12 +4021,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_C2Tuple_BlockHash
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_NoneLightningErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_NoneLightningErrorZ*)arg)->result_ok;
-}
 void  __attribute__((visibility("default"))) TS_LDKCResult_NoneLightningErrorZ_get_ok(uint32_t arg) {
        LDKCResult_NoneLightningErrorZ *val = (LDKCResult_NoneLightningErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -4422,6 +4037,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_NoneLightningErro
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
@@ -4445,25 +4061,6 @@ uint32_t  __attribute__((visibility("default"))) TS_C2Tuple_PublicKeyTypeZ_get_b
        return (uint64_t)ret_ret;
 }
 
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_C2Tuple_PublicKeyTypeZZ_new(uint32_tArray elems) {
-       LDKCVec_C2Tuple_PublicKeyTypeZZ *ret = MALLOC(sizeof(LDKCVec_C2Tuple_PublicKeyTypeZZ), "LDKCVec_C2Tuple_PublicKeyTypeZZ");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKC2Tuple_PublicKeyTypeZ) * ret->datalen, "LDKCVec_C2Tuple_PublicKeyTypeZZ Data");
-               uint32_t *java_elems = (uint32_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       uint32_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKC2Tuple_PublicKeyTypeZ arr_elem_conv = *(LDKC2Tuple_PublicKeyTypeZ*)(arr_elem_ptr);
-                       arr_elem_conv = C2Tuple_PublicKeyTypeZ_clone((LDKC2Tuple_PublicKeyTypeZ*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_C2Tuple_PublicKeyTypeZZ CVec_C2Tuple_PublicKeyTypeZZ_clone(const LDKCVec_C2Tuple_PublicKeyTypeZZ *orig) {
        LDKCVec_C2Tuple_PublicKeyTypeZZ ret = { .data = MALLOC(sizeof(LDKC2Tuple_PublicKeyTypeZ) * orig->datalen, "LDKCVec_C2Tuple_PublicKeyTypeZZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -4471,9 +4068,6 @@ static inline LDKCVec_C2Tuple_PublicKeyTypeZZ CVec_C2Tuple_PublicKeyTypeZZ_clone
        }
        return ret;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_boolLightningErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_boolLightningErrorZ*)arg)->result_ok;
-}
 jboolean  __attribute__((visibility("default"))) TS_LDKCResult_boolLightningErrorZ_get_ok(uint32_t arg) {
        LDKCResult_boolLightningErrorZ *val = (LDKCResult_boolLightningErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -4486,6 +4080,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_boolLightningErro
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
@@ -4498,6 +4093,7 @@ uint32_t  __attribute__((visibility("default"))) TS_C3Tuple_ChannelAnnouncementC
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -4514,6 +4110,7 @@ uint32_t  __attribute__((visibility("default"))) TS_C3Tuple_ChannelAnnouncementC
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -4530,6 +4127,7 @@ uint32_t  __attribute__((visibility("default"))) TS_C3Tuple_ChannelAnnouncementC
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -4537,25 +4135,6 @@ uint32_t  __attribute__((visibility("default"))) TS_C3Tuple_ChannelAnnouncementC
        return ret_ref;
 }
 
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ_new(uint32_tArray elems) {
-       LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ *ret = MALLOC(sizeof(LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ), "LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ) * ret->datalen, "LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ Data");
-               uint32_t *java_elems = (uint32_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       uint32_t arr_elem = java_elems[i];
-                       void* arr_elem_ptr = (void*)(((uint64_t)arr_elem) & ~1);
-                       CHECK_ACCESS(arr_elem_ptr);
-                       LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ arr_elem_conv = *(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ*)(arr_elem_ptr);
-                       arr_elem_conv = C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_clone((LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ*)(((uint64_t)arr_elem) & ~1));
-                       ret->data[i] = arr_elem_conv;
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ CVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ_clone(const LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ *orig) {
        LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ ret = { .data = MALLOC(sizeof(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ) * orig->datalen, "LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -4563,25 +4142,6 @@ static inline LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ CV
        }
        return ret;
 }
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_NodeAnnouncementZ_new(uint32_tArray elems) {
-       LDKCVec_NodeAnnouncementZ *ret = MALLOC(sizeof(LDKCVec_NodeAnnouncementZ), "LDKCVec_NodeAnnouncementZ");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKNodeAnnouncement) * ret->datalen, "LDKCVec_NodeAnnouncementZ Data");
-               uint32_t *java_elems = (uint32_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       uint32_t arr_elem = java_elems[i];
-                       LDKNodeAnnouncement arr_elem_conv;
-                       arr_elem_conv.inner = (void*)(arr_elem & (~1));
-                       arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0);
-                       arr_elem_conv = NodeAnnouncement_clone(&arr_elem_conv);
-                       ret->data[i] = arr_elem_conv;
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_NodeAnnouncementZ CVec_NodeAnnouncementZ_clone(const LDKCVec_NodeAnnouncementZ *orig) {
        LDKCVec_NodeAnnouncementZ ret = { .data = MALLOC(sizeof(LDKNodeAnnouncement) * orig->datalen, "LDKCVec_NodeAnnouncementZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -4589,9 +4149,6 @@ static inline LDKCVec_NodeAnnouncementZ CVec_NodeAnnouncementZ_clone(const LDKCV
        }
        return ret;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_CVec_u8ZPeerHandleErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_CVec_u8ZPeerHandleErrorZ*)arg)->result_ok;
-}
 int8_tArray  __attribute__((visibility("default"))) TS_LDKCResult_CVec_u8ZPeerHandleErrorZ_get_ok(uint32_t arg) {
        LDKCResult_CVec_u8ZPeerHandleErrorZ *val = (LDKCResult_CVec_u8ZPeerHandleErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -4607,12 +4164,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_CVec_u8ZPeerHandl
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_NonePeerHandleErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_NonePeerHandleErrorZ*)arg)->result_ok;
-}
 void  __attribute__((visibility("default"))) TS_LDKCResult_NonePeerHandleErrorZ_get_ok(uint32_t arg) {
        LDKCResult_NonePeerHandleErrorZ *val = (LDKCResult_NonePeerHandleErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -4625,12 +4180,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_NonePeerHandleErr
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_boolPeerHandleErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_boolPeerHandleErrorZ*)arg)->result_ok;
-}
 jboolean  __attribute__((visibility("default"))) TS_LDKCResult_boolPeerHandleErrorZ_get_ok(uint32_t arg) {
        LDKCResult_boolPeerHandleErrorZ *val = (LDKCResult_boolPeerHandleErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -4643,12 +4196,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_boolPeerHandleErr
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_NodeIdDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_NodeIdDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_NodeIdDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_NodeIdDecodeErrorZ *val = (LDKCResult_NodeIdDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -4656,6 +4207,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_NodeIdDecodeError
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -4666,6 +4218,24 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_NodeIdDecodeError
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
+       err_ref = (uint64_t)err_var.inner & ~1;
+       return err_ref;
+}
+uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_COption_NetworkUpdateZDecodeErrorZ_get_ok(uint32_t arg) {
+       LDKCResult_COption_NetworkUpdateZDecodeErrorZ *val = (LDKCResult_COption_NetworkUpdateZDecodeErrorZ*)(arg & ~1);
+       CHECK(val->result_ok);
+       uint64_t res_ref = ((uint64_t)&(*val->contents.result)) | 1;
+       return res_ref;
+}
+uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_COption_NetworkUpdateZDecodeErrorZ_get_err(uint32_t arg) {
+       LDKCResult_COption_NetworkUpdateZDecodeErrorZ *val = (LDKCResult_COption_NetworkUpdateZDecodeErrorZ*)(arg & ~1);
+       CHECK(!val->result_ok);
+       LDKDecodeError err_var = (*val->contents.err);
+       uint64_t err_ref = 0;
+       CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+       CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
@@ -4688,7 +4258,7 @@ LDKCResult_TxOutAccessErrorZ get_utxo_LDKAccess_jcall(const void* this_arg, cons
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_TxOutAccessErrorZ ret_conv = *(LDKCResult_TxOutAccessErrorZ*)(ret_ptr);
-       ret_conv = CResult_TxOutAccessErrorZ_clone((LDKCResult_TxOutAccessErrorZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 static void LDKAccess_JCalls_cloned(LDKAccess* new_obj) {
@@ -4740,9 +4310,6 @@ uint32_t __attribute__((visibility("default"))) TS_LDKCOption_AccessZ_ref_from_p
                default: abort();
        }
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_DirectionalChannelInfoDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_DirectionalChannelInfoDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_DirectionalChannelInfoDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_DirectionalChannelInfoDecodeErrorZ *val = (LDKCResult_DirectionalChannelInfoDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -4750,6 +4317,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_DirectionalChanne
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -4760,12 +4328,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_DirectionalChanne
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_ChannelInfoDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_ChannelInfoDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ChannelInfoDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_ChannelInfoDecodeErrorZ *val = (LDKCResult_ChannelInfoDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -4773,6 +4339,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ChannelInfoDecode
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -4783,12 +4350,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ChannelInfoDecode
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_RoutingFeesDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_RoutingFeesDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_RoutingFeesDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_RoutingFeesDecodeErrorZ *val = (LDKCResult_RoutingFeesDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -4796,6 +4361,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_RoutingFeesDecode
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -4806,12 +4372,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_RoutingFeesDecode
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_NodeAnnouncementInfoDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_NodeAnnouncementInfoDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_NodeAnnouncementInfoDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_NodeAnnouncementInfoDecodeErrorZ *val = (LDKCResult_NodeAnnouncementInfoDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -4819,6 +4383,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_NodeAnnouncementI
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -4829,31 +4394,15 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_NodeAnnouncementI
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_u64Z_new(int64_tArray elems) {
-       LDKCVec_u64Z *ret = MALLOC(sizeof(LDKCVec_u64Z), "LDKCVec_u64Z");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(uint64_t) * ret->datalen, "LDKCVec_u64Z Data");
-               int64_t *java_elems = (int64_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       ret->data[i] = java_elems[i];
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_u64Z CVec_u64Z_clone(const LDKCVec_u64Z *orig) {
        LDKCVec_u64Z ret = { .data = MALLOC(sizeof(int64_t) * orig->datalen, "LDKCVec_u64Z clone bytes"), .datalen = orig->datalen };
        memcpy(ret.data, orig->data, sizeof(int64_t) * ret.datalen);
        return ret;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_NodeInfoDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_NodeInfoDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_NodeInfoDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_NodeInfoDecodeErrorZ *val = (LDKCResult_NodeInfoDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -4861,6 +4410,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_NodeInfoDecodeErr
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -4871,12 +4421,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_NodeInfoDecodeErr
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_NetworkGraphDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_NetworkGraphDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_NetworkGraphDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_NetworkGraphDecodeErrorZ *val = (LDKCResult_NetworkGraphDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -4884,6 +4432,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_NetworkGraphDecod
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -4894,6 +4443,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_NetworkGraphDecod
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
@@ -4918,9 +4468,6 @@ uint32_t __attribute__((visibility("default"))) TS_LDKCOption_CVec_NetAddressZZ_
                default: abort();
        }
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_NetAddressDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_NetAddressDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_NetAddressDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_NetAddressDecodeErrorZ *val = (LDKCResult_NetAddressDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -4934,28 +4481,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_NetAddressDecodeE
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_UpdateAddHTLCZ_new(uint32_tArray elems) {
-       LDKCVec_UpdateAddHTLCZ *ret = MALLOC(sizeof(LDKCVec_UpdateAddHTLCZ), "LDKCVec_UpdateAddHTLCZ");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKUpdateAddHTLC) * ret->datalen, "LDKCVec_UpdateAddHTLCZ Data");
-               uint32_t *java_elems = (uint32_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       uint32_t arr_elem = java_elems[i];
-                       LDKUpdateAddHTLC arr_elem_conv;
-                       arr_elem_conv.inner = (void*)(arr_elem & (~1));
-                       arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0);
-                       arr_elem_conv = UpdateAddHTLC_clone(&arr_elem_conv);
-                       ret->data[i] = arr_elem_conv;
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_UpdateAddHTLCZ CVec_UpdateAddHTLCZ_clone(const LDKCVec_UpdateAddHTLCZ *orig) {
        LDKCVec_UpdateAddHTLCZ ret = { .data = MALLOC(sizeof(LDKUpdateAddHTLC) * orig->datalen, "LDKCVec_UpdateAddHTLCZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -4963,25 +4492,6 @@ static inline LDKCVec_UpdateAddHTLCZ CVec_UpdateAddHTLCZ_clone(const LDKCVec_Upd
        }
        return ret;
 }
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_UpdateFulfillHTLCZ_new(uint32_tArray elems) {
-       LDKCVec_UpdateFulfillHTLCZ *ret = MALLOC(sizeof(LDKCVec_UpdateFulfillHTLCZ), "LDKCVec_UpdateFulfillHTLCZ");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKUpdateFulfillHTLC) * ret->datalen, "LDKCVec_UpdateFulfillHTLCZ Data");
-               uint32_t *java_elems = (uint32_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       uint32_t arr_elem = java_elems[i];
-                       LDKUpdateFulfillHTLC arr_elem_conv;
-                       arr_elem_conv.inner = (void*)(arr_elem & (~1));
-                       arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0);
-                       arr_elem_conv = UpdateFulfillHTLC_clone(&arr_elem_conv);
-                       ret->data[i] = arr_elem_conv;
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_UpdateFulfillHTLCZ CVec_UpdateFulfillHTLCZ_clone(const LDKCVec_UpdateFulfillHTLCZ *orig) {
        LDKCVec_UpdateFulfillHTLCZ ret = { .data = MALLOC(sizeof(LDKUpdateFulfillHTLC) * orig->datalen, "LDKCVec_UpdateFulfillHTLCZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -4989,25 +4499,6 @@ static inline LDKCVec_UpdateFulfillHTLCZ CVec_UpdateFulfillHTLCZ_clone(const LDK
        }
        return ret;
 }
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_UpdateFailHTLCZ_new(uint32_tArray elems) {
-       LDKCVec_UpdateFailHTLCZ *ret = MALLOC(sizeof(LDKCVec_UpdateFailHTLCZ), "LDKCVec_UpdateFailHTLCZ");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKUpdateFailHTLC) * ret->datalen, "LDKCVec_UpdateFailHTLCZ Data");
-               uint32_t *java_elems = (uint32_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       uint32_t arr_elem = java_elems[i];
-                       LDKUpdateFailHTLC arr_elem_conv;
-                       arr_elem_conv.inner = (void*)(arr_elem & (~1));
-                       arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0);
-                       arr_elem_conv = UpdateFailHTLC_clone(&arr_elem_conv);
-                       ret->data[i] = arr_elem_conv;
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_UpdateFailHTLCZ CVec_UpdateFailHTLCZ_clone(const LDKCVec_UpdateFailHTLCZ *orig) {
        LDKCVec_UpdateFailHTLCZ ret = { .data = MALLOC(sizeof(LDKUpdateFailHTLC) * orig->datalen, "LDKCVec_UpdateFailHTLCZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -5015,25 +4506,6 @@ static inline LDKCVec_UpdateFailHTLCZ CVec_UpdateFailHTLCZ_clone(const LDKCVec_U
        }
        return ret;
 }
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_UpdateFailMalformedHTLCZ_new(uint32_tArray elems) {
-       LDKCVec_UpdateFailMalformedHTLCZ *ret = MALLOC(sizeof(LDKCVec_UpdateFailMalformedHTLCZ), "LDKCVec_UpdateFailMalformedHTLCZ");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKUpdateFailMalformedHTLC) * ret->datalen, "LDKCVec_UpdateFailMalformedHTLCZ Data");
-               uint32_t *java_elems = (uint32_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       uint32_t arr_elem = java_elems[i];
-                       LDKUpdateFailMalformedHTLC arr_elem_conv;
-                       arr_elem_conv.inner = (void*)(arr_elem & (~1));
-                       arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0);
-                       arr_elem_conv = UpdateFailMalformedHTLC_clone(&arr_elem_conv);
-                       ret->data[i] = arr_elem_conv;
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_UpdateFailMalformedHTLCZ CVec_UpdateFailMalformedHTLCZ_clone(const LDKCVec_UpdateFailMalformedHTLCZ *orig) {
        LDKCVec_UpdateFailMalformedHTLCZ ret = { .data = MALLOC(sizeof(LDKUpdateFailMalformedHTLC) * orig->datalen, "LDKCVec_UpdateFailMalformedHTLCZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -5041,9 +4513,6 @@ static inline LDKCVec_UpdateFailMalformedHTLCZ CVec_UpdateFailMalformedHTLCZ_clo
        }
        return ret;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_AcceptChannelDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_AcceptChannelDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_AcceptChannelDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_AcceptChannelDecodeErrorZ *val = (LDKCResult_AcceptChannelDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5051,6 +4520,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_AcceptChannelDeco
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5061,12 +4531,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_AcceptChannelDeco
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_AnnouncementSignaturesDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_AnnouncementSignaturesDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_AnnouncementSignaturesDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_AnnouncementSignaturesDecodeErrorZ *val = (LDKCResult_AnnouncementSignaturesDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5074,6 +4542,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_AnnouncementSigna
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5084,12 +4553,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_AnnouncementSigna
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_ChannelReestablishDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_ChannelReestablishDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ChannelReestablishDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_ChannelReestablishDecodeErrorZ *val = (LDKCResult_ChannelReestablishDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5097,6 +4564,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ChannelReestablis
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5107,12 +4575,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ChannelReestablis
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_ClosingSignedDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_ClosingSignedDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ClosingSignedDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_ClosingSignedDecodeErrorZ *val = (LDKCResult_ClosingSignedDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5120,6 +4586,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ClosingSignedDeco
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5130,12 +4597,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ClosingSignedDeco
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_ClosingSignedFeeRangeDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_ClosingSignedFeeRangeDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ClosingSignedFeeRangeDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_ClosingSignedFeeRangeDecodeErrorZ *val = (LDKCResult_ClosingSignedFeeRangeDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5143,6 +4608,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ClosingSignedFeeR
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5153,12 +4619,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ClosingSignedFeeR
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_CommitmentSignedDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_CommitmentSignedDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_CommitmentSignedDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_CommitmentSignedDecodeErrorZ *val = (LDKCResult_CommitmentSignedDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5166,6 +4630,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_CommitmentSignedD
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5176,12 +4641,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_CommitmentSignedD
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_FundingCreatedDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_FundingCreatedDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_FundingCreatedDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_FundingCreatedDecodeErrorZ *val = (LDKCResult_FundingCreatedDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5189,6 +4652,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_FundingCreatedDec
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5199,12 +4663,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_FundingCreatedDec
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_FundingSignedDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_FundingSignedDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_FundingSignedDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_FundingSignedDecodeErrorZ *val = (LDKCResult_FundingSignedDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5212,6 +4674,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_FundingSignedDeco
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5222,12 +4685,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_FundingSignedDeco
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_FundingLockedDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_FundingLockedDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_FundingLockedDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_FundingLockedDecodeErrorZ *val = (LDKCResult_FundingLockedDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5235,6 +4696,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_FundingLockedDeco
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5245,12 +4707,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_FundingLockedDeco
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_InitDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_InitDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_InitDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_InitDecodeErrorZ *val = (LDKCResult_InitDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5258,6 +4718,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_InitDecodeErrorZ_
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5268,12 +4729,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_InitDecodeErrorZ_
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_OpenChannelDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_OpenChannelDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_OpenChannelDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_OpenChannelDecodeErrorZ *val = (LDKCResult_OpenChannelDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5281,6 +4740,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_OpenChannelDecode
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5291,12 +4751,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_OpenChannelDecode
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_RevokeAndACKDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_RevokeAndACKDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_RevokeAndACKDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_RevokeAndACKDecodeErrorZ *val = (LDKCResult_RevokeAndACKDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5304,6 +4762,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_RevokeAndACKDecod
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5314,12 +4773,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_RevokeAndACKDecod
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_ShutdownDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_ShutdownDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ShutdownDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_ShutdownDecodeErrorZ *val = (LDKCResult_ShutdownDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5327,6 +4784,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ShutdownDecodeErr
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5337,12 +4795,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ShutdownDecodeErr
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_UpdateFailHTLCDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_UpdateFailHTLCDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_UpdateFailHTLCDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_UpdateFailHTLCDecodeErrorZ *val = (LDKCResult_UpdateFailHTLCDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5350,6 +4806,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_UpdateFailHTLCDec
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5360,12 +4817,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_UpdateFailHTLCDec
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ *val = (LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5373,6 +4828,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_UpdateFailMalform
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5383,12 +4839,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_UpdateFailMalform
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_UpdateFeeDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_UpdateFeeDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_UpdateFeeDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_UpdateFeeDecodeErrorZ *val = (LDKCResult_UpdateFeeDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5396,6 +4850,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_UpdateFeeDecodeEr
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5406,12 +4861,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_UpdateFeeDecodeEr
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_UpdateFulfillHTLCDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_UpdateFulfillHTLCDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_UpdateFulfillHTLCDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_UpdateFulfillHTLCDecodeErrorZ *val = (LDKCResult_UpdateFulfillHTLCDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5419,6 +4872,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_UpdateFulfillHTLC
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5429,12 +4883,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_UpdateFulfillHTLC
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_UpdateAddHTLCDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_UpdateAddHTLCDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_UpdateAddHTLCDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_UpdateAddHTLCDecodeErrorZ *val = (LDKCResult_UpdateAddHTLCDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5442,6 +4894,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_UpdateAddHTLCDeco
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5452,12 +4905,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_UpdateAddHTLCDeco
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_PingDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_PingDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_PingDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_PingDecodeErrorZ *val = (LDKCResult_PingDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5465,6 +4916,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_PingDecodeErrorZ_
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5475,12 +4927,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_PingDecodeErrorZ_
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_PongDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_PongDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_PongDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_PongDecodeErrorZ *val = (LDKCResult_PongDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5488,6 +4938,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_PongDecodeErrorZ_
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5498,12 +4949,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_PongDecodeErrorZ_
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ *val = (LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5511,6 +4960,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_UnsignedChannelAn
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5521,12 +4971,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_UnsignedChannelAn
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_ChannelAnnouncementDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_ChannelAnnouncementDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ChannelAnnouncementDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_ChannelAnnouncementDecodeErrorZ *val = (LDKCResult_ChannelAnnouncementDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5534,6 +4982,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ChannelAnnounceme
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5544,12 +4993,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ChannelAnnounceme
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_UnsignedChannelUpdateDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_UnsignedChannelUpdateDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_UnsignedChannelUpdateDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_UnsignedChannelUpdateDecodeErrorZ *val = (LDKCResult_UnsignedChannelUpdateDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5557,6 +5004,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_UnsignedChannelUp
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5567,12 +5015,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_UnsignedChannelUp
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_ChannelUpdateDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_ChannelUpdateDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ChannelUpdateDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_ChannelUpdateDecodeErrorZ *val = (LDKCResult_ChannelUpdateDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5580,6 +5026,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ChannelUpdateDeco
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5590,12 +5037,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ChannelUpdateDeco
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_ErrorMessageDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_ErrorMessageDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ErrorMessageDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_ErrorMessageDecodeErrorZ *val = (LDKCResult_ErrorMessageDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5603,6 +5048,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ErrorMessageDecod
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5613,12 +5059,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ErrorMessageDecod
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ *val = (LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5626,6 +5070,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_UnsignedNodeAnnou
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5636,12 +5081,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_UnsignedNodeAnnou
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_NodeAnnouncementDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_NodeAnnouncementDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_NodeAnnouncementDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_NodeAnnouncementDecodeErrorZ *val = (LDKCResult_NodeAnnouncementDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5649,6 +5092,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_NodeAnnouncementD
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5659,12 +5103,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_NodeAnnouncementD
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_QueryShortChannelIdsDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_QueryShortChannelIdsDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_QueryShortChannelIdsDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_QueryShortChannelIdsDecodeErrorZ *val = (LDKCResult_QueryShortChannelIdsDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5672,6 +5114,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_QueryShortChannel
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5682,12 +5125,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_QueryShortChannel
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ *val = (LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5695,6 +5136,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ReplyShortChannel
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5705,12 +5147,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ReplyShortChannel
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_QueryChannelRangeDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_QueryChannelRangeDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_QueryChannelRangeDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_QueryChannelRangeDecodeErrorZ *val = (LDKCResult_QueryChannelRangeDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5718,6 +5158,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_QueryChannelRange
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5728,12 +5169,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_QueryChannelRange
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_ReplyChannelRangeDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_ReplyChannelRangeDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ReplyChannelRangeDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_ReplyChannelRangeDecodeErrorZ *val = (LDKCResult_ReplyChannelRangeDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5741,6 +5180,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ReplyChannelRange
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5751,12 +5191,10 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_ReplyChannelRange
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_GossipTimestampFilterDecodeErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_GossipTimestampFilterDecodeErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_GossipTimestampFilterDecodeErrorZ_get_ok(uint32_t arg) {
        LDKCResult_GossipTimestampFilterDecodeErrorZ *val = (LDKCResult_GossipTimestampFilterDecodeErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5764,6 +5202,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_GossipTimestampFi
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5774,6 +5213,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_GossipTimestampFi
        uint64_t err_ref = 0;
        CHECK((((uint64_t)err_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&err_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(err_var);
        err_ref = (uint64_t)err_var.inner & ~1;
        return err_ref;
 }
@@ -5790,9 +5230,6 @@ uint32_t __attribute__((visibility("default"))) TS_LDKSignOrCreationError_ref_fr
                default: abort();
        }
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_InvoiceSignOrCreationErrorZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_InvoiceSignOrCreationErrorZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_InvoiceSignOrCreationErrorZ_get_ok(uint32_t arg) {
        LDKCResult_InvoiceSignOrCreationErrorZ *val = (LDKCResult_InvoiceSignOrCreationErrorZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5800,6 +5237,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_InvoiceSignOrCrea
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5837,6 +5275,7 @@ LDKCOption_C2Tuple_usizeTransactionZZ register_output_LDKFilter_jcall(const void
        uint64_t output_ref = 0;
        CHECK((((uint64_t)output_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&output_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(output_var);
        output_ref = (uint64_t)output_var.inner;
        if (output_var.is_owned) {
                output_ref |= 1;
@@ -5845,7 +5284,7 @@ LDKCOption_C2Tuple_usizeTransactionZZ register_output_LDKFilter_jcall(const void
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCOption_C2Tuple_usizeTransactionZZ ret_conv = *(LDKCOption_C2Tuple_usizeTransactionZZ*)(ret_ptr);
-       ret_conv = COption_C2Tuple_usizeTransactionZZ_clone((LDKCOption_C2Tuple_usizeTransactionZZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 static void LDKFilter_JCalls_cloned(LDKFilter* new_obj) {
@@ -5891,6 +5330,7 @@ uint32_t  __attribute__((visibility("default"))) TS_Filter_register_output(uint3
        LDKWatchedOutput output_conv;
        output_conv.inner = (void*)(output & (~1));
        output_conv.is_owned = (output & 1) || (output == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(output_conv);
        output_conv = WatchedOutput_clone(&output_conv);
        LDKCOption_C2Tuple_usizeTransactionZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_usizeTransactionZZ), "LDKCOption_C2Tuple_usizeTransactionZZ");
        *ret_copy = (this_arg_conv->register_output)(this_arg_conv->this_arg, output_conv);
@@ -5913,9 +5353,6 @@ uint32_t __attribute__((visibility("default"))) TS_LDKCOption_FilterZ_ref_from_p
                default: abort();
        }
 }
-jboolean  __attribute__((visibility("default"))) TS_LDKCResult_LockedChannelMonitorNoneZ_result_ok(uint32_t arg) {
-       return ((LDKCResult_LockedChannelMonitorNoneZ*)arg)->result_ok;
-}
 uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_LockedChannelMonitorNoneZ_get_ok(uint32_t arg) {
        LDKCResult_LockedChannelMonitorNoneZ *val = (LDKCResult_LockedChannelMonitorNoneZ*)(arg & ~1);
        CHECK(val->result_ok);
@@ -5923,6 +5360,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LDKCResult_LockedChannelMoni
        uint64_t res_ref = 0;
        CHECK((((uint64_t)res_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&res_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(res_var);
        res_ref = (uint64_t)res_var.inner & ~1;
        return res_ref;
 }
@@ -5931,25 +5369,6 @@ void  __attribute__((visibility("default"))) TS_LDKCResult_LockedChannelMonitorN
        CHECK(!val->result_ok);
        return *val->contents.err;
 }
-uint32_t  __attribute__((visibility("default"))) TS_LDKCVec_OutPointZ_new(uint32_tArray elems) {
-       LDKCVec_OutPointZ *ret = MALLOC(sizeof(LDKCVec_OutPointZ), "LDKCVec_OutPointZ");
-       ret->datalen = *((uint32_t*)elems);
-       if (ret->datalen == 0) {
-               ret->data = NULL;
-       } else {
-               ret->data = MALLOC(sizeof(LDKOutPoint) * ret->datalen, "LDKCVec_OutPointZ Data");
-               uint32_t *java_elems = (uint32_t*)(elems + 4);
-               for (size_t i = 0; i < ret->datalen; i++) {
-                       uint32_t arr_elem = java_elems[i];
-                       LDKOutPoint arr_elem_conv;
-                       arr_elem_conv.inner = (void*)(arr_elem & (~1));
-                       arr_elem_conv.is_owned = (arr_elem & 1) || (arr_elem == 0);
-                       arr_elem_conv = OutPoint_clone(&arr_elem_conv);
-                       ret->data[i] = arr_elem_conv;
-               }
-       }
-       return (uint64_t)ret;
-}
 static inline LDKCVec_OutPointZ CVec_OutPointZ_clone(const LDKCVec_OutPointZ *orig) {
        LDKCVec_OutPointZ ret = { .data = MALLOC(sizeof(LDKOutPoint) * orig->datalen, "LDKCVec_OutPointZ clone bytes"), .datalen = orig->datalen };
        for (size_t i = 0; i < ret.datalen; i++) {
@@ -5983,7 +5402,7 @@ LDKCVec_MessageSendEventZ get_and_clear_pending_msg_events_LDKMessageSendEventsP
                void* ret_conv_18_ptr = (void*)(((uint64_t)ret_conv_18) & ~1);
                CHECK_ACCESS(ret_conv_18_ptr);
                LDKMessageSendEvent ret_conv_18_conv = *(LDKMessageSendEvent*)(ret_conv_18_ptr);
-               ret_conv_18_conv = MessageSendEvent_clone((LDKMessageSendEvent*)(((uint64_t)ret_conv_18) & ~1));
+               FREE((void*)ret_conv_18);
                ret_constr.data[s] = ret_conv_18_conv;
        }
        return ret_constr;
@@ -6365,6 +5784,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ persist_new_channel_LDKPersist_jcall(con
        uint64_t channel_id_ref = 0;
        CHECK((((uint64_t)channel_id_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&channel_id_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_var);
        channel_id_ref = (uint64_t)channel_id_var.inner;
        if (channel_id_var.is_owned) {
                channel_id_ref |= 1;
@@ -6374,6 +5794,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ persist_new_channel_LDKPersist_jcall(con
        data_var = ChannelMonitor_clone(data);
        CHECK((((uint64_t)data_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&data_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(data_var);
        data_ref = (uint64_t)data_var.inner;
        if (data_var.is_owned) {
                data_ref |= 1;
@@ -6382,6 +5803,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ persist_new_channel_LDKPersist_jcall(con
        uint64_t update_id_ref = 0;
        CHECK((((uint64_t)update_id_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&update_id_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_id_var);
        update_id_ref = (uint64_t)update_id_var.inner;
        if (update_id_var.is_owned) {
                update_id_ref |= 1;
@@ -6390,7 +5812,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ persist_new_channel_LDKPersist_jcall(con
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneChannelMonitorUpdateErrZ ret_conv = *(LDKCResult_NoneChannelMonitorUpdateErrZ*)(ret_ptr);
-       ret_conv = CResult_NoneChannelMonitorUpdateErrZ_clone((LDKCResult_NoneChannelMonitorUpdateErrZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 LDKCResult_NoneChannelMonitorUpdateErrZ update_persisted_channel_LDKPersist_jcall(const void* this_arg, LDKOutPoint channel_id, const LDKChannelMonitorUpdate * update, const LDKChannelMonitor * data, LDKMonitorUpdateId update_id) {
@@ -6399,6 +5821,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ update_persisted_channel_LDKPersist_jcal
        uint64_t channel_id_ref = 0;
        CHECK((((uint64_t)channel_id_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&channel_id_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_var);
        channel_id_ref = (uint64_t)channel_id_var.inner;
        if (channel_id_var.is_owned) {
                channel_id_ref |= 1;
@@ -6409,6 +5832,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ update_persisted_channel_LDKPersist_jcal
                update_var = ChannelMonitorUpdate_clone(update);
                CHECK((((uint64_t)update_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&update_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_var);
                update_ref = (uint64_t)update_var.inner;
                if (update_var.is_owned) {
                        update_ref |= 1;
@@ -6419,6 +5843,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ update_persisted_channel_LDKPersist_jcal
        data_var = ChannelMonitor_clone(data);
        CHECK((((uint64_t)data_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&data_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(data_var);
        data_ref = (uint64_t)data_var.inner;
        if (data_var.is_owned) {
                data_ref |= 1;
@@ -6427,6 +5852,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ update_persisted_channel_LDKPersist_jcal
        uint64_t update_id_ref = 0;
        CHECK((((uint64_t)update_id_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&update_id_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_id_var);
        update_id_ref = (uint64_t)update_id_var.inner;
        if (update_id_var.is_owned) {
                update_id_ref |= 1;
@@ -6435,7 +5861,7 @@ LDKCResult_NoneChannelMonitorUpdateErrZ update_persisted_channel_LDKPersist_jcal
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneChannelMonitorUpdateErrZ ret_conv = *(LDKCResult_NoneChannelMonitorUpdateErrZ*)(ret_ptr);
-       ret_conv = CResult_NoneChannelMonitorUpdateErrZ_clone((LDKCResult_NoneChannelMonitorUpdateErrZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 static void LDKPersist_JCalls_cloned(LDKPersist* new_obj) {
@@ -6467,13 +5893,16 @@ uint32_t  __attribute__((visibility("default"))) TS_Persist_persist_new_channel(
        LDKOutPoint channel_id_conv;
        channel_id_conv.inner = (void*)(channel_id & (~1));
        channel_id_conv.is_owned = (channel_id & 1) || (channel_id == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_conv);
        channel_id_conv = OutPoint_clone(&channel_id_conv);
        LDKChannelMonitor data_conv;
        data_conv.inner = (void*)(data & (~1));
        data_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(data_conv);
        LDKMonitorUpdateId update_id_conv;
        update_id_conv.inner = (void*)(update_id & (~1));
        update_id_conv.is_owned = (update_id & 1) || (update_id == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_id_conv);
        update_id_conv = MonitorUpdateId_clone(&update_id_conv);
        LDKCResult_NoneChannelMonitorUpdateErrZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneChannelMonitorUpdateErrZ), "LDKCResult_NoneChannelMonitorUpdateErrZ");
        *ret_conv = (this_arg_conv->persist_new_channel)(this_arg_conv->this_arg, channel_id_conv, &data_conv, update_id_conv);
@@ -6487,16 +5916,20 @@ uint32_t  __attribute__((visibility("default"))) TS_Persist_update_persisted_cha
        LDKOutPoint channel_id_conv;
        channel_id_conv.inner = (void*)(channel_id & (~1));
        channel_id_conv.is_owned = (channel_id & 1) || (channel_id == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_id_conv);
        channel_id_conv = OutPoint_clone(&channel_id_conv);
        LDKChannelMonitorUpdate update_conv;
        update_conv.inner = (void*)(update & (~1));
        update_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_conv);
        LDKChannelMonitor data_conv;
        data_conv.inner = (void*)(data & (~1));
        data_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(data_conv);
        LDKMonitorUpdateId update_id_conv;
        update_id_conv.inner = (void*)(update_id & (~1));
        update_id_conv.is_owned = (update_id & 1) || (update_id == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_id_conv);
        update_id_conv = MonitorUpdateId_clone(&update_id_conv);
        LDKCResult_NoneChannelMonitorUpdateErrZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneChannelMonitorUpdateErrZ), "LDKCResult_NoneChannelMonitorUpdateErrZ");
        *ret_conv = (this_arg_conv->update_persisted_channel)(this_arg_conv->this_arg, channel_id_conv, &update_conv, &data_conv, update_id_conv);
@@ -6561,6 +5994,7 @@ void handle_open_channel_LDKChannelMessageHandler_jcall(const void* this_arg, LD
        uint64_t their_features_ref = 0;
        CHECK((((uint64_t)their_features_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&their_features_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(their_features_var);
        their_features_ref = (uint64_t)their_features_var.inner;
        if (their_features_var.is_owned) {
                their_features_ref |= 1;
@@ -6570,6 +6004,7 @@ void handle_open_channel_LDKChannelMessageHandler_jcall(const void* this_arg, LD
        msg_var = OpenChannel_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -6584,6 +6019,7 @@ void handle_accept_channel_LDKChannelMessageHandler_jcall(const void* this_arg,
        uint64_t their_features_ref = 0;
        CHECK((((uint64_t)their_features_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&their_features_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(their_features_var);
        their_features_ref = (uint64_t)their_features_var.inner;
        if (their_features_var.is_owned) {
                their_features_ref |= 1;
@@ -6593,6 +6029,7 @@ void handle_accept_channel_LDKChannelMessageHandler_jcall(const void* this_arg,
        msg_var = AcceptChannel_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -6608,6 +6045,7 @@ void handle_funding_created_LDKChannelMessageHandler_jcall(const void* this_arg,
        msg_var = FundingCreated_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -6623,6 +6061,7 @@ void handle_funding_signed_LDKChannelMessageHandler_jcall(const void* this_arg,
        msg_var = FundingSigned_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -6638,6 +6077,7 @@ void handle_funding_locked_LDKChannelMessageHandler_jcall(const void* this_arg,
        msg_var = FundingLocked_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -6653,6 +6093,7 @@ void handle_shutdown_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPub
        their_features_var = InitFeatures_clone(their_features);
        CHECK((((uint64_t)their_features_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&their_features_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(their_features_var);
        their_features_ref = (uint64_t)their_features_var.inner;
        if (their_features_var.is_owned) {
                their_features_ref |= 1;
@@ -6662,6 +6103,7 @@ void handle_shutdown_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPub
        msg_var = Shutdown_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -6677,6 +6119,7 @@ void handle_closing_signed_LDKChannelMessageHandler_jcall(const void* this_arg,
        msg_var = ClosingSigned_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -6692,6 +6135,7 @@ void handle_update_add_htlc_LDKChannelMessageHandler_jcall(const void* this_arg,
        msg_var = UpdateAddHTLC_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -6707,6 +6151,7 @@ void handle_update_fulfill_htlc_LDKChannelMessageHandler_jcall(const void* this_
        msg_var = UpdateFulfillHTLC_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -6722,6 +6167,7 @@ void handle_update_fail_htlc_LDKChannelMessageHandler_jcall(const void* this_arg
        msg_var = UpdateFailHTLC_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -6737,6 +6183,7 @@ void handle_update_fail_malformed_htlc_LDKChannelMessageHandler_jcall(const void
        msg_var = UpdateFailMalformedHTLC_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -6752,6 +6199,7 @@ void handle_commitment_signed_LDKChannelMessageHandler_jcall(const void* this_ar
        msg_var = CommitmentSigned_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -6767,6 +6215,7 @@ void handle_revoke_and_ack_LDKChannelMessageHandler_jcall(const void* this_arg,
        msg_var = RevokeAndACK_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -6782,6 +6231,7 @@ void handle_update_fee_LDKChannelMessageHandler_jcall(const void* this_arg, LDKP
        msg_var = UpdateFee_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -6797,6 +6247,7 @@ void handle_announcement_signatures_LDKChannelMessageHandler_jcall(const void* t
        msg_var = AnnouncementSignatures_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -6818,6 +6269,7 @@ void peer_connected_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPubl
        msg_var = Init_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -6833,6 +6285,7 @@ void handle_channel_reestablish_LDKChannelMessageHandler_jcall(const void* this_
        msg_var = ChannelReestablish_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -6848,6 +6301,7 @@ void handle_channel_update_LDKChannelMessageHandler_jcall(const void* this_arg,
        msg_var = ChannelUpdate_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -6863,6 +6317,7 @@ void handle_error_LDKChannelMessageHandler_jcall(const void* this_arg, LDKPublic
        msg_var = ErrorMessage_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -6922,10 +6377,12 @@ void  __attribute__((visibility("default"))) TS_ChannelMessageHandler_handle_ope
        LDKInitFeatures their_features_conv;
        their_features_conv.inner = (void*)(their_features & (~1));
        their_features_conv.is_owned = (their_features & 1) || (their_features == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(their_features_conv);
        their_features_conv = InitFeatures_clone(&their_features_conv);
        LDKOpenChannel msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_open_channel)(this_arg_conv->this_arg, their_node_id_ref, their_features_conv, &msg_conv);
 }
 
@@ -6939,10 +6396,12 @@ void  __attribute__((visibility("default"))) TS_ChannelMessageHandler_handle_acc
        LDKInitFeatures their_features_conv;
        their_features_conv.inner = (void*)(their_features & (~1));
        their_features_conv.is_owned = (their_features & 1) || (their_features == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(their_features_conv);
        their_features_conv = InitFeatures_clone(&their_features_conv);
        LDKAcceptChannel msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_accept_channel)(this_arg_conv->this_arg, their_node_id_ref, their_features_conv, &msg_conv);
 }
 
@@ -6956,6 +6415,7 @@ void  __attribute__((visibility("default"))) TS_ChannelMessageHandler_handle_fun
        LDKFundingCreated msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_funding_created)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -6969,6 +6429,7 @@ void  __attribute__((visibility("default"))) TS_ChannelMessageHandler_handle_fun
        LDKFundingSigned msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_funding_signed)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -6982,6 +6443,7 @@ void  __attribute__((visibility("default"))) TS_ChannelMessageHandler_handle_fun
        LDKFundingLocked msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_funding_locked)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -6995,9 +6457,11 @@ void  __attribute__((visibility("default"))) TS_ChannelMessageHandler_handle_shu
        LDKInitFeatures their_features_conv;
        their_features_conv.inner = (void*)(their_features & (~1));
        their_features_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(their_features_conv);
        LDKShutdown msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_shutdown)(this_arg_conv->this_arg, their_node_id_ref, &their_features_conv, &msg_conv);
 }
 
@@ -7011,6 +6475,7 @@ void  __attribute__((visibility("default"))) TS_ChannelMessageHandler_handle_clo
        LDKClosingSigned msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_closing_signed)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -7024,6 +6489,7 @@ void  __attribute__((visibility("default"))) TS_ChannelMessageHandler_handle_upd
        LDKUpdateAddHTLC msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_update_add_htlc)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -7037,6 +6503,7 @@ void  __attribute__((visibility("default"))) TS_ChannelMessageHandler_handle_upd
        LDKUpdateFulfillHTLC msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_update_fulfill_htlc)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -7050,6 +6517,7 @@ void  __attribute__((visibility("default"))) TS_ChannelMessageHandler_handle_upd
        LDKUpdateFailHTLC msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_update_fail_htlc)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -7063,6 +6531,7 @@ void  __attribute__((visibility("default"))) TS_ChannelMessageHandler_handle_upd
        LDKUpdateFailMalformedHTLC msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_update_fail_malformed_htlc)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -7076,6 +6545,7 @@ void  __attribute__((visibility("default"))) TS_ChannelMessageHandler_handle_com
        LDKCommitmentSigned msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_commitment_signed)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -7089,6 +6559,7 @@ void  __attribute__((visibility("default"))) TS_ChannelMessageHandler_handle_rev
        LDKRevokeAndACK msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_revoke_and_ack)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -7102,6 +6573,7 @@ void  __attribute__((visibility("default"))) TS_ChannelMessageHandler_handle_upd
        LDKUpdateFee msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_update_fee)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -7115,6 +6587,7 @@ void  __attribute__((visibility("default"))) TS_ChannelMessageHandler_handle_ann
        LDKAnnouncementSignatures msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_announcement_signatures)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -7138,6 +6611,7 @@ void  __attribute__((visibility("default"))) TS_ChannelMessageHandler_peer_conne
        LDKInit msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->peer_connected)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -7151,6 +6625,7 @@ void  __attribute__((visibility("default"))) TS_ChannelMessageHandler_handle_cha
        LDKChannelReestablish msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_channel_reestablish)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -7164,6 +6639,7 @@ void  __attribute__((visibility("default"))) TS_ChannelMessageHandler_handle_cha
        LDKChannelUpdate msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_channel_update)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -7177,6 +6653,7 @@ void  __attribute__((visibility("default"))) TS_ChannelMessageHandler_handle_err
        LDKErrorMessage msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        (this_arg_conv->handle_error)(this_arg_conv->this_arg, their_node_id_ref, &msg_conv);
 }
 
@@ -7217,6 +6694,7 @@ LDKCResult_boolLightningErrorZ handle_node_announcement_LDKRoutingMessageHandler
        msg_var = NodeAnnouncement_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -7225,7 +6703,7 @@ LDKCResult_boolLightningErrorZ handle_node_announcement_LDKRoutingMessageHandler
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_boolLightningErrorZ ret_conv = *(LDKCResult_boolLightningErrorZ*)(ret_ptr);
-       ret_conv = CResult_boolLightningErrorZ_clone((LDKCResult_boolLightningErrorZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 LDKCResult_boolLightningErrorZ handle_channel_announcement_LDKRoutingMessageHandler_jcall(const void* this_arg, const LDKChannelAnnouncement * msg) {
@@ -7235,6 +6713,7 @@ LDKCResult_boolLightningErrorZ handle_channel_announcement_LDKRoutingMessageHand
        msg_var = ChannelAnnouncement_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -7243,7 +6722,7 @@ LDKCResult_boolLightningErrorZ handle_channel_announcement_LDKRoutingMessageHand
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_boolLightningErrorZ ret_conv = *(LDKCResult_boolLightningErrorZ*)(ret_ptr);
-       ret_conv = CResult_boolLightningErrorZ_clone((LDKCResult_boolLightningErrorZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 LDKCResult_boolLightningErrorZ handle_channel_update_LDKRoutingMessageHandler_jcall(const void* this_arg, const LDKChannelUpdate * msg) {
@@ -7253,6 +6732,7 @@ LDKCResult_boolLightningErrorZ handle_channel_update_LDKRoutingMessageHandler_jc
        msg_var = ChannelUpdate_clone(msg);
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -7261,7 +6741,7 @@ LDKCResult_boolLightningErrorZ handle_channel_update_LDKRoutingMessageHandler_jc
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_boolLightningErrorZ ret_conv = *(LDKCResult_boolLightningErrorZ*)(ret_ptr);
-       ret_conv = CResult_boolLightningErrorZ_clone((LDKCResult_boolLightningErrorZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ get_next_channel_announcements_LDKRoutingMessageHandler_jcall(const void* this_arg, uint64_t starting_point, uint8_t batch_amount) {
@@ -7279,7 +6759,7 @@ LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ get_next_channel
                void* ret_conv_59_ptr = (void*)(((uint64_t)ret_conv_59) & ~1);
                CHECK_ACCESS(ret_conv_59_ptr);
                LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ ret_conv_59_conv = *(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ*)(ret_conv_59_ptr);
-               ret_conv_59_conv = C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_clone((LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ*)(((uint64_t)ret_conv_59) & ~1));
+               FREE((void*)ret_conv_59);
                ret_constr.data[h] = ret_conv_59_conv;
        }
        return ret_constr;
@@ -7301,7 +6781,7 @@ LDKCVec_NodeAnnouncementZ get_next_node_announcements_LDKRoutingMessageHandler_j
                LDKNodeAnnouncement ret_conv_18_conv;
                ret_conv_18_conv.inner = (void*)(ret_conv_18 & (~1));
                ret_conv_18_conv.is_owned = (ret_conv_18 & 1) || (ret_conv_18 == 0);
-               ret_conv_18_conv = NodeAnnouncement_clone(&ret_conv_18_conv);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_18_conv);
                ret_constr.data[s] = ret_conv_18_conv;
        }
        return ret_constr;
@@ -7315,6 +6795,7 @@ void sync_routing_table_LDKRoutingMessageHandler_jcall(const void* this_arg, LDK
        init_var = Init_clone(init);
        CHECK((((uint64_t)init_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&init_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(init_var);
        init_ref = (uint64_t)init_var.inner;
        if (init_var.is_owned) {
                init_ref |= 1;
@@ -7329,6 +6810,7 @@ LDKCResult_NoneLightningErrorZ handle_reply_channel_range_LDKRoutingMessageHandl
        uint64_t msg_ref = 0;
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -7337,7 +6819,7 @@ LDKCResult_NoneLightningErrorZ handle_reply_channel_range_LDKRoutingMessageHandl
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneLightningErrorZ ret_conv = *(LDKCResult_NoneLightningErrorZ*)(ret_ptr);
-       ret_conv = CResult_NoneLightningErrorZ_clone((LDKCResult_NoneLightningErrorZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 LDKCResult_NoneLightningErrorZ handle_reply_short_channel_ids_end_LDKRoutingMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, LDKReplyShortChannelIdsEnd msg) {
@@ -7348,6 +6830,7 @@ LDKCResult_NoneLightningErrorZ handle_reply_short_channel_ids_end_LDKRoutingMess
        uint64_t msg_ref = 0;
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -7356,7 +6839,7 @@ LDKCResult_NoneLightningErrorZ handle_reply_short_channel_ids_end_LDKRoutingMess
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneLightningErrorZ ret_conv = *(LDKCResult_NoneLightningErrorZ*)(ret_ptr);
-       ret_conv = CResult_NoneLightningErrorZ_clone((LDKCResult_NoneLightningErrorZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 LDKCResult_NoneLightningErrorZ handle_query_channel_range_LDKRoutingMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, LDKQueryChannelRange msg) {
@@ -7367,6 +6850,7 @@ LDKCResult_NoneLightningErrorZ handle_query_channel_range_LDKRoutingMessageHandl
        uint64_t msg_ref = 0;
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -7375,7 +6859,7 @@ LDKCResult_NoneLightningErrorZ handle_query_channel_range_LDKRoutingMessageHandl
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneLightningErrorZ ret_conv = *(LDKCResult_NoneLightningErrorZ*)(ret_ptr);
-       ret_conv = CResult_NoneLightningErrorZ_clone((LDKCResult_NoneLightningErrorZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 LDKCResult_NoneLightningErrorZ handle_query_short_channel_ids_LDKRoutingMessageHandler_jcall(const void* this_arg, LDKPublicKey their_node_id, LDKQueryShortChannelIds msg) {
@@ -7386,6 +6870,7 @@ LDKCResult_NoneLightningErrorZ handle_query_short_channel_ids_LDKRoutingMessageH
        uint64_t msg_ref = 0;
        CHECK((((uint64_t)msg_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&msg_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_var);
        msg_ref = (uint64_t)msg_var.inner;
        if (msg_var.is_owned) {
                msg_ref |= 1;
@@ -7394,7 +6879,7 @@ LDKCResult_NoneLightningErrorZ handle_query_short_channel_ids_LDKRoutingMessageH
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneLightningErrorZ ret_conv = *(LDKCResult_NoneLightningErrorZ*)(ret_ptr);
-       ret_conv = CResult_NoneLightningErrorZ_clone((LDKCResult_NoneLightningErrorZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 static void LDKRoutingMessageHandler_JCalls_cloned(LDKRoutingMessageHandler* new_obj) {
@@ -7437,6 +6922,7 @@ uint32_t  __attribute__((visibility("default"))) TS_RoutingMessageHandler_handle
        LDKNodeAnnouncement msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        LDKCResult_boolLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_boolLightningErrorZ), "LDKCResult_boolLightningErrorZ");
        *ret_conv = (this_arg_conv->handle_node_announcement)(this_arg_conv->this_arg, &msg_conv);
        return (uint64_t)ret_conv;
@@ -7449,6 +6935,7 @@ uint32_t  __attribute__((visibility("default"))) TS_RoutingMessageHandler_handle
        LDKChannelAnnouncement msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        LDKCResult_boolLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_boolLightningErrorZ), "LDKCResult_boolLightningErrorZ");
        *ret_conv = (this_arg_conv->handle_channel_announcement)(this_arg_conv->this_arg, &msg_conv);
        return (uint64_t)ret_conv;
@@ -7461,6 +6948,7 @@ uint32_t  __attribute__((visibility("default"))) TS_RoutingMessageHandler_handle
        LDKChannelUpdate msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        LDKCResult_boolLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_boolLightningErrorZ), "LDKCResult_boolLightningErrorZ");
        *ret_conv = (this_arg_conv->handle_channel_update)(this_arg_conv->this_arg, &msg_conv);
        return (uint64_t)ret_conv;
@@ -7500,6 +6988,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_RoutingMessageHandler_g
                uint64_t ret_conv_18_ref = 0;
                CHECK((((uint64_t)ret_conv_18_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_conv_18_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_18_var);
                ret_conv_18_ref = (uint64_t)ret_conv_18_var.inner;
                if (ret_conv_18_var.is_owned) {
                        ret_conv_18_ref |= 1;
@@ -7521,6 +7010,7 @@ void  __attribute__((visibility("default"))) TS_RoutingMessageHandler_sync_routi
        LDKInit init_conv;
        init_conv.inner = (void*)(init & (~1));
        init_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(init_conv);
        (this_arg_conv->sync_routing_table)(this_arg_conv->this_arg, their_node_id_ref, &init_conv);
 }
 
@@ -7534,6 +7024,7 @@ uint32_t  __attribute__((visibility("default"))) TS_RoutingMessageHandler_handle
        LDKReplyChannelRange msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = ReplyChannelRange_clone(&msg_conv);
        LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
        *ret_conv = (this_arg_conv->handle_reply_channel_range)(this_arg_conv->this_arg, their_node_id_ref, msg_conv);
@@ -7550,6 +7041,7 @@ uint32_t  __attribute__((visibility("default"))) TS_RoutingMessageHandler_handle
        LDKReplyShortChannelIdsEnd msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = ReplyShortChannelIdsEnd_clone(&msg_conv);
        LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
        *ret_conv = (this_arg_conv->handle_reply_short_channel_ids_end)(this_arg_conv->this_arg, their_node_id_ref, msg_conv);
@@ -7566,6 +7058,7 @@ uint32_t  __attribute__((visibility("default"))) TS_RoutingMessageHandler_handle
        LDKQueryChannelRange msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = QueryChannelRange_clone(&msg_conv);
        LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
        *ret_conv = (this_arg_conv->handle_query_channel_range)(this_arg_conv->this_arg, their_node_id_ref, msg_conv);
@@ -7582,6 +7075,7 @@ uint32_t  __attribute__((visibility("default"))) TS_RoutingMessageHandler_handle
        LDKQueryShortChannelIds msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = QueryShortChannelIds_clone(&msg_conv);
        LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
        *ret_conv = (this_arg_conv->handle_query_short_channel_ids)(this_arg_conv->this_arg, their_node_id_ref, msg_conv);
@@ -7608,7 +7102,7 @@ LDKCResult_COption_TypeZDecodeErrorZ read_LDKCustomMessageReader_jcall(const voi
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_COption_TypeZDecodeErrorZ ret_conv = *(LDKCResult_COption_TypeZDecodeErrorZ*)(ret_ptr);
-       ret_conv = CResult_COption_TypeZDecodeErrorZ_clone((LDKCResult_COption_TypeZDecodeErrorZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 static void LDKCustomMessageReader_JCalls_cloned(LDKCustomMessageReader* new_obj) {
@@ -7668,7 +7162,7 @@ LDKCResult_NoneLightningErrorZ handle_custom_message_LDKCustomMessageHandler_jca
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneLightningErrorZ ret_conv = *(LDKCResult_NoneLightningErrorZ*)(ret_ptr);
-       ret_conv = CResult_NoneLightningErrorZ_clone((LDKCResult_NoneLightningErrorZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 LDKCVec_C2Tuple_PublicKeyTypeZZ get_and_clear_pending_msg_LDKCustomMessageHandler_jcall(const void* this_arg) {
@@ -7686,7 +7180,7 @@ LDKCVec_C2Tuple_PublicKeyTypeZZ get_and_clear_pending_msg_LDKCustomMessageHandle
                void* ret_conv_25_ptr = (void*)(((uint64_t)ret_conv_25) & ~1);
                CHECK_ACCESS(ret_conv_25_ptr);
                LDKC2Tuple_PublicKeyTypeZ ret_conv_25_conv = *(LDKC2Tuple_PublicKeyTypeZ*)(ret_conv_25_ptr);
-               ret_conv_25_conv = C2Tuple_PublicKeyTypeZ_clone((LDKC2Tuple_PublicKeyTypeZ*)(((uint64_t)ret_conv_25) & ~1));
+               FREE((void*)ret_conv_25);
                ret_constr.data[z] = ret_conv_25_conv;
        }
        return ret_constr;
@@ -7860,6 +7354,7 @@ uint64_t channel_penalty_msat_LDKScore_jcall(const void* this_arg, uint64_t shor
        source_var = NodeId_clone(source);
        CHECK((((uint64_t)source_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&source_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(source_var);
        source_ref = (uint64_t)source_var.inner;
        if (source_var.is_owned) {
                source_ref |= 1;
@@ -7869,6 +7364,7 @@ uint64_t channel_penalty_msat_LDKScore_jcall(const void* this_arg, uint64_t shor
        target_var = NodeId_clone(target);
        CHECK((((uint64_t)target_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&target_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(target_var);
        target_ref = (uint64_t)target_var.inner;
        if (target_var.is_owned) {
                target_ref |= 1;
@@ -7886,6 +7382,7 @@ void payment_path_failed_LDKScore_jcall(void* this_arg, LDKCVec_RouteHopZ path,
                uint64_t path_conv_10_ref = 0;
                CHECK((((uint64_t)path_conv_10_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&path_conv_10_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv_10_var);
                path_conv_10_ref = (uint64_t)path_conv_10_var.inner;
                if (path_conv_10_var.is_owned) {
                        path_conv_10_ref |= 1;
@@ -7935,9 +7432,11 @@ int64_t  __attribute__((visibility("default"))) TS_Score_channel_penalty_msat(ui
        LDKNodeId source_conv;
        source_conv.inner = (void*)(source & (~1));
        source_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(source_conv);
        LDKNodeId target_conv;
        target_conv.inner = (void*)(target & (~1));
        target_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(target_conv);
        int64_t ret_val = (this_arg_conv->channel_penalty_msat)(this_arg_conv->this_arg, short_channel_id, &source_conv, &target_conv);
        return ret_val;
 }
@@ -7958,6 +7457,7 @@ void  __attribute__((visibility("default"))) TS_Score_payment_path_failed(uint32
                LDKRouteHop path_conv_10_conv;
                path_conv_10_conv.inner = (void*)(path_conv_10 & (~1));
                path_conv_10_conv.is_owned = (path_conv_10 & 1) || (path_conv_10 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv_10_conv);
                path_conv_10_conv = RouteHop_clone(&path_conv_10_conv);
                path_constr.data[k] = path_conv_10_conv;
        }
@@ -7993,6 +7493,7 @@ LDKCResult_NoneErrorZ persist_manager_LDKChannelManagerPersister_jcall(const voi
        // Warning: we may need a move here but no clone is available for LDKChannelManager
        CHECK((((uint64_t)channel_manager_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&channel_manager_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_manager_var);
        channel_manager_ref = (uint64_t)channel_manager_var.inner;
        if (channel_manager_var.is_owned) {
                channel_manager_ref |= 1;
@@ -8001,7 +7502,7 @@ LDKCResult_NoneErrorZ persist_manager_LDKChannelManagerPersister_jcall(const voi
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NoneErrorZ ret_conv = *(LDKCResult_NoneErrorZ*)(ret_ptr);
-       ret_conv = CResult_NoneErrorZ_clone((LDKCResult_NoneErrorZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 static void LDKChannelManagerPersister_JCalls_cloned(LDKChannelManagerPersister* new_obj) {
@@ -8032,6 +7533,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelManagerPersister_pers
        LDKChannelManager channel_manager_conv;
        channel_manager_conv.inner = (void*)(channel_manager & (~1));
        channel_manager_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_manager_conv);
        LDKCResult_NoneErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneErrorZ), "LDKCResult_NoneErrorZ");
        *ret_conv = (this_arg_conv->persist_manager)(this_arg_conv->this_arg, &channel_manager_conv);
        return (uint64_t)ret_conv;
@@ -8100,7 +7602,7 @@ LDKCVec_ChannelDetailsZ first_hops_LDKPayer_jcall(const void* this_arg) {
                LDKChannelDetails ret_conv_16_conv;
                ret_conv_16_conv.inner = (void*)(ret_conv_16 & (~1));
                ret_conv_16_conv.is_owned = (ret_conv_16 & 1) || (ret_conv_16 == 0);
-               ret_conv_16_conv = ChannelDetails_clone(&ret_conv_16_conv);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_16_conv);
                ret_constr.data[q] = ret_conv_16_conv;
        }
        return ret_constr;
@@ -8112,6 +7614,7 @@ LDKCResult_PaymentIdPaymentSendFailureZ send_payment_LDKPayer_jcall(const void*
        route_var = Route_clone(route);
        CHECK((((uint64_t)route_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&route_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(route_var);
        route_ref = (uint64_t)route_var.inner;
        if (route_var.is_owned) {
                route_ref |= 1;
@@ -8124,7 +7627,7 @@ LDKCResult_PaymentIdPaymentSendFailureZ send_payment_LDKPayer_jcall(const void*
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_PaymentIdPaymentSendFailureZ ret_conv = *(LDKCResult_PaymentIdPaymentSendFailureZ*)(ret_ptr);
-       ret_conv = CResult_PaymentIdPaymentSendFailureZ_clone((LDKCResult_PaymentIdPaymentSendFailureZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 LDKCResult_NonePaymentSendFailureZ retry_payment_LDKPayer_jcall(const void* this_arg, const LDKRoute * route, LDKThirtyTwoBytes payment_id) {
@@ -8134,6 +7637,7 @@ LDKCResult_NonePaymentSendFailureZ retry_payment_LDKPayer_jcall(const void* this
        route_var = Route_clone(route);
        CHECK((((uint64_t)route_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&route_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(route_var);
        route_ref = (uint64_t)route_var.inner;
        if (route_var.is_owned) {
                route_ref |= 1;
@@ -8144,7 +7648,7 @@ LDKCResult_NonePaymentSendFailureZ retry_payment_LDKPayer_jcall(const void* this
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_NonePaymentSendFailureZ ret_conv = *(LDKCResult_NonePaymentSendFailureZ*)(ret_ptr);
-       ret_conv = CResult_NonePaymentSendFailureZ_clone((LDKCResult_NonePaymentSendFailureZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 static void LDKPayer_JCalls_cloned(LDKPayer* new_obj) {
@@ -8193,6 +7697,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_Payer_first_hops(uint32
                uint64_t ret_conv_16_ref = 0;
                CHECK((((uint64_t)ret_conv_16_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_conv_16_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_16_var);
                ret_conv_16_ref = (uint64_t)ret_conv_16_var.inner;
                if (ret_conv_16_var.is_owned) {
                        ret_conv_16_ref |= 1;
@@ -8211,6 +7716,7 @@ uint32_t  __attribute__((visibility("default"))) TS_Payer_send_payment(uint32_t
        LDKRoute route_conv;
        route_conv.inner = (void*)(route & (~1));
        route_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(route_conv);
        LDKThirtyTwoBytes payment_hash_ref;
        CHECK(*((uint32_t*)payment_hash) == 32);
        memcpy(payment_hash_ref.data, (uint8_t*)(payment_hash + 4), 32);
@@ -8229,6 +7735,7 @@ uint32_t  __attribute__((visibility("default"))) TS_Payer_retry_payment(uint32_t
        LDKRoute route_conv;
        route_conv.inner = (void*)(route & (~1));
        route_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(route_conv);
        LDKThirtyTwoBytes payment_id_ref;
        CHECK(*((uint32_t*)payment_id) == 32);
        memcpy(payment_id_ref.data, (uint8_t*)(payment_id + 4), 32);
@@ -8257,6 +7764,7 @@ LDKCResult_RouteLightningErrorZ find_route_LDKRouter_jcall(const void* this_arg,
        params_var = RouteParameters_clone(params);
        CHECK((((uint64_t)params_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&params_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(params_var);
        params_ref = (uint64_t)params_var.inner;
        if (params_var.is_owned) {
                params_ref |= 1;
@@ -8272,6 +7780,7 @@ LDKCResult_RouteLightningErrorZ find_route_LDKRouter_jcall(const void* this_arg,
                        uint64_t first_hops_conv_16_ref = 0;
                        CHECK((((uint64_t)first_hops_conv_16_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&first_hops_conv_16_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(first_hops_conv_16_var);
                        first_hops_conv_16_ref = (uint64_t)first_hops_conv_16_var.inner;
                        if (first_hops_conv_16_var.is_owned) {
                                first_hops_conv_16_ref |= 1;
@@ -8286,7 +7795,7 @@ LDKCResult_RouteLightningErrorZ find_route_LDKRouter_jcall(const void* this_arg,
        void* ret_ptr = (void*)(((uint64_t)ret) & ~1);
        CHECK_ACCESS(ret_ptr);
        LDKCResult_RouteLightningErrorZ ret_conv = *(LDKCResult_RouteLightningErrorZ*)(ret_ptr);
-       ret_conv = CResult_RouteLightningErrorZ_clone((LDKCResult_RouteLightningErrorZ*)(((uint64_t)ret) & ~1));
+       FREE((void*)ret);
        return ret_conv;
 }
 static void LDKRouter_JCalls_cloned(LDKRouter* new_obj) {
@@ -8320,6 +7829,7 @@ uint32_t  __attribute__((visibility("default"))) TS_Router_find_route(uint32_t t
        LDKRouteParameters params_conv;
        params_conv.inner = (void*)(params & (~1));
        params_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(params_conv);
        LDKCVec_ChannelDetailsZ first_hops_constr;
        LDKCVec_ChannelDetailsZ *first_hops_ptr = NULL;
        if (first_hops != 0) {
@@ -8334,6 +7844,7 @@ uint32_t  __attribute__((visibility("default"))) TS_Router_find_route(uint32_t t
                        LDKChannelDetails first_hops_conv_16_conv;
                        first_hops_conv_16_conv.inner = (void*)(first_hops_conv_16 & (~1));
                        first_hops_conv_16_conv.is_owned = (first_hops_conv_16 & 1) || (first_hops_conv_16 == 0);
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(first_hops_conv_16_conv);
                        first_hops_constr.data[q] = first_hops_conv_16_conv;
                }
                first_hops_ptr = &first_hops_constr;
@@ -8389,6 +7900,17 @@ void  __attribute__((visibility("default"))) TS_TxOut_free(uint32_t _res) {
        TxOut_free(_res_conv);
 }
 
+static inline uint64_t TxOut_clone_ptr(LDKTxOut *NONNULL_PTR arg) {
+       LDKTxOut* ret_ref = MALLOC(sizeof(LDKTxOut), "LDKTxOut");
+       *ret_ref = TxOut_clone(arg);
+       return (uint64_t)ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_TxOut_clone_ptr(uint32_t arg) {
+       LDKTxOut* arg_conv = (LDKTxOut*)(arg & ~1);
+       int64_t ret_val = TxOut_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_TxOut_clone(uint32_t orig) {
        LDKTxOut* orig_conv = (LDKTxOut*)(orig & ~1);
        LDKTxOut* ret_ref = MALLOC(sizeof(LDKTxOut), "LDKTxOut");
@@ -8417,6 +7939,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_SecretKeyErrorZ_err(
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_SecretKeyErrorZ_is_ok(uint32_t o) {
+       LDKCResult_SecretKeyErrorZ* o_conv = (LDKCResult_SecretKeyErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_SecretKeyErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_SecretKeyErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -8442,6 +7970,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_PublicKeyErrorZ_err(
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_PublicKeyErrorZ_is_ok(uint32_t o) {
+       LDKCResult_PublicKeyErrorZ* o_conv = (LDKCResult_PublicKeyErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_PublicKeyErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_PublicKeyErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -8451,6 +7985,17 @@ void  __attribute__((visibility("default"))) TS_CResult_PublicKeyErrorZ_free(uin
        CResult_PublicKeyErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_PublicKeyErrorZ_clone_ptr(LDKCResult_PublicKeyErrorZ *NONNULL_PTR arg) {
+       LDKCResult_PublicKeyErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PublicKeyErrorZ), "LDKCResult_PublicKeyErrorZ");
+       *ret_conv = CResult_PublicKeyErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_PublicKeyErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_PublicKeyErrorZ* arg_conv = (LDKCResult_PublicKeyErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_PublicKeyErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_PublicKeyErrorZ_clone(uint32_t orig) {
        LDKCResult_PublicKeyErrorZ* orig_conv = (LDKCResult_PublicKeyErrorZ*)(orig & ~1);
        LDKCResult_PublicKeyErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PublicKeyErrorZ), "LDKCResult_PublicKeyErrorZ");
@@ -8462,6 +8007,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_TxCreationKeysDecode
        LDKTxCreationKeys o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = TxCreationKeys_clone(&o_conv);
        LDKCResult_TxCreationKeysDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxCreationKeysDecodeErrorZ), "LDKCResult_TxCreationKeysDecodeErrorZ");
        *ret_conv = CResult_TxCreationKeysDecodeErrorZ_ok(o_conv);
@@ -8472,12 +8018,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_TxCreationKeysDecode
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_TxCreationKeysDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxCreationKeysDecodeErrorZ), "LDKCResult_TxCreationKeysDecodeErrorZ");
        *ret_conv = CResult_TxCreationKeysDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_TxCreationKeysDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_TxCreationKeysDecodeErrorZ* o_conv = (LDKCResult_TxCreationKeysDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_TxCreationKeysDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_TxCreationKeysDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -8487,6 +8040,17 @@ void  __attribute__((visibility("default"))) TS_CResult_TxCreationKeysDecodeErro
        CResult_TxCreationKeysDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_TxCreationKeysDecodeErrorZ_clone_ptr(LDKCResult_TxCreationKeysDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_TxCreationKeysDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxCreationKeysDecodeErrorZ), "LDKCResult_TxCreationKeysDecodeErrorZ");
+       *ret_conv = CResult_TxCreationKeysDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_TxCreationKeysDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_TxCreationKeysDecodeErrorZ* arg_conv = (LDKCResult_TxCreationKeysDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_TxCreationKeysDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_TxCreationKeysDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_TxCreationKeysDecodeErrorZ* orig_conv = (LDKCResult_TxCreationKeysDecodeErrorZ*)(orig & ~1);
        LDKCResult_TxCreationKeysDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxCreationKeysDecodeErrorZ), "LDKCResult_TxCreationKeysDecodeErrorZ");
@@ -8498,6 +8062,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ChannelPublicKeysDec
        LDKChannelPublicKeys o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ChannelPublicKeys_clone(&o_conv);
        LDKCResult_ChannelPublicKeysDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelPublicKeysDecodeErrorZ), "LDKCResult_ChannelPublicKeysDecodeErrorZ");
        *ret_conv = CResult_ChannelPublicKeysDecodeErrorZ_ok(o_conv);
@@ -8508,12 +8073,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ChannelPublicKeysDec
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ChannelPublicKeysDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelPublicKeysDecodeErrorZ), "LDKCResult_ChannelPublicKeysDecodeErrorZ");
        *ret_conv = CResult_ChannelPublicKeysDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_ChannelPublicKeysDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_ChannelPublicKeysDecodeErrorZ* o_conv = (LDKCResult_ChannelPublicKeysDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ChannelPublicKeysDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_ChannelPublicKeysDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -8523,6 +8095,17 @@ void  __attribute__((visibility("default"))) TS_CResult_ChannelPublicKeysDecodeE
        CResult_ChannelPublicKeysDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ChannelPublicKeysDecodeErrorZ_clone_ptr(LDKCResult_ChannelPublicKeysDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ChannelPublicKeysDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelPublicKeysDecodeErrorZ), "LDKCResult_ChannelPublicKeysDecodeErrorZ");
+       *ret_conv = CResult_ChannelPublicKeysDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_ChannelPublicKeysDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_ChannelPublicKeysDecodeErrorZ* arg_conv = (LDKCResult_ChannelPublicKeysDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ChannelPublicKeysDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_ChannelPublicKeysDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_ChannelPublicKeysDecodeErrorZ* orig_conv = (LDKCResult_ChannelPublicKeysDecodeErrorZ*)(orig & ~1);
        LDKCResult_ChannelPublicKeysDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelPublicKeysDecodeErrorZ), "LDKCResult_ChannelPublicKeysDecodeErrorZ");
@@ -8534,6 +8117,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_TxCreationKeysErrorZ
        LDKTxCreationKeys o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = TxCreationKeys_clone(&o_conv);
        LDKCResult_TxCreationKeysErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxCreationKeysErrorZ), "LDKCResult_TxCreationKeysErrorZ");
        *ret_conv = CResult_TxCreationKeysErrorZ_ok(o_conv);
@@ -8547,6 +8131,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_TxCreationKeysErrorZ
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_TxCreationKeysErrorZ_is_ok(uint32_t o) {
+       LDKCResult_TxCreationKeysErrorZ* o_conv = (LDKCResult_TxCreationKeysErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_TxCreationKeysErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_TxCreationKeysErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -8556,6 +8146,17 @@ void  __attribute__((visibility("default"))) TS_CResult_TxCreationKeysErrorZ_fre
        CResult_TxCreationKeysErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_TxCreationKeysErrorZ_clone_ptr(LDKCResult_TxCreationKeysErrorZ *NONNULL_PTR arg) {
+       LDKCResult_TxCreationKeysErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxCreationKeysErrorZ), "LDKCResult_TxCreationKeysErrorZ");
+       *ret_conv = CResult_TxCreationKeysErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_TxCreationKeysErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_TxCreationKeysErrorZ* arg_conv = (LDKCResult_TxCreationKeysErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_TxCreationKeysErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_TxCreationKeysErrorZ_clone(uint32_t orig) {
        LDKCResult_TxCreationKeysErrorZ* orig_conv = (LDKCResult_TxCreationKeysErrorZ*)(orig & ~1);
        LDKCResult_TxCreationKeysErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxCreationKeysErrorZ), "LDKCResult_TxCreationKeysErrorZ");
@@ -8586,6 +8187,18 @@ void  __attribute__((visibility("default"))) TS_COption_u32Z_free(uint32_t _res)
        COption_u32Z_free(_res_conv);
 }
 
+static inline uint64_t COption_u32Z_clone_ptr(LDKCOption_u32Z *NONNULL_PTR arg) {
+       LDKCOption_u32Z *ret_copy = MALLOC(sizeof(LDKCOption_u32Z), "LDKCOption_u32Z");
+       *ret_copy = COption_u32Z_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_COption_u32Z_clone_ptr(uint32_t arg) {
+       LDKCOption_u32Z* arg_conv = (LDKCOption_u32Z*)arg;
+       int64_t ret_val = COption_u32Z_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_COption_u32Z_clone(uint32_t orig) {
        LDKCOption_u32Z* orig_conv = (LDKCOption_u32Z*)orig;
        LDKCOption_u32Z *ret_copy = MALLOC(sizeof(LDKCOption_u32Z), "LDKCOption_u32Z");
@@ -8598,6 +8211,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_HTLCOutputInCommitme
        LDKHTLCOutputInCommitment o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = HTLCOutputInCommitment_clone(&o_conv);
        LDKCResult_HTLCOutputInCommitmentDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HTLCOutputInCommitmentDecodeErrorZ), "LDKCResult_HTLCOutputInCommitmentDecodeErrorZ");
        *ret_conv = CResult_HTLCOutputInCommitmentDecodeErrorZ_ok(o_conv);
@@ -8608,12 +8222,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_HTLCOutputInCommitme
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_HTLCOutputInCommitmentDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HTLCOutputInCommitmentDecodeErrorZ), "LDKCResult_HTLCOutputInCommitmentDecodeErrorZ");
        *ret_conv = CResult_HTLCOutputInCommitmentDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_HTLCOutputInCommitmentDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_HTLCOutputInCommitmentDecodeErrorZ* o_conv = (LDKCResult_HTLCOutputInCommitmentDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_HTLCOutputInCommitmentDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_HTLCOutputInCommitmentDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -8623,6 +8244,17 @@ void  __attribute__((visibility("default"))) TS_CResult_HTLCOutputInCommitmentDe
        CResult_HTLCOutputInCommitmentDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_HTLCOutputInCommitmentDecodeErrorZ_clone_ptr(LDKCResult_HTLCOutputInCommitmentDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_HTLCOutputInCommitmentDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HTLCOutputInCommitmentDecodeErrorZ), "LDKCResult_HTLCOutputInCommitmentDecodeErrorZ");
+       *ret_conv = CResult_HTLCOutputInCommitmentDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_HTLCOutputInCommitmentDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_HTLCOutputInCommitmentDecodeErrorZ* arg_conv = (LDKCResult_HTLCOutputInCommitmentDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_HTLCOutputInCommitmentDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_HTLCOutputInCommitmentDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_HTLCOutputInCommitmentDecodeErrorZ* orig_conv = (LDKCResult_HTLCOutputInCommitmentDecodeErrorZ*)(orig & ~1);
        LDKCResult_HTLCOutputInCommitmentDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HTLCOutputInCommitmentDecodeErrorZ), "LDKCResult_HTLCOutputInCommitmentDecodeErrorZ");
@@ -8634,6 +8266,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_CounterpartyChannelT
        LDKCounterpartyChannelTransactionParameters o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = CounterpartyChannelTransactionParameters_clone(&o_conv);
        LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ), "LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ");
        *ret_conv = CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_ok(o_conv);
@@ -8644,12 +8277,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_CounterpartyChannelT
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ), "LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ");
        *ret_conv = CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ* o_conv = (LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -8659,6 +8299,17 @@ void  __attribute__((visibility("default"))) TS_CResult_CounterpartyChannelTrans
        CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_clone_ptr(LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ), "LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ");
+       *ret_conv = CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ* arg_conv = (LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ* orig_conv = (LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ*)(orig & ~1);
        LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ), "LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ");
@@ -8670,6 +8321,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ChannelTransactionPa
        LDKChannelTransactionParameters o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ChannelTransactionParameters_clone(&o_conv);
        LDKCResult_ChannelTransactionParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelTransactionParametersDecodeErrorZ), "LDKCResult_ChannelTransactionParametersDecodeErrorZ");
        *ret_conv = CResult_ChannelTransactionParametersDecodeErrorZ_ok(o_conv);
@@ -8680,12 +8332,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ChannelTransactionPa
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ChannelTransactionParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelTransactionParametersDecodeErrorZ), "LDKCResult_ChannelTransactionParametersDecodeErrorZ");
        *ret_conv = CResult_ChannelTransactionParametersDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_ChannelTransactionParametersDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_ChannelTransactionParametersDecodeErrorZ* o_conv = (LDKCResult_ChannelTransactionParametersDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ChannelTransactionParametersDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_ChannelTransactionParametersDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -8695,6 +8354,17 @@ void  __attribute__((visibility("default"))) TS_CResult_ChannelTransactionParame
        CResult_ChannelTransactionParametersDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ChannelTransactionParametersDecodeErrorZ_clone_ptr(LDKCResult_ChannelTransactionParametersDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ChannelTransactionParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelTransactionParametersDecodeErrorZ), "LDKCResult_ChannelTransactionParametersDecodeErrorZ");
+       *ret_conv = CResult_ChannelTransactionParametersDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_ChannelTransactionParametersDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_ChannelTransactionParametersDecodeErrorZ* arg_conv = (LDKCResult_ChannelTransactionParametersDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ChannelTransactionParametersDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_ChannelTransactionParametersDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_ChannelTransactionParametersDecodeErrorZ* orig_conv = (LDKCResult_ChannelTransactionParametersDecodeErrorZ*)(orig & ~1);
        LDKCResult_ChannelTransactionParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelTransactionParametersDecodeErrorZ), "LDKCResult_ChannelTransactionParametersDecodeErrorZ");
@@ -8724,6 +8394,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_HolderCommitmentTran
        LDKHolderCommitmentTransaction o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = HolderCommitmentTransaction_clone(&o_conv);
        LDKCResult_HolderCommitmentTransactionDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HolderCommitmentTransactionDecodeErrorZ), "LDKCResult_HolderCommitmentTransactionDecodeErrorZ");
        *ret_conv = CResult_HolderCommitmentTransactionDecodeErrorZ_ok(o_conv);
@@ -8734,12 +8405,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_HolderCommitmentTran
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_HolderCommitmentTransactionDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HolderCommitmentTransactionDecodeErrorZ), "LDKCResult_HolderCommitmentTransactionDecodeErrorZ");
        *ret_conv = CResult_HolderCommitmentTransactionDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_HolderCommitmentTransactionDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_HolderCommitmentTransactionDecodeErrorZ* o_conv = (LDKCResult_HolderCommitmentTransactionDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_HolderCommitmentTransactionDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_HolderCommitmentTransactionDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -8749,6 +8427,17 @@ void  __attribute__((visibility("default"))) TS_CResult_HolderCommitmentTransact
        CResult_HolderCommitmentTransactionDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_HolderCommitmentTransactionDecodeErrorZ_clone_ptr(LDKCResult_HolderCommitmentTransactionDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_HolderCommitmentTransactionDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HolderCommitmentTransactionDecodeErrorZ), "LDKCResult_HolderCommitmentTransactionDecodeErrorZ");
+       *ret_conv = CResult_HolderCommitmentTransactionDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_HolderCommitmentTransactionDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_HolderCommitmentTransactionDecodeErrorZ* arg_conv = (LDKCResult_HolderCommitmentTransactionDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_HolderCommitmentTransactionDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_HolderCommitmentTransactionDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_HolderCommitmentTransactionDecodeErrorZ* orig_conv = (LDKCResult_HolderCommitmentTransactionDecodeErrorZ*)(orig & ~1);
        LDKCResult_HolderCommitmentTransactionDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HolderCommitmentTransactionDecodeErrorZ), "LDKCResult_HolderCommitmentTransactionDecodeErrorZ");
@@ -8760,6 +8449,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_BuiltCommitmentTrans
        LDKBuiltCommitmentTransaction o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = BuiltCommitmentTransaction_clone(&o_conv);
        LDKCResult_BuiltCommitmentTransactionDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BuiltCommitmentTransactionDecodeErrorZ), "LDKCResult_BuiltCommitmentTransactionDecodeErrorZ");
        *ret_conv = CResult_BuiltCommitmentTransactionDecodeErrorZ_ok(o_conv);
@@ -8770,12 +8460,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_BuiltCommitmentTrans
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_BuiltCommitmentTransactionDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BuiltCommitmentTransactionDecodeErrorZ), "LDKCResult_BuiltCommitmentTransactionDecodeErrorZ");
        *ret_conv = CResult_BuiltCommitmentTransactionDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_BuiltCommitmentTransactionDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_BuiltCommitmentTransactionDecodeErrorZ* o_conv = (LDKCResult_BuiltCommitmentTransactionDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_BuiltCommitmentTransactionDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_BuiltCommitmentTransactionDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -8785,6 +8482,17 @@ void  __attribute__((visibility("default"))) TS_CResult_BuiltCommitmentTransacti
        CResult_BuiltCommitmentTransactionDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_BuiltCommitmentTransactionDecodeErrorZ_clone_ptr(LDKCResult_BuiltCommitmentTransactionDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_BuiltCommitmentTransactionDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BuiltCommitmentTransactionDecodeErrorZ), "LDKCResult_BuiltCommitmentTransactionDecodeErrorZ");
+       *ret_conv = CResult_BuiltCommitmentTransactionDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_BuiltCommitmentTransactionDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_BuiltCommitmentTransactionDecodeErrorZ* arg_conv = (LDKCResult_BuiltCommitmentTransactionDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_BuiltCommitmentTransactionDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_BuiltCommitmentTransactionDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_BuiltCommitmentTransactionDecodeErrorZ* orig_conv = (LDKCResult_BuiltCommitmentTransactionDecodeErrorZ*)(orig & ~1);
        LDKCResult_BuiltCommitmentTransactionDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_BuiltCommitmentTransactionDecodeErrorZ), "LDKCResult_BuiltCommitmentTransactionDecodeErrorZ");
@@ -8796,6 +8504,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_TrustedClosingTransa
        LDKTrustedClosingTransaction o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        // Warning: we need a move here but no clone is available for LDKTrustedClosingTransaction
        LDKCResult_TrustedClosingTransactionNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_TrustedClosingTransactionNoneZ), "LDKCResult_TrustedClosingTransactionNoneZ");
        *ret_conv = CResult_TrustedClosingTransactionNoneZ_ok(o_conv);
@@ -8808,6 +8517,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_TrustedClosingTransa
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_TrustedClosingTransactionNoneZ_is_ok(uint32_t o) {
+       LDKCResult_TrustedClosingTransactionNoneZ* o_conv = (LDKCResult_TrustedClosingTransactionNoneZ*)(o & ~1);
+       jboolean ret_val = CResult_TrustedClosingTransactionNoneZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_TrustedClosingTransactionNoneZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -8821,6 +8536,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_CommitmentTransactio
        LDKCommitmentTransaction o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = CommitmentTransaction_clone(&o_conv);
        LDKCResult_CommitmentTransactionDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CommitmentTransactionDecodeErrorZ), "LDKCResult_CommitmentTransactionDecodeErrorZ");
        *ret_conv = CResult_CommitmentTransactionDecodeErrorZ_ok(o_conv);
@@ -8831,12 +8547,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_CommitmentTransactio
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_CommitmentTransactionDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CommitmentTransactionDecodeErrorZ), "LDKCResult_CommitmentTransactionDecodeErrorZ");
        *ret_conv = CResult_CommitmentTransactionDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_CommitmentTransactionDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_CommitmentTransactionDecodeErrorZ* o_conv = (LDKCResult_CommitmentTransactionDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_CommitmentTransactionDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_CommitmentTransactionDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -8846,6 +8569,17 @@ void  __attribute__((visibility("default"))) TS_CResult_CommitmentTransactionDec
        CResult_CommitmentTransactionDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_CommitmentTransactionDecodeErrorZ_clone_ptr(LDKCResult_CommitmentTransactionDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_CommitmentTransactionDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CommitmentTransactionDecodeErrorZ), "LDKCResult_CommitmentTransactionDecodeErrorZ");
+       *ret_conv = CResult_CommitmentTransactionDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_CommitmentTransactionDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_CommitmentTransactionDecodeErrorZ* arg_conv = (LDKCResult_CommitmentTransactionDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_CommitmentTransactionDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_CommitmentTransactionDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_CommitmentTransactionDecodeErrorZ* orig_conv = (LDKCResult_CommitmentTransactionDecodeErrorZ*)(orig & ~1);
        LDKCResult_CommitmentTransactionDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CommitmentTransactionDecodeErrorZ), "LDKCResult_CommitmentTransactionDecodeErrorZ");
@@ -8857,6 +8591,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_TrustedCommitmentTra
        LDKTrustedCommitmentTransaction o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        // Warning: we need a move here but no clone is available for LDKTrustedCommitmentTransaction
        LDKCResult_TrustedCommitmentTransactionNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_TrustedCommitmentTransactionNoneZ), "LDKCResult_TrustedCommitmentTransactionNoneZ");
        *ret_conv = CResult_TrustedCommitmentTransactionNoneZ_ok(o_conv);
@@ -8869,6 +8604,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_TrustedCommitmentTra
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_TrustedCommitmentTransactionNoneZ_is_ok(uint32_t o) {
+       LDKCResult_TrustedCommitmentTransactionNoneZ* o_conv = (LDKCResult_TrustedCommitmentTransactionNoneZ*)(o & ~1);
+       jboolean ret_val = CResult_TrustedCommitmentTransactionNoneZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_TrustedCommitmentTransactionNoneZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -8904,6 +8645,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_CVec_SignatureZNoneZ
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_CVec_SignatureZNoneZ_is_ok(uint32_t o) {
+       LDKCResult_CVec_SignatureZNoneZ* o_conv = (LDKCResult_CVec_SignatureZNoneZ*)(o & ~1);
+       jboolean ret_val = CResult_CVec_SignatureZNoneZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_CVec_SignatureZNoneZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -8913,6 +8660,17 @@ void  __attribute__((visibility("default"))) TS_CResult_CVec_SignatureZNoneZ_fre
        CResult_CVec_SignatureZNoneZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_CVec_SignatureZNoneZ_clone_ptr(LDKCResult_CVec_SignatureZNoneZ *NONNULL_PTR arg) {
+       LDKCResult_CVec_SignatureZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_SignatureZNoneZ), "LDKCResult_CVec_SignatureZNoneZ");
+       *ret_conv = CResult_CVec_SignatureZNoneZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_CVec_SignatureZNoneZ_clone_ptr(uint32_t arg) {
+       LDKCResult_CVec_SignatureZNoneZ* arg_conv = (LDKCResult_CVec_SignatureZNoneZ*)(arg & ~1);
+       int64_t ret_val = CResult_CVec_SignatureZNoneZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_CVec_SignatureZNoneZ_clone(uint32_t orig) {
        LDKCResult_CVec_SignatureZNoneZ* orig_conv = (LDKCResult_CVec_SignatureZNoneZ*)(orig & ~1);
        LDKCResult_CVec_SignatureZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_SignatureZNoneZ), "LDKCResult_CVec_SignatureZNoneZ");
@@ -8924,6 +8682,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ShutdownScriptDecode
        LDKShutdownScript o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ShutdownScript_clone(&o_conv);
        LDKCResult_ShutdownScriptDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ShutdownScriptDecodeErrorZ), "LDKCResult_ShutdownScriptDecodeErrorZ");
        *ret_conv = CResult_ShutdownScriptDecodeErrorZ_ok(o_conv);
@@ -8934,12 +8693,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ShutdownScriptDecode
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ShutdownScriptDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ShutdownScriptDecodeErrorZ), "LDKCResult_ShutdownScriptDecodeErrorZ");
        *ret_conv = CResult_ShutdownScriptDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_ShutdownScriptDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_ShutdownScriptDecodeErrorZ* o_conv = (LDKCResult_ShutdownScriptDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ShutdownScriptDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_ShutdownScriptDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -8949,6 +8715,17 @@ void  __attribute__((visibility("default"))) TS_CResult_ShutdownScriptDecodeErro
        CResult_ShutdownScriptDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ShutdownScriptDecodeErrorZ_clone_ptr(LDKCResult_ShutdownScriptDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ShutdownScriptDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ShutdownScriptDecodeErrorZ), "LDKCResult_ShutdownScriptDecodeErrorZ");
+       *ret_conv = CResult_ShutdownScriptDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_ShutdownScriptDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_ShutdownScriptDecodeErrorZ* arg_conv = (LDKCResult_ShutdownScriptDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ShutdownScriptDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_ShutdownScriptDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_ShutdownScriptDecodeErrorZ* orig_conv = (LDKCResult_ShutdownScriptDecodeErrorZ*)(orig & ~1);
        LDKCResult_ShutdownScriptDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ShutdownScriptDecodeErrorZ), "LDKCResult_ShutdownScriptDecodeErrorZ");
@@ -8960,6 +8737,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ShutdownScriptInvali
        LDKShutdownScript o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ShutdownScript_clone(&o_conv);
        LDKCResult_ShutdownScriptInvalidShutdownScriptZ* ret_conv = MALLOC(sizeof(LDKCResult_ShutdownScriptInvalidShutdownScriptZ), "LDKCResult_ShutdownScriptInvalidShutdownScriptZ");
        *ret_conv = CResult_ShutdownScriptInvalidShutdownScriptZ_ok(o_conv);
@@ -8970,12 +8748,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ShutdownScriptInvali
        LDKInvalidShutdownScript e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = InvalidShutdownScript_clone(&e_conv);
        LDKCResult_ShutdownScriptInvalidShutdownScriptZ* ret_conv = MALLOC(sizeof(LDKCResult_ShutdownScriptInvalidShutdownScriptZ), "LDKCResult_ShutdownScriptInvalidShutdownScriptZ");
        *ret_conv = CResult_ShutdownScriptInvalidShutdownScriptZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_ShutdownScriptInvalidShutdownScriptZ_is_ok(uint32_t o) {
+       LDKCResult_ShutdownScriptInvalidShutdownScriptZ* o_conv = (LDKCResult_ShutdownScriptInvalidShutdownScriptZ*)(o & ~1);
+       jboolean ret_val = CResult_ShutdownScriptInvalidShutdownScriptZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_ShutdownScriptInvalidShutdownScriptZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -8985,6 +8770,17 @@ void  __attribute__((visibility("default"))) TS_CResult_ShutdownScriptInvalidShu
        CResult_ShutdownScriptInvalidShutdownScriptZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ShutdownScriptInvalidShutdownScriptZ_clone_ptr(LDKCResult_ShutdownScriptInvalidShutdownScriptZ *NONNULL_PTR arg) {
+       LDKCResult_ShutdownScriptInvalidShutdownScriptZ* ret_conv = MALLOC(sizeof(LDKCResult_ShutdownScriptInvalidShutdownScriptZ), "LDKCResult_ShutdownScriptInvalidShutdownScriptZ");
+       *ret_conv = CResult_ShutdownScriptInvalidShutdownScriptZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_ShutdownScriptInvalidShutdownScriptZ_clone_ptr(uint32_t arg) {
+       LDKCResult_ShutdownScriptInvalidShutdownScriptZ* arg_conv = (LDKCResult_ShutdownScriptInvalidShutdownScriptZ*)(arg & ~1);
+       int64_t ret_val = CResult_ShutdownScriptInvalidShutdownScriptZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_ShutdownScriptInvalidShutdownScriptZ_clone(uint32_t orig) {
        LDKCResult_ShutdownScriptInvalidShutdownScriptZ* orig_conv = (LDKCResult_ShutdownScriptInvalidShutdownScriptZ*)(orig & ~1);
        LDKCResult_ShutdownScriptInvalidShutdownScriptZ* ret_conv = MALLOC(sizeof(LDKCResult_ShutdownScriptInvalidShutdownScriptZ), "LDKCResult_ShutdownScriptInvalidShutdownScriptZ");
@@ -9005,6 +8801,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_NoneErrorZ_err(uint3
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_NoneErrorZ_is_ok(uint32_t o) {
+       LDKCResult_NoneErrorZ* o_conv = (LDKCResult_NoneErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_NoneErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_NoneErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -9014,6 +8816,17 @@ void  __attribute__((visibility("default"))) TS_CResult_NoneErrorZ_free(uint32_t
        CResult_NoneErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_NoneErrorZ_clone_ptr(LDKCResult_NoneErrorZ *NONNULL_PTR arg) {
+       LDKCResult_NoneErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneErrorZ), "LDKCResult_NoneErrorZ");
+       *ret_conv = CResult_NoneErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_NoneErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_NoneErrorZ* arg_conv = (LDKCResult_NoneErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_NoneErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_NoneErrorZ_clone(uint32_t orig) {
        LDKCResult_NoneErrorZ* orig_conv = (LDKCResult_NoneErrorZ*)(orig & ~1);
        LDKCResult_NoneErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneErrorZ), "LDKCResult_NoneErrorZ");
@@ -9025,6 +8838,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_RouteHopDecodeErrorZ
        LDKRouteHop o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = RouteHop_clone(&o_conv);
        LDKCResult_RouteHopDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHopDecodeErrorZ), "LDKCResult_RouteHopDecodeErrorZ");
        *ret_conv = CResult_RouteHopDecodeErrorZ_ok(o_conv);
@@ -9035,12 +8849,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_RouteHopDecodeErrorZ
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_RouteHopDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHopDecodeErrorZ), "LDKCResult_RouteHopDecodeErrorZ");
        *ret_conv = CResult_RouteHopDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_RouteHopDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_RouteHopDecodeErrorZ* o_conv = (LDKCResult_RouteHopDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_RouteHopDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_RouteHopDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -9050,6 +8871,17 @@ void  __attribute__((visibility("default"))) TS_CResult_RouteHopDecodeErrorZ_fre
        CResult_RouteHopDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_RouteHopDecodeErrorZ_clone_ptr(LDKCResult_RouteHopDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_RouteHopDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHopDecodeErrorZ), "LDKCResult_RouteHopDecodeErrorZ");
+       *ret_conv = CResult_RouteHopDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_RouteHopDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_RouteHopDecodeErrorZ* arg_conv = (LDKCResult_RouteHopDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_RouteHopDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_RouteHopDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_RouteHopDecodeErrorZ* orig_conv = (LDKCResult_RouteHopDecodeErrorZ*)(orig & ~1);
        LDKCResult_RouteHopDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHopDecodeErrorZ), "LDKCResult_RouteHopDecodeErrorZ");
@@ -9070,6 +8902,7 @@ void  __attribute__((visibility("default"))) TS_CVec_RouteHopZ_free(uint32_tArra
                LDKRouteHop _res_conv_10_conv;
                _res_conv_10_conv.inner = (void*)(_res_conv_10 & (~1));
                _res_conv_10_conv.is_owned = (_res_conv_10 & 1) || (_res_conv_10 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_10_conv);
                _res_constr.data[k] = _res_conv_10_conv;
        }
        CVec_RouteHopZ_free(_res_constr);
@@ -9097,6 +8930,7 @@ void  __attribute__((visibility("default"))) TS_CVec_CVec_RouteHopZZ_free(ptrArr
                        LDKRouteHop _res_conv_12_conv_10_conv;
                        _res_conv_12_conv_10_conv.inner = (void*)(_res_conv_12_conv_10 & (~1));
                        _res_conv_12_conv_10_conv.is_owned = (_res_conv_12_conv_10 & 1) || (_res_conv_12_conv_10 == 0);
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_12_conv_10_conv);
                        _res_conv_12_constr.data[k] = _res_conv_12_conv_10_conv;
                }
                _res_constr.data[m] = _res_conv_12_constr;
@@ -9108,6 +8942,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_RouteDecodeErrorZ_ok
        LDKRoute o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = Route_clone(&o_conv);
        LDKCResult_RouteDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteDecodeErrorZ), "LDKCResult_RouteDecodeErrorZ");
        *ret_conv = CResult_RouteDecodeErrorZ_ok(o_conv);
@@ -9118,12 +8953,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_RouteDecodeErrorZ_er
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_RouteDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteDecodeErrorZ), "LDKCResult_RouteDecodeErrorZ");
        *ret_conv = CResult_RouteDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_RouteDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_RouteDecodeErrorZ* o_conv = (LDKCResult_RouteDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_RouteDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_RouteDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -9133,6 +8975,17 @@ void  __attribute__((visibility("default"))) TS_CResult_RouteDecodeErrorZ_free(u
        CResult_RouteDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_RouteDecodeErrorZ_clone_ptr(LDKCResult_RouteDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_RouteDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteDecodeErrorZ), "LDKCResult_RouteDecodeErrorZ");
+       *ret_conv = CResult_RouteDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_RouteDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_RouteDecodeErrorZ* arg_conv = (LDKCResult_RouteDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_RouteDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_RouteDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_RouteDecodeErrorZ* orig_conv = (LDKCResult_RouteDecodeErrorZ*)(orig & ~1);
        LDKCResult_RouteDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteDecodeErrorZ), "LDKCResult_RouteDecodeErrorZ");
@@ -9144,6 +8997,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_RouteParametersDecod
        LDKRouteParameters o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = RouteParameters_clone(&o_conv);
        LDKCResult_RouteParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteParametersDecodeErrorZ), "LDKCResult_RouteParametersDecodeErrorZ");
        *ret_conv = CResult_RouteParametersDecodeErrorZ_ok(o_conv);
@@ -9154,12 +9008,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_RouteParametersDecod
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_RouteParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteParametersDecodeErrorZ), "LDKCResult_RouteParametersDecodeErrorZ");
        *ret_conv = CResult_RouteParametersDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_RouteParametersDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_RouteParametersDecodeErrorZ* o_conv = (LDKCResult_RouteParametersDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_RouteParametersDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_RouteParametersDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -9169,6 +9030,17 @@ void  __attribute__((visibility("default"))) TS_CResult_RouteParametersDecodeErr
        CResult_RouteParametersDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_RouteParametersDecodeErrorZ_clone_ptr(LDKCResult_RouteParametersDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_RouteParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteParametersDecodeErrorZ), "LDKCResult_RouteParametersDecodeErrorZ");
+       *ret_conv = CResult_RouteParametersDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_RouteParametersDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_RouteParametersDecodeErrorZ* arg_conv = (LDKCResult_RouteParametersDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_RouteParametersDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_RouteParametersDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_RouteParametersDecodeErrorZ* orig_conv = (LDKCResult_RouteParametersDecodeErrorZ*)(orig & ~1);
        LDKCResult_RouteParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteParametersDecodeErrorZ), "LDKCResult_RouteParametersDecodeErrorZ");
@@ -9189,6 +9061,7 @@ void  __attribute__((visibility("default"))) TS_CVec_RouteHintZ_free(uint32_tArr
                LDKRouteHint _res_conv_11_conv;
                _res_conv_11_conv.inner = (void*)(_res_conv_11 & (~1));
                _res_conv_11_conv.is_owned = (_res_conv_11 & 1) || (_res_conv_11 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_11_conv);
                _res_constr.data[l] = _res_conv_11_conv;
        }
        CVec_RouteHintZ_free(_res_constr);
@@ -9217,6 +9090,18 @@ void  __attribute__((visibility("default"))) TS_COption_u64Z_free(uint32_t _res)
        COption_u64Z_free(_res_conv);
 }
 
+static inline uint64_t COption_u64Z_clone_ptr(LDKCOption_u64Z *NONNULL_PTR arg) {
+       LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
+       *ret_copy = COption_u64Z_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_COption_u64Z_clone_ptr(uint32_t arg) {
+       LDKCOption_u64Z* arg_conv = (LDKCOption_u64Z*)arg;
+       int64_t ret_val = COption_u64Z_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_COption_u64Z_clone(uint32_t orig) {
        LDKCOption_u64Z* orig_conv = (LDKCOption_u64Z*)orig;
        LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
@@ -9229,6 +9114,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_PayeeDecodeErrorZ_ok
        LDKPayee o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = Payee_clone(&o_conv);
        LDKCResult_PayeeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PayeeDecodeErrorZ), "LDKCResult_PayeeDecodeErrorZ");
        *ret_conv = CResult_PayeeDecodeErrorZ_ok(o_conv);
@@ -9239,12 +9125,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_PayeeDecodeErrorZ_er
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_PayeeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PayeeDecodeErrorZ), "LDKCResult_PayeeDecodeErrorZ");
        *ret_conv = CResult_PayeeDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_PayeeDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_PayeeDecodeErrorZ* o_conv = (LDKCResult_PayeeDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_PayeeDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_PayeeDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -9254,6 +9147,17 @@ void  __attribute__((visibility("default"))) TS_CResult_PayeeDecodeErrorZ_free(u
        CResult_PayeeDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_PayeeDecodeErrorZ_clone_ptr(LDKCResult_PayeeDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_PayeeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PayeeDecodeErrorZ), "LDKCResult_PayeeDecodeErrorZ");
+       *ret_conv = CResult_PayeeDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_PayeeDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_PayeeDecodeErrorZ* arg_conv = (LDKCResult_PayeeDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_PayeeDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_PayeeDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_PayeeDecodeErrorZ* orig_conv = (LDKCResult_PayeeDecodeErrorZ*)(orig & ~1);
        LDKCResult_PayeeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PayeeDecodeErrorZ), "LDKCResult_PayeeDecodeErrorZ");
@@ -9274,6 +9178,7 @@ void  __attribute__((visibility("default"))) TS_CVec_RouteHintHopZ_free(uint32_t
                LDKRouteHintHop _res_conv_14_conv;
                _res_conv_14_conv.inner = (void*)(_res_conv_14 & (~1));
                _res_conv_14_conv.is_owned = (_res_conv_14 & 1) || (_res_conv_14 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_14_conv);
                _res_constr.data[o] = _res_conv_14_conv;
        }
        CVec_RouteHintHopZ_free(_res_constr);
@@ -9283,6 +9188,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_RouteHintDecodeError
        LDKRouteHint o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = RouteHint_clone(&o_conv);
        LDKCResult_RouteHintDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHintDecodeErrorZ), "LDKCResult_RouteHintDecodeErrorZ");
        *ret_conv = CResult_RouteHintDecodeErrorZ_ok(o_conv);
@@ -9293,12 +9199,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_RouteHintDecodeError
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_RouteHintDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHintDecodeErrorZ), "LDKCResult_RouteHintDecodeErrorZ");
        *ret_conv = CResult_RouteHintDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_RouteHintDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_RouteHintDecodeErrorZ* o_conv = (LDKCResult_RouteHintDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_RouteHintDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_RouteHintDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -9308,6 +9221,17 @@ void  __attribute__((visibility("default"))) TS_CResult_RouteHintDecodeErrorZ_fr
        CResult_RouteHintDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_RouteHintDecodeErrorZ_clone_ptr(LDKCResult_RouteHintDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_RouteHintDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHintDecodeErrorZ), "LDKCResult_RouteHintDecodeErrorZ");
+       *ret_conv = CResult_RouteHintDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_RouteHintDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_RouteHintDecodeErrorZ* arg_conv = (LDKCResult_RouteHintDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_RouteHintDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_RouteHintDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_RouteHintDecodeErrorZ* orig_conv = (LDKCResult_RouteHintDecodeErrorZ*)(orig & ~1);
        LDKCResult_RouteHintDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHintDecodeErrorZ), "LDKCResult_RouteHintDecodeErrorZ");
@@ -9319,6 +9243,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_RouteHintHopDecodeEr
        LDKRouteHintHop o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = RouteHintHop_clone(&o_conv);
        LDKCResult_RouteHintHopDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHintHopDecodeErrorZ), "LDKCResult_RouteHintHopDecodeErrorZ");
        *ret_conv = CResult_RouteHintHopDecodeErrorZ_ok(o_conv);
@@ -9329,12 +9254,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_RouteHintHopDecodeEr
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_RouteHintHopDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHintHopDecodeErrorZ), "LDKCResult_RouteHintHopDecodeErrorZ");
        *ret_conv = CResult_RouteHintHopDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_RouteHintHopDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_RouteHintHopDecodeErrorZ* o_conv = (LDKCResult_RouteHintHopDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_RouteHintHopDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_RouteHintHopDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -9344,6 +9276,17 @@ void  __attribute__((visibility("default"))) TS_CResult_RouteHintHopDecodeErrorZ
        CResult_RouteHintHopDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_RouteHintHopDecodeErrorZ_clone_ptr(LDKCResult_RouteHintHopDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_RouteHintHopDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHintHopDecodeErrorZ), "LDKCResult_RouteHintHopDecodeErrorZ");
+       *ret_conv = CResult_RouteHintHopDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_RouteHintHopDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_RouteHintHopDecodeErrorZ* arg_conv = (LDKCResult_RouteHintHopDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_RouteHintHopDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_RouteHintHopDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_RouteHintHopDecodeErrorZ* orig_conv = (LDKCResult_RouteHintHopDecodeErrorZ*)(orig & ~1);
        LDKCResult_RouteHintHopDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteHintHopDecodeErrorZ), "LDKCResult_RouteHintHopDecodeErrorZ");
@@ -9364,6 +9307,7 @@ void  __attribute__((visibility("default"))) TS_CVec_ChannelDetailsZ_free(uint32
                LDKChannelDetails _res_conv_16_conv;
                _res_conv_16_conv.inner = (void*)(_res_conv_16 & (~1));
                _res_conv_16_conv.is_owned = (_res_conv_16 & 1) || (_res_conv_16 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_16_conv);
                _res_constr.data[q] = _res_conv_16_conv;
        }
        CVec_ChannelDetailsZ_free(_res_constr);
@@ -9373,6 +9317,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_RouteLightningErrorZ
        LDKRoute o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = Route_clone(&o_conv);
        LDKCResult_RouteLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteLightningErrorZ), "LDKCResult_RouteLightningErrorZ");
        *ret_conv = CResult_RouteLightningErrorZ_ok(o_conv);
@@ -9383,14 +9328,21 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_RouteLightningErrorZ
        LDKLightningError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = LightningError_clone(&e_conv);
        LDKCResult_RouteLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteLightningErrorZ), "LDKCResult_RouteLightningErrorZ");
        *ret_conv = CResult_RouteLightningErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
-void  __attribute__((visibility("default"))) TS_CResult_RouteLightningErrorZ_free(uint32_t _res) {
-       if ((_res & 1) != 0) return;
+jboolean  __attribute__((visibility("default"))) TS_CResult_RouteLightningErrorZ_is_ok(uint32_t o) {
+       LDKCResult_RouteLightningErrorZ* o_conv = (LDKCResult_RouteLightningErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_RouteLightningErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
+void  __attribute__((visibility("default"))) TS_CResult_RouteLightningErrorZ_free(uint32_t _res) {
+       if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
        CHECK_ACCESS(_res_ptr);
        LDKCResult_RouteLightningErrorZ _res_conv = *(LDKCResult_RouteLightningErrorZ*)(_res_ptr);
@@ -9398,6 +9350,17 @@ void  __attribute__((visibility("default"))) TS_CResult_RouteLightningErrorZ_fre
        CResult_RouteLightningErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_RouteLightningErrorZ_clone_ptr(LDKCResult_RouteLightningErrorZ *NONNULL_PTR arg) {
+       LDKCResult_RouteLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteLightningErrorZ), "LDKCResult_RouteLightningErrorZ");
+       *ret_conv = CResult_RouteLightningErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_RouteLightningErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_RouteLightningErrorZ* arg_conv = (LDKCResult_RouteLightningErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_RouteLightningErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_RouteLightningErrorZ_clone(uint32_t orig) {
        LDKCResult_RouteLightningErrorZ* orig_conv = (LDKCResult_RouteLightningErrorZ*)(orig & ~1);
        LDKCResult_RouteLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RouteLightningErrorZ), "LDKCResult_RouteLightningErrorZ");
@@ -9422,6 +9385,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_TxOutAccessErrorZ_er
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_TxOutAccessErrorZ_is_ok(uint32_t o) {
+       LDKCResult_TxOutAccessErrorZ* o_conv = (LDKCResult_TxOutAccessErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_TxOutAccessErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_TxOutAccessErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -9431,6 +9400,17 @@ void  __attribute__((visibility("default"))) TS_CResult_TxOutAccessErrorZ_free(u
        CResult_TxOutAccessErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_TxOutAccessErrorZ_clone_ptr(LDKCResult_TxOutAccessErrorZ *NONNULL_PTR arg) {
+       LDKCResult_TxOutAccessErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxOutAccessErrorZ), "LDKCResult_TxOutAccessErrorZ");
+       *ret_conv = CResult_TxOutAccessErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_TxOutAccessErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_TxOutAccessErrorZ* arg_conv = (LDKCResult_TxOutAccessErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_TxOutAccessErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_TxOutAccessErrorZ_clone(uint32_t orig) {
        LDKCResult_TxOutAccessErrorZ* orig_conv = (LDKCResult_TxOutAccessErrorZ*)(orig & ~1);
        LDKCResult_TxOutAccessErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxOutAccessErrorZ), "LDKCResult_TxOutAccessErrorZ");
@@ -9438,6 +9418,17 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_TxOutAccessErrorZ_cl
        return (uint64_t)ret_conv;
 }
 
+static inline uint64_t C2Tuple_usizeTransactionZ_clone_ptr(LDKC2Tuple_usizeTransactionZ *NONNULL_PTR arg) {
+       LDKC2Tuple_usizeTransactionZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_usizeTransactionZ), "LDKC2Tuple_usizeTransactionZ");
+       *ret_conv = C2Tuple_usizeTransactionZ_clone(arg);
+       return ((uint64_t)ret_conv);
+}
+int64_t  __attribute__((visibility("default"))) TS_C2Tuple_usizeTransactionZ_clone_ptr(uint32_t arg) {
+       LDKC2Tuple_usizeTransactionZ* arg_conv = (LDKC2Tuple_usizeTransactionZ*)(arg & ~1);
+       int64_t ret_val = C2Tuple_usizeTransactionZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_C2Tuple_usizeTransactionZ_clone(uint32_t orig) {
        LDKC2Tuple_usizeTransactionZ* orig_conv = (LDKC2Tuple_usizeTransactionZ*)(orig & ~1);
        LDKC2Tuple_usizeTransactionZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_usizeTransactionZ), "LDKC2Tuple_usizeTransactionZ");
@@ -9515,6 +9506,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_NoneChannelMonitorUp
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_NoneChannelMonitorUpdateErrZ_is_ok(uint32_t o) {
+       LDKCResult_NoneChannelMonitorUpdateErrZ* o_conv = (LDKCResult_NoneChannelMonitorUpdateErrZ*)(o & ~1);
+       jboolean ret_val = CResult_NoneChannelMonitorUpdateErrZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_NoneChannelMonitorUpdateErrZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -9524,6 +9521,17 @@ void  __attribute__((visibility("default"))) TS_CResult_NoneChannelMonitorUpdate
        CResult_NoneChannelMonitorUpdateErrZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_NoneChannelMonitorUpdateErrZ_clone_ptr(LDKCResult_NoneChannelMonitorUpdateErrZ *NONNULL_PTR arg) {
+       LDKCResult_NoneChannelMonitorUpdateErrZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneChannelMonitorUpdateErrZ), "LDKCResult_NoneChannelMonitorUpdateErrZ");
+       *ret_conv = CResult_NoneChannelMonitorUpdateErrZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_NoneChannelMonitorUpdateErrZ_clone_ptr(uint32_t arg) {
+       LDKCResult_NoneChannelMonitorUpdateErrZ* arg_conv = (LDKCResult_NoneChannelMonitorUpdateErrZ*)(arg & ~1);
+       int64_t ret_val = CResult_NoneChannelMonitorUpdateErrZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_NoneChannelMonitorUpdateErrZ_clone(uint32_t orig) {
        LDKCResult_NoneChannelMonitorUpdateErrZ* orig_conv = (LDKCResult_NoneChannelMonitorUpdateErrZ*)(orig & ~1);
        LDKCResult_NoneChannelMonitorUpdateErrZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneChannelMonitorUpdateErrZ), "LDKCResult_NoneChannelMonitorUpdateErrZ");
@@ -9577,6 +9585,18 @@ void  __attribute__((visibility("default"))) TS_COption_C2Tuple_usizeTransaction
        COption_C2Tuple_usizeTransactionZZ_free(_res_conv);
 }
 
+static inline uint64_t COption_C2Tuple_usizeTransactionZZ_clone_ptr(LDKCOption_C2Tuple_usizeTransactionZZ *NONNULL_PTR arg) {
+       LDKCOption_C2Tuple_usizeTransactionZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_usizeTransactionZZ), "LDKCOption_C2Tuple_usizeTransactionZZ");
+       *ret_copy = COption_C2Tuple_usizeTransactionZZ_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_COption_C2Tuple_usizeTransactionZZ_clone_ptr(uint32_t arg) {
+       LDKCOption_C2Tuple_usizeTransactionZZ* arg_conv = (LDKCOption_C2Tuple_usizeTransactionZZ*)arg;
+       int64_t ret_val = COption_C2Tuple_usizeTransactionZZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_COption_C2Tuple_usizeTransactionZZ_clone(uint32_t orig) {
        LDKCOption_C2Tuple_usizeTransactionZZ* orig_conv = (LDKCOption_C2Tuple_usizeTransactionZZ*)orig;
        LDKCOption_C2Tuple_usizeTransactionZZ *ret_copy = MALLOC(sizeof(LDKCOption_C2Tuple_usizeTransactionZZ), "LDKCOption_C2Tuple_usizeTransactionZZ");
@@ -9585,6 +9605,107 @@ uint32_t  __attribute__((visibility("default"))) TS_COption_C2Tuple_usizeTransac
        return ret_ref;
 }
 
+uint32_t  __attribute__((visibility("default"))) TS_COption_ClosureReasonZ_some(uint32_t o) {
+       void* o_ptr = (void*)(((uint64_t)o) & ~1);
+       CHECK_ACCESS(o_ptr);
+       LDKClosureReason o_conv = *(LDKClosureReason*)(o_ptr);
+       o_conv = ClosureReason_clone((LDKClosureReason*)(((uint64_t)o) & ~1));
+       LDKCOption_ClosureReasonZ *ret_copy = MALLOC(sizeof(LDKCOption_ClosureReasonZ), "LDKCOption_ClosureReasonZ");
+       *ret_copy = COption_ClosureReasonZ_some(o_conv);
+       uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+
+uint32_t  __attribute__((visibility("default"))) TS_COption_ClosureReasonZ_none() {
+       LDKCOption_ClosureReasonZ *ret_copy = MALLOC(sizeof(LDKCOption_ClosureReasonZ), "LDKCOption_ClosureReasonZ");
+       *ret_copy = COption_ClosureReasonZ_none();
+       uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+
+void  __attribute__((visibility("default"))) TS_COption_ClosureReasonZ_free(uint32_t _res) {
+       if ((_res & 1) != 0) return;
+       void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
+       CHECK_ACCESS(_res_ptr);
+       LDKCOption_ClosureReasonZ _res_conv = *(LDKCOption_ClosureReasonZ*)(_res_ptr);
+       FREE((void*)_res);
+       COption_ClosureReasonZ_free(_res_conv);
+}
+
+static inline uint64_t COption_ClosureReasonZ_clone_ptr(LDKCOption_ClosureReasonZ *NONNULL_PTR arg) {
+       LDKCOption_ClosureReasonZ *ret_copy = MALLOC(sizeof(LDKCOption_ClosureReasonZ), "LDKCOption_ClosureReasonZ");
+       *ret_copy = COption_ClosureReasonZ_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_COption_ClosureReasonZ_clone_ptr(uint32_t arg) {
+       LDKCOption_ClosureReasonZ* arg_conv = (LDKCOption_ClosureReasonZ*)arg;
+       int64_t ret_val = COption_ClosureReasonZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
+uint32_t  __attribute__((visibility("default"))) TS_COption_ClosureReasonZ_clone(uint32_t orig) {
+       LDKCOption_ClosureReasonZ* orig_conv = (LDKCOption_ClosureReasonZ*)orig;
+       LDKCOption_ClosureReasonZ *ret_copy = MALLOC(sizeof(LDKCOption_ClosureReasonZ), "LDKCOption_ClosureReasonZ");
+       *ret_copy = COption_ClosureReasonZ_clone(orig_conv);
+       uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+
+uint32_t  __attribute__((visibility("default"))) TS_CResult_COption_ClosureReasonZDecodeErrorZ_ok(uint32_t o) {
+       void* o_ptr = (void*)(((uint64_t)o) & ~1);
+       CHECK_ACCESS(o_ptr);
+       LDKCOption_ClosureReasonZ o_conv = *(LDKCOption_ClosureReasonZ*)(o_ptr);
+       o_conv = COption_ClosureReasonZ_clone((LDKCOption_ClosureReasonZ*)(((uint64_t)o) & ~1));
+       LDKCResult_COption_ClosureReasonZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_ClosureReasonZDecodeErrorZ), "LDKCResult_COption_ClosureReasonZDecodeErrorZ");
+       *ret_conv = CResult_COption_ClosureReasonZDecodeErrorZ_ok(o_conv);
+       return (uint64_t)ret_conv;
+}
+
+uint32_t  __attribute__((visibility("default"))) TS_CResult_COption_ClosureReasonZDecodeErrorZ_err(uint32_t e) {
+       LDKDecodeError e_conv;
+       e_conv.inner = (void*)(e & (~1));
+       e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
+       e_conv = DecodeError_clone(&e_conv);
+       LDKCResult_COption_ClosureReasonZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_ClosureReasonZDecodeErrorZ), "LDKCResult_COption_ClosureReasonZDecodeErrorZ");
+       *ret_conv = CResult_COption_ClosureReasonZDecodeErrorZ_err(e_conv);
+       return (uint64_t)ret_conv;
+}
+
+jboolean  __attribute__((visibility("default"))) TS_CResult_COption_ClosureReasonZDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_COption_ClosureReasonZDecodeErrorZ* o_conv = (LDKCResult_COption_ClosureReasonZDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_COption_ClosureReasonZDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
+void  __attribute__((visibility("default"))) TS_CResult_COption_ClosureReasonZDecodeErrorZ_free(uint32_t _res) {
+       if ((_res & 1) != 0) return;
+       void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_COption_ClosureReasonZDecodeErrorZ _res_conv = *(LDKCResult_COption_ClosureReasonZDecodeErrorZ*)(_res_ptr);
+       FREE((void*)_res);
+       CResult_COption_ClosureReasonZDecodeErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_COption_ClosureReasonZDecodeErrorZ_clone_ptr(LDKCResult_COption_ClosureReasonZDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_COption_ClosureReasonZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_ClosureReasonZDecodeErrorZ), "LDKCResult_COption_ClosureReasonZDecodeErrorZ");
+       *ret_conv = CResult_COption_ClosureReasonZDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_COption_ClosureReasonZDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_COption_ClosureReasonZDecodeErrorZ* arg_conv = (LDKCResult_COption_ClosureReasonZDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_COption_ClosureReasonZDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
+uint32_t  __attribute__((visibility("default"))) TS_CResult_COption_ClosureReasonZDecodeErrorZ_clone(uint32_t orig) {
+       LDKCResult_COption_ClosureReasonZDecodeErrorZ* orig_conv = (LDKCResult_COption_ClosureReasonZDecodeErrorZ*)(orig & ~1);
+       LDKCResult_COption_ClosureReasonZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_ClosureReasonZDecodeErrorZ), "LDKCResult_COption_ClosureReasonZDecodeErrorZ");
+       *ret_conv = CResult_COption_ClosureReasonZDecodeErrorZ_clone(orig_conv);
+       return (uint64_t)ret_conv;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_COption_NetworkUpdateZ_some(uint32_t o) {
        void* o_ptr = (void*)(((uint64_t)o) & ~1);
        CHECK_ACCESS(o_ptr);
@@ -9612,6 +9733,18 @@ void  __attribute__((visibility("default"))) TS_COption_NetworkUpdateZ_free(uint
        COption_NetworkUpdateZ_free(_res_conv);
 }
 
+static inline uint64_t COption_NetworkUpdateZ_clone_ptr(LDKCOption_NetworkUpdateZ *NONNULL_PTR arg) {
+       LDKCOption_NetworkUpdateZ *ret_copy = MALLOC(sizeof(LDKCOption_NetworkUpdateZ), "LDKCOption_NetworkUpdateZ");
+       *ret_copy = COption_NetworkUpdateZ_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_COption_NetworkUpdateZ_clone_ptr(uint32_t arg) {
+       LDKCOption_NetworkUpdateZ* arg_conv = (LDKCOption_NetworkUpdateZ*)arg;
+       int64_t ret_val = COption_NetworkUpdateZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_COption_NetworkUpdateZ_clone(uint32_t orig) {
        LDKCOption_NetworkUpdateZ* orig_conv = (LDKCOption_NetworkUpdateZ*)orig;
        LDKCOption_NetworkUpdateZ *ret_copy = MALLOC(sizeof(LDKCOption_NetworkUpdateZ), "LDKCOption_NetworkUpdateZ");
@@ -9639,6 +9772,107 @@ void  __attribute__((visibility("default"))) TS_CVec_SpendableOutputDescriptorZ_
        CVec_SpendableOutputDescriptorZ_free(_res_constr);
 }
 
+uint32_t  __attribute__((visibility("default"))) TS_COption_EventZ_some(uint32_t o) {
+       void* o_ptr = (void*)(((uint64_t)o) & ~1);
+       CHECK_ACCESS(o_ptr);
+       LDKEvent o_conv = *(LDKEvent*)(o_ptr);
+       o_conv = Event_clone((LDKEvent*)(((uint64_t)o) & ~1));
+       LDKCOption_EventZ *ret_copy = MALLOC(sizeof(LDKCOption_EventZ), "LDKCOption_EventZ");
+       *ret_copy = COption_EventZ_some(o_conv);
+       uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+
+uint32_t  __attribute__((visibility("default"))) TS_COption_EventZ_none() {
+       LDKCOption_EventZ *ret_copy = MALLOC(sizeof(LDKCOption_EventZ), "LDKCOption_EventZ");
+       *ret_copy = COption_EventZ_none();
+       uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+
+void  __attribute__((visibility("default"))) TS_COption_EventZ_free(uint32_t _res) {
+       if ((_res & 1) != 0) return;
+       void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
+       CHECK_ACCESS(_res_ptr);
+       LDKCOption_EventZ _res_conv = *(LDKCOption_EventZ*)(_res_ptr);
+       FREE((void*)_res);
+       COption_EventZ_free(_res_conv);
+}
+
+static inline uint64_t COption_EventZ_clone_ptr(LDKCOption_EventZ *NONNULL_PTR arg) {
+       LDKCOption_EventZ *ret_copy = MALLOC(sizeof(LDKCOption_EventZ), "LDKCOption_EventZ");
+       *ret_copy = COption_EventZ_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_COption_EventZ_clone_ptr(uint32_t arg) {
+       LDKCOption_EventZ* arg_conv = (LDKCOption_EventZ*)arg;
+       int64_t ret_val = COption_EventZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
+uint32_t  __attribute__((visibility("default"))) TS_COption_EventZ_clone(uint32_t orig) {
+       LDKCOption_EventZ* orig_conv = (LDKCOption_EventZ*)orig;
+       LDKCOption_EventZ *ret_copy = MALLOC(sizeof(LDKCOption_EventZ), "LDKCOption_EventZ");
+       *ret_copy = COption_EventZ_clone(orig_conv);
+       uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+
+uint32_t  __attribute__((visibility("default"))) TS_CResult_COption_EventZDecodeErrorZ_ok(uint32_t o) {
+       void* o_ptr = (void*)(((uint64_t)o) & ~1);
+       CHECK_ACCESS(o_ptr);
+       LDKCOption_EventZ o_conv = *(LDKCOption_EventZ*)(o_ptr);
+       o_conv = COption_EventZ_clone((LDKCOption_EventZ*)(((uint64_t)o) & ~1));
+       LDKCResult_COption_EventZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_EventZDecodeErrorZ), "LDKCResult_COption_EventZDecodeErrorZ");
+       *ret_conv = CResult_COption_EventZDecodeErrorZ_ok(o_conv);
+       return (uint64_t)ret_conv;
+}
+
+uint32_t  __attribute__((visibility("default"))) TS_CResult_COption_EventZDecodeErrorZ_err(uint32_t e) {
+       LDKDecodeError e_conv;
+       e_conv.inner = (void*)(e & (~1));
+       e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
+       e_conv = DecodeError_clone(&e_conv);
+       LDKCResult_COption_EventZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_EventZDecodeErrorZ), "LDKCResult_COption_EventZDecodeErrorZ");
+       *ret_conv = CResult_COption_EventZDecodeErrorZ_err(e_conv);
+       return (uint64_t)ret_conv;
+}
+
+jboolean  __attribute__((visibility("default"))) TS_CResult_COption_EventZDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_COption_EventZDecodeErrorZ* o_conv = (LDKCResult_COption_EventZDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_COption_EventZDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
+void  __attribute__((visibility("default"))) TS_CResult_COption_EventZDecodeErrorZ_free(uint32_t _res) {
+       if ((_res & 1) != 0) return;
+       void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_COption_EventZDecodeErrorZ _res_conv = *(LDKCResult_COption_EventZDecodeErrorZ*)(_res_ptr);
+       FREE((void*)_res);
+       CResult_COption_EventZDecodeErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_COption_EventZDecodeErrorZ_clone_ptr(LDKCResult_COption_EventZDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_COption_EventZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_EventZDecodeErrorZ), "LDKCResult_COption_EventZDecodeErrorZ");
+       *ret_conv = CResult_COption_EventZDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_COption_EventZDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_COption_EventZDecodeErrorZ* arg_conv = (LDKCResult_COption_EventZDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_COption_EventZDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
+uint32_t  __attribute__((visibility("default"))) TS_CResult_COption_EventZDecodeErrorZ_clone(uint32_t orig) {
+       LDKCResult_COption_EventZDecodeErrorZ* orig_conv = (LDKCResult_COption_EventZDecodeErrorZ*)(orig & ~1);
+       LDKCResult_COption_EventZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_EventZDecodeErrorZ), "LDKCResult_COption_EventZDecodeErrorZ");
+       *ret_conv = CResult_COption_EventZDecodeErrorZ_clone(orig_conv);
+       return (uint64_t)ret_conv;
+}
+
 void  __attribute__((visibility("default"))) TS_CVec_MessageSendEventZ_free(uint32_tArray _res) {
        LDKCVec_MessageSendEventZ _res_constr;
        _res_constr.datalen = *((uint32_t*)_res);
@@ -9662,6 +9896,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_InitFeaturesDecodeEr
        LDKInitFeatures o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = InitFeatures_clone(&o_conv);
        LDKCResult_InitFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InitFeaturesDecodeErrorZ), "LDKCResult_InitFeaturesDecodeErrorZ");
        *ret_conv = CResult_InitFeaturesDecodeErrorZ_ok(o_conv);
@@ -9672,12 +9907,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_InitFeaturesDecodeEr
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_InitFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InitFeaturesDecodeErrorZ), "LDKCResult_InitFeaturesDecodeErrorZ");
        *ret_conv = CResult_InitFeaturesDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_InitFeaturesDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_InitFeaturesDecodeErrorZ* o_conv = (LDKCResult_InitFeaturesDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_InitFeaturesDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_InitFeaturesDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -9691,6 +9933,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_NodeFeaturesDecodeEr
        LDKNodeFeatures o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = NodeFeatures_clone(&o_conv);
        LDKCResult_NodeFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeFeaturesDecodeErrorZ), "LDKCResult_NodeFeaturesDecodeErrorZ");
        *ret_conv = CResult_NodeFeaturesDecodeErrorZ_ok(o_conv);
@@ -9701,12 +9944,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_NodeFeaturesDecodeEr
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_NodeFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeFeaturesDecodeErrorZ), "LDKCResult_NodeFeaturesDecodeErrorZ");
        *ret_conv = CResult_NodeFeaturesDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_NodeFeaturesDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_NodeFeaturesDecodeErrorZ* o_conv = (LDKCResult_NodeFeaturesDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_NodeFeaturesDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_NodeFeaturesDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -9720,6 +9970,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ChannelFeaturesDecod
        LDKChannelFeatures o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ChannelFeatures_clone(&o_conv);
        LDKCResult_ChannelFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelFeaturesDecodeErrorZ), "LDKCResult_ChannelFeaturesDecodeErrorZ");
        *ret_conv = CResult_ChannelFeaturesDecodeErrorZ_ok(o_conv);
@@ -9730,12 +9981,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ChannelFeaturesDecod
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ChannelFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelFeaturesDecodeErrorZ), "LDKCResult_ChannelFeaturesDecodeErrorZ");
        *ret_conv = CResult_ChannelFeaturesDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_ChannelFeaturesDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_ChannelFeaturesDecodeErrorZ* o_conv = (LDKCResult_ChannelFeaturesDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ChannelFeaturesDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_ChannelFeaturesDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -9749,6 +10007,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_InvoiceFeaturesDecod
        LDKInvoiceFeatures o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = InvoiceFeatures_clone(&o_conv);
        LDKCResult_InvoiceFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceFeaturesDecodeErrorZ), "LDKCResult_InvoiceFeaturesDecodeErrorZ");
        *ret_conv = CResult_InvoiceFeaturesDecodeErrorZ_ok(o_conv);
@@ -9759,12 +10018,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_InvoiceFeaturesDecod
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_InvoiceFeaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceFeaturesDecodeErrorZ), "LDKCResult_InvoiceFeaturesDecodeErrorZ");
        *ret_conv = CResult_InvoiceFeaturesDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_InvoiceFeaturesDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_InvoiceFeaturesDecodeErrorZ* o_conv = (LDKCResult_InvoiceFeaturesDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_InvoiceFeaturesDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_InvoiceFeaturesDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -9778,6 +10044,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ScoringParametersDec
        LDKScoringParameters o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        // Warning: we need a move here but no clone is available for LDKScoringParameters
        LDKCResult_ScoringParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ScoringParametersDecodeErrorZ), "LDKCResult_ScoringParametersDecodeErrorZ");
        *ret_conv = CResult_ScoringParametersDecodeErrorZ_ok(o_conv);
@@ -9788,12 +10055,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ScoringParametersDec
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ScoringParametersDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ScoringParametersDecodeErrorZ), "LDKCResult_ScoringParametersDecodeErrorZ");
        *ret_conv = CResult_ScoringParametersDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_ScoringParametersDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_ScoringParametersDecodeErrorZ* o_conv = (LDKCResult_ScoringParametersDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ScoringParametersDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_ScoringParametersDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -9807,6 +10081,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ScorerDecodeErrorZ_o
        LDKScorer o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        // Warning: we need a move here but no clone is available for LDKScorer
        LDKCResult_ScorerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ScorerDecodeErrorZ), "LDKCResult_ScorerDecodeErrorZ");
        *ret_conv = CResult_ScorerDecodeErrorZ_ok(o_conv);
@@ -9817,12 +10092,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ScorerDecodeErrorZ_e
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ScorerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ScorerDecodeErrorZ), "LDKCResult_ScorerDecodeErrorZ");
        *ret_conv = CResult_ScorerDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_ScorerDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_ScorerDecodeErrorZ* o_conv = (LDKCResult_ScorerDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ScorerDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_ScorerDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -9836,6 +10118,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_DelayedPaymentOutput
        LDKDelayedPaymentOutputDescriptor o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = DelayedPaymentOutputDescriptor_clone(&o_conv);
        LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ), "LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ");
        *ret_conv = CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_ok(o_conv);
@@ -9846,12 +10129,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_DelayedPaymentOutput
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ), "LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ");
        *ret_conv = CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ* o_conv = (LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -9861,6 +10151,17 @@ void  __attribute__((visibility("default"))) TS_CResult_DelayedPaymentOutputDesc
        CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_clone_ptr(LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ), "LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ");
+       *ret_conv = CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ* arg_conv = (LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ* orig_conv = (LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ*)(orig & ~1);
        LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ), "LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ");
@@ -9872,6 +10173,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_StaticPaymentOutputD
        LDKStaticPaymentOutputDescriptor o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = StaticPaymentOutputDescriptor_clone(&o_conv);
        LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ), "LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ");
        *ret_conv = CResult_StaticPaymentOutputDescriptorDecodeErrorZ_ok(o_conv);
@@ -9882,12 +10184,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_StaticPaymentOutputD
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ), "LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ");
        *ret_conv = CResult_StaticPaymentOutputDescriptorDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_StaticPaymentOutputDescriptorDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ* o_conv = (LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_StaticPaymentOutputDescriptorDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_StaticPaymentOutputDescriptorDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -9897,6 +10206,17 @@ void  __attribute__((visibility("default"))) TS_CResult_StaticPaymentOutputDescr
        CResult_StaticPaymentOutputDescriptorDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_StaticPaymentOutputDescriptorDecodeErrorZ_clone_ptr(LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ), "LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ");
+       *ret_conv = CResult_StaticPaymentOutputDescriptorDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_StaticPaymentOutputDescriptorDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ* arg_conv = (LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_StaticPaymentOutputDescriptorDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_StaticPaymentOutputDescriptorDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ* orig_conv = (LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ*)(orig & ~1);
        LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ), "LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ");
@@ -9918,12 +10238,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_SpendableOutputDescr
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_SpendableOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SpendableOutputDescriptorDecodeErrorZ), "LDKCResult_SpendableOutputDescriptorDecodeErrorZ");
        *ret_conv = CResult_SpendableOutputDescriptorDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_SpendableOutputDescriptorDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_SpendableOutputDescriptorDecodeErrorZ* o_conv = (LDKCResult_SpendableOutputDescriptorDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_SpendableOutputDescriptorDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_SpendableOutputDescriptorDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -9933,6 +10260,17 @@ void  __attribute__((visibility("default"))) TS_CResult_SpendableOutputDescripto
        CResult_SpendableOutputDescriptorDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_SpendableOutputDescriptorDecodeErrorZ_clone_ptr(LDKCResult_SpendableOutputDescriptorDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_SpendableOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SpendableOutputDescriptorDecodeErrorZ), "LDKCResult_SpendableOutputDescriptorDecodeErrorZ");
+       *ret_conv = CResult_SpendableOutputDescriptorDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_SpendableOutputDescriptorDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_SpendableOutputDescriptorDecodeErrorZ* arg_conv = (LDKCResult_SpendableOutputDescriptorDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_SpendableOutputDescriptorDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_SpendableOutputDescriptorDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_SpendableOutputDescriptorDecodeErrorZ* orig_conv = (LDKCResult_SpendableOutputDescriptorDecodeErrorZ*)(orig & ~1);
        LDKCResult_SpendableOutputDescriptorDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SpendableOutputDescriptorDecodeErrorZ), "LDKCResult_SpendableOutputDescriptorDecodeErrorZ");
@@ -9952,6 +10290,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_NoneNoneZ_err() {
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_NoneNoneZ_is_ok(uint32_t o) {
+       LDKCResult_NoneNoneZ* o_conv = (LDKCResult_NoneNoneZ*)(o & ~1);
+       jboolean ret_val = CResult_NoneNoneZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_NoneNoneZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -9961,6 +10305,17 @@ void  __attribute__((visibility("default"))) TS_CResult_NoneNoneZ_free(uint32_t
        CResult_NoneNoneZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_NoneNoneZ_clone_ptr(LDKCResult_NoneNoneZ *NONNULL_PTR arg) {
+       LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
+       *ret_conv = CResult_NoneNoneZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_NoneNoneZ_clone_ptr(uint32_t arg) {
+       LDKCResult_NoneNoneZ* arg_conv = (LDKCResult_NoneNoneZ*)(arg & ~1);
+       int64_t ret_val = CResult_NoneNoneZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_NoneNoneZ_clone(uint32_t orig) {
        LDKCResult_NoneNoneZ* orig_conv = (LDKCResult_NoneNoneZ*)(orig & ~1);
        LDKCResult_NoneNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneNoneZ), "LDKCResult_NoneNoneZ");
@@ -9968,6 +10323,17 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_NoneNoneZ_clone(uint
        return (uint64_t)ret_conv;
 }
 
+static inline uint64_t C2Tuple_SignatureCVec_SignatureZZ_clone_ptr(LDKC2Tuple_SignatureCVec_SignatureZZ *NONNULL_PTR arg) {
+       LDKC2Tuple_SignatureCVec_SignatureZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_SignatureCVec_SignatureZZ), "LDKC2Tuple_SignatureCVec_SignatureZZ");
+       *ret_conv = C2Tuple_SignatureCVec_SignatureZZ_clone(arg);
+       return ((uint64_t)ret_conv);
+}
+int64_t  __attribute__((visibility("default"))) TS_C2Tuple_SignatureCVec_SignatureZZ_clone_ptr(uint32_t arg) {
+       LDKC2Tuple_SignatureCVec_SignatureZZ* arg_conv = (LDKC2Tuple_SignatureCVec_SignatureZZ*)(arg & ~1);
+       int64_t ret_val = C2Tuple_SignatureCVec_SignatureZZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_C2Tuple_SignatureCVec_SignatureZZ_clone(uint32_t orig) {
        LDKC2Tuple_SignatureCVec_SignatureZZ* orig_conv = (LDKC2Tuple_SignatureCVec_SignatureZZ*)(orig & ~1);
        LDKC2Tuple_SignatureCVec_SignatureZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_SignatureCVec_SignatureZZ), "LDKC2Tuple_SignatureCVec_SignatureZZ");
@@ -10023,6 +10389,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_C2Tuple_SignatureCVe
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_is_ok(uint32_t o) {
+       LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* o_conv = (LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)(o & ~1);
+       jboolean ret_val = CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -10032,6 +10404,17 @@ void  __attribute__((visibility("default"))) TS_CResult_C2Tuple_SignatureCVec_Si
        CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone_ptr(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ *NONNULL_PTR arg) {
+       LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ), "LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ");
+       *ret_conv = CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone_ptr(uint32_t arg) {
+       LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* arg_conv = (LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)(arg & ~1);
+       int64_t ret_val = CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone(uint32_t orig) {
        LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* orig_conv = (LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ*)(orig & ~1);
        LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ), "LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ");
@@ -10054,6 +10437,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_SignatureNoneZ_err()
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_SignatureNoneZ_is_ok(uint32_t o) {
+       LDKCResult_SignatureNoneZ* o_conv = (LDKCResult_SignatureNoneZ*)(o & ~1);
+       jboolean ret_val = CResult_SignatureNoneZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_SignatureNoneZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -10063,6 +10452,17 @@ void  __attribute__((visibility("default"))) TS_CResult_SignatureNoneZ_free(uint
        CResult_SignatureNoneZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_SignatureNoneZ_clone_ptr(LDKCResult_SignatureNoneZ *NONNULL_PTR arg) {
+       LDKCResult_SignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignatureNoneZ), "LDKCResult_SignatureNoneZ");
+       *ret_conv = CResult_SignatureNoneZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_SignatureNoneZ_clone_ptr(uint32_t arg) {
+       LDKCResult_SignatureNoneZ* arg_conv = (LDKCResult_SignatureNoneZ*)(arg & ~1);
+       int64_t ret_val = CResult_SignatureNoneZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_SignatureNoneZ_clone(uint32_t orig) {
        LDKCResult_SignatureNoneZ* orig_conv = (LDKCResult_SignatureNoneZ*)(orig & ~1);
        LDKCResult_SignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignatureNoneZ), "LDKCResult_SignatureNoneZ");
@@ -10083,12 +10483,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_SignDecodeErrorZ_err
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_SignDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SignDecodeErrorZ), "LDKCResult_SignDecodeErrorZ");
        *ret_conv = CResult_SignDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_SignDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_SignDecodeErrorZ* o_conv = (LDKCResult_SignDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_SignDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_SignDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -10098,6 +10505,17 @@ void  __attribute__((visibility("default"))) TS_CResult_SignDecodeErrorZ_free(ui
        CResult_SignDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_SignDecodeErrorZ_clone_ptr(LDKCResult_SignDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_SignDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SignDecodeErrorZ), "LDKCResult_SignDecodeErrorZ");
+       *ret_conv = CResult_SignDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_SignDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_SignDecodeErrorZ* arg_conv = (LDKCResult_SignDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_SignDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_SignDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_SignDecodeErrorZ* orig_conv = (LDKCResult_SignDecodeErrorZ*)(orig & ~1);
        LDKCResult_SignDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_SignDecodeErrorZ), "LDKCResult_SignDecodeErrorZ");
@@ -10128,6 +10546,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_RecoverableSignature
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_RecoverableSignatureNoneZ_is_ok(uint32_t o) {
+       LDKCResult_RecoverableSignatureNoneZ* o_conv = (LDKCResult_RecoverableSignatureNoneZ*)(o & ~1);
+       jboolean ret_val = CResult_RecoverableSignatureNoneZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_RecoverableSignatureNoneZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -10137,6 +10561,17 @@ void  __attribute__((visibility("default"))) TS_CResult_RecoverableSignatureNone
        CResult_RecoverableSignatureNoneZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_RecoverableSignatureNoneZ_clone_ptr(LDKCResult_RecoverableSignatureNoneZ *NONNULL_PTR arg) {
+       LDKCResult_RecoverableSignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_RecoverableSignatureNoneZ), "LDKCResult_RecoverableSignatureNoneZ");
+       *ret_conv = CResult_RecoverableSignatureNoneZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_RecoverableSignatureNoneZ_clone_ptr(uint32_t arg) {
+       LDKCResult_RecoverableSignatureNoneZ* arg_conv = (LDKCResult_RecoverableSignatureNoneZ*)(arg & ~1);
+       int64_t ret_val = CResult_RecoverableSignatureNoneZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_RecoverableSignatureNoneZ_clone(uint32_t orig) {
        LDKCResult_RecoverableSignatureNoneZ* orig_conv = (LDKCResult_RecoverableSignatureNoneZ*)(orig & ~1);
        LDKCResult_RecoverableSignatureNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_RecoverableSignatureNoneZ), "LDKCResult_RecoverableSignatureNoneZ");
@@ -10190,6 +10625,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_CVec_CVec_u8ZZNoneZ_
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_CVec_CVec_u8ZZNoneZ_is_ok(uint32_t o) {
+       LDKCResult_CVec_CVec_u8ZZNoneZ* o_conv = (LDKCResult_CVec_CVec_u8ZZNoneZ*)(o & ~1);
+       jboolean ret_val = CResult_CVec_CVec_u8ZZNoneZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_CVec_CVec_u8ZZNoneZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -10199,6 +10640,17 @@ void  __attribute__((visibility("default"))) TS_CResult_CVec_CVec_u8ZZNoneZ_free
        CResult_CVec_CVec_u8ZZNoneZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_CVec_CVec_u8ZZNoneZ_clone_ptr(LDKCResult_CVec_CVec_u8ZZNoneZ *NONNULL_PTR arg) {
+       LDKCResult_CVec_CVec_u8ZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_CVec_u8ZZNoneZ), "LDKCResult_CVec_CVec_u8ZZNoneZ");
+       *ret_conv = CResult_CVec_CVec_u8ZZNoneZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_CVec_CVec_u8ZZNoneZ_clone_ptr(uint32_t arg) {
+       LDKCResult_CVec_CVec_u8ZZNoneZ* arg_conv = (LDKCResult_CVec_CVec_u8ZZNoneZ*)(arg & ~1);
+       int64_t ret_val = CResult_CVec_CVec_u8ZZNoneZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_CVec_CVec_u8ZZNoneZ_clone(uint32_t orig) {
        LDKCResult_CVec_CVec_u8ZZNoneZ* orig_conv = (LDKCResult_CVec_CVec_u8ZZNoneZ*)(orig & ~1);
        LDKCResult_CVec_CVec_u8ZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_CVec_u8ZZNoneZ), "LDKCResult_CVec_CVec_u8ZZNoneZ");
@@ -10210,6 +10662,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_InMemorySignerDecode
        LDKInMemorySigner o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = InMemorySigner_clone(&o_conv);
        LDKCResult_InMemorySignerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InMemorySignerDecodeErrorZ), "LDKCResult_InMemorySignerDecodeErrorZ");
        *ret_conv = CResult_InMemorySignerDecodeErrorZ_ok(o_conv);
@@ -10220,12 +10673,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_InMemorySignerDecode
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_InMemorySignerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InMemorySignerDecodeErrorZ), "LDKCResult_InMemorySignerDecodeErrorZ");
        *ret_conv = CResult_InMemorySignerDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_InMemorySignerDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_InMemorySignerDecodeErrorZ* o_conv = (LDKCResult_InMemorySignerDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_InMemorySignerDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_InMemorySignerDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -10235,6 +10695,17 @@ void  __attribute__((visibility("default"))) TS_CResult_InMemorySignerDecodeErro
        CResult_InMemorySignerDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_InMemorySignerDecodeErrorZ_clone_ptr(LDKCResult_InMemorySignerDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_InMemorySignerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InMemorySignerDecodeErrorZ), "LDKCResult_InMemorySignerDecodeErrorZ");
+       *ret_conv = CResult_InMemorySignerDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_InMemorySignerDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_InMemorySignerDecodeErrorZ* arg_conv = (LDKCResult_InMemorySignerDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_InMemorySignerDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_InMemorySignerDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_InMemorySignerDecodeErrorZ* orig_conv = (LDKCResult_InMemorySignerDecodeErrorZ*)(orig & ~1);
        LDKCResult_InMemorySignerDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InMemorySignerDecodeErrorZ), "LDKCResult_InMemorySignerDecodeErrorZ");
@@ -10278,6 +10749,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_TransactionNoneZ_err
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_TransactionNoneZ_is_ok(uint32_t o) {
+       LDKCResult_TransactionNoneZ* o_conv = (LDKCResult_TransactionNoneZ*)(o & ~1);
+       jboolean ret_val = CResult_TransactionNoneZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_TransactionNoneZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -10287,6 +10764,17 @@ void  __attribute__((visibility("default"))) TS_CResult_TransactionNoneZ_free(ui
        CResult_TransactionNoneZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_TransactionNoneZ_clone_ptr(LDKCResult_TransactionNoneZ *NONNULL_PTR arg) {
+       LDKCResult_TransactionNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_TransactionNoneZ), "LDKCResult_TransactionNoneZ");
+       *ret_conv = CResult_TransactionNoneZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_TransactionNoneZ_clone_ptr(uint32_t arg) {
+       LDKCResult_TransactionNoneZ* arg_conv = (LDKCResult_TransactionNoneZ*)(arg & ~1);
+       int64_t ret_val = CResult_TransactionNoneZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_TransactionNoneZ_clone(uint32_t orig) {
        LDKCResult_TransactionNoneZ* orig_conv = (LDKCResult_TransactionNoneZ*)(orig & ~1);
        LDKCResult_TransactionNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_TransactionNoneZ), "LDKCResult_TransactionNoneZ");
@@ -10294,6 +10782,17 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_TransactionNoneZ_clo
        return (uint64_t)ret_conv;
 }
 
+static inline uint64_t C2Tuple_BlockHashChannelMonitorZ_clone_ptr(LDKC2Tuple_BlockHashChannelMonitorZ *NONNULL_PTR arg) {
+       LDKC2Tuple_BlockHashChannelMonitorZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_BlockHashChannelMonitorZ), "LDKC2Tuple_BlockHashChannelMonitorZ");
+       *ret_conv = C2Tuple_BlockHashChannelMonitorZ_clone(arg);
+       return ((uint64_t)ret_conv);
+}
+int64_t  __attribute__((visibility("default"))) TS_C2Tuple_BlockHashChannelMonitorZ_clone_ptr(uint32_t arg) {
+       LDKC2Tuple_BlockHashChannelMonitorZ* arg_conv = (LDKC2Tuple_BlockHashChannelMonitorZ*)(arg & ~1);
+       int64_t ret_val = C2Tuple_BlockHashChannelMonitorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_C2Tuple_BlockHashChannelMonitorZ_clone(uint32_t orig) {
        LDKC2Tuple_BlockHashChannelMonitorZ* orig_conv = (LDKC2Tuple_BlockHashChannelMonitorZ*)(orig & ~1);
        LDKC2Tuple_BlockHashChannelMonitorZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_BlockHashChannelMonitorZ), "LDKC2Tuple_BlockHashChannelMonitorZ");
@@ -10308,6 +10807,7 @@ uint32_t  __attribute__((visibility("default"))) TS_C2Tuple_BlockHashChannelMoni
        LDKChannelMonitor b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = (b & 1) || (b == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv = ChannelMonitor_clone(&b_conv);
        LDKC2Tuple_BlockHashChannelMonitorZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_BlockHashChannelMonitorZ), "LDKC2Tuple_BlockHashChannelMonitorZ");
        *ret_conv = C2Tuple_BlockHashChannelMonitorZ_new(a_ref, b_conv);
@@ -10370,6 +10870,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_CVec_C2Tuple_BlockHa
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_is_ok(uint32_t o) {
+       LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ* o_conv = (LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -10379,6 +10885,17 @@ void  __attribute__((visibility("default"))) TS_CResult_CVec_C2Tuple_BlockHashCh
        CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_clone_ptr(LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ *NONNULL_PTR arg) {
+       LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ), "LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ");
+       *ret_conv = CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ* arg_conv = (LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_clone(uint32_t orig) {
        LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ* orig_conv = (LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ*)(orig & ~1);
        LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ), "LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ");
@@ -10409,6 +10926,18 @@ void  __attribute__((visibility("default"))) TS_COption_u16Z_free(uint32_t _res)
        COption_u16Z_free(_res_conv);
 }
 
+static inline uint64_t COption_u16Z_clone_ptr(LDKCOption_u16Z *NONNULL_PTR arg) {
+       LDKCOption_u16Z *ret_copy = MALLOC(sizeof(LDKCOption_u16Z), "LDKCOption_u16Z");
+       *ret_copy = COption_u16Z_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_COption_u16Z_clone_ptr(uint32_t arg) {
+       LDKCOption_u16Z* arg_conv = (LDKCOption_u16Z*)arg;
+       int64_t ret_val = COption_u16Z_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_COption_u16Z_clone(uint32_t orig) {
        LDKCOption_u16Z* orig_conv = (LDKCOption_u16Z*)orig;
        LDKCOption_u16Z *ret_copy = MALLOC(sizeof(LDKCOption_u16Z), "LDKCOption_u16Z");
@@ -10433,6 +10962,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_NoneAPIErrorZ_err(ui
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_NoneAPIErrorZ_is_ok(uint32_t o) {
+       LDKCResult_NoneAPIErrorZ* o_conv = (LDKCResult_NoneAPIErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_NoneAPIErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_NoneAPIErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -10442,6 +10977,17 @@ void  __attribute__((visibility("default"))) TS_CResult_NoneAPIErrorZ_free(uint3
        CResult_NoneAPIErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_NoneAPIErrorZ_clone_ptr(LDKCResult_NoneAPIErrorZ *NONNULL_PTR arg) {
+       LDKCResult_NoneAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneAPIErrorZ), "LDKCResult_NoneAPIErrorZ");
+       *ret_conv = CResult_NoneAPIErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_NoneAPIErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_NoneAPIErrorZ* arg_conv = (LDKCResult_NoneAPIErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_NoneAPIErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_NoneAPIErrorZ_clone(uint32_t orig) {
        LDKCResult_NoneAPIErrorZ* orig_conv = (LDKCResult_NoneAPIErrorZ*)(orig & ~1);
        LDKCResult_NoneAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneAPIErrorZ), "LDKCResult_NoneAPIErrorZ");
@@ -10506,6 +11052,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult__u832APIErrorZ_err(u
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult__u832APIErrorZ_is_ok(uint32_t o) {
+       LDKCResult__u832APIErrorZ* o_conv = (LDKCResult__u832APIErrorZ*)(o & ~1);
+       jboolean ret_val = CResult__u832APIErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult__u832APIErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -10515,6 +11067,17 @@ void  __attribute__((visibility("default"))) TS_CResult__u832APIErrorZ_free(uint
        CResult__u832APIErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult__u832APIErrorZ_clone_ptr(LDKCResult__u832APIErrorZ *NONNULL_PTR arg) {
+       LDKCResult__u832APIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult__u832APIErrorZ), "LDKCResult__u832APIErrorZ");
+       *ret_conv = CResult__u832APIErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult__u832APIErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult__u832APIErrorZ* arg_conv = (LDKCResult__u832APIErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult__u832APIErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult__u832APIErrorZ_clone(uint32_t orig) {
        LDKCResult__u832APIErrorZ* orig_conv = (LDKCResult__u832APIErrorZ*)(orig & ~1);
        LDKCResult__u832APIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult__u832APIErrorZ), "LDKCResult__u832APIErrorZ");
@@ -10541,6 +11104,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_PaymentIdPaymentSend
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_PaymentIdPaymentSendFailureZ_is_ok(uint32_t o) {
+       LDKCResult_PaymentIdPaymentSendFailureZ* o_conv = (LDKCResult_PaymentIdPaymentSendFailureZ*)(o & ~1);
+       jboolean ret_val = CResult_PaymentIdPaymentSendFailureZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_PaymentIdPaymentSendFailureZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -10550,6 +11119,17 @@ void  __attribute__((visibility("default"))) TS_CResult_PaymentIdPaymentSendFail
        CResult_PaymentIdPaymentSendFailureZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_PaymentIdPaymentSendFailureZ_clone_ptr(LDKCResult_PaymentIdPaymentSendFailureZ *NONNULL_PTR arg) {
+       LDKCResult_PaymentIdPaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentIdPaymentSendFailureZ), "LDKCResult_PaymentIdPaymentSendFailureZ");
+       *ret_conv = CResult_PaymentIdPaymentSendFailureZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_PaymentIdPaymentSendFailureZ_clone_ptr(uint32_t arg) {
+       LDKCResult_PaymentIdPaymentSendFailureZ* arg_conv = (LDKCResult_PaymentIdPaymentSendFailureZ*)(arg & ~1);
+       int64_t ret_val = CResult_PaymentIdPaymentSendFailureZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_PaymentIdPaymentSendFailureZ_clone(uint32_t orig) {
        LDKCResult_PaymentIdPaymentSendFailureZ* orig_conv = (LDKCResult_PaymentIdPaymentSendFailureZ*)(orig & ~1);
        LDKCResult_PaymentIdPaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentIdPaymentSendFailureZ), "LDKCResult_PaymentIdPaymentSendFailureZ");
@@ -10573,6 +11153,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_NonePaymentSendFailu
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_NonePaymentSendFailureZ_is_ok(uint32_t o) {
+       LDKCResult_NonePaymentSendFailureZ* o_conv = (LDKCResult_NonePaymentSendFailureZ*)(o & ~1);
+       jboolean ret_val = CResult_NonePaymentSendFailureZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_NonePaymentSendFailureZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -10582,6 +11168,17 @@ void  __attribute__((visibility("default"))) TS_CResult_NonePaymentSendFailureZ_
        CResult_NonePaymentSendFailureZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_NonePaymentSendFailureZ_clone_ptr(LDKCResult_NonePaymentSendFailureZ *NONNULL_PTR arg) {
+       LDKCResult_NonePaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_NonePaymentSendFailureZ), "LDKCResult_NonePaymentSendFailureZ");
+       *ret_conv = CResult_NonePaymentSendFailureZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_NonePaymentSendFailureZ_clone_ptr(uint32_t arg) {
+       LDKCResult_NonePaymentSendFailureZ* arg_conv = (LDKCResult_NonePaymentSendFailureZ*)(arg & ~1);
+       int64_t ret_val = CResult_NonePaymentSendFailureZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_NonePaymentSendFailureZ_clone(uint32_t orig) {
        LDKCResult_NonePaymentSendFailureZ* orig_conv = (LDKCResult_NonePaymentSendFailureZ*)(orig & ~1);
        LDKCResult_NonePaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_NonePaymentSendFailureZ), "LDKCResult_NonePaymentSendFailureZ");
@@ -10589,6 +11186,17 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_NonePaymentSendFailu
        return (uint64_t)ret_conv;
 }
 
+static inline uint64_t C2Tuple_PaymentHashPaymentIdZ_clone_ptr(LDKC2Tuple_PaymentHashPaymentIdZ *NONNULL_PTR arg) {
+       LDKC2Tuple_PaymentHashPaymentIdZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PaymentHashPaymentIdZ), "LDKC2Tuple_PaymentHashPaymentIdZ");
+       *ret_conv = C2Tuple_PaymentHashPaymentIdZ_clone(arg);
+       return ((uint64_t)ret_conv);
+}
+int64_t  __attribute__((visibility("default"))) TS_C2Tuple_PaymentHashPaymentIdZ_clone_ptr(uint32_t arg) {
+       LDKC2Tuple_PaymentHashPaymentIdZ* arg_conv = (LDKC2Tuple_PaymentHashPaymentIdZ*)(arg & ~1);
+       int64_t ret_val = C2Tuple_PaymentHashPaymentIdZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_C2Tuple_PaymentHashPaymentIdZ_clone(uint32_t orig) {
        LDKC2Tuple_PaymentHashPaymentIdZ* orig_conv = (LDKC2Tuple_PaymentHashPaymentIdZ*)(orig & ~1);
        LDKC2Tuple_PaymentHashPaymentIdZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PaymentHashPaymentIdZ), "LDKC2Tuple_PaymentHashPaymentIdZ");
@@ -10637,6 +11245,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_C2Tuple_PaymentHashP
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_is_ok(uint32_t o) {
+       LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ* o_conv = (LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ*)(o & ~1);
+       jboolean ret_val = CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -10646,6 +11260,17 @@ void  __attribute__((visibility("default"))) TS_CResult_C2Tuple_PaymentHashPayme
        CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_clone_ptr(LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ *NONNULL_PTR arg) {
+       LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ), "LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ");
+       *ret_conv = CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_clone_ptr(uint32_t arg) {
+       LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ* arg_conv = (LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ*)(arg & ~1);
+       int64_t ret_val = CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_clone(uint32_t orig) {
        LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ* orig_conv = (LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ*)(orig & ~1);
        LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ), "LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ");
@@ -10672,6 +11297,17 @@ void  __attribute__((visibility("default"))) TS_CVec_NetAddressZ_free(uint32_tAr
        CVec_NetAddressZ_free(_res_constr);
 }
 
+static inline uint64_t C2Tuple_PaymentHashPaymentSecretZ_clone_ptr(LDKC2Tuple_PaymentHashPaymentSecretZ *NONNULL_PTR arg) {
+       LDKC2Tuple_PaymentHashPaymentSecretZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PaymentHashPaymentSecretZ), "LDKC2Tuple_PaymentHashPaymentSecretZ");
+       *ret_conv = C2Tuple_PaymentHashPaymentSecretZ_clone(arg);
+       return ((uint64_t)ret_conv);
+}
+int64_t  __attribute__((visibility("default"))) TS_C2Tuple_PaymentHashPaymentSecretZ_clone_ptr(uint32_t arg) {
+       LDKC2Tuple_PaymentHashPaymentSecretZ* arg_conv = (LDKC2Tuple_PaymentHashPaymentSecretZ*)(arg & ~1);
+       int64_t ret_val = C2Tuple_PaymentHashPaymentSecretZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_C2Tuple_PaymentHashPaymentSecretZ_clone(uint32_t orig) {
        LDKC2Tuple_PaymentHashPaymentSecretZ* orig_conv = (LDKC2Tuple_PaymentHashPaymentSecretZ*)(orig & ~1);
        LDKC2Tuple_PaymentHashPaymentSecretZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PaymentHashPaymentSecretZ), "LDKC2Tuple_PaymentHashPaymentSecretZ");
@@ -10719,6 +11355,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_PaymentSecretAPIErro
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_PaymentSecretAPIErrorZ_is_ok(uint32_t o) {
+       LDKCResult_PaymentSecretAPIErrorZ* o_conv = (LDKCResult_PaymentSecretAPIErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_PaymentSecretAPIErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_PaymentSecretAPIErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -10728,6 +11370,17 @@ void  __attribute__((visibility("default"))) TS_CResult_PaymentSecretAPIErrorZ_f
        CResult_PaymentSecretAPIErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_PaymentSecretAPIErrorZ_clone_ptr(LDKCResult_PaymentSecretAPIErrorZ *NONNULL_PTR arg) {
+       LDKCResult_PaymentSecretAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentSecretAPIErrorZ), "LDKCResult_PaymentSecretAPIErrorZ");
+       *ret_conv = CResult_PaymentSecretAPIErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_PaymentSecretAPIErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_PaymentSecretAPIErrorZ* arg_conv = (LDKCResult_PaymentSecretAPIErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_PaymentSecretAPIErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_PaymentSecretAPIErrorZ_clone(uint32_t orig) {
        LDKCResult_PaymentSecretAPIErrorZ* orig_conv = (LDKCResult_PaymentSecretAPIErrorZ*)(orig & ~1);
        LDKCResult_PaymentSecretAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentSecretAPIErrorZ), "LDKCResult_PaymentSecretAPIErrorZ");
@@ -10748,6 +11401,7 @@ void  __attribute__((visibility("default"))) TS_CVec_ChannelMonitorZ_free(uint32
                LDKChannelMonitor _res_conv_16_conv;
                _res_conv_16_conv.inner = (void*)(_res_conv_16 & (~1));
                _res_conv_16_conv.is_owned = (_res_conv_16 & 1) || (_res_conv_16 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_16_conv);
                _res_constr.data[q] = _res_conv_16_conv;
        }
        CVec_ChannelMonitorZ_free(_res_constr);
@@ -10760,6 +11414,7 @@ uint32_t  __attribute__((visibility("default"))) TS_C2Tuple_BlockHashChannelMana
        LDKChannelManager b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = (b & 1) || (b == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        // Warning: we need a move here but no clone is available for LDKChannelManager
        LDKC2Tuple_BlockHashChannelManagerZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_BlockHashChannelManagerZ), "LDKC2Tuple_BlockHashChannelManagerZ");
        *ret_conv = C2Tuple_BlockHashChannelManagerZ_new(a_ref, b_conv);
@@ -10789,12 +11444,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_C2Tuple_BlockHashCha
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ), "LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ");
        *ret_conv = CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ* o_conv = (LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -10808,6 +11470,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ChannelConfigDecodeE
        LDKChannelConfig o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ChannelConfig_clone(&o_conv);
        LDKCResult_ChannelConfigDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelConfigDecodeErrorZ), "LDKCResult_ChannelConfigDecodeErrorZ");
        *ret_conv = CResult_ChannelConfigDecodeErrorZ_ok(o_conv);
@@ -10818,12 +11481,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ChannelConfigDecodeE
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ChannelConfigDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelConfigDecodeErrorZ), "LDKCResult_ChannelConfigDecodeErrorZ");
        *ret_conv = CResult_ChannelConfigDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_ChannelConfigDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_ChannelConfigDecodeErrorZ* o_conv = (LDKCResult_ChannelConfigDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ChannelConfigDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_ChannelConfigDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -10833,6 +11503,17 @@ void  __attribute__((visibility("default"))) TS_CResult_ChannelConfigDecodeError
        CResult_ChannelConfigDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ChannelConfigDecodeErrorZ_clone_ptr(LDKCResult_ChannelConfigDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ChannelConfigDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelConfigDecodeErrorZ), "LDKCResult_ChannelConfigDecodeErrorZ");
+       *ret_conv = CResult_ChannelConfigDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_ChannelConfigDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_ChannelConfigDecodeErrorZ* arg_conv = (LDKCResult_ChannelConfigDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ChannelConfigDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_ChannelConfigDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_ChannelConfigDecodeErrorZ* orig_conv = (LDKCResult_ChannelConfigDecodeErrorZ*)(orig & ~1);
        LDKCResult_ChannelConfigDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelConfigDecodeErrorZ), "LDKCResult_ChannelConfigDecodeErrorZ");
@@ -10844,6 +11525,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_OutPointDecodeErrorZ
        LDKOutPoint o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = OutPoint_clone(&o_conv);
        LDKCResult_OutPointDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OutPointDecodeErrorZ), "LDKCResult_OutPointDecodeErrorZ");
        *ret_conv = CResult_OutPointDecodeErrorZ_ok(o_conv);
@@ -10854,12 +11536,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_OutPointDecodeErrorZ
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_OutPointDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OutPointDecodeErrorZ), "LDKCResult_OutPointDecodeErrorZ");
        *ret_conv = CResult_OutPointDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_OutPointDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_OutPointDecodeErrorZ* o_conv = (LDKCResult_OutPointDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_OutPointDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_OutPointDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -10869,6 +11558,17 @@ void  __attribute__((visibility("default"))) TS_CResult_OutPointDecodeErrorZ_fre
        CResult_OutPointDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_OutPointDecodeErrorZ_clone_ptr(LDKCResult_OutPointDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_OutPointDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OutPointDecodeErrorZ), "LDKCResult_OutPointDecodeErrorZ");
+       *ret_conv = CResult_OutPointDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_OutPointDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_OutPointDecodeErrorZ* arg_conv = (LDKCResult_OutPointDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_OutPointDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_OutPointDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_OutPointDecodeErrorZ* orig_conv = (LDKCResult_OutPointDecodeErrorZ*)(orig & ~1);
        LDKCResult_OutPointDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OutPointDecodeErrorZ), "LDKCResult_OutPointDecodeErrorZ");
@@ -10902,6 +11602,18 @@ void  __attribute__((visibility("default"))) TS_COption_TypeZ_free(uint32_t _res
        COption_TypeZ_free(_res_conv);
 }
 
+static inline uint64_t COption_TypeZ_clone_ptr(LDKCOption_TypeZ *NONNULL_PTR arg) {
+       LDKCOption_TypeZ *ret_copy = MALLOC(sizeof(LDKCOption_TypeZ), "LDKCOption_TypeZ");
+       *ret_copy = COption_TypeZ_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_COption_TypeZ_clone_ptr(uint32_t arg) {
+       LDKCOption_TypeZ* arg_conv = (LDKCOption_TypeZ*)arg;
+       int64_t ret_val = COption_TypeZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_COption_TypeZ_clone(uint32_t orig) {
        LDKCOption_TypeZ* orig_conv = (LDKCOption_TypeZ*)orig;
        LDKCOption_TypeZ *ret_copy = MALLOC(sizeof(LDKCOption_TypeZ), "LDKCOption_TypeZ");
@@ -10924,12 +11636,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_COption_TypeZDecodeE
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_COption_TypeZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_TypeZDecodeErrorZ), "LDKCResult_COption_TypeZDecodeErrorZ");
        *ret_conv = CResult_COption_TypeZDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_COption_TypeZDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_COption_TypeZDecodeErrorZ* o_conv = (LDKCResult_COption_TypeZDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_COption_TypeZDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_COption_TypeZDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -10939,6 +11658,17 @@ void  __attribute__((visibility("default"))) TS_CResult_COption_TypeZDecodeError
        CResult_COption_TypeZDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_COption_TypeZDecodeErrorZ_clone_ptr(LDKCResult_COption_TypeZDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_COption_TypeZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_TypeZDecodeErrorZ), "LDKCResult_COption_TypeZDecodeErrorZ");
+       *ret_conv = CResult_COption_TypeZDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_COption_TypeZDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_COption_TypeZDecodeErrorZ* arg_conv = (LDKCResult_COption_TypeZDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_COption_TypeZDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_COption_TypeZDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_COption_TypeZDecodeErrorZ* orig_conv = (LDKCResult_COption_TypeZDecodeErrorZ*)(orig & ~1);
        LDKCResult_COption_TypeZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_TypeZDecodeErrorZ), "LDKCResult_COption_TypeZDecodeErrorZ");
@@ -10965,6 +11695,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_PaymentIdPaymentErro
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_PaymentIdPaymentErrorZ_is_ok(uint32_t o) {
+       LDKCResult_PaymentIdPaymentErrorZ* o_conv = (LDKCResult_PaymentIdPaymentErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_PaymentIdPaymentErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_PaymentIdPaymentErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -10974,6 +11710,17 @@ void  __attribute__((visibility("default"))) TS_CResult_PaymentIdPaymentErrorZ_f
        CResult_PaymentIdPaymentErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_PaymentIdPaymentErrorZ_clone_ptr(LDKCResult_PaymentIdPaymentErrorZ *NONNULL_PTR arg) {
+       LDKCResult_PaymentIdPaymentErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentIdPaymentErrorZ), "LDKCResult_PaymentIdPaymentErrorZ");
+       *ret_conv = CResult_PaymentIdPaymentErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_PaymentIdPaymentErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_PaymentIdPaymentErrorZ* arg_conv = (LDKCResult_PaymentIdPaymentErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_PaymentIdPaymentErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_PaymentIdPaymentErrorZ_clone(uint32_t orig) {
        LDKCResult_PaymentIdPaymentErrorZ* orig_conv = (LDKCResult_PaymentIdPaymentErrorZ*)(orig & ~1);
        LDKCResult_PaymentIdPaymentErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentIdPaymentErrorZ), "LDKCResult_PaymentIdPaymentErrorZ");
@@ -10994,6 +11741,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_SiPrefixNoneZ_err()
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_SiPrefixNoneZ_is_ok(uint32_t o) {
+       LDKCResult_SiPrefixNoneZ* o_conv = (LDKCResult_SiPrefixNoneZ*)(o & ~1);
+       jboolean ret_val = CResult_SiPrefixNoneZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_SiPrefixNoneZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -11003,6 +11756,17 @@ void  __attribute__((visibility("default"))) TS_CResult_SiPrefixNoneZ_free(uint3
        CResult_SiPrefixNoneZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_SiPrefixNoneZ_clone_ptr(LDKCResult_SiPrefixNoneZ *NONNULL_PTR arg) {
+       LDKCResult_SiPrefixNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SiPrefixNoneZ), "LDKCResult_SiPrefixNoneZ");
+       *ret_conv = CResult_SiPrefixNoneZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_SiPrefixNoneZ_clone_ptr(uint32_t arg) {
+       LDKCResult_SiPrefixNoneZ* arg_conv = (LDKCResult_SiPrefixNoneZ*)(arg & ~1);
+       int64_t ret_val = CResult_SiPrefixNoneZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_SiPrefixNoneZ_clone(uint32_t orig) {
        LDKCResult_SiPrefixNoneZ* orig_conv = (LDKCResult_SiPrefixNoneZ*)(orig & ~1);
        LDKCResult_SiPrefixNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SiPrefixNoneZ), "LDKCResult_SiPrefixNoneZ");
@@ -11014,6 +11778,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_InvoiceNoneZ_ok(uint
        LDKInvoice o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = Invoice_clone(&o_conv);
        LDKCResult_InvoiceNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceNoneZ), "LDKCResult_InvoiceNoneZ");
        *ret_conv = CResult_InvoiceNoneZ_ok(o_conv);
@@ -11026,6 +11791,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_InvoiceNoneZ_err() {
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_InvoiceNoneZ_is_ok(uint32_t o) {
+       LDKCResult_InvoiceNoneZ* o_conv = (LDKCResult_InvoiceNoneZ*)(o & ~1);
+       jboolean ret_val = CResult_InvoiceNoneZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_InvoiceNoneZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -11035,6 +11806,17 @@ void  __attribute__((visibility("default"))) TS_CResult_InvoiceNoneZ_free(uint32
        CResult_InvoiceNoneZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_InvoiceNoneZ_clone_ptr(LDKCResult_InvoiceNoneZ *NONNULL_PTR arg) {
+       LDKCResult_InvoiceNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceNoneZ), "LDKCResult_InvoiceNoneZ");
+       *ret_conv = CResult_InvoiceNoneZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_InvoiceNoneZ_clone_ptr(uint32_t arg) {
+       LDKCResult_InvoiceNoneZ* arg_conv = (LDKCResult_InvoiceNoneZ*)(arg & ~1);
+       int64_t ret_val = CResult_InvoiceNoneZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_InvoiceNoneZ_clone(uint32_t orig) {
        LDKCResult_InvoiceNoneZ* orig_conv = (LDKCResult_InvoiceNoneZ*)(orig & ~1);
        LDKCResult_InvoiceNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceNoneZ), "LDKCResult_InvoiceNoneZ");
@@ -11046,6 +11828,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_SignedRawInvoiceNone
        LDKSignedRawInvoice o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = SignedRawInvoice_clone(&o_conv);
        LDKCResult_SignedRawInvoiceNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignedRawInvoiceNoneZ), "LDKCResult_SignedRawInvoiceNoneZ");
        *ret_conv = CResult_SignedRawInvoiceNoneZ_ok(o_conv);
@@ -11058,6 +11841,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_SignedRawInvoiceNone
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_SignedRawInvoiceNoneZ_is_ok(uint32_t o) {
+       LDKCResult_SignedRawInvoiceNoneZ* o_conv = (LDKCResult_SignedRawInvoiceNoneZ*)(o & ~1);
+       jboolean ret_val = CResult_SignedRawInvoiceNoneZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_SignedRawInvoiceNoneZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -11067,6 +11856,17 @@ void  __attribute__((visibility("default"))) TS_CResult_SignedRawInvoiceNoneZ_fr
        CResult_SignedRawInvoiceNoneZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_SignedRawInvoiceNoneZ_clone_ptr(LDKCResult_SignedRawInvoiceNoneZ *NONNULL_PTR arg) {
+       LDKCResult_SignedRawInvoiceNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignedRawInvoiceNoneZ), "LDKCResult_SignedRawInvoiceNoneZ");
+       *ret_conv = CResult_SignedRawInvoiceNoneZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_SignedRawInvoiceNoneZ_clone_ptr(uint32_t arg) {
+       LDKCResult_SignedRawInvoiceNoneZ* arg_conv = (LDKCResult_SignedRawInvoiceNoneZ*)(arg & ~1);
+       int64_t ret_val = CResult_SignedRawInvoiceNoneZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_SignedRawInvoiceNoneZ_clone(uint32_t orig) {
        LDKCResult_SignedRawInvoiceNoneZ* orig_conv = (LDKCResult_SignedRawInvoiceNoneZ*)(orig & ~1);
        LDKCResult_SignedRawInvoiceNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_SignedRawInvoiceNoneZ), "LDKCResult_SignedRawInvoiceNoneZ");
@@ -11074,6 +11874,17 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_SignedRawInvoiceNone
        return (uint64_t)ret_conv;
 }
 
+static inline uint64_t C3Tuple_RawInvoice_u832InvoiceSignatureZ_clone_ptr(LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ *NONNULL_PTR arg) {
+       LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ* ret_conv = MALLOC(sizeof(LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ), "LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ");
+       *ret_conv = C3Tuple_RawInvoice_u832InvoiceSignatureZ_clone(arg);
+       return ((uint64_t)ret_conv);
+}
+int64_t  __attribute__((visibility("default"))) TS_C3Tuple_RawInvoice_u832InvoiceSignatureZ_clone_ptr(uint32_t arg) {
+       LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ* arg_conv = (LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ*)(arg & ~1);
+       int64_t ret_val = C3Tuple_RawInvoice_u832InvoiceSignatureZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_C3Tuple_RawInvoice_u832InvoiceSignatureZ_clone(uint32_t orig) {
        LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ* orig_conv = (LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ*)(orig & ~1);
        LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ* ret_conv = MALLOC(sizeof(LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ), "LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ");
@@ -11085,6 +11896,7 @@ uint32_t  __attribute__((visibility("default"))) TS_C3Tuple_RawInvoice_u832Invoi
        LDKRawInvoice a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = (a & 1) || (a == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv = RawInvoice_clone(&a_conv);
        LDKThirtyTwoBytes b_ref;
        CHECK(*((uint32_t*)b) == 32);
@@ -11092,6 +11904,7 @@ uint32_t  __attribute__((visibility("default"))) TS_C3Tuple_RawInvoice_u832Invoi
        LDKInvoiceSignature c_conv;
        c_conv.inner = (void*)(c & (~1));
        c_conv.is_owned = (c & 1) || (c == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(c_conv);
        c_conv = InvoiceSignature_clone(&c_conv);
        LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ* ret_conv = MALLOC(sizeof(LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ), "LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ");
        *ret_conv = C3Tuple_RawInvoice_u832InvoiceSignatureZ_new(a_conv, b_ref, c_conv);
@@ -11111,6 +11924,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_PayeePubKeyErrorZ_ok
        LDKPayeePubKey o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = PayeePubKey_clone(&o_conv);
        LDKCResult_PayeePubKeyErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PayeePubKeyErrorZ), "LDKCResult_PayeePubKeyErrorZ");
        *ret_conv = CResult_PayeePubKeyErrorZ_ok(o_conv);
@@ -11124,6 +11938,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_PayeePubKeyErrorZ_er
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_PayeePubKeyErrorZ_is_ok(uint32_t o) {
+       LDKCResult_PayeePubKeyErrorZ* o_conv = (LDKCResult_PayeePubKeyErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_PayeePubKeyErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_PayeePubKeyErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -11133,6 +11953,17 @@ void  __attribute__((visibility("default"))) TS_CResult_PayeePubKeyErrorZ_free(u
        CResult_PayeePubKeyErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_PayeePubKeyErrorZ_clone_ptr(LDKCResult_PayeePubKeyErrorZ *NONNULL_PTR arg) {
+       LDKCResult_PayeePubKeyErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PayeePubKeyErrorZ), "LDKCResult_PayeePubKeyErrorZ");
+       *ret_conv = CResult_PayeePubKeyErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_PayeePubKeyErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_PayeePubKeyErrorZ* arg_conv = (LDKCResult_PayeePubKeyErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_PayeePubKeyErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_PayeePubKeyErrorZ_clone(uint32_t orig) {
        LDKCResult_PayeePubKeyErrorZ* orig_conv = (LDKCResult_PayeePubKeyErrorZ*)(orig & ~1);
        LDKCResult_PayeePubKeyErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PayeePubKeyErrorZ), "LDKCResult_PayeePubKeyErrorZ");
@@ -11153,6 +11984,7 @@ void  __attribute__((visibility("default"))) TS_CVec_PrivateRouteZ_free(uint32_t
                LDKPrivateRoute _res_conv_14_conv;
                _res_conv_14_conv.inner = (void*)(_res_conv_14 & (~1));
                _res_conv_14_conv.is_owned = (_res_conv_14 & 1) || (_res_conv_14 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_14_conv);
                _res_constr.data[o] = _res_conv_14_conv;
        }
        CVec_PrivateRouteZ_free(_res_constr);
@@ -11162,6 +11994,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_PositiveTimestampCre
        LDKPositiveTimestamp o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = PositiveTimestamp_clone(&o_conv);
        LDKCResult_PositiveTimestampCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PositiveTimestampCreationErrorZ), "LDKCResult_PositiveTimestampCreationErrorZ");
        *ret_conv = CResult_PositiveTimestampCreationErrorZ_ok(o_conv);
@@ -11175,6 +12008,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_PositiveTimestampCre
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_PositiveTimestampCreationErrorZ_is_ok(uint32_t o) {
+       LDKCResult_PositiveTimestampCreationErrorZ* o_conv = (LDKCResult_PositiveTimestampCreationErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_PositiveTimestampCreationErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_PositiveTimestampCreationErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -11184,6 +12023,17 @@ void  __attribute__((visibility("default"))) TS_CResult_PositiveTimestampCreatio
        CResult_PositiveTimestampCreationErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_PositiveTimestampCreationErrorZ_clone_ptr(LDKCResult_PositiveTimestampCreationErrorZ *NONNULL_PTR arg) {
+       LDKCResult_PositiveTimestampCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PositiveTimestampCreationErrorZ), "LDKCResult_PositiveTimestampCreationErrorZ");
+       *ret_conv = CResult_PositiveTimestampCreationErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_PositiveTimestampCreationErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_PositiveTimestampCreationErrorZ* arg_conv = (LDKCResult_PositiveTimestampCreationErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_PositiveTimestampCreationErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_PositiveTimestampCreationErrorZ_clone(uint32_t orig) {
        LDKCResult_PositiveTimestampCreationErrorZ* orig_conv = (LDKCResult_PositiveTimestampCreationErrorZ*)(orig & ~1);
        LDKCResult_PositiveTimestampCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PositiveTimestampCreationErrorZ), "LDKCResult_PositiveTimestampCreationErrorZ");
@@ -11204,6 +12054,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_NoneSemanticErrorZ_e
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_NoneSemanticErrorZ_is_ok(uint32_t o) {
+       LDKCResult_NoneSemanticErrorZ* o_conv = (LDKCResult_NoneSemanticErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_NoneSemanticErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_NoneSemanticErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -11213,6 +12069,17 @@ void  __attribute__((visibility("default"))) TS_CResult_NoneSemanticErrorZ_free(
        CResult_NoneSemanticErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_NoneSemanticErrorZ_clone_ptr(LDKCResult_NoneSemanticErrorZ *NONNULL_PTR arg) {
+       LDKCResult_NoneSemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneSemanticErrorZ), "LDKCResult_NoneSemanticErrorZ");
+       *ret_conv = CResult_NoneSemanticErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_NoneSemanticErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_NoneSemanticErrorZ* arg_conv = (LDKCResult_NoneSemanticErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_NoneSemanticErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_NoneSemanticErrorZ_clone(uint32_t orig) {
        LDKCResult_NoneSemanticErrorZ* orig_conv = (LDKCResult_NoneSemanticErrorZ*)(orig & ~1);
        LDKCResult_NoneSemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneSemanticErrorZ), "LDKCResult_NoneSemanticErrorZ");
@@ -11224,6 +12091,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_InvoiceSemanticError
        LDKInvoice o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = Invoice_clone(&o_conv);
        LDKCResult_InvoiceSemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceSemanticErrorZ), "LDKCResult_InvoiceSemanticErrorZ");
        *ret_conv = CResult_InvoiceSemanticErrorZ_ok(o_conv);
@@ -11237,6 +12105,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_InvoiceSemanticError
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_InvoiceSemanticErrorZ_is_ok(uint32_t o) {
+       LDKCResult_InvoiceSemanticErrorZ* o_conv = (LDKCResult_InvoiceSemanticErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_InvoiceSemanticErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_InvoiceSemanticErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -11246,6 +12120,17 @@ void  __attribute__((visibility("default"))) TS_CResult_InvoiceSemanticErrorZ_fr
        CResult_InvoiceSemanticErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_InvoiceSemanticErrorZ_clone_ptr(LDKCResult_InvoiceSemanticErrorZ *NONNULL_PTR arg) {
+       LDKCResult_InvoiceSemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceSemanticErrorZ), "LDKCResult_InvoiceSemanticErrorZ");
+       *ret_conv = CResult_InvoiceSemanticErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_InvoiceSemanticErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_InvoiceSemanticErrorZ* arg_conv = (LDKCResult_InvoiceSemanticErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_InvoiceSemanticErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_InvoiceSemanticErrorZ_clone(uint32_t orig) {
        LDKCResult_InvoiceSemanticErrorZ* orig_conv = (LDKCResult_InvoiceSemanticErrorZ*)(orig & ~1);
        LDKCResult_InvoiceSemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceSemanticErrorZ), "LDKCResult_InvoiceSemanticErrorZ");
@@ -11257,6 +12142,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_DescriptionCreationE
        LDKDescription o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = Description_clone(&o_conv);
        LDKCResult_DescriptionCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_DescriptionCreationErrorZ), "LDKCResult_DescriptionCreationErrorZ");
        *ret_conv = CResult_DescriptionCreationErrorZ_ok(o_conv);
@@ -11270,6 +12156,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_DescriptionCreationE
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_DescriptionCreationErrorZ_is_ok(uint32_t o) {
+       LDKCResult_DescriptionCreationErrorZ* o_conv = (LDKCResult_DescriptionCreationErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_DescriptionCreationErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_DescriptionCreationErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -11279,6 +12171,17 @@ void  __attribute__((visibility("default"))) TS_CResult_DescriptionCreationError
        CResult_DescriptionCreationErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_DescriptionCreationErrorZ_clone_ptr(LDKCResult_DescriptionCreationErrorZ *NONNULL_PTR arg) {
+       LDKCResult_DescriptionCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_DescriptionCreationErrorZ), "LDKCResult_DescriptionCreationErrorZ");
+       *ret_conv = CResult_DescriptionCreationErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_DescriptionCreationErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_DescriptionCreationErrorZ* arg_conv = (LDKCResult_DescriptionCreationErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_DescriptionCreationErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_DescriptionCreationErrorZ_clone(uint32_t orig) {
        LDKCResult_DescriptionCreationErrorZ* orig_conv = (LDKCResult_DescriptionCreationErrorZ*)(orig & ~1);
        LDKCResult_DescriptionCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_DescriptionCreationErrorZ), "LDKCResult_DescriptionCreationErrorZ");
@@ -11290,6 +12193,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ExpiryTimeCreationEr
        LDKExpiryTime o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ExpiryTime_clone(&o_conv);
        LDKCResult_ExpiryTimeCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ExpiryTimeCreationErrorZ), "LDKCResult_ExpiryTimeCreationErrorZ");
        *ret_conv = CResult_ExpiryTimeCreationErrorZ_ok(o_conv);
@@ -11303,6 +12207,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ExpiryTimeCreationEr
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_ExpiryTimeCreationErrorZ_is_ok(uint32_t o) {
+       LDKCResult_ExpiryTimeCreationErrorZ* o_conv = (LDKCResult_ExpiryTimeCreationErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ExpiryTimeCreationErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_ExpiryTimeCreationErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -11312,6 +12222,17 @@ void  __attribute__((visibility("default"))) TS_CResult_ExpiryTimeCreationErrorZ
        CResult_ExpiryTimeCreationErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ExpiryTimeCreationErrorZ_clone_ptr(LDKCResult_ExpiryTimeCreationErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ExpiryTimeCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ExpiryTimeCreationErrorZ), "LDKCResult_ExpiryTimeCreationErrorZ");
+       *ret_conv = CResult_ExpiryTimeCreationErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_ExpiryTimeCreationErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_ExpiryTimeCreationErrorZ* arg_conv = (LDKCResult_ExpiryTimeCreationErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ExpiryTimeCreationErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_ExpiryTimeCreationErrorZ_clone(uint32_t orig) {
        LDKCResult_ExpiryTimeCreationErrorZ* orig_conv = (LDKCResult_ExpiryTimeCreationErrorZ*)(orig & ~1);
        LDKCResult_ExpiryTimeCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ExpiryTimeCreationErrorZ), "LDKCResult_ExpiryTimeCreationErrorZ");
@@ -11323,6 +12244,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_PrivateRouteCreation
        LDKPrivateRoute o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = PrivateRoute_clone(&o_conv);
        LDKCResult_PrivateRouteCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PrivateRouteCreationErrorZ), "LDKCResult_PrivateRouteCreationErrorZ");
        *ret_conv = CResult_PrivateRouteCreationErrorZ_ok(o_conv);
@@ -11336,6 +12258,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_PrivateRouteCreation
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_PrivateRouteCreationErrorZ_is_ok(uint32_t o) {
+       LDKCResult_PrivateRouteCreationErrorZ* o_conv = (LDKCResult_PrivateRouteCreationErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_PrivateRouteCreationErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_PrivateRouteCreationErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -11345,6 +12273,17 @@ void  __attribute__((visibility("default"))) TS_CResult_PrivateRouteCreationErro
        CResult_PrivateRouteCreationErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_PrivateRouteCreationErrorZ_clone_ptr(LDKCResult_PrivateRouteCreationErrorZ *NONNULL_PTR arg) {
+       LDKCResult_PrivateRouteCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PrivateRouteCreationErrorZ), "LDKCResult_PrivateRouteCreationErrorZ");
+       *ret_conv = CResult_PrivateRouteCreationErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_PrivateRouteCreationErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_PrivateRouteCreationErrorZ* arg_conv = (LDKCResult_PrivateRouteCreationErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_PrivateRouteCreationErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_PrivateRouteCreationErrorZ_clone(uint32_t orig) {
        LDKCResult_PrivateRouteCreationErrorZ* orig_conv = (LDKCResult_PrivateRouteCreationErrorZ*)(orig & ~1);
        LDKCResult_PrivateRouteCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PrivateRouteCreationErrorZ), "LDKCResult_PrivateRouteCreationErrorZ");
@@ -11366,6 +12305,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_StringErrorZ_err(uin
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_StringErrorZ_is_ok(uint32_t o) {
+       LDKCResult_StringErrorZ* o_conv = (LDKCResult_StringErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_StringErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_StringErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -11379,6 +12324,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ChannelMonitorUpdate
        LDKChannelMonitorUpdate o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ChannelMonitorUpdate_clone(&o_conv);
        LDKCResult_ChannelMonitorUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelMonitorUpdateDecodeErrorZ), "LDKCResult_ChannelMonitorUpdateDecodeErrorZ");
        *ret_conv = CResult_ChannelMonitorUpdateDecodeErrorZ_ok(o_conv);
@@ -11389,12 +12335,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ChannelMonitorUpdate
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ChannelMonitorUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelMonitorUpdateDecodeErrorZ), "LDKCResult_ChannelMonitorUpdateDecodeErrorZ");
        *ret_conv = CResult_ChannelMonitorUpdateDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_ChannelMonitorUpdateDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_ChannelMonitorUpdateDecodeErrorZ* o_conv = (LDKCResult_ChannelMonitorUpdateDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ChannelMonitorUpdateDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_ChannelMonitorUpdateDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -11404,6 +12357,17 @@ void  __attribute__((visibility("default"))) TS_CResult_ChannelMonitorUpdateDeco
        CResult_ChannelMonitorUpdateDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ChannelMonitorUpdateDecodeErrorZ_clone_ptr(LDKCResult_ChannelMonitorUpdateDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ChannelMonitorUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelMonitorUpdateDecodeErrorZ), "LDKCResult_ChannelMonitorUpdateDecodeErrorZ");
+       *ret_conv = CResult_ChannelMonitorUpdateDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_ChannelMonitorUpdateDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_ChannelMonitorUpdateDecodeErrorZ* arg_conv = (LDKCResult_ChannelMonitorUpdateDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ChannelMonitorUpdateDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_ChannelMonitorUpdateDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_ChannelMonitorUpdateDecodeErrorZ* orig_conv = (LDKCResult_ChannelMonitorUpdateDecodeErrorZ*)(orig & ~1);
        LDKCResult_ChannelMonitorUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelMonitorUpdateDecodeErrorZ), "LDKCResult_ChannelMonitorUpdateDecodeErrorZ");
@@ -11411,10 +12375,112 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ChannelMonitorUpdate
        return (uint64_t)ret_conv;
 }
 
+uint32_t  __attribute__((visibility("default"))) TS_COption_MonitorEventZ_some(uint32_t o) {
+       void* o_ptr = (void*)(((uint64_t)o) & ~1);
+       CHECK_ACCESS(o_ptr);
+       LDKMonitorEvent o_conv = *(LDKMonitorEvent*)(o_ptr);
+       o_conv = MonitorEvent_clone((LDKMonitorEvent*)(((uint64_t)o) & ~1));
+       LDKCOption_MonitorEventZ *ret_copy = MALLOC(sizeof(LDKCOption_MonitorEventZ), "LDKCOption_MonitorEventZ");
+       *ret_copy = COption_MonitorEventZ_some(o_conv);
+       uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+
+uint32_t  __attribute__((visibility("default"))) TS_COption_MonitorEventZ_none() {
+       LDKCOption_MonitorEventZ *ret_copy = MALLOC(sizeof(LDKCOption_MonitorEventZ), "LDKCOption_MonitorEventZ");
+       *ret_copy = COption_MonitorEventZ_none();
+       uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+
+void  __attribute__((visibility("default"))) TS_COption_MonitorEventZ_free(uint32_t _res) {
+       if ((_res & 1) != 0) return;
+       void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
+       CHECK_ACCESS(_res_ptr);
+       LDKCOption_MonitorEventZ _res_conv = *(LDKCOption_MonitorEventZ*)(_res_ptr);
+       FREE((void*)_res);
+       COption_MonitorEventZ_free(_res_conv);
+}
+
+static inline uint64_t COption_MonitorEventZ_clone_ptr(LDKCOption_MonitorEventZ *NONNULL_PTR arg) {
+       LDKCOption_MonitorEventZ *ret_copy = MALLOC(sizeof(LDKCOption_MonitorEventZ), "LDKCOption_MonitorEventZ");
+       *ret_copy = COption_MonitorEventZ_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_COption_MonitorEventZ_clone_ptr(uint32_t arg) {
+       LDKCOption_MonitorEventZ* arg_conv = (LDKCOption_MonitorEventZ*)arg;
+       int64_t ret_val = COption_MonitorEventZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
+uint32_t  __attribute__((visibility("default"))) TS_COption_MonitorEventZ_clone(uint32_t orig) {
+       LDKCOption_MonitorEventZ* orig_conv = (LDKCOption_MonitorEventZ*)orig;
+       LDKCOption_MonitorEventZ *ret_copy = MALLOC(sizeof(LDKCOption_MonitorEventZ), "LDKCOption_MonitorEventZ");
+       *ret_copy = COption_MonitorEventZ_clone(orig_conv);
+       uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+
+uint32_t  __attribute__((visibility("default"))) TS_CResult_COption_MonitorEventZDecodeErrorZ_ok(uint32_t o) {
+       void* o_ptr = (void*)(((uint64_t)o) & ~1);
+       CHECK_ACCESS(o_ptr);
+       LDKCOption_MonitorEventZ o_conv = *(LDKCOption_MonitorEventZ*)(o_ptr);
+       o_conv = COption_MonitorEventZ_clone((LDKCOption_MonitorEventZ*)(((uint64_t)o) & ~1));
+       LDKCResult_COption_MonitorEventZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_MonitorEventZDecodeErrorZ), "LDKCResult_COption_MonitorEventZDecodeErrorZ");
+       *ret_conv = CResult_COption_MonitorEventZDecodeErrorZ_ok(o_conv);
+       return (uint64_t)ret_conv;
+}
+
+uint32_t  __attribute__((visibility("default"))) TS_CResult_COption_MonitorEventZDecodeErrorZ_err(uint32_t e) {
+       LDKDecodeError e_conv;
+       e_conv.inner = (void*)(e & (~1));
+       e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
+       e_conv = DecodeError_clone(&e_conv);
+       LDKCResult_COption_MonitorEventZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_MonitorEventZDecodeErrorZ), "LDKCResult_COption_MonitorEventZDecodeErrorZ");
+       *ret_conv = CResult_COption_MonitorEventZDecodeErrorZ_err(e_conv);
+       return (uint64_t)ret_conv;
+}
+
+jboolean  __attribute__((visibility("default"))) TS_CResult_COption_MonitorEventZDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_COption_MonitorEventZDecodeErrorZ* o_conv = (LDKCResult_COption_MonitorEventZDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_COption_MonitorEventZDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
+void  __attribute__((visibility("default"))) TS_CResult_COption_MonitorEventZDecodeErrorZ_free(uint32_t _res) {
+       if ((_res & 1) != 0) return;
+       void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_COption_MonitorEventZDecodeErrorZ _res_conv = *(LDKCResult_COption_MonitorEventZDecodeErrorZ*)(_res_ptr);
+       FREE((void*)_res);
+       CResult_COption_MonitorEventZDecodeErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_COption_MonitorEventZDecodeErrorZ_clone_ptr(LDKCResult_COption_MonitorEventZDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_COption_MonitorEventZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_MonitorEventZDecodeErrorZ), "LDKCResult_COption_MonitorEventZDecodeErrorZ");
+       *ret_conv = CResult_COption_MonitorEventZDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_COption_MonitorEventZDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_COption_MonitorEventZDecodeErrorZ* arg_conv = (LDKCResult_COption_MonitorEventZDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_COption_MonitorEventZDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
+uint32_t  __attribute__((visibility("default"))) TS_CResult_COption_MonitorEventZDecodeErrorZ_clone(uint32_t orig) {
+       LDKCResult_COption_MonitorEventZDecodeErrorZ* orig_conv = (LDKCResult_COption_MonitorEventZDecodeErrorZ*)(orig & ~1);
+       LDKCResult_COption_MonitorEventZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_MonitorEventZDecodeErrorZ), "LDKCResult_COption_MonitorEventZDecodeErrorZ");
+       *ret_conv = CResult_COption_MonitorEventZDecodeErrorZ_clone(orig_conv);
+       return (uint64_t)ret_conv;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_HTLCUpdateDecodeErrorZ_ok(uint32_t o) {
        LDKHTLCUpdate o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = HTLCUpdate_clone(&o_conv);
        LDKCResult_HTLCUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HTLCUpdateDecodeErrorZ), "LDKCResult_HTLCUpdateDecodeErrorZ");
        *ret_conv = CResult_HTLCUpdateDecodeErrorZ_ok(o_conv);
@@ -11425,12 +12491,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_HTLCUpdateDecodeErro
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_HTLCUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HTLCUpdateDecodeErrorZ), "LDKCResult_HTLCUpdateDecodeErrorZ");
        *ret_conv = CResult_HTLCUpdateDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_HTLCUpdateDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_HTLCUpdateDecodeErrorZ* o_conv = (LDKCResult_HTLCUpdateDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_HTLCUpdateDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_HTLCUpdateDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -11440,6 +12513,17 @@ void  __attribute__((visibility("default"))) TS_CResult_HTLCUpdateDecodeErrorZ_f
        CResult_HTLCUpdateDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_HTLCUpdateDecodeErrorZ_clone_ptr(LDKCResult_HTLCUpdateDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_HTLCUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HTLCUpdateDecodeErrorZ), "LDKCResult_HTLCUpdateDecodeErrorZ");
+       *ret_conv = CResult_HTLCUpdateDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_HTLCUpdateDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_HTLCUpdateDecodeErrorZ* arg_conv = (LDKCResult_HTLCUpdateDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_HTLCUpdateDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_HTLCUpdateDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_HTLCUpdateDecodeErrorZ* orig_conv = (LDKCResult_HTLCUpdateDecodeErrorZ*)(orig & ~1);
        LDKCResult_HTLCUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_HTLCUpdateDecodeErrorZ), "LDKCResult_HTLCUpdateDecodeErrorZ");
@@ -11457,12 +12541,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_NoneMonitorUpdateErr
        LDKMonitorUpdateError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = MonitorUpdateError_clone(&e_conv);
        LDKCResult_NoneMonitorUpdateErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneMonitorUpdateErrorZ), "LDKCResult_NoneMonitorUpdateErrorZ");
        *ret_conv = CResult_NoneMonitorUpdateErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_NoneMonitorUpdateErrorZ_is_ok(uint32_t o) {
+       LDKCResult_NoneMonitorUpdateErrorZ* o_conv = (LDKCResult_NoneMonitorUpdateErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_NoneMonitorUpdateErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_NoneMonitorUpdateErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -11472,6 +12563,17 @@ void  __attribute__((visibility("default"))) TS_CResult_NoneMonitorUpdateErrorZ_
        CResult_NoneMonitorUpdateErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_NoneMonitorUpdateErrorZ_clone_ptr(LDKCResult_NoneMonitorUpdateErrorZ *NONNULL_PTR arg) {
+       LDKCResult_NoneMonitorUpdateErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneMonitorUpdateErrorZ), "LDKCResult_NoneMonitorUpdateErrorZ");
+       *ret_conv = CResult_NoneMonitorUpdateErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_NoneMonitorUpdateErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_NoneMonitorUpdateErrorZ* arg_conv = (LDKCResult_NoneMonitorUpdateErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_NoneMonitorUpdateErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_NoneMonitorUpdateErrorZ_clone(uint32_t orig) {
        LDKCResult_NoneMonitorUpdateErrorZ* orig_conv = (LDKCResult_NoneMonitorUpdateErrorZ*)(orig & ~1);
        LDKCResult_NoneMonitorUpdateErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneMonitorUpdateErrorZ), "LDKCResult_NoneMonitorUpdateErrorZ");
@@ -11479,6 +12581,17 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_NoneMonitorUpdateErr
        return (uint64_t)ret_conv;
 }
 
+static inline uint64_t C2Tuple_OutPointScriptZ_clone_ptr(LDKC2Tuple_OutPointScriptZ *NONNULL_PTR arg) {
+       LDKC2Tuple_OutPointScriptZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OutPointScriptZ), "LDKC2Tuple_OutPointScriptZ");
+       *ret_conv = C2Tuple_OutPointScriptZ_clone(arg);
+       return ((uint64_t)ret_conv);
+}
+int64_t  __attribute__((visibility("default"))) TS_C2Tuple_OutPointScriptZ_clone_ptr(uint32_t arg) {
+       LDKC2Tuple_OutPointScriptZ* arg_conv = (LDKC2Tuple_OutPointScriptZ*)(arg & ~1);
+       int64_t ret_val = C2Tuple_OutPointScriptZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_C2Tuple_OutPointScriptZ_clone(uint32_t orig) {
        LDKC2Tuple_OutPointScriptZ* orig_conv = (LDKC2Tuple_OutPointScriptZ*)(orig & ~1);
        LDKC2Tuple_OutPointScriptZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OutPointScriptZ), "LDKC2Tuple_OutPointScriptZ");
@@ -11490,6 +12603,7 @@ uint32_t  __attribute__((visibility("default"))) TS_C2Tuple_OutPointScriptZ_new(
        LDKOutPoint a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = (a & 1) || (a == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv = OutPoint_clone(&a_conv);
        LDKCVec_u8Z b_ref;
        b_ref.datalen = *((uint32_t*)b);
@@ -11509,6 +12623,17 @@ void  __attribute__((visibility("default"))) TS_C2Tuple_OutPointScriptZ_free(uin
        C2Tuple_OutPointScriptZ_free(_res_conv);
 }
 
+static inline uint64_t C2Tuple_u32ScriptZ_clone_ptr(LDKC2Tuple_u32ScriptZ *NONNULL_PTR arg) {
+       LDKC2Tuple_u32ScriptZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_u32ScriptZ), "LDKC2Tuple_u32ScriptZ");
+       *ret_conv = C2Tuple_u32ScriptZ_clone(arg);
+       return ((uint64_t)ret_conv);
+}
+int64_t  __attribute__((visibility("default"))) TS_C2Tuple_u32ScriptZ_clone_ptr(uint32_t arg) {
+       LDKC2Tuple_u32ScriptZ* arg_conv = (LDKC2Tuple_u32ScriptZ*)(arg & ~1);
+       int64_t ret_val = C2Tuple_u32ScriptZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_C2Tuple_u32ScriptZ_clone(uint32_t orig) {
        LDKC2Tuple_u32ScriptZ* orig_conv = (LDKC2Tuple_u32ScriptZ*)(orig & ~1);
        LDKC2Tuple_u32ScriptZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_u32ScriptZ), "LDKC2Tuple_u32ScriptZ");
@@ -11554,6 +12679,17 @@ void  __attribute__((visibility("default"))) TS_CVec_C2Tuple_u32ScriptZZ_free(ui
        CVec_C2Tuple_u32ScriptZZ_free(_res_constr);
 }
 
+static inline uint64_t C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_clone_ptr(LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ *NONNULL_PTR arg) {
+       LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ), "LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ");
+       *ret_conv = C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_clone(arg);
+       return ((uint64_t)ret_conv);
+}
+int64_t  __attribute__((visibility("default"))) TS_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_clone_ptr(uint32_t arg) {
+       LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ* arg_conv = (LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ*)(arg & ~1);
+       int64_t ret_val = C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_clone(uint32_t orig) {
        LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ* orig_conv = (LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ*)(orig & ~1);
        LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ), "LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ");
@@ -11652,6 +12788,17 @@ void  __attribute__((visibility("default"))) TS_CVec_TransactionZ_free(ptrArray
        CVec_TransactionZ_free(_res_constr);
 }
 
+static inline uint64_t C2Tuple_u32TxOutZ_clone_ptr(LDKC2Tuple_u32TxOutZ *NONNULL_PTR arg) {
+       LDKC2Tuple_u32TxOutZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_u32TxOutZ), "LDKC2Tuple_u32TxOutZ");
+       *ret_conv = C2Tuple_u32TxOutZ_clone(arg);
+       return ((uint64_t)ret_conv);
+}
+int64_t  __attribute__((visibility("default"))) TS_C2Tuple_u32TxOutZ_clone_ptr(uint32_t arg) {
+       LDKC2Tuple_u32TxOutZ* arg_conv = (LDKC2Tuple_u32TxOutZ*)(arg & ~1);
+       int64_t ret_val = C2Tuple_u32TxOutZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_C2Tuple_u32TxOutZ_clone(uint32_t orig) {
        LDKC2Tuple_u32TxOutZ* orig_conv = (LDKC2Tuple_u32TxOutZ*)(orig & ~1);
        LDKC2Tuple_u32TxOutZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_u32TxOutZ), "LDKC2Tuple_u32TxOutZ");
@@ -11697,6 +12844,17 @@ void  __attribute__((visibility("default"))) TS_CVec_C2Tuple_u32TxOutZZ_free(uin
        CVec_C2Tuple_u32TxOutZZ_free(_res_constr);
 }
 
+static inline uint64_t C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_clone_ptr(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ *NONNULL_PTR arg) {
+       LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ), "LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ");
+       *ret_conv = C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_clone(arg);
+       return ((uint64_t)ret_conv);
+}
+int64_t  __attribute__((visibility("default"))) TS_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_clone_ptr(uint32_t arg) {
+       LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ* arg_conv = (LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ*)(arg & ~1);
+       int64_t ret_val = C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_clone(uint32_t orig) {
        LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ* orig_conv = (LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ*)(orig & ~1);
        LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ), "LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ");
@@ -11789,12 +12947,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_C2Tuple_BlockHashCha
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ), "LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ");
        *ret_conv = CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ* o_conv = (LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -11804,6 +12969,17 @@ void  __attribute__((visibility("default"))) TS_CResult_C2Tuple_BlockHashChannel
        CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_clone_ptr(LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ), "LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ");
+       *ret_conv = CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ* arg_conv = (LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ* orig_conv = (LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ*)(orig & ~1);
        LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ), "LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ");
@@ -11821,12 +12997,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_NoneLightningErrorZ_
        LDKLightningError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = LightningError_clone(&e_conv);
        LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
        *ret_conv = CResult_NoneLightningErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_NoneLightningErrorZ_is_ok(uint32_t o) {
+       LDKCResult_NoneLightningErrorZ* o_conv = (LDKCResult_NoneLightningErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_NoneLightningErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_NoneLightningErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -11836,6 +13019,17 @@ void  __attribute__((visibility("default"))) TS_CResult_NoneLightningErrorZ_free
        CResult_NoneLightningErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_NoneLightningErrorZ_clone_ptr(LDKCResult_NoneLightningErrorZ *NONNULL_PTR arg) {
+       LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
+       *ret_conv = CResult_NoneLightningErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_NoneLightningErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_NoneLightningErrorZ* arg_conv = (LDKCResult_NoneLightningErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_NoneLightningErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_NoneLightningErrorZ_clone(uint32_t orig) {
        LDKCResult_NoneLightningErrorZ* orig_conv = (LDKCResult_NoneLightningErrorZ*)(orig & ~1);
        LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
@@ -11843,6 +13037,17 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_NoneLightningErrorZ_
        return (uint64_t)ret_conv;
 }
 
+static inline uint64_t C2Tuple_PublicKeyTypeZ_clone_ptr(LDKC2Tuple_PublicKeyTypeZ *NONNULL_PTR arg) {
+       LDKC2Tuple_PublicKeyTypeZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PublicKeyTypeZ), "LDKC2Tuple_PublicKeyTypeZ");
+       *ret_conv = C2Tuple_PublicKeyTypeZ_clone(arg);
+       return ((uint64_t)ret_conv);
+}
+int64_t  __attribute__((visibility("default"))) TS_C2Tuple_PublicKeyTypeZ_clone_ptr(uint32_t arg) {
+       LDKC2Tuple_PublicKeyTypeZ* arg_conv = (LDKC2Tuple_PublicKeyTypeZ*)(arg & ~1);
+       int64_t ret_val = C2Tuple_PublicKeyTypeZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_C2Tuple_PublicKeyTypeZ_clone(uint32_t orig) {
        LDKC2Tuple_PublicKeyTypeZ* orig_conv = (LDKC2Tuple_PublicKeyTypeZ*)(orig & ~1);
        LDKC2Tuple_PublicKeyTypeZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_PublicKeyTypeZ), "LDKC2Tuple_PublicKeyTypeZ");
@@ -11900,12 +13105,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_boolLightningErrorZ_
        LDKLightningError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = LightningError_clone(&e_conv);
        LDKCResult_boolLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_boolLightningErrorZ), "LDKCResult_boolLightningErrorZ");
        *ret_conv = CResult_boolLightningErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_boolLightningErrorZ_is_ok(uint32_t o) {
+       LDKCResult_boolLightningErrorZ* o_conv = (LDKCResult_boolLightningErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_boolLightningErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_boolLightningErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -11915,6 +13127,17 @@ void  __attribute__((visibility("default"))) TS_CResult_boolLightningErrorZ_free
        CResult_boolLightningErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_boolLightningErrorZ_clone_ptr(LDKCResult_boolLightningErrorZ *NONNULL_PTR arg) {
+       LDKCResult_boolLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_boolLightningErrorZ), "LDKCResult_boolLightningErrorZ");
+       *ret_conv = CResult_boolLightningErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_boolLightningErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_boolLightningErrorZ* arg_conv = (LDKCResult_boolLightningErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_boolLightningErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_boolLightningErrorZ_clone(uint32_t orig) {
        LDKCResult_boolLightningErrorZ* orig_conv = (LDKCResult_boolLightningErrorZ*)(orig & ~1);
        LDKCResult_boolLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_boolLightningErrorZ), "LDKCResult_boolLightningErrorZ");
@@ -11922,6 +13145,17 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_boolLightningErrorZ_
        return (uint64_t)ret_conv;
 }
 
+static inline uint64_t C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_clone_ptr(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ *NONNULL_PTR arg) {
+       LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ* ret_conv = MALLOC(sizeof(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ), "LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ");
+       *ret_conv = C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_clone(arg);
+       return ((uint64_t)ret_conv);
+}
+int64_t  __attribute__((visibility("default"))) TS_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_clone_ptr(uint32_t arg) {
+       LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ* arg_conv = (LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ*)(arg & ~1);
+       int64_t ret_val = C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_clone(uint32_t orig) {
        LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ* orig_conv = (LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ*)(orig & ~1);
        LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ* ret_conv = MALLOC(sizeof(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ), "LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ");
@@ -11933,14 +13167,17 @@ uint32_t  __attribute__((visibility("default"))) TS_C3Tuple_ChannelAnnouncementC
        LDKChannelAnnouncement a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = (a & 1) || (a == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv = ChannelAnnouncement_clone(&a_conv);
        LDKChannelUpdate b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = (b & 1) || (b == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        b_conv = ChannelUpdate_clone(&b_conv);
        LDKChannelUpdate c_conv;
        c_conv.inner = (void*)(c & (~1));
        c_conv.is_owned = (c & 1) || (c == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(c_conv);
        c_conv = ChannelUpdate_clone(&c_conv);
        LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ* ret_conv = MALLOC(sizeof(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ), "LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ");
        *ret_conv = C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_new(a_conv, b_conv, c_conv);
@@ -11988,6 +13225,7 @@ void  __attribute__((visibility("default"))) TS_CVec_NodeAnnouncementZ_free(uint
                LDKNodeAnnouncement _res_conv_18_conv;
                _res_conv_18_conv.inner = (void*)(_res_conv_18 & (~1));
                _res_conv_18_conv.is_owned = (_res_conv_18 & 1) || (_res_conv_18 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_18_conv);
                _res_constr.data[s] = _res_conv_18_conv;
        }
        CVec_NodeAnnouncementZ_free(_res_constr);
@@ -12025,12 +13263,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_CVec_u8ZPeerHandleEr
        LDKPeerHandleError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = PeerHandleError_clone(&e_conv);
        LDKCResult_CVec_u8ZPeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_u8ZPeerHandleErrorZ), "LDKCResult_CVec_u8ZPeerHandleErrorZ");
        *ret_conv = CResult_CVec_u8ZPeerHandleErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_CVec_u8ZPeerHandleErrorZ_is_ok(uint32_t o) {
+       LDKCResult_CVec_u8ZPeerHandleErrorZ* o_conv = (LDKCResult_CVec_u8ZPeerHandleErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_CVec_u8ZPeerHandleErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_CVec_u8ZPeerHandleErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12040,6 +13285,17 @@ void  __attribute__((visibility("default"))) TS_CResult_CVec_u8ZPeerHandleErrorZ
        CResult_CVec_u8ZPeerHandleErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_CVec_u8ZPeerHandleErrorZ_clone_ptr(LDKCResult_CVec_u8ZPeerHandleErrorZ *NONNULL_PTR arg) {
+       LDKCResult_CVec_u8ZPeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_u8ZPeerHandleErrorZ), "LDKCResult_CVec_u8ZPeerHandleErrorZ");
+       *ret_conv = CResult_CVec_u8ZPeerHandleErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_CVec_u8ZPeerHandleErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_CVec_u8ZPeerHandleErrorZ* arg_conv = (LDKCResult_CVec_u8ZPeerHandleErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_CVec_u8ZPeerHandleErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_CVec_u8ZPeerHandleErrorZ_clone(uint32_t orig) {
        LDKCResult_CVec_u8ZPeerHandleErrorZ* orig_conv = (LDKCResult_CVec_u8ZPeerHandleErrorZ*)(orig & ~1);
        LDKCResult_CVec_u8ZPeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_u8ZPeerHandleErrorZ), "LDKCResult_CVec_u8ZPeerHandleErrorZ");
@@ -12057,12 +13313,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_NonePeerHandleErrorZ
        LDKPeerHandleError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = PeerHandleError_clone(&e_conv);
        LDKCResult_NonePeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NonePeerHandleErrorZ), "LDKCResult_NonePeerHandleErrorZ");
        *ret_conv = CResult_NonePeerHandleErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_NonePeerHandleErrorZ_is_ok(uint32_t o) {
+       LDKCResult_NonePeerHandleErrorZ* o_conv = (LDKCResult_NonePeerHandleErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_NonePeerHandleErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_NonePeerHandleErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12072,6 +13335,17 @@ void  __attribute__((visibility("default"))) TS_CResult_NonePeerHandleErrorZ_fre
        CResult_NonePeerHandleErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_NonePeerHandleErrorZ_clone_ptr(LDKCResult_NonePeerHandleErrorZ *NONNULL_PTR arg) {
+       LDKCResult_NonePeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NonePeerHandleErrorZ), "LDKCResult_NonePeerHandleErrorZ");
+       *ret_conv = CResult_NonePeerHandleErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_NonePeerHandleErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_NonePeerHandleErrorZ* arg_conv = (LDKCResult_NonePeerHandleErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_NonePeerHandleErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_NonePeerHandleErrorZ_clone(uint32_t orig) {
        LDKCResult_NonePeerHandleErrorZ* orig_conv = (LDKCResult_NonePeerHandleErrorZ*)(orig & ~1);
        LDKCResult_NonePeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NonePeerHandleErrorZ), "LDKCResult_NonePeerHandleErrorZ");
@@ -12089,12 +13363,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_boolPeerHandleErrorZ
        LDKPeerHandleError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = PeerHandleError_clone(&e_conv);
        LDKCResult_boolPeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_boolPeerHandleErrorZ), "LDKCResult_boolPeerHandleErrorZ");
        *ret_conv = CResult_boolPeerHandleErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_boolPeerHandleErrorZ_is_ok(uint32_t o) {
+       LDKCResult_boolPeerHandleErrorZ* o_conv = (LDKCResult_boolPeerHandleErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_boolPeerHandleErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_boolPeerHandleErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12104,6 +13385,17 @@ void  __attribute__((visibility("default"))) TS_CResult_boolPeerHandleErrorZ_fre
        CResult_boolPeerHandleErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_boolPeerHandleErrorZ_clone_ptr(LDKCResult_boolPeerHandleErrorZ *NONNULL_PTR arg) {
+       LDKCResult_boolPeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_boolPeerHandleErrorZ), "LDKCResult_boolPeerHandleErrorZ");
+       *ret_conv = CResult_boolPeerHandleErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_boolPeerHandleErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_boolPeerHandleErrorZ* arg_conv = (LDKCResult_boolPeerHandleErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_boolPeerHandleErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_boolPeerHandleErrorZ_clone(uint32_t orig) {
        LDKCResult_boolPeerHandleErrorZ* orig_conv = (LDKCResult_boolPeerHandleErrorZ*)(orig & ~1);
        LDKCResult_boolPeerHandleErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_boolPeerHandleErrorZ), "LDKCResult_boolPeerHandleErrorZ");
@@ -12115,6 +13407,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_NodeIdDecodeErrorZ_o
        LDKNodeId o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = NodeId_clone(&o_conv);
        LDKCResult_NodeIdDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeIdDecodeErrorZ), "LDKCResult_NodeIdDecodeErrorZ");
        *ret_conv = CResult_NodeIdDecodeErrorZ_ok(o_conv);
@@ -12125,25 +13418,97 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_NodeIdDecodeErrorZ_e
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
+       e_conv = DecodeError_clone(&e_conv);
+       LDKCResult_NodeIdDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeIdDecodeErrorZ), "LDKCResult_NodeIdDecodeErrorZ");
+       *ret_conv = CResult_NodeIdDecodeErrorZ_err(e_conv);
+       return (uint64_t)ret_conv;
+}
+
+jboolean  __attribute__((visibility("default"))) TS_CResult_NodeIdDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_NodeIdDecodeErrorZ* o_conv = (LDKCResult_NodeIdDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_NodeIdDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
+void  __attribute__((visibility("default"))) TS_CResult_NodeIdDecodeErrorZ_free(uint32_t _res) {
+       if ((_res & 1) != 0) return;
+       void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
+       CHECK_ACCESS(_res_ptr);
+       LDKCResult_NodeIdDecodeErrorZ _res_conv = *(LDKCResult_NodeIdDecodeErrorZ*)(_res_ptr);
+       FREE((void*)_res);
+       CResult_NodeIdDecodeErrorZ_free(_res_conv);
+}
+
+static inline uint64_t CResult_NodeIdDecodeErrorZ_clone_ptr(LDKCResult_NodeIdDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_NodeIdDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeIdDecodeErrorZ), "LDKCResult_NodeIdDecodeErrorZ");
+       *ret_conv = CResult_NodeIdDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_NodeIdDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_NodeIdDecodeErrorZ* arg_conv = (LDKCResult_NodeIdDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_NodeIdDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
+uint32_t  __attribute__((visibility("default"))) TS_CResult_NodeIdDecodeErrorZ_clone(uint32_t orig) {
+       LDKCResult_NodeIdDecodeErrorZ* orig_conv = (LDKCResult_NodeIdDecodeErrorZ*)(orig & ~1);
+       LDKCResult_NodeIdDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeIdDecodeErrorZ), "LDKCResult_NodeIdDecodeErrorZ");
+       *ret_conv = CResult_NodeIdDecodeErrorZ_clone(orig_conv);
+       return (uint64_t)ret_conv;
+}
+
+uint32_t  __attribute__((visibility("default"))) TS_CResult_COption_NetworkUpdateZDecodeErrorZ_ok(uint32_t o) {
+       void* o_ptr = (void*)(((uint64_t)o) & ~1);
+       CHECK_ACCESS(o_ptr);
+       LDKCOption_NetworkUpdateZ o_conv = *(LDKCOption_NetworkUpdateZ*)(o_ptr);
+       o_conv = COption_NetworkUpdateZ_clone((LDKCOption_NetworkUpdateZ*)(((uint64_t)o) & ~1));
+       LDKCResult_COption_NetworkUpdateZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_NetworkUpdateZDecodeErrorZ), "LDKCResult_COption_NetworkUpdateZDecodeErrorZ");
+       *ret_conv = CResult_COption_NetworkUpdateZDecodeErrorZ_ok(o_conv);
+       return (uint64_t)ret_conv;
+}
+
+uint32_t  __attribute__((visibility("default"))) TS_CResult_COption_NetworkUpdateZDecodeErrorZ_err(uint32_t e) {
+       LDKDecodeError e_conv;
+       e_conv.inner = (void*)(e & (~1));
+       e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
-       LDKCResult_NodeIdDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeIdDecodeErrorZ), "LDKCResult_NodeIdDecodeErrorZ");
-       *ret_conv = CResult_NodeIdDecodeErrorZ_err(e_conv);
+       LDKCResult_COption_NetworkUpdateZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_NetworkUpdateZDecodeErrorZ), "LDKCResult_COption_NetworkUpdateZDecodeErrorZ");
+       *ret_conv = CResult_COption_NetworkUpdateZDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
-void  __attribute__((visibility("default"))) TS_CResult_NodeIdDecodeErrorZ_free(uint32_t _res) {
+jboolean  __attribute__((visibility("default"))) TS_CResult_COption_NetworkUpdateZDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_COption_NetworkUpdateZDecodeErrorZ* o_conv = (LDKCResult_COption_NetworkUpdateZDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_COption_NetworkUpdateZDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
+void  __attribute__((visibility("default"))) TS_CResult_COption_NetworkUpdateZDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
        CHECK_ACCESS(_res_ptr);
-       LDKCResult_NodeIdDecodeErrorZ _res_conv = *(LDKCResult_NodeIdDecodeErrorZ*)(_res_ptr);
+       LDKCResult_COption_NetworkUpdateZDecodeErrorZ _res_conv = *(LDKCResult_COption_NetworkUpdateZDecodeErrorZ*)(_res_ptr);
        FREE((void*)_res);
-       CResult_NodeIdDecodeErrorZ_free(_res_conv);
+       CResult_COption_NetworkUpdateZDecodeErrorZ_free(_res_conv);
 }
 
-uint32_t  __attribute__((visibility("default"))) TS_CResult_NodeIdDecodeErrorZ_clone(uint32_t orig) {
-       LDKCResult_NodeIdDecodeErrorZ* orig_conv = (LDKCResult_NodeIdDecodeErrorZ*)(orig & ~1);
-       LDKCResult_NodeIdDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeIdDecodeErrorZ), "LDKCResult_NodeIdDecodeErrorZ");
-       *ret_conv = CResult_NodeIdDecodeErrorZ_clone(orig_conv);
+static inline uint64_t CResult_COption_NetworkUpdateZDecodeErrorZ_clone_ptr(LDKCResult_COption_NetworkUpdateZDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_COption_NetworkUpdateZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_NetworkUpdateZDecodeErrorZ), "LDKCResult_COption_NetworkUpdateZDecodeErrorZ");
+       *ret_conv = CResult_COption_NetworkUpdateZDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_COption_NetworkUpdateZDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_COption_NetworkUpdateZDecodeErrorZ* arg_conv = (LDKCResult_COption_NetworkUpdateZDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_COption_NetworkUpdateZDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
+uint32_t  __attribute__((visibility("default"))) TS_CResult_COption_NetworkUpdateZDecodeErrorZ_clone(uint32_t orig) {
+       LDKCResult_COption_NetworkUpdateZDecodeErrorZ* orig_conv = (LDKCResult_COption_NetworkUpdateZDecodeErrorZ*)(orig & ~1);
+       LDKCResult_COption_NetworkUpdateZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_NetworkUpdateZDecodeErrorZ), "LDKCResult_COption_NetworkUpdateZDecodeErrorZ");
+       *ret_conv = CResult_COption_NetworkUpdateZDecodeErrorZ_clone(orig_conv);
        return (uint64_t)ret_conv;
 }
 
@@ -12177,6 +13542,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_DirectionalChannelIn
        LDKDirectionalChannelInfo o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = DirectionalChannelInfo_clone(&o_conv);
        LDKCResult_DirectionalChannelInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_DirectionalChannelInfoDecodeErrorZ), "LDKCResult_DirectionalChannelInfoDecodeErrorZ");
        *ret_conv = CResult_DirectionalChannelInfoDecodeErrorZ_ok(o_conv);
@@ -12187,12 +13553,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_DirectionalChannelIn
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_DirectionalChannelInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_DirectionalChannelInfoDecodeErrorZ), "LDKCResult_DirectionalChannelInfoDecodeErrorZ");
        *ret_conv = CResult_DirectionalChannelInfoDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_DirectionalChannelInfoDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_DirectionalChannelInfoDecodeErrorZ* o_conv = (LDKCResult_DirectionalChannelInfoDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_DirectionalChannelInfoDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_DirectionalChannelInfoDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12202,6 +13575,17 @@ void  __attribute__((visibility("default"))) TS_CResult_DirectionalChannelInfoDe
        CResult_DirectionalChannelInfoDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_DirectionalChannelInfoDecodeErrorZ_clone_ptr(LDKCResult_DirectionalChannelInfoDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_DirectionalChannelInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_DirectionalChannelInfoDecodeErrorZ), "LDKCResult_DirectionalChannelInfoDecodeErrorZ");
+       *ret_conv = CResult_DirectionalChannelInfoDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_DirectionalChannelInfoDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_DirectionalChannelInfoDecodeErrorZ* arg_conv = (LDKCResult_DirectionalChannelInfoDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_DirectionalChannelInfoDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_DirectionalChannelInfoDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_DirectionalChannelInfoDecodeErrorZ* orig_conv = (LDKCResult_DirectionalChannelInfoDecodeErrorZ*)(orig & ~1);
        LDKCResult_DirectionalChannelInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_DirectionalChannelInfoDecodeErrorZ), "LDKCResult_DirectionalChannelInfoDecodeErrorZ");
@@ -12213,6 +13597,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ChannelInfoDecodeErr
        LDKChannelInfo o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ChannelInfo_clone(&o_conv);
        LDKCResult_ChannelInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelInfoDecodeErrorZ), "LDKCResult_ChannelInfoDecodeErrorZ");
        *ret_conv = CResult_ChannelInfoDecodeErrorZ_ok(o_conv);
@@ -12223,12 +13608,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ChannelInfoDecodeErr
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ChannelInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelInfoDecodeErrorZ), "LDKCResult_ChannelInfoDecodeErrorZ");
        *ret_conv = CResult_ChannelInfoDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_ChannelInfoDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_ChannelInfoDecodeErrorZ* o_conv = (LDKCResult_ChannelInfoDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ChannelInfoDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_ChannelInfoDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12238,6 +13630,17 @@ void  __attribute__((visibility("default"))) TS_CResult_ChannelInfoDecodeErrorZ_
        CResult_ChannelInfoDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ChannelInfoDecodeErrorZ_clone_ptr(LDKCResult_ChannelInfoDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ChannelInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelInfoDecodeErrorZ), "LDKCResult_ChannelInfoDecodeErrorZ");
+       *ret_conv = CResult_ChannelInfoDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_ChannelInfoDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_ChannelInfoDecodeErrorZ* arg_conv = (LDKCResult_ChannelInfoDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ChannelInfoDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_ChannelInfoDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_ChannelInfoDecodeErrorZ* orig_conv = (LDKCResult_ChannelInfoDecodeErrorZ*)(orig & ~1);
        LDKCResult_ChannelInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelInfoDecodeErrorZ), "LDKCResult_ChannelInfoDecodeErrorZ");
@@ -12249,6 +13652,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_RoutingFeesDecodeErr
        LDKRoutingFees o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = RoutingFees_clone(&o_conv);
        LDKCResult_RoutingFeesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RoutingFeesDecodeErrorZ), "LDKCResult_RoutingFeesDecodeErrorZ");
        *ret_conv = CResult_RoutingFeesDecodeErrorZ_ok(o_conv);
@@ -12259,12 +13663,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_RoutingFeesDecodeErr
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_RoutingFeesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RoutingFeesDecodeErrorZ), "LDKCResult_RoutingFeesDecodeErrorZ");
        *ret_conv = CResult_RoutingFeesDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_RoutingFeesDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_RoutingFeesDecodeErrorZ* o_conv = (LDKCResult_RoutingFeesDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_RoutingFeesDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_RoutingFeesDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12274,6 +13685,17 @@ void  __attribute__((visibility("default"))) TS_CResult_RoutingFeesDecodeErrorZ_
        CResult_RoutingFeesDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_RoutingFeesDecodeErrorZ_clone_ptr(LDKCResult_RoutingFeesDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_RoutingFeesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RoutingFeesDecodeErrorZ), "LDKCResult_RoutingFeesDecodeErrorZ");
+       *ret_conv = CResult_RoutingFeesDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_RoutingFeesDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_RoutingFeesDecodeErrorZ* arg_conv = (LDKCResult_RoutingFeesDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_RoutingFeesDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_RoutingFeesDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_RoutingFeesDecodeErrorZ* orig_conv = (LDKCResult_RoutingFeesDecodeErrorZ*)(orig & ~1);
        LDKCResult_RoutingFeesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RoutingFeesDecodeErrorZ), "LDKCResult_RoutingFeesDecodeErrorZ");
@@ -12285,6 +13707,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_NodeAnnouncementInfo
        LDKNodeAnnouncementInfo o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = NodeAnnouncementInfo_clone(&o_conv);
        LDKCResult_NodeAnnouncementInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeAnnouncementInfoDecodeErrorZ), "LDKCResult_NodeAnnouncementInfoDecodeErrorZ");
        *ret_conv = CResult_NodeAnnouncementInfoDecodeErrorZ_ok(o_conv);
@@ -12295,12 +13718,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_NodeAnnouncementInfo
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_NodeAnnouncementInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeAnnouncementInfoDecodeErrorZ), "LDKCResult_NodeAnnouncementInfoDecodeErrorZ");
        *ret_conv = CResult_NodeAnnouncementInfoDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_NodeAnnouncementInfoDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_NodeAnnouncementInfoDecodeErrorZ* o_conv = (LDKCResult_NodeAnnouncementInfoDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_NodeAnnouncementInfoDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_NodeAnnouncementInfoDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12310,6 +13740,17 @@ void  __attribute__((visibility("default"))) TS_CResult_NodeAnnouncementInfoDeco
        CResult_NodeAnnouncementInfoDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_NodeAnnouncementInfoDecodeErrorZ_clone_ptr(LDKCResult_NodeAnnouncementInfoDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_NodeAnnouncementInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeAnnouncementInfoDecodeErrorZ), "LDKCResult_NodeAnnouncementInfoDecodeErrorZ");
+       *ret_conv = CResult_NodeAnnouncementInfoDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_NodeAnnouncementInfoDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_NodeAnnouncementInfoDecodeErrorZ* arg_conv = (LDKCResult_NodeAnnouncementInfoDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_NodeAnnouncementInfoDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_NodeAnnouncementInfoDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_NodeAnnouncementInfoDecodeErrorZ* orig_conv = (LDKCResult_NodeAnnouncementInfoDecodeErrorZ*)(orig & ~1);
        LDKCResult_NodeAnnouncementInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeAnnouncementInfoDecodeErrorZ), "LDKCResult_NodeAnnouncementInfoDecodeErrorZ");
@@ -12336,6 +13777,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_NodeInfoDecodeErrorZ
        LDKNodeInfo o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = NodeInfo_clone(&o_conv);
        LDKCResult_NodeInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeInfoDecodeErrorZ), "LDKCResult_NodeInfoDecodeErrorZ");
        *ret_conv = CResult_NodeInfoDecodeErrorZ_ok(o_conv);
@@ -12346,12 +13788,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_NodeInfoDecodeErrorZ
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_NodeInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeInfoDecodeErrorZ), "LDKCResult_NodeInfoDecodeErrorZ");
        *ret_conv = CResult_NodeInfoDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_NodeInfoDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_NodeInfoDecodeErrorZ* o_conv = (LDKCResult_NodeInfoDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_NodeInfoDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_NodeInfoDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12361,6 +13810,17 @@ void  __attribute__((visibility("default"))) TS_CResult_NodeInfoDecodeErrorZ_fre
        CResult_NodeInfoDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_NodeInfoDecodeErrorZ_clone_ptr(LDKCResult_NodeInfoDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_NodeInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeInfoDecodeErrorZ), "LDKCResult_NodeInfoDecodeErrorZ");
+       *ret_conv = CResult_NodeInfoDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_NodeInfoDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_NodeInfoDecodeErrorZ* arg_conv = (LDKCResult_NodeInfoDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_NodeInfoDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_NodeInfoDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_NodeInfoDecodeErrorZ* orig_conv = (LDKCResult_NodeInfoDecodeErrorZ*)(orig & ~1);
        LDKCResult_NodeInfoDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeInfoDecodeErrorZ), "LDKCResult_NodeInfoDecodeErrorZ");
@@ -12372,6 +13832,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_NetworkGraphDecodeEr
        LDKNetworkGraph o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = NetworkGraph_clone(&o_conv);
        LDKCResult_NetworkGraphDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NetworkGraphDecodeErrorZ), "LDKCResult_NetworkGraphDecodeErrorZ");
        *ret_conv = CResult_NetworkGraphDecodeErrorZ_ok(o_conv);
@@ -12382,12 +13843,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_NetworkGraphDecodeEr
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_NetworkGraphDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NetworkGraphDecodeErrorZ), "LDKCResult_NetworkGraphDecodeErrorZ");
        *ret_conv = CResult_NetworkGraphDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_NetworkGraphDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_NetworkGraphDecodeErrorZ* o_conv = (LDKCResult_NetworkGraphDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_NetworkGraphDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_NetworkGraphDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12397,6 +13865,17 @@ void  __attribute__((visibility("default"))) TS_CResult_NetworkGraphDecodeErrorZ
        CResult_NetworkGraphDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_NetworkGraphDecodeErrorZ_clone_ptr(LDKCResult_NetworkGraphDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_NetworkGraphDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NetworkGraphDecodeErrorZ), "LDKCResult_NetworkGraphDecodeErrorZ");
+       *ret_conv = CResult_NetworkGraphDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_NetworkGraphDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_NetworkGraphDecodeErrorZ* arg_conv = (LDKCResult_NetworkGraphDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_NetworkGraphDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_NetworkGraphDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_NetworkGraphDecodeErrorZ* orig_conv = (LDKCResult_NetworkGraphDecodeErrorZ*)(orig & ~1);
        LDKCResult_NetworkGraphDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NetworkGraphDecodeErrorZ), "LDKCResult_NetworkGraphDecodeErrorZ");
@@ -12442,6 +13921,18 @@ void  __attribute__((visibility("default"))) TS_COption_CVec_NetAddressZZ_free(u
        COption_CVec_NetAddressZZ_free(_res_conv);
 }
 
+static inline uint64_t COption_CVec_NetAddressZZ_clone_ptr(LDKCOption_CVec_NetAddressZZ *NONNULL_PTR arg) {
+       LDKCOption_CVec_NetAddressZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_NetAddressZZ), "LDKCOption_CVec_NetAddressZZ");
+       *ret_copy = COption_CVec_NetAddressZZ_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_COption_CVec_NetAddressZZ_clone_ptr(uint32_t arg) {
+       LDKCOption_CVec_NetAddressZZ* arg_conv = (LDKCOption_CVec_NetAddressZZ*)arg;
+       int64_t ret_val = COption_CVec_NetAddressZZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_COption_CVec_NetAddressZZ_clone(uint32_t orig) {
        LDKCOption_CVec_NetAddressZZ* orig_conv = (LDKCOption_CVec_NetAddressZZ*)orig;
        LDKCOption_CVec_NetAddressZZ *ret_copy = MALLOC(sizeof(LDKCOption_CVec_NetAddressZZ), "LDKCOption_CVec_NetAddressZZ");
@@ -12464,12 +13955,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_NetAddressDecodeErro
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_NetAddressDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NetAddressDecodeErrorZ), "LDKCResult_NetAddressDecodeErrorZ");
        *ret_conv = CResult_NetAddressDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_NetAddressDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_NetAddressDecodeErrorZ* o_conv = (LDKCResult_NetAddressDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_NetAddressDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_NetAddressDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12479,6 +13977,17 @@ void  __attribute__((visibility("default"))) TS_CResult_NetAddressDecodeErrorZ_f
        CResult_NetAddressDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_NetAddressDecodeErrorZ_clone_ptr(LDKCResult_NetAddressDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_NetAddressDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NetAddressDecodeErrorZ), "LDKCResult_NetAddressDecodeErrorZ");
+       *ret_conv = CResult_NetAddressDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_NetAddressDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_NetAddressDecodeErrorZ* arg_conv = (LDKCResult_NetAddressDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_NetAddressDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_NetAddressDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_NetAddressDecodeErrorZ* orig_conv = (LDKCResult_NetAddressDecodeErrorZ*)(orig & ~1);
        LDKCResult_NetAddressDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NetAddressDecodeErrorZ), "LDKCResult_NetAddressDecodeErrorZ");
@@ -12499,6 +14008,7 @@ void  __attribute__((visibility("default"))) TS_CVec_UpdateAddHTLCZ_free(uint32_
                LDKUpdateAddHTLC _res_conv_15_conv;
                _res_conv_15_conv.inner = (void*)(_res_conv_15 & (~1));
                _res_conv_15_conv.is_owned = (_res_conv_15 & 1) || (_res_conv_15 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_15_conv);
                _res_constr.data[p] = _res_conv_15_conv;
        }
        CVec_UpdateAddHTLCZ_free(_res_constr);
@@ -12517,6 +14027,7 @@ void  __attribute__((visibility("default"))) TS_CVec_UpdateFulfillHTLCZ_free(uin
                LDKUpdateFulfillHTLC _res_conv_19_conv;
                _res_conv_19_conv.inner = (void*)(_res_conv_19 & (~1));
                _res_conv_19_conv.is_owned = (_res_conv_19 & 1) || (_res_conv_19 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_19_conv);
                _res_constr.data[t] = _res_conv_19_conv;
        }
        CVec_UpdateFulfillHTLCZ_free(_res_constr);
@@ -12535,6 +14046,7 @@ void  __attribute__((visibility("default"))) TS_CVec_UpdateFailHTLCZ_free(uint32
                LDKUpdateFailHTLC _res_conv_16_conv;
                _res_conv_16_conv.inner = (void*)(_res_conv_16 & (~1));
                _res_conv_16_conv.is_owned = (_res_conv_16 & 1) || (_res_conv_16 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_16_conv);
                _res_constr.data[q] = _res_conv_16_conv;
        }
        CVec_UpdateFailHTLCZ_free(_res_constr);
@@ -12553,6 +14065,7 @@ void  __attribute__((visibility("default"))) TS_CVec_UpdateFailMalformedHTLCZ_fr
                LDKUpdateFailMalformedHTLC _res_conv_25_conv;
                _res_conv_25_conv.inner = (void*)(_res_conv_25 & (~1));
                _res_conv_25_conv.is_owned = (_res_conv_25 & 1) || (_res_conv_25 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_25_conv);
                _res_constr.data[z] = _res_conv_25_conv;
        }
        CVec_UpdateFailMalformedHTLCZ_free(_res_constr);
@@ -12562,6 +14075,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_AcceptChannelDecodeE
        LDKAcceptChannel o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = AcceptChannel_clone(&o_conv);
        LDKCResult_AcceptChannelDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_AcceptChannelDecodeErrorZ), "LDKCResult_AcceptChannelDecodeErrorZ");
        *ret_conv = CResult_AcceptChannelDecodeErrorZ_ok(o_conv);
@@ -12572,12 +14086,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_AcceptChannelDecodeE
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_AcceptChannelDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_AcceptChannelDecodeErrorZ), "LDKCResult_AcceptChannelDecodeErrorZ");
        *ret_conv = CResult_AcceptChannelDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_AcceptChannelDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_AcceptChannelDecodeErrorZ* o_conv = (LDKCResult_AcceptChannelDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_AcceptChannelDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_AcceptChannelDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12587,6 +14108,17 @@ void  __attribute__((visibility("default"))) TS_CResult_AcceptChannelDecodeError
        CResult_AcceptChannelDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_AcceptChannelDecodeErrorZ_clone_ptr(LDKCResult_AcceptChannelDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_AcceptChannelDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_AcceptChannelDecodeErrorZ), "LDKCResult_AcceptChannelDecodeErrorZ");
+       *ret_conv = CResult_AcceptChannelDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_AcceptChannelDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_AcceptChannelDecodeErrorZ* arg_conv = (LDKCResult_AcceptChannelDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_AcceptChannelDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_AcceptChannelDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_AcceptChannelDecodeErrorZ* orig_conv = (LDKCResult_AcceptChannelDecodeErrorZ*)(orig & ~1);
        LDKCResult_AcceptChannelDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_AcceptChannelDecodeErrorZ), "LDKCResult_AcceptChannelDecodeErrorZ");
@@ -12598,6 +14130,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_AnnouncementSignatur
        LDKAnnouncementSignatures o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = AnnouncementSignatures_clone(&o_conv);
        LDKCResult_AnnouncementSignaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_AnnouncementSignaturesDecodeErrorZ), "LDKCResult_AnnouncementSignaturesDecodeErrorZ");
        *ret_conv = CResult_AnnouncementSignaturesDecodeErrorZ_ok(o_conv);
@@ -12608,12 +14141,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_AnnouncementSignatur
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_AnnouncementSignaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_AnnouncementSignaturesDecodeErrorZ), "LDKCResult_AnnouncementSignaturesDecodeErrorZ");
        *ret_conv = CResult_AnnouncementSignaturesDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_AnnouncementSignaturesDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_AnnouncementSignaturesDecodeErrorZ* o_conv = (LDKCResult_AnnouncementSignaturesDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_AnnouncementSignaturesDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_AnnouncementSignaturesDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12623,6 +14163,17 @@ void  __attribute__((visibility("default"))) TS_CResult_AnnouncementSignaturesDe
        CResult_AnnouncementSignaturesDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_AnnouncementSignaturesDecodeErrorZ_clone_ptr(LDKCResult_AnnouncementSignaturesDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_AnnouncementSignaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_AnnouncementSignaturesDecodeErrorZ), "LDKCResult_AnnouncementSignaturesDecodeErrorZ");
+       *ret_conv = CResult_AnnouncementSignaturesDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_AnnouncementSignaturesDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_AnnouncementSignaturesDecodeErrorZ* arg_conv = (LDKCResult_AnnouncementSignaturesDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_AnnouncementSignaturesDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_AnnouncementSignaturesDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_AnnouncementSignaturesDecodeErrorZ* orig_conv = (LDKCResult_AnnouncementSignaturesDecodeErrorZ*)(orig & ~1);
        LDKCResult_AnnouncementSignaturesDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_AnnouncementSignaturesDecodeErrorZ), "LDKCResult_AnnouncementSignaturesDecodeErrorZ");
@@ -12634,6 +14185,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ChannelReestablishDe
        LDKChannelReestablish o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ChannelReestablish_clone(&o_conv);
        LDKCResult_ChannelReestablishDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelReestablishDecodeErrorZ), "LDKCResult_ChannelReestablishDecodeErrorZ");
        *ret_conv = CResult_ChannelReestablishDecodeErrorZ_ok(o_conv);
@@ -12644,12 +14196,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ChannelReestablishDe
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ChannelReestablishDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelReestablishDecodeErrorZ), "LDKCResult_ChannelReestablishDecodeErrorZ");
        *ret_conv = CResult_ChannelReestablishDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_ChannelReestablishDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_ChannelReestablishDecodeErrorZ* o_conv = (LDKCResult_ChannelReestablishDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ChannelReestablishDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_ChannelReestablishDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12659,6 +14218,17 @@ void  __attribute__((visibility("default"))) TS_CResult_ChannelReestablishDecode
        CResult_ChannelReestablishDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ChannelReestablishDecodeErrorZ_clone_ptr(LDKCResult_ChannelReestablishDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ChannelReestablishDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelReestablishDecodeErrorZ), "LDKCResult_ChannelReestablishDecodeErrorZ");
+       *ret_conv = CResult_ChannelReestablishDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_ChannelReestablishDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_ChannelReestablishDecodeErrorZ* arg_conv = (LDKCResult_ChannelReestablishDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ChannelReestablishDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_ChannelReestablishDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_ChannelReestablishDecodeErrorZ* orig_conv = (LDKCResult_ChannelReestablishDecodeErrorZ*)(orig & ~1);
        LDKCResult_ChannelReestablishDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelReestablishDecodeErrorZ), "LDKCResult_ChannelReestablishDecodeErrorZ");
@@ -12670,6 +14240,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ClosingSignedDecodeE
        LDKClosingSigned o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ClosingSigned_clone(&o_conv);
        LDKCResult_ClosingSignedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ClosingSignedDecodeErrorZ), "LDKCResult_ClosingSignedDecodeErrorZ");
        *ret_conv = CResult_ClosingSignedDecodeErrorZ_ok(o_conv);
@@ -12680,12 +14251,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ClosingSignedDecodeE
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ClosingSignedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ClosingSignedDecodeErrorZ), "LDKCResult_ClosingSignedDecodeErrorZ");
        *ret_conv = CResult_ClosingSignedDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_ClosingSignedDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_ClosingSignedDecodeErrorZ* o_conv = (LDKCResult_ClosingSignedDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ClosingSignedDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_ClosingSignedDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12695,6 +14273,17 @@ void  __attribute__((visibility("default"))) TS_CResult_ClosingSignedDecodeError
        CResult_ClosingSignedDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ClosingSignedDecodeErrorZ_clone_ptr(LDKCResult_ClosingSignedDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ClosingSignedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ClosingSignedDecodeErrorZ), "LDKCResult_ClosingSignedDecodeErrorZ");
+       *ret_conv = CResult_ClosingSignedDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_ClosingSignedDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_ClosingSignedDecodeErrorZ* arg_conv = (LDKCResult_ClosingSignedDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ClosingSignedDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_ClosingSignedDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_ClosingSignedDecodeErrorZ* orig_conv = (LDKCResult_ClosingSignedDecodeErrorZ*)(orig & ~1);
        LDKCResult_ClosingSignedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ClosingSignedDecodeErrorZ), "LDKCResult_ClosingSignedDecodeErrorZ");
@@ -12706,6 +14295,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ClosingSignedFeeRang
        LDKClosingSignedFeeRange o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ClosingSignedFeeRange_clone(&o_conv);
        LDKCResult_ClosingSignedFeeRangeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ClosingSignedFeeRangeDecodeErrorZ), "LDKCResult_ClosingSignedFeeRangeDecodeErrorZ");
        *ret_conv = CResult_ClosingSignedFeeRangeDecodeErrorZ_ok(o_conv);
@@ -12716,12 +14306,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ClosingSignedFeeRang
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ClosingSignedFeeRangeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ClosingSignedFeeRangeDecodeErrorZ), "LDKCResult_ClosingSignedFeeRangeDecodeErrorZ");
        *ret_conv = CResult_ClosingSignedFeeRangeDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_ClosingSignedFeeRangeDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_ClosingSignedFeeRangeDecodeErrorZ* o_conv = (LDKCResult_ClosingSignedFeeRangeDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ClosingSignedFeeRangeDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_ClosingSignedFeeRangeDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12731,6 +14328,17 @@ void  __attribute__((visibility("default"))) TS_CResult_ClosingSignedFeeRangeDec
        CResult_ClosingSignedFeeRangeDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ClosingSignedFeeRangeDecodeErrorZ_clone_ptr(LDKCResult_ClosingSignedFeeRangeDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ClosingSignedFeeRangeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ClosingSignedFeeRangeDecodeErrorZ), "LDKCResult_ClosingSignedFeeRangeDecodeErrorZ");
+       *ret_conv = CResult_ClosingSignedFeeRangeDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_ClosingSignedFeeRangeDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_ClosingSignedFeeRangeDecodeErrorZ* arg_conv = (LDKCResult_ClosingSignedFeeRangeDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ClosingSignedFeeRangeDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_ClosingSignedFeeRangeDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_ClosingSignedFeeRangeDecodeErrorZ* orig_conv = (LDKCResult_ClosingSignedFeeRangeDecodeErrorZ*)(orig & ~1);
        LDKCResult_ClosingSignedFeeRangeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ClosingSignedFeeRangeDecodeErrorZ), "LDKCResult_ClosingSignedFeeRangeDecodeErrorZ");
@@ -12742,6 +14350,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_CommitmentSignedDeco
        LDKCommitmentSigned o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = CommitmentSigned_clone(&o_conv);
        LDKCResult_CommitmentSignedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CommitmentSignedDecodeErrorZ), "LDKCResult_CommitmentSignedDecodeErrorZ");
        *ret_conv = CResult_CommitmentSignedDecodeErrorZ_ok(o_conv);
@@ -12752,12 +14361,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_CommitmentSignedDeco
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_CommitmentSignedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CommitmentSignedDecodeErrorZ), "LDKCResult_CommitmentSignedDecodeErrorZ");
        *ret_conv = CResult_CommitmentSignedDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_CommitmentSignedDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_CommitmentSignedDecodeErrorZ* o_conv = (LDKCResult_CommitmentSignedDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_CommitmentSignedDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_CommitmentSignedDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12767,6 +14383,17 @@ void  __attribute__((visibility("default"))) TS_CResult_CommitmentSignedDecodeEr
        CResult_CommitmentSignedDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_CommitmentSignedDecodeErrorZ_clone_ptr(LDKCResult_CommitmentSignedDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_CommitmentSignedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CommitmentSignedDecodeErrorZ), "LDKCResult_CommitmentSignedDecodeErrorZ");
+       *ret_conv = CResult_CommitmentSignedDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_CommitmentSignedDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_CommitmentSignedDecodeErrorZ* arg_conv = (LDKCResult_CommitmentSignedDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_CommitmentSignedDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_CommitmentSignedDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_CommitmentSignedDecodeErrorZ* orig_conv = (LDKCResult_CommitmentSignedDecodeErrorZ*)(orig & ~1);
        LDKCResult_CommitmentSignedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_CommitmentSignedDecodeErrorZ), "LDKCResult_CommitmentSignedDecodeErrorZ");
@@ -12778,6 +14405,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_FundingCreatedDecode
        LDKFundingCreated o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = FundingCreated_clone(&o_conv);
        LDKCResult_FundingCreatedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FundingCreatedDecodeErrorZ), "LDKCResult_FundingCreatedDecodeErrorZ");
        *ret_conv = CResult_FundingCreatedDecodeErrorZ_ok(o_conv);
@@ -12788,12 +14416,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_FundingCreatedDecode
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_FundingCreatedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FundingCreatedDecodeErrorZ), "LDKCResult_FundingCreatedDecodeErrorZ");
        *ret_conv = CResult_FundingCreatedDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_FundingCreatedDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_FundingCreatedDecodeErrorZ* o_conv = (LDKCResult_FundingCreatedDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_FundingCreatedDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_FundingCreatedDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12803,6 +14438,17 @@ void  __attribute__((visibility("default"))) TS_CResult_FundingCreatedDecodeErro
        CResult_FundingCreatedDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_FundingCreatedDecodeErrorZ_clone_ptr(LDKCResult_FundingCreatedDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_FundingCreatedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FundingCreatedDecodeErrorZ), "LDKCResult_FundingCreatedDecodeErrorZ");
+       *ret_conv = CResult_FundingCreatedDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_FundingCreatedDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_FundingCreatedDecodeErrorZ* arg_conv = (LDKCResult_FundingCreatedDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_FundingCreatedDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_FundingCreatedDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_FundingCreatedDecodeErrorZ* orig_conv = (LDKCResult_FundingCreatedDecodeErrorZ*)(orig & ~1);
        LDKCResult_FundingCreatedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FundingCreatedDecodeErrorZ), "LDKCResult_FundingCreatedDecodeErrorZ");
@@ -12814,6 +14460,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_FundingSignedDecodeE
        LDKFundingSigned o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = FundingSigned_clone(&o_conv);
        LDKCResult_FundingSignedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FundingSignedDecodeErrorZ), "LDKCResult_FundingSignedDecodeErrorZ");
        *ret_conv = CResult_FundingSignedDecodeErrorZ_ok(o_conv);
@@ -12824,12 +14471,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_FundingSignedDecodeE
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_FundingSignedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FundingSignedDecodeErrorZ), "LDKCResult_FundingSignedDecodeErrorZ");
        *ret_conv = CResult_FundingSignedDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_FundingSignedDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_FundingSignedDecodeErrorZ* o_conv = (LDKCResult_FundingSignedDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_FundingSignedDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_FundingSignedDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12839,6 +14493,17 @@ void  __attribute__((visibility("default"))) TS_CResult_FundingSignedDecodeError
        CResult_FundingSignedDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_FundingSignedDecodeErrorZ_clone_ptr(LDKCResult_FundingSignedDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_FundingSignedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FundingSignedDecodeErrorZ), "LDKCResult_FundingSignedDecodeErrorZ");
+       *ret_conv = CResult_FundingSignedDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_FundingSignedDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_FundingSignedDecodeErrorZ* arg_conv = (LDKCResult_FundingSignedDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_FundingSignedDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_FundingSignedDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_FundingSignedDecodeErrorZ* orig_conv = (LDKCResult_FundingSignedDecodeErrorZ*)(orig & ~1);
        LDKCResult_FundingSignedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FundingSignedDecodeErrorZ), "LDKCResult_FundingSignedDecodeErrorZ");
@@ -12850,6 +14515,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_FundingLockedDecodeE
        LDKFundingLocked o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = FundingLocked_clone(&o_conv);
        LDKCResult_FundingLockedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FundingLockedDecodeErrorZ), "LDKCResult_FundingLockedDecodeErrorZ");
        *ret_conv = CResult_FundingLockedDecodeErrorZ_ok(o_conv);
@@ -12860,12 +14526,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_FundingLockedDecodeE
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_FundingLockedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FundingLockedDecodeErrorZ), "LDKCResult_FundingLockedDecodeErrorZ");
        *ret_conv = CResult_FundingLockedDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_FundingLockedDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_FundingLockedDecodeErrorZ* o_conv = (LDKCResult_FundingLockedDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_FundingLockedDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_FundingLockedDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12875,6 +14548,17 @@ void  __attribute__((visibility("default"))) TS_CResult_FundingLockedDecodeError
        CResult_FundingLockedDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_FundingLockedDecodeErrorZ_clone_ptr(LDKCResult_FundingLockedDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_FundingLockedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FundingLockedDecodeErrorZ), "LDKCResult_FundingLockedDecodeErrorZ");
+       *ret_conv = CResult_FundingLockedDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_FundingLockedDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_FundingLockedDecodeErrorZ* arg_conv = (LDKCResult_FundingLockedDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_FundingLockedDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_FundingLockedDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_FundingLockedDecodeErrorZ* orig_conv = (LDKCResult_FundingLockedDecodeErrorZ*)(orig & ~1);
        LDKCResult_FundingLockedDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_FundingLockedDecodeErrorZ), "LDKCResult_FundingLockedDecodeErrorZ");
@@ -12886,6 +14570,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_InitDecodeErrorZ_ok(
        LDKInit o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = Init_clone(&o_conv);
        LDKCResult_InitDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InitDecodeErrorZ), "LDKCResult_InitDecodeErrorZ");
        *ret_conv = CResult_InitDecodeErrorZ_ok(o_conv);
@@ -12896,12 +14581,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_InitDecodeErrorZ_err
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_InitDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InitDecodeErrorZ), "LDKCResult_InitDecodeErrorZ");
        *ret_conv = CResult_InitDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_InitDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_InitDecodeErrorZ* o_conv = (LDKCResult_InitDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_InitDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_InitDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12911,6 +14603,17 @@ void  __attribute__((visibility("default"))) TS_CResult_InitDecodeErrorZ_free(ui
        CResult_InitDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_InitDecodeErrorZ_clone_ptr(LDKCResult_InitDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_InitDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InitDecodeErrorZ), "LDKCResult_InitDecodeErrorZ");
+       *ret_conv = CResult_InitDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_InitDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_InitDecodeErrorZ* arg_conv = (LDKCResult_InitDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_InitDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_InitDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_InitDecodeErrorZ* orig_conv = (LDKCResult_InitDecodeErrorZ*)(orig & ~1);
        LDKCResult_InitDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InitDecodeErrorZ), "LDKCResult_InitDecodeErrorZ");
@@ -12922,6 +14625,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_OpenChannelDecodeErr
        LDKOpenChannel o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = OpenChannel_clone(&o_conv);
        LDKCResult_OpenChannelDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OpenChannelDecodeErrorZ), "LDKCResult_OpenChannelDecodeErrorZ");
        *ret_conv = CResult_OpenChannelDecodeErrorZ_ok(o_conv);
@@ -12932,12 +14636,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_OpenChannelDecodeErr
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_OpenChannelDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OpenChannelDecodeErrorZ), "LDKCResult_OpenChannelDecodeErrorZ");
        *ret_conv = CResult_OpenChannelDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_OpenChannelDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_OpenChannelDecodeErrorZ* o_conv = (LDKCResult_OpenChannelDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_OpenChannelDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_OpenChannelDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12947,6 +14658,17 @@ void  __attribute__((visibility("default"))) TS_CResult_OpenChannelDecodeErrorZ_
        CResult_OpenChannelDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_OpenChannelDecodeErrorZ_clone_ptr(LDKCResult_OpenChannelDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_OpenChannelDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OpenChannelDecodeErrorZ), "LDKCResult_OpenChannelDecodeErrorZ");
+       *ret_conv = CResult_OpenChannelDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_OpenChannelDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_OpenChannelDecodeErrorZ* arg_conv = (LDKCResult_OpenChannelDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_OpenChannelDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_OpenChannelDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_OpenChannelDecodeErrorZ* orig_conv = (LDKCResult_OpenChannelDecodeErrorZ*)(orig & ~1);
        LDKCResult_OpenChannelDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_OpenChannelDecodeErrorZ), "LDKCResult_OpenChannelDecodeErrorZ");
@@ -12958,6 +14680,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_RevokeAndACKDecodeEr
        LDKRevokeAndACK o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = RevokeAndACK_clone(&o_conv);
        LDKCResult_RevokeAndACKDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RevokeAndACKDecodeErrorZ), "LDKCResult_RevokeAndACKDecodeErrorZ");
        *ret_conv = CResult_RevokeAndACKDecodeErrorZ_ok(o_conv);
@@ -12968,12 +14691,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_RevokeAndACKDecodeEr
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_RevokeAndACKDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RevokeAndACKDecodeErrorZ), "LDKCResult_RevokeAndACKDecodeErrorZ");
        *ret_conv = CResult_RevokeAndACKDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_RevokeAndACKDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_RevokeAndACKDecodeErrorZ* o_conv = (LDKCResult_RevokeAndACKDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_RevokeAndACKDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_RevokeAndACKDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -12983,6 +14713,17 @@ void  __attribute__((visibility("default"))) TS_CResult_RevokeAndACKDecodeErrorZ
        CResult_RevokeAndACKDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_RevokeAndACKDecodeErrorZ_clone_ptr(LDKCResult_RevokeAndACKDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_RevokeAndACKDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RevokeAndACKDecodeErrorZ), "LDKCResult_RevokeAndACKDecodeErrorZ");
+       *ret_conv = CResult_RevokeAndACKDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_RevokeAndACKDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_RevokeAndACKDecodeErrorZ* arg_conv = (LDKCResult_RevokeAndACKDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_RevokeAndACKDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_RevokeAndACKDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_RevokeAndACKDecodeErrorZ* orig_conv = (LDKCResult_RevokeAndACKDecodeErrorZ*)(orig & ~1);
        LDKCResult_RevokeAndACKDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_RevokeAndACKDecodeErrorZ), "LDKCResult_RevokeAndACKDecodeErrorZ");
@@ -12994,6 +14735,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ShutdownDecodeErrorZ
        LDKShutdown o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = Shutdown_clone(&o_conv);
        LDKCResult_ShutdownDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ShutdownDecodeErrorZ), "LDKCResult_ShutdownDecodeErrorZ");
        *ret_conv = CResult_ShutdownDecodeErrorZ_ok(o_conv);
@@ -13004,12 +14746,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ShutdownDecodeErrorZ
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ShutdownDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ShutdownDecodeErrorZ), "LDKCResult_ShutdownDecodeErrorZ");
        *ret_conv = CResult_ShutdownDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_ShutdownDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_ShutdownDecodeErrorZ* o_conv = (LDKCResult_ShutdownDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ShutdownDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_ShutdownDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13019,6 +14768,17 @@ void  __attribute__((visibility("default"))) TS_CResult_ShutdownDecodeErrorZ_fre
        CResult_ShutdownDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ShutdownDecodeErrorZ_clone_ptr(LDKCResult_ShutdownDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ShutdownDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ShutdownDecodeErrorZ), "LDKCResult_ShutdownDecodeErrorZ");
+       *ret_conv = CResult_ShutdownDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_ShutdownDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_ShutdownDecodeErrorZ* arg_conv = (LDKCResult_ShutdownDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ShutdownDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_ShutdownDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_ShutdownDecodeErrorZ* orig_conv = (LDKCResult_ShutdownDecodeErrorZ*)(orig & ~1);
        LDKCResult_ShutdownDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ShutdownDecodeErrorZ), "LDKCResult_ShutdownDecodeErrorZ");
@@ -13030,6 +14790,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_UpdateFailHTLCDecode
        LDKUpdateFailHTLC o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = UpdateFailHTLC_clone(&o_conv);
        LDKCResult_UpdateFailHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFailHTLCDecodeErrorZ), "LDKCResult_UpdateFailHTLCDecodeErrorZ");
        *ret_conv = CResult_UpdateFailHTLCDecodeErrorZ_ok(o_conv);
@@ -13040,12 +14801,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_UpdateFailHTLCDecode
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_UpdateFailHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFailHTLCDecodeErrorZ), "LDKCResult_UpdateFailHTLCDecodeErrorZ");
        *ret_conv = CResult_UpdateFailHTLCDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_UpdateFailHTLCDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_UpdateFailHTLCDecodeErrorZ* o_conv = (LDKCResult_UpdateFailHTLCDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_UpdateFailHTLCDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_UpdateFailHTLCDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13055,6 +14823,17 @@ void  __attribute__((visibility("default"))) TS_CResult_UpdateFailHTLCDecodeErro
        CResult_UpdateFailHTLCDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_UpdateFailHTLCDecodeErrorZ_clone_ptr(LDKCResult_UpdateFailHTLCDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_UpdateFailHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFailHTLCDecodeErrorZ), "LDKCResult_UpdateFailHTLCDecodeErrorZ");
+       *ret_conv = CResult_UpdateFailHTLCDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_UpdateFailHTLCDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_UpdateFailHTLCDecodeErrorZ* arg_conv = (LDKCResult_UpdateFailHTLCDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_UpdateFailHTLCDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_UpdateFailHTLCDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_UpdateFailHTLCDecodeErrorZ* orig_conv = (LDKCResult_UpdateFailHTLCDecodeErrorZ*)(orig & ~1);
        LDKCResult_UpdateFailHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFailHTLCDecodeErrorZ), "LDKCResult_UpdateFailHTLCDecodeErrorZ");
@@ -13066,6 +14845,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_UpdateFailMalformedH
        LDKUpdateFailMalformedHTLC o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = UpdateFailMalformedHTLC_clone(&o_conv);
        LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ), "LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ");
        *ret_conv = CResult_UpdateFailMalformedHTLCDecodeErrorZ_ok(o_conv);
@@ -13076,12 +14856,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_UpdateFailMalformedH
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ), "LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ");
        *ret_conv = CResult_UpdateFailMalformedHTLCDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_UpdateFailMalformedHTLCDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ* o_conv = (LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_UpdateFailMalformedHTLCDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_UpdateFailMalformedHTLCDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13091,6 +14878,17 @@ void  __attribute__((visibility("default"))) TS_CResult_UpdateFailMalformedHTLCD
        CResult_UpdateFailMalformedHTLCDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_UpdateFailMalformedHTLCDecodeErrorZ_clone_ptr(LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ), "LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ");
+       *ret_conv = CResult_UpdateFailMalformedHTLCDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_UpdateFailMalformedHTLCDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ* arg_conv = (LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_UpdateFailMalformedHTLCDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_UpdateFailMalformedHTLCDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ* orig_conv = (LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ*)(orig & ~1);
        LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ), "LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ");
@@ -13102,6 +14900,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_UpdateFeeDecodeError
        LDKUpdateFee o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = UpdateFee_clone(&o_conv);
        LDKCResult_UpdateFeeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFeeDecodeErrorZ), "LDKCResult_UpdateFeeDecodeErrorZ");
        *ret_conv = CResult_UpdateFeeDecodeErrorZ_ok(o_conv);
@@ -13112,12 +14911,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_UpdateFeeDecodeError
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_UpdateFeeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFeeDecodeErrorZ), "LDKCResult_UpdateFeeDecodeErrorZ");
        *ret_conv = CResult_UpdateFeeDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_UpdateFeeDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_UpdateFeeDecodeErrorZ* o_conv = (LDKCResult_UpdateFeeDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_UpdateFeeDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_UpdateFeeDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13127,6 +14933,17 @@ void  __attribute__((visibility("default"))) TS_CResult_UpdateFeeDecodeErrorZ_fr
        CResult_UpdateFeeDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_UpdateFeeDecodeErrorZ_clone_ptr(LDKCResult_UpdateFeeDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_UpdateFeeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFeeDecodeErrorZ), "LDKCResult_UpdateFeeDecodeErrorZ");
+       *ret_conv = CResult_UpdateFeeDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_UpdateFeeDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_UpdateFeeDecodeErrorZ* arg_conv = (LDKCResult_UpdateFeeDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_UpdateFeeDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_UpdateFeeDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_UpdateFeeDecodeErrorZ* orig_conv = (LDKCResult_UpdateFeeDecodeErrorZ*)(orig & ~1);
        LDKCResult_UpdateFeeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFeeDecodeErrorZ), "LDKCResult_UpdateFeeDecodeErrorZ");
@@ -13138,6 +14955,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_UpdateFulfillHTLCDec
        LDKUpdateFulfillHTLC o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = UpdateFulfillHTLC_clone(&o_conv);
        LDKCResult_UpdateFulfillHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFulfillHTLCDecodeErrorZ), "LDKCResult_UpdateFulfillHTLCDecodeErrorZ");
        *ret_conv = CResult_UpdateFulfillHTLCDecodeErrorZ_ok(o_conv);
@@ -13148,12 +14966,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_UpdateFulfillHTLCDec
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_UpdateFulfillHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFulfillHTLCDecodeErrorZ), "LDKCResult_UpdateFulfillHTLCDecodeErrorZ");
        *ret_conv = CResult_UpdateFulfillHTLCDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_UpdateFulfillHTLCDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_UpdateFulfillHTLCDecodeErrorZ* o_conv = (LDKCResult_UpdateFulfillHTLCDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_UpdateFulfillHTLCDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_UpdateFulfillHTLCDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13163,6 +14988,17 @@ void  __attribute__((visibility("default"))) TS_CResult_UpdateFulfillHTLCDecodeE
        CResult_UpdateFulfillHTLCDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_UpdateFulfillHTLCDecodeErrorZ_clone_ptr(LDKCResult_UpdateFulfillHTLCDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_UpdateFulfillHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFulfillHTLCDecodeErrorZ), "LDKCResult_UpdateFulfillHTLCDecodeErrorZ");
+       *ret_conv = CResult_UpdateFulfillHTLCDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_UpdateFulfillHTLCDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_UpdateFulfillHTLCDecodeErrorZ* arg_conv = (LDKCResult_UpdateFulfillHTLCDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_UpdateFulfillHTLCDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_UpdateFulfillHTLCDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_UpdateFulfillHTLCDecodeErrorZ* orig_conv = (LDKCResult_UpdateFulfillHTLCDecodeErrorZ*)(orig & ~1);
        LDKCResult_UpdateFulfillHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateFulfillHTLCDecodeErrorZ), "LDKCResult_UpdateFulfillHTLCDecodeErrorZ");
@@ -13174,6 +15010,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_UpdateAddHTLCDecodeE
        LDKUpdateAddHTLC o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = UpdateAddHTLC_clone(&o_conv);
        LDKCResult_UpdateAddHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateAddHTLCDecodeErrorZ), "LDKCResult_UpdateAddHTLCDecodeErrorZ");
        *ret_conv = CResult_UpdateAddHTLCDecodeErrorZ_ok(o_conv);
@@ -13184,12 +15021,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_UpdateAddHTLCDecodeE
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_UpdateAddHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateAddHTLCDecodeErrorZ), "LDKCResult_UpdateAddHTLCDecodeErrorZ");
        *ret_conv = CResult_UpdateAddHTLCDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_UpdateAddHTLCDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_UpdateAddHTLCDecodeErrorZ* o_conv = (LDKCResult_UpdateAddHTLCDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_UpdateAddHTLCDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_UpdateAddHTLCDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13199,6 +15043,17 @@ void  __attribute__((visibility("default"))) TS_CResult_UpdateAddHTLCDecodeError
        CResult_UpdateAddHTLCDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_UpdateAddHTLCDecodeErrorZ_clone_ptr(LDKCResult_UpdateAddHTLCDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_UpdateAddHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateAddHTLCDecodeErrorZ), "LDKCResult_UpdateAddHTLCDecodeErrorZ");
+       *ret_conv = CResult_UpdateAddHTLCDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_UpdateAddHTLCDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_UpdateAddHTLCDecodeErrorZ* arg_conv = (LDKCResult_UpdateAddHTLCDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_UpdateAddHTLCDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_UpdateAddHTLCDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_UpdateAddHTLCDecodeErrorZ* orig_conv = (LDKCResult_UpdateAddHTLCDecodeErrorZ*)(orig & ~1);
        LDKCResult_UpdateAddHTLCDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UpdateAddHTLCDecodeErrorZ), "LDKCResult_UpdateAddHTLCDecodeErrorZ");
@@ -13210,6 +15065,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_PingDecodeErrorZ_ok(
        LDKPing o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = Ping_clone(&o_conv);
        LDKCResult_PingDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PingDecodeErrorZ), "LDKCResult_PingDecodeErrorZ");
        *ret_conv = CResult_PingDecodeErrorZ_ok(o_conv);
@@ -13220,12 +15076,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_PingDecodeErrorZ_err
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_PingDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PingDecodeErrorZ), "LDKCResult_PingDecodeErrorZ");
        *ret_conv = CResult_PingDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_PingDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_PingDecodeErrorZ* o_conv = (LDKCResult_PingDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_PingDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_PingDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13235,6 +15098,17 @@ void  __attribute__((visibility("default"))) TS_CResult_PingDecodeErrorZ_free(ui
        CResult_PingDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_PingDecodeErrorZ_clone_ptr(LDKCResult_PingDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_PingDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PingDecodeErrorZ), "LDKCResult_PingDecodeErrorZ");
+       *ret_conv = CResult_PingDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_PingDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_PingDecodeErrorZ* arg_conv = (LDKCResult_PingDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_PingDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_PingDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_PingDecodeErrorZ* orig_conv = (LDKCResult_PingDecodeErrorZ*)(orig & ~1);
        LDKCResult_PingDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PingDecodeErrorZ), "LDKCResult_PingDecodeErrorZ");
@@ -13246,6 +15120,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_PongDecodeErrorZ_ok(
        LDKPong o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = Pong_clone(&o_conv);
        LDKCResult_PongDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PongDecodeErrorZ), "LDKCResult_PongDecodeErrorZ");
        *ret_conv = CResult_PongDecodeErrorZ_ok(o_conv);
@@ -13256,12 +15131,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_PongDecodeErrorZ_err
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_PongDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PongDecodeErrorZ), "LDKCResult_PongDecodeErrorZ");
        *ret_conv = CResult_PongDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_PongDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_PongDecodeErrorZ* o_conv = (LDKCResult_PongDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_PongDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_PongDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13271,6 +15153,17 @@ void  __attribute__((visibility("default"))) TS_CResult_PongDecodeErrorZ_free(ui
        CResult_PongDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_PongDecodeErrorZ_clone_ptr(LDKCResult_PongDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_PongDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PongDecodeErrorZ), "LDKCResult_PongDecodeErrorZ");
+       *ret_conv = CResult_PongDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_PongDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_PongDecodeErrorZ* arg_conv = (LDKCResult_PongDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_PongDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_PongDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_PongDecodeErrorZ* orig_conv = (LDKCResult_PongDecodeErrorZ*)(orig & ~1);
        LDKCResult_PongDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PongDecodeErrorZ), "LDKCResult_PongDecodeErrorZ");
@@ -13282,6 +15175,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_UnsignedChannelAnnou
        LDKUnsignedChannelAnnouncement o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = UnsignedChannelAnnouncement_clone(&o_conv);
        LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ), "LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ");
        *ret_conv = CResult_UnsignedChannelAnnouncementDecodeErrorZ_ok(o_conv);
@@ -13292,12 +15186,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_UnsignedChannelAnnou
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ), "LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ");
        *ret_conv = CResult_UnsignedChannelAnnouncementDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_UnsignedChannelAnnouncementDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ* o_conv = (LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_UnsignedChannelAnnouncementDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_UnsignedChannelAnnouncementDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13307,6 +15208,17 @@ void  __attribute__((visibility("default"))) TS_CResult_UnsignedChannelAnnouncem
        CResult_UnsignedChannelAnnouncementDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_UnsignedChannelAnnouncementDecodeErrorZ_clone_ptr(LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ), "LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ");
+       *ret_conv = CResult_UnsignedChannelAnnouncementDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_UnsignedChannelAnnouncementDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ* arg_conv = (LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_UnsignedChannelAnnouncementDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_UnsignedChannelAnnouncementDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ* orig_conv = (LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ*)(orig & ~1);
        LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ), "LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ");
@@ -13318,6 +15230,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ChannelAnnouncementD
        LDKChannelAnnouncement o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ChannelAnnouncement_clone(&o_conv);
        LDKCResult_ChannelAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelAnnouncementDecodeErrorZ), "LDKCResult_ChannelAnnouncementDecodeErrorZ");
        *ret_conv = CResult_ChannelAnnouncementDecodeErrorZ_ok(o_conv);
@@ -13328,12 +15241,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ChannelAnnouncementD
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ChannelAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelAnnouncementDecodeErrorZ), "LDKCResult_ChannelAnnouncementDecodeErrorZ");
        *ret_conv = CResult_ChannelAnnouncementDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_ChannelAnnouncementDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_ChannelAnnouncementDecodeErrorZ* o_conv = (LDKCResult_ChannelAnnouncementDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ChannelAnnouncementDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_ChannelAnnouncementDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13343,6 +15263,17 @@ void  __attribute__((visibility("default"))) TS_CResult_ChannelAnnouncementDecod
        CResult_ChannelAnnouncementDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ChannelAnnouncementDecodeErrorZ_clone_ptr(LDKCResult_ChannelAnnouncementDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ChannelAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelAnnouncementDecodeErrorZ), "LDKCResult_ChannelAnnouncementDecodeErrorZ");
+       *ret_conv = CResult_ChannelAnnouncementDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_ChannelAnnouncementDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_ChannelAnnouncementDecodeErrorZ* arg_conv = (LDKCResult_ChannelAnnouncementDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ChannelAnnouncementDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_ChannelAnnouncementDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_ChannelAnnouncementDecodeErrorZ* orig_conv = (LDKCResult_ChannelAnnouncementDecodeErrorZ*)(orig & ~1);
        LDKCResult_ChannelAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelAnnouncementDecodeErrorZ), "LDKCResult_ChannelAnnouncementDecodeErrorZ");
@@ -13354,6 +15285,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_UnsignedChannelUpdat
        LDKUnsignedChannelUpdate o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = UnsignedChannelUpdate_clone(&o_conv);
        LDKCResult_UnsignedChannelUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedChannelUpdateDecodeErrorZ), "LDKCResult_UnsignedChannelUpdateDecodeErrorZ");
        *ret_conv = CResult_UnsignedChannelUpdateDecodeErrorZ_ok(o_conv);
@@ -13364,12 +15296,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_UnsignedChannelUpdat
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_UnsignedChannelUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedChannelUpdateDecodeErrorZ), "LDKCResult_UnsignedChannelUpdateDecodeErrorZ");
        *ret_conv = CResult_UnsignedChannelUpdateDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_UnsignedChannelUpdateDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_UnsignedChannelUpdateDecodeErrorZ* o_conv = (LDKCResult_UnsignedChannelUpdateDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_UnsignedChannelUpdateDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_UnsignedChannelUpdateDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13379,6 +15318,17 @@ void  __attribute__((visibility("default"))) TS_CResult_UnsignedChannelUpdateDec
        CResult_UnsignedChannelUpdateDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_UnsignedChannelUpdateDecodeErrorZ_clone_ptr(LDKCResult_UnsignedChannelUpdateDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_UnsignedChannelUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedChannelUpdateDecodeErrorZ), "LDKCResult_UnsignedChannelUpdateDecodeErrorZ");
+       *ret_conv = CResult_UnsignedChannelUpdateDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_UnsignedChannelUpdateDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_UnsignedChannelUpdateDecodeErrorZ* arg_conv = (LDKCResult_UnsignedChannelUpdateDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_UnsignedChannelUpdateDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_UnsignedChannelUpdateDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_UnsignedChannelUpdateDecodeErrorZ* orig_conv = (LDKCResult_UnsignedChannelUpdateDecodeErrorZ*)(orig & ~1);
        LDKCResult_UnsignedChannelUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedChannelUpdateDecodeErrorZ), "LDKCResult_UnsignedChannelUpdateDecodeErrorZ");
@@ -13390,6 +15340,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ChannelUpdateDecodeE
        LDKChannelUpdate o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ChannelUpdate_clone(&o_conv);
        LDKCResult_ChannelUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelUpdateDecodeErrorZ), "LDKCResult_ChannelUpdateDecodeErrorZ");
        *ret_conv = CResult_ChannelUpdateDecodeErrorZ_ok(o_conv);
@@ -13400,12 +15351,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ChannelUpdateDecodeE
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ChannelUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelUpdateDecodeErrorZ), "LDKCResult_ChannelUpdateDecodeErrorZ");
        *ret_conv = CResult_ChannelUpdateDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_ChannelUpdateDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_ChannelUpdateDecodeErrorZ* o_conv = (LDKCResult_ChannelUpdateDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ChannelUpdateDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_ChannelUpdateDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13415,6 +15373,17 @@ void  __attribute__((visibility("default"))) TS_CResult_ChannelUpdateDecodeError
        CResult_ChannelUpdateDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ChannelUpdateDecodeErrorZ_clone_ptr(LDKCResult_ChannelUpdateDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ChannelUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelUpdateDecodeErrorZ), "LDKCResult_ChannelUpdateDecodeErrorZ");
+       *ret_conv = CResult_ChannelUpdateDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_ChannelUpdateDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_ChannelUpdateDecodeErrorZ* arg_conv = (LDKCResult_ChannelUpdateDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ChannelUpdateDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_ChannelUpdateDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_ChannelUpdateDecodeErrorZ* orig_conv = (LDKCResult_ChannelUpdateDecodeErrorZ*)(orig & ~1);
        LDKCResult_ChannelUpdateDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ChannelUpdateDecodeErrorZ), "LDKCResult_ChannelUpdateDecodeErrorZ");
@@ -13426,6 +15395,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ErrorMessageDecodeEr
        LDKErrorMessage o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ErrorMessage_clone(&o_conv);
        LDKCResult_ErrorMessageDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ErrorMessageDecodeErrorZ), "LDKCResult_ErrorMessageDecodeErrorZ");
        *ret_conv = CResult_ErrorMessageDecodeErrorZ_ok(o_conv);
@@ -13436,12 +15406,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ErrorMessageDecodeEr
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ErrorMessageDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ErrorMessageDecodeErrorZ), "LDKCResult_ErrorMessageDecodeErrorZ");
        *ret_conv = CResult_ErrorMessageDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_ErrorMessageDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_ErrorMessageDecodeErrorZ* o_conv = (LDKCResult_ErrorMessageDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ErrorMessageDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_ErrorMessageDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13451,6 +15428,17 @@ void  __attribute__((visibility("default"))) TS_CResult_ErrorMessageDecodeErrorZ
        CResult_ErrorMessageDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ErrorMessageDecodeErrorZ_clone_ptr(LDKCResult_ErrorMessageDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ErrorMessageDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ErrorMessageDecodeErrorZ), "LDKCResult_ErrorMessageDecodeErrorZ");
+       *ret_conv = CResult_ErrorMessageDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_ErrorMessageDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_ErrorMessageDecodeErrorZ* arg_conv = (LDKCResult_ErrorMessageDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ErrorMessageDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_ErrorMessageDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_ErrorMessageDecodeErrorZ* orig_conv = (LDKCResult_ErrorMessageDecodeErrorZ*)(orig & ~1);
        LDKCResult_ErrorMessageDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ErrorMessageDecodeErrorZ), "LDKCResult_ErrorMessageDecodeErrorZ");
@@ -13462,6 +15450,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_UnsignedNodeAnnounce
        LDKUnsignedNodeAnnouncement o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = UnsignedNodeAnnouncement_clone(&o_conv);
        LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ), "LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ");
        *ret_conv = CResult_UnsignedNodeAnnouncementDecodeErrorZ_ok(o_conv);
@@ -13472,12 +15461,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_UnsignedNodeAnnounce
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ), "LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ");
        *ret_conv = CResult_UnsignedNodeAnnouncementDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_UnsignedNodeAnnouncementDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ* o_conv = (LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_UnsignedNodeAnnouncementDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_UnsignedNodeAnnouncementDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13487,6 +15483,17 @@ void  __attribute__((visibility("default"))) TS_CResult_UnsignedNodeAnnouncement
        CResult_UnsignedNodeAnnouncementDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_UnsignedNodeAnnouncementDecodeErrorZ_clone_ptr(LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ), "LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ");
+       *ret_conv = CResult_UnsignedNodeAnnouncementDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_UnsignedNodeAnnouncementDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ* arg_conv = (LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_UnsignedNodeAnnouncementDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_UnsignedNodeAnnouncementDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ* orig_conv = (LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ*)(orig & ~1);
        LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ), "LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ");
@@ -13498,6 +15505,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_NodeAnnouncementDeco
        LDKNodeAnnouncement o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = NodeAnnouncement_clone(&o_conv);
        LDKCResult_NodeAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeAnnouncementDecodeErrorZ), "LDKCResult_NodeAnnouncementDecodeErrorZ");
        *ret_conv = CResult_NodeAnnouncementDecodeErrorZ_ok(o_conv);
@@ -13508,12 +15516,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_NodeAnnouncementDeco
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_NodeAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeAnnouncementDecodeErrorZ), "LDKCResult_NodeAnnouncementDecodeErrorZ");
        *ret_conv = CResult_NodeAnnouncementDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_NodeAnnouncementDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_NodeAnnouncementDecodeErrorZ* o_conv = (LDKCResult_NodeAnnouncementDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_NodeAnnouncementDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_NodeAnnouncementDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13523,6 +15538,17 @@ void  __attribute__((visibility("default"))) TS_CResult_NodeAnnouncementDecodeEr
        CResult_NodeAnnouncementDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_NodeAnnouncementDecodeErrorZ_clone_ptr(LDKCResult_NodeAnnouncementDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_NodeAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeAnnouncementDecodeErrorZ), "LDKCResult_NodeAnnouncementDecodeErrorZ");
+       *ret_conv = CResult_NodeAnnouncementDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_NodeAnnouncementDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_NodeAnnouncementDecodeErrorZ* arg_conv = (LDKCResult_NodeAnnouncementDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_NodeAnnouncementDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_NodeAnnouncementDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_NodeAnnouncementDecodeErrorZ* orig_conv = (LDKCResult_NodeAnnouncementDecodeErrorZ*)(orig & ~1);
        LDKCResult_NodeAnnouncementDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NodeAnnouncementDecodeErrorZ), "LDKCResult_NodeAnnouncementDecodeErrorZ");
@@ -13534,6 +15560,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_QueryShortChannelIds
        LDKQueryShortChannelIds o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = QueryShortChannelIds_clone(&o_conv);
        LDKCResult_QueryShortChannelIdsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_QueryShortChannelIdsDecodeErrorZ), "LDKCResult_QueryShortChannelIdsDecodeErrorZ");
        *ret_conv = CResult_QueryShortChannelIdsDecodeErrorZ_ok(o_conv);
@@ -13544,12 +15571,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_QueryShortChannelIds
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_QueryShortChannelIdsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_QueryShortChannelIdsDecodeErrorZ), "LDKCResult_QueryShortChannelIdsDecodeErrorZ");
        *ret_conv = CResult_QueryShortChannelIdsDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_QueryShortChannelIdsDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_QueryShortChannelIdsDecodeErrorZ* o_conv = (LDKCResult_QueryShortChannelIdsDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_QueryShortChannelIdsDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_QueryShortChannelIdsDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13559,6 +15593,17 @@ void  __attribute__((visibility("default"))) TS_CResult_QueryShortChannelIdsDeco
        CResult_QueryShortChannelIdsDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_QueryShortChannelIdsDecodeErrorZ_clone_ptr(LDKCResult_QueryShortChannelIdsDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_QueryShortChannelIdsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_QueryShortChannelIdsDecodeErrorZ), "LDKCResult_QueryShortChannelIdsDecodeErrorZ");
+       *ret_conv = CResult_QueryShortChannelIdsDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_QueryShortChannelIdsDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_QueryShortChannelIdsDecodeErrorZ* arg_conv = (LDKCResult_QueryShortChannelIdsDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_QueryShortChannelIdsDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_QueryShortChannelIdsDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_QueryShortChannelIdsDecodeErrorZ* orig_conv = (LDKCResult_QueryShortChannelIdsDecodeErrorZ*)(orig & ~1);
        LDKCResult_QueryShortChannelIdsDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_QueryShortChannelIdsDecodeErrorZ), "LDKCResult_QueryShortChannelIdsDecodeErrorZ");
@@ -13570,6 +15615,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ReplyShortChannelIds
        LDKReplyShortChannelIdsEnd o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ReplyShortChannelIdsEnd_clone(&o_conv);
        LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ), "LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ");
        *ret_conv = CResult_ReplyShortChannelIdsEndDecodeErrorZ_ok(o_conv);
@@ -13580,12 +15626,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ReplyShortChannelIds
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ), "LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ");
        *ret_conv = CResult_ReplyShortChannelIdsEndDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_ReplyShortChannelIdsEndDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ* o_conv = (LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ReplyShortChannelIdsEndDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_ReplyShortChannelIdsEndDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13595,6 +15648,17 @@ void  __attribute__((visibility("default"))) TS_CResult_ReplyShortChannelIdsEndD
        CResult_ReplyShortChannelIdsEndDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ReplyShortChannelIdsEndDecodeErrorZ_clone_ptr(LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ), "LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ");
+       *ret_conv = CResult_ReplyShortChannelIdsEndDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_ReplyShortChannelIdsEndDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ* arg_conv = (LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ReplyShortChannelIdsEndDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_ReplyShortChannelIdsEndDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ* orig_conv = (LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ*)(orig & ~1);
        LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ), "LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ");
@@ -13606,6 +15670,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_QueryChannelRangeDec
        LDKQueryChannelRange o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = QueryChannelRange_clone(&o_conv);
        LDKCResult_QueryChannelRangeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_QueryChannelRangeDecodeErrorZ), "LDKCResult_QueryChannelRangeDecodeErrorZ");
        *ret_conv = CResult_QueryChannelRangeDecodeErrorZ_ok(o_conv);
@@ -13616,12 +15681,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_QueryChannelRangeDec
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_QueryChannelRangeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_QueryChannelRangeDecodeErrorZ), "LDKCResult_QueryChannelRangeDecodeErrorZ");
        *ret_conv = CResult_QueryChannelRangeDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_QueryChannelRangeDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_QueryChannelRangeDecodeErrorZ* o_conv = (LDKCResult_QueryChannelRangeDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_QueryChannelRangeDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_QueryChannelRangeDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13631,6 +15703,17 @@ void  __attribute__((visibility("default"))) TS_CResult_QueryChannelRangeDecodeE
        CResult_QueryChannelRangeDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_QueryChannelRangeDecodeErrorZ_clone_ptr(LDKCResult_QueryChannelRangeDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_QueryChannelRangeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_QueryChannelRangeDecodeErrorZ), "LDKCResult_QueryChannelRangeDecodeErrorZ");
+       *ret_conv = CResult_QueryChannelRangeDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_QueryChannelRangeDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_QueryChannelRangeDecodeErrorZ* arg_conv = (LDKCResult_QueryChannelRangeDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_QueryChannelRangeDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_QueryChannelRangeDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_QueryChannelRangeDecodeErrorZ* orig_conv = (LDKCResult_QueryChannelRangeDecodeErrorZ*)(orig & ~1);
        LDKCResult_QueryChannelRangeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_QueryChannelRangeDecodeErrorZ), "LDKCResult_QueryChannelRangeDecodeErrorZ");
@@ -13642,6 +15725,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ReplyChannelRangeDec
        LDKReplyChannelRange o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = ReplyChannelRange_clone(&o_conv);
        LDKCResult_ReplyChannelRangeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReplyChannelRangeDecodeErrorZ), "LDKCResult_ReplyChannelRangeDecodeErrorZ");
        *ret_conv = CResult_ReplyChannelRangeDecodeErrorZ_ok(o_conv);
@@ -13652,12 +15736,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_ReplyChannelRangeDec
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_ReplyChannelRangeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReplyChannelRangeDecodeErrorZ), "LDKCResult_ReplyChannelRangeDecodeErrorZ");
        *ret_conv = CResult_ReplyChannelRangeDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_ReplyChannelRangeDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_ReplyChannelRangeDecodeErrorZ* o_conv = (LDKCResult_ReplyChannelRangeDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_ReplyChannelRangeDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_ReplyChannelRangeDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13667,6 +15758,17 @@ void  __attribute__((visibility("default"))) TS_CResult_ReplyChannelRangeDecodeE
        CResult_ReplyChannelRangeDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_ReplyChannelRangeDecodeErrorZ_clone_ptr(LDKCResult_ReplyChannelRangeDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_ReplyChannelRangeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReplyChannelRangeDecodeErrorZ), "LDKCResult_ReplyChannelRangeDecodeErrorZ");
+       *ret_conv = CResult_ReplyChannelRangeDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_ReplyChannelRangeDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_ReplyChannelRangeDecodeErrorZ* arg_conv = (LDKCResult_ReplyChannelRangeDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_ReplyChannelRangeDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_ReplyChannelRangeDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_ReplyChannelRangeDecodeErrorZ* orig_conv = (LDKCResult_ReplyChannelRangeDecodeErrorZ*)(orig & ~1);
        LDKCResult_ReplyChannelRangeDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_ReplyChannelRangeDecodeErrorZ), "LDKCResult_ReplyChannelRangeDecodeErrorZ");
@@ -13678,6 +15780,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_GossipTimestampFilte
        LDKGossipTimestampFilter o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = GossipTimestampFilter_clone(&o_conv);
        LDKCResult_GossipTimestampFilterDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_GossipTimestampFilterDecodeErrorZ), "LDKCResult_GossipTimestampFilterDecodeErrorZ");
        *ret_conv = CResult_GossipTimestampFilterDecodeErrorZ_ok(o_conv);
@@ -13688,12 +15791,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_GossipTimestampFilte
        LDKDecodeError e_conv;
        e_conv.inner = (void*)(e & (~1));
        e_conv.is_owned = (e & 1) || (e == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(e_conv);
        e_conv = DecodeError_clone(&e_conv);
        LDKCResult_GossipTimestampFilterDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_GossipTimestampFilterDecodeErrorZ), "LDKCResult_GossipTimestampFilterDecodeErrorZ");
        *ret_conv = CResult_GossipTimestampFilterDecodeErrorZ_err(e_conv);
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_GossipTimestampFilterDecodeErrorZ_is_ok(uint32_t o) {
+       LDKCResult_GossipTimestampFilterDecodeErrorZ* o_conv = (LDKCResult_GossipTimestampFilterDecodeErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_GossipTimestampFilterDecodeErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_GossipTimestampFilterDecodeErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13703,6 +15813,17 @@ void  __attribute__((visibility("default"))) TS_CResult_GossipTimestampFilterDec
        CResult_GossipTimestampFilterDecodeErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_GossipTimestampFilterDecodeErrorZ_clone_ptr(LDKCResult_GossipTimestampFilterDecodeErrorZ *NONNULL_PTR arg) {
+       LDKCResult_GossipTimestampFilterDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_GossipTimestampFilterDecodeErrorZ), "LDKCResult_GossipTimestampFilterDecodeErrorZ");
+       *ret_conv = CResult_GossipTimestampFilterDecodeErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_GossipTimestampFilterDecodeErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_GossipTimestampFilterDecodeErrorZ* arg_conv = (LDKCResult_GossipTimestampFilterDecodeErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_GossipTimestampFilterDecodeErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_GossipTimestampFilterDecodeErrorZ_clone(uint32_t orig) {
        LDKCResult_GossipTimestampFilterDecodeErrorZ* orig_conv = (LDKCResult_GossipTimestampFilterDecodeErrorZ*)(orig & ~1);
        LDKCResult_GossipTimestampFilterDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_GossipTimestampFilterDecodeErrorZ), "LDKCResult_GossipTimestampFilterDecodeErrorZ");
@@ -13714,6 +15835,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_InvoiceSignOrCreatio
        LDKInvoice o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        o_conv = Invoice_clone(&o_conv);
        LDKCResult_InvoiceSignOrCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceSignOrCreationErrorZ), "LDKCResult_InvoiceSignOrCreationErrorZ");
        *ret_conv = CResult_InvoiceSignOrCreationErrorZ_ok(o_conv);
@@ -13730,6 +15852,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_InvoiceSignOrCreatio
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_InvoiceSignOrCreationErrorZ_is_ok(uint32_t o) {
+       LDKCResult_InvoiceSignOrCreationErrorZ* o_conv = (LDKCResult_InvoiceSignOrCreationErrorZ*)(o & ~1);
+       jboolean ret_val = CResult_InvoiceSignOrCreationErrorZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_InvoiceSignOrCreationErrorZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13739,6 +15867,17 @@ void  __attribute__((visibility("default"))) TS_CResult_InvoiceSignOrCreationErr
        CResult_InvoiceSignOrCreationErrorZ_free(_res_conv);
 }
 
+static inline uint64_t CResult_InvoiceSignOrCreationErrorZ_clone_ptr(LDKCResult_InvoiceSignOrCreationErrorZ *NONNULL_PTR arg) {
+       LDKCResult_InvoiceSignOrCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceSignOrCreationErrorZ), "LDKCResult_InvoiceSignOrCreationErrorZ");
+       *ret_conv = CResult_InvoiceSignOrCreationErrorZ_clone(arg);
+       return (uint64_t)ret_conv;
+}
+int64_t  __attribute__((visibility("default"))) TS_CResult_InvoiceSignOrCreationErrorZ_clone_ptr(uint32_t arg) {
+       LDKCResult_InvoiceSignOrCreationErrorZ* arg_conv = (LDKCResult_InvoiceSignOrCreationErrorZ*)(arg & ~1);
+       int64_t ret_val = CResult_InvoiceSignOrCreationErrorZ_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CResult_InvoiceSignOrCreationErrorZ_clone(uint32_t orig) {
        LDKCResult_InvoiceSignOrCreationErrorZ* orig_conv = (LDKCResult_InvoiceSignOrCreationErrorZ*)(orig & ~1);
        LDKCResult_InvoiceSignOrCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceSignOrCreationErrorZ), "LDKCResult_InvoiceSignOrCreationErrorZ");
@@ -13776,6 +15915,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_LockedChannelMonitor
        LDKLockedChannelMonitor o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = (o & 1) || (o == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        // Warning: we need a move here but no clone is available for LDKLockedChannelMonitor
        LDKCResult_LockedChannelMonitorNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_LockedChannelMonitorNoneZ), "LDKCResult_LockedChannelMonitorNoneZ");
        *ret_conv = CResult_LockedChannelMonitorNoneZ_ok(o_conv);
@@ -13788,6 +15928,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CResult_LockedChannelMonitor
        return (uint64_t)ret_conv;
 }
 
+jboolean  __attribute__((visibility("default"))) TS_CResult_LockedChannelMonitorNoneZ_is_ok(uint32_t o) {
+       LDKCResult_LockedChannelMonitorNoneZ* o_conv = (LDKCResult_LockedChannelMonitorNoneZ*)(o & ~1);
+       jboolean ret_val = CResult_LockedChannelMonitorNoneZ_is_ok(o_conv);
+       return ret_val;
+}
+
 void  __attribute__((visibility("default"))) TS_CResult_LockedChannelMonitorNoneZ_free(uint32_t _res) {
        if ((_res & 1) != 0) return;
        void* _res_ptr = (void*)(((uint64_t)_res) & ~1);
@@ -13810,6 +15956,7 @@ void  __attribute__((visibility("default"))) TS_CVec_OutPointZ_free(uint32_tArra
                LDKOutPoint _res_conv_10_conv;
                _res_conv_10_conv.inner = (void*)(_res_conv_10 & (~1));
                _res_conv_10_conv.is_owned = (_res_conv_10 & 1) || (_res_conv_10 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(_res_conv_10_conv);
                _res_constr.data[k] = _res_conv_10_conv;
        }
        CVec_OutPointZ_free(_res_constr);
@@ -13824,6 +15971,18 @@ void  __attribute__((visibility("default"))) TS_PaymentPurpose_free(uint32_t thi
        PaymentPurpose_free(this_ptr_conv);
 }
 
+static inline uint64_t PaymentPurpose_clone_ptr(LDKPaymentPurpose *NONNULL_PTR arg) {
+       LDKPaymentPurpose *ret_copy = MALLOC(sizeof(LDKPaymentPurpose), "LDKPaymentPurpose");
+       *ret_copy = PaymentPurpose_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_PaymentPurpose_clone_ptr(uint32_t arg) {
+       LDKPaymentPurpose* arg_conv = (LDKPaymentPurpose*)arg;
+       int64_t ret_val = PaymentPurpose_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_PaymentPurpose_clone(uint32_t orig) {
        LDKPaymentPurpose* orig_conv = (LDKPaymentPurpose*)orig;
        LDKPaymentPurpose *ret_copy = MALLOC(sizeof(LDKPaymentPurpose), "LDKPaymentPurpose");
@@ -13864,6 +16023,18 @@ void  __attribute__((visibility("default"))) TS_ClosureReason_free(uint32_t this
        ClosureReason_free(this_ptr_conv);
 }
 
+static inline uint64_t ClosureReason_clone_ptr(LDKClosureReason *NONNULL_PTR arg) {
+       LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
+       *ret_copy = ClosureReason_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_ClosureReason_clone_ptr(uint32_t arg) {
+       LDKClosureReason* arg_conv = (LDKClosureReason*)arg;
+       int64_t ret_val = ClosureReason_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_ClosureReason_clone(uint32_t orig) {
        LDKClosureReason* orig_conv = (LDKClosureReason*)orig;
        LDKClosureReason *ret_copy = MALLOC(sizeof(LDKClosureReason), "LDKClosureReason");
@@ -13932,6 +16103,15 @@ int8_tArray  __attribute__((visibility("default"))) TS_ClosureReason_write(uint3
        return ret_arr;
 }
 
+uint32_t  __attribute__((visibility("default"))) TS_ClosureReason_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = *((uint32_t*)ser);
+       ser_ref.data = (int8_t*)(ser + 4);
+       LDKCResult_COption_ClosureReasonZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_ClosureReasonZDecodeErrorZ), "LDKCResult_COption_ClosureReasonZDecodeErrorZ");
+       *ret_conv = ClosureReason_read(ser_ref);
+       return (uint64_t)ret_conv;
+}
+
 void  __attribute__((visibility("default"))) TS_Event_free(uint32_t this_ptr) {
        if ((this_ptr & 1) != 0) return;
        void* this_ptr_ptr = (void*)(((uint64_t)this_ptr) & ~1);
@@ -13941,6 +16121,18 @@ void  __attribute__((visibility("default"))) TS_Event_free(uint32_t this_ptr) {
        Event_free(this_ptr_conv);
 }
 
+static inline uint64_t Event_clone_ptr(LDKEvent *NONNULL_PTR arg) {
+       LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
+       *ret_copy = Event_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_Event_clone_ptr(uint32_t arg) {
+       LDKEvent* arg_conv = (LDKEvent*)arg;
+       int64_t ret_val = Event_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_Event_clone(uint32_t orig) {
        LDKEvent* orig_conv = (LDKEvent*)orig;
        LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
@@ -14020,6 +16212,7 @@ uint32_t  __attribute__((visibility("default"))) TS_Event_payment_path_failed(in
                LDKRouteHop path_conv_10_conv;
                path_conv_10_conv.inner = (void*)(path_conv_10 & (~1));
                path_conv_10_conv.is_owned = (path_conv_10 & 1) || (path_conv_10 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(path_conv_10_conv);
                path_conv_10_conv = RouteHop_clone(&path_conv_10_conv);
                path_constr.data[k] = path_conv_10_conv;
        }
@@ -14030,6 +16223,7 @@ uint32_t  __attribute__((visibility("default"))) TS_Event_payment_path_failed(in
        LDKRouteParameters retry_conv;
        retry_conv.inner = (void*)(retry & (~1));
        retry_conv.is_owned = (retry & 1) || (retry == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(retry_conv);
        retry_conv = RouteParameters_clone(&retry_conv);
        LDKEvent *ret_copy = MALLOC(sizeof(LDKEvent), "LDKEvent");
        *ret_copy = Event_payment_path_failed(payment_id_ref, payment_hash_ref, rejected_by_dest, network_update_conv, all_paths_failed, path_constr, short_channel_id_conv, retry_conv);
@@ -14115,6 +16309,15 @@ int8_tArray  __attribute__((visibility("default"))) TS_Event_write(uint32_t obj)
        return ret_arr;
 }
 
+uint32_t  __attribute__((visibility("default"))) TS_Event_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = *((uint32_t*)ser);
+       ser_ref.data = (int8_t*)(ser + 4);
+       LDKCResult_COption_EventZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_EventZDecodeErrorZ), "LDKCResult_COption_EventZDecodeErrorZ");
+       *ret_conv = Event_read(ser_ref);
+       return (uint64_t)ret_conv;
+}
+
 void  __attribute__((visibility("default"))) TS_MessageSendEvent_free(uint32_t this_ptr) {
        if ((this_ptr & 1) != 0) return;
        void* this_ptr_ptr = (void*)(((uint64_t)this_ptr) & ~1);
@@ -14124,6 +16327,18 @@ void  __attribute__((visibility("default"))) TS_MessageSendEvent_free(uint32_t t
        MessageSendEvent_free(this_ptr_conv);
 }
 
+static inline uint64_t MessageSendEvent_clone_ptr(LDKMessageSendEvent *NONNULL_PTR arg) {
+       LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
+       *ret_copy = MessageSendEvent_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_MessageSendEvent_clone_ptr(uint32_t arg) {
+       LDKMessageSendEvent* arg_conv = (LDKMessageSendEvent*)arg;
+       int64_t ret_val = MessageSendEvent_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_MessageSendEvent_clone(uint32_t orig) {
        LDKMessageSendEvent* orig_conv = (LDKMessageSendEvent*)orig;
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
@@ -14139,6 +16354,7 @@ uint32_t  __attribute__((visibility("default"))) TS_MessageSendEvent_send_accept
        LDKAcceptChannel msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = AcceptChannel_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_send_accept_channel(node_id_ref, msg_conv);
@@ -14153,6 +16369,7 @@ uint32_t  __attribute__((visibility("default"))) TS_MessageSendEvent_send_open_c
        LDKOpenChannel msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = OpenChannel_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_send_open_channel(node_id_ref, msg_conv);
@@ -14167,6 +16384,7 @@ uint32_t  __attribute__((visibility("default"))) TS_MessageSendEvent_send_fundin
        LDKFundingCreated msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = FundingCreated_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_send_funding_created(node_id_ref, msg_conv);
@@ -14181,6 +16399,7 @@ uint32_t  __attribute__((visibility("default"))) TS_MessageSendEvent_send_fundin
        LDKFundingSigned msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = FundingSigned_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_send_funding_signed(node_id_ref, msg_conv);
@@ -14195,6 +16414,7 @@ uint32_t  __attribute__((visibility("default"))) TS_MessageSendEvent_send_fundin
        LDKFundingLocked msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = FundingLocked_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_send_funding_locked(node_id_ref, msg_conv);
@@ -14209,6 +16429,7 @@ uint32_t  __attribute__((visibility("default"))) TS_MessageSendEvent_send_announ
        LDKAnnouncementSignatures msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = AnnouncementSignatures_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_send_announcement_signatures(node_id_ref, msg_conv);
@@ -14223,6 +16444,7 @@ uint32_t  __attribute__((visibility("default"))) TS_MessageSendEvent_update_htlc
        LDKCommitmentUpdate updates_conv;
        updates_conv.inner = (void*)(updates & (~1));
        updates_conv.is_owned = (updates & 1) || (updates == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(updates_conv);
        updates_conv = CommitmentUpdate_clone(&updates_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_update_htlcs(node_id_ref, updates_conv);
@@ -14237,6 +16459,7 @@ uint32_t  __attribute__((visibility("default"))) TS_MessageSendEvent_send_revoke
        LDKRevokeAndACK msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = RevokeAndACK_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_send_revoke_and_ack(node_id_ref, msg_conv);
@@ -14251,6 +16474,7 @@ uint32_t  __attribute__((visibility("default"))) TS_MessageSendEvent_send_closin
        LDKClosingSigned msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = ClosingSigned_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_send_closing_signed(node_id_ref, msg_conv);
@@ -14265,6 +16489,7 @@ uint32_t  __attribute__((visibility("default"))) TS_MessageSendEvent_send_shutdo
        LDKShutdown msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = Shutdown_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_send_shutdown(node_id_ref, msg_conv);
@@ -14279,6 +16504,7 @@ uint32_t  __attribute__((visibility("default"))) TS_MessageSendEvent_send_channe
        LDKChannelReestablish msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = ChannelReestablish_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_send_channel_reestablish(node_id_ref, msg_conv);
@@ -14290,10 +16516,12 @@ uint32_t  __attribute__((visibility("default"))) TS_MessageSendEvent_broadcast_c
        LDKChannelAnnouncement msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = ChannelAnnouncement_clone(&msg_conv);
        LDKChannelUpdate update_msg_conv;
        update_msg_conv.inner = (void*)(update_msg & (~1));
        update_msg_conv.is_owned = (update_msg & 1) || (update_msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_msg_conv);
        update_msg_conv = ChannelUpdate_clone(&update_msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_broadcast_channel_announcement(msg_conv, update_msg_conv);
@@ -14305,6 +16533,7 @@ uint32_t  __attribute__((visibility("default"))) TS_MessageSendEvent_broadcast_n
        LDKNodeAnnouncement msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = NodeAnnouncement_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_broadcast_node_announcement(msg_conv);
@@ -14316,6 +16545,7 @@ uint32_t  __attribute__((visibility("default"))) TS_MessageSendEvent_broadcast_c
        LDKChannelUpdate msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = ChannelUpdate_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_broadcast_channel_update(msg_conv);
@@ -14330,6 +16560,7 @@ uint32_t  __attribute__((visibility("default"))) TS_MessageSendEvent_send_channe
        LDKChannelUpdate msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = ChannelUpdate_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_send_channel_update(node_id_ref, msg_conv);
@@ -14358,6 +16589,7 @@ uint32_t  __attribute__((visibility("default"))) TS_MessageSendEvent_send_channe
        LDKQueryChannelRange msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = QueryChannelRange_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_send_channel_range_query(node_id_ref, msg_conv);
@@ -14372,6 +16604,7 @@ uint32_t  __attribute__((visibility("default"))) TS_MessageSendEvent_send_short_
        LDKQueryShortChannelIds msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = QueryShortChannelIds_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_send_short_ids_query(node_id_ref, msg_conv);
@@ -14386,6 +16619,7 @@ uint32_t  __attribute__((visibility("default"))) TS_MessageSendEvent_send_reply_
        LDKReplyChannelRange msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = ReplyChannelRange_clone(&msg_conv);
        LDKMessageSendEvent *ret_copy = MALLOC(sizeof(LDKMessageSendEvent), "LDKMessageSendEvent");
        *ret_copy = MessageSendEvent_send_reply_channel_range(node_id_ref, msg_conv);
@@ -14429,6 +16663,18 @@ void  __attribute__((visibility("default"))) TS_APIError_free(uint32_t this_ptr)
        APIError_free(this_ptr_conv);
 }
 
+static inline uint64_t APIError_clone_ptr(LDKAPIError *NONNULL_PTR arg) {
+       LDKAPIError *ret_copy = MALLOC(sizeof(LDKAPIError), "LDKAPIError");
+       *ret_copy = APIError_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_APIError_clone_ptr(uint32_t arg) {
+       LDKAPIError* arg_conv = (LDKAPIError*)arg;
+       int64_t ret_val = APIError_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_APIError_clone(uint32_t orig) {
        LDKAPIError* orig_conv = (LDKAPIError*)orig;
        LDKAPIError *ret_copy = MALLOC(sizeof(LDKAPIError), "LDKAPIError");
@@ -14480,6 +16726,7 @@ uint32_t  __attribute__((visibility("default"))) TS_APIError_incompatible_shutdo
        LDKShutdownScript script_conv;
        script_conv.inner = (void*)(script & (~1));
        script_conv.is_owned = (script & 1) || (script == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(script_conv);
        script_conv = ShutdownScript_clone(&script_conv);
        LDKAPIError *ret_copy = MALLOC(sizeof(LDKAPIError), "LDKAPIError");
        *ret_copy = APIError_incompatible_shutdown_script(script_conv);
@@ -14571,6 +16818,147 @@ uint32_t  __attribute__((visibility("default"))) TS_Level_max() {
        return ret_conv;
 }
 
+void  __attribute__((visibility("default"))) TS_Record_free(uint32_t this_obj) {
+       LDKRecord this_obj_conv;
+       this_obj_conv.inner = (void*)(this_obj & (~1));
+       this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
+       Record_free(this_obj_conv);
+}
+
+uint32_t  __attribute__((visibility("default"))) TS_Record_get_level(uint32_t this_ptr) {
+       LDKRecord this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       uint32_t ret_conv = LDKLevel_to_js(Record_get_level(&this_ptr_conv));
+       return ret_conv;
+}
+
+void  __attribute__((visibility("default"))) TS_Record_set_level(uint32_t this_ptr, uint32_t val) {
+       LDKRecord this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKLevel val_conv = LDKLevel_from_js(val);
+       Record_set_level(&this_ptr_conv, val_conv);
+}
+
+jstring  __attribute__((visibility("default"))) TS_Record_get_args(uint32_t this_ptr) {
+       LDKRecord this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKStr ret_str = Record_get_args(&this_ptr_conv);
+       jstring ret_conv = str_ref_to_ts(ret_str.chars, ret_str.len);
+       Str_free(ret_str);
+       return ret_conv;
+}
+
+void  __attribute__((visibility("default"))) TS_Record_set_args(uint32_t this_ptr, jstring val) {
+       LDKRecord this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKStr val_conv = str_ref_to_owned_c(val);
+       Record_set_args(&this_ptr_conv, val_conv);
+}
+
+jstring  __attribute__((visibility("default"))) TS_Record_get_module_path(uint32_t this_ptr) {
+       LDKRecord this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKStr ret_str = Record_get_module_path(&this_ptr_conv);
+       jstring ret_conv = str_ref_to_ts(ret_str.chars, ret_str.len);
+       Str_free(ret_str);
+       return ret_conv;
+}
+
+void  __attribute__((visibility("default"))) TS_Record_set_module_path(uint32_t this_ptr, jstring val) {
+       LDKRecord this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKStr val_conv = str_ref_to_owned_c(val);
+       Record_set_module_path(&this_ptr_conv, val_conv);
+}
+
+jstring  __attribute__((visibility("default"))) TS_Record_get_file(uint32_t this_ptr) {
+       LDKRecord this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKStr ret_str = Record_get_file(&this_ptr_conv);
+       jstring ret_conv = str_ref_to_ts(ret_str.chars, ret_str.len);
+       Str_free(ret_str);
+       return ret_conv;
+}
+
+void  __attribute__((visibility("default"))) TS_Record_set_file(uint32_t this_ptr, jstring val) {
+       LDKRecord this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       LDKStr val_conv = str_ref_to_owned_c(val);
+       Record_set_file(&this_ptr_conv, val_conv);
+}
+
+int32_t  __attribute__((visibility("default"))) TS_Record_get_line(uint32_t this_ptr) {
+       LDKRecord this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       int32_t ret_val = Record_get_line(&this_ptr_conv);
+       return ret_val;
+}
+
+void  __attribute__((visibility("default"))) TS_Record_set_line(uint32_t this_ptr, int32_t val) {
+       LDKRecord this_ptr_conv;
+       this_ptr_conv.inner = (void*)(this_ptr & (~1));
+       this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
+       Record_set_line(&this_ptr_conv, val);
+}
+
+static inline uint64_t Record_clone_ptr(LDKRecord *NONNULL_PTR arg) {
+       LDKRecord ret_var = Record_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_Record_clone_ptr(uint32_t arg) {
+       LDKRecord arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = Record_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
+uint32_t  __attribute__((visibility("default"))) TS_Record_clone(uint32_t orig) {
+       LDKRecord orig_conv;
+       orig_conv.inner = (void*)(orig & (~1));
+       orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
+       LDKRecord ret_var = Record_clone(&orig_conv);
+       uint64_t ret_ref = 0;
+       CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+       CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+       ret_ref = (uint64_t)ret_var.inner;
+       if (ret_var.is_owned) {
+               ret_ref |= 1;
+       }
+       return ret_ref;
+}
+
 void  __attribute__((visibility("default"))) TS_Logger_free(uint32_t this_ptr) {
        if ((this_ptr & 1) != 0) return;
        void* this_ptr_ptr = (void*)(((uint64_t)this_ptr) & ~1);
@@ -14584,6 +16972,7 @@ void  __attribute__((visibility("default"))) TS_ChannelHandshakeConfig_free(uint
        LDKChannelHandshakeConfig this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelHandshakeConfig_free(this_obj_conv);
 }
 
@@ -14591,6 +16980,7 @@ int32_t  __attribute__((visibility("default"))) TS_ChannelHandshakeConfig_get_mi
        LDKChannelHandshakeConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = ChannelHandshakeConfig_get_minimum_depth(&this_ptr_conv);
        return ret_val;
 }
@@ -14599,6 +16989,7 @@ void  __attribute__((visibility("default"))) TS_ChannelHandshakeConfig_set_minim
        LDKChannelHandshakeConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelHandshakeConfig_set_minimum_depth(&this_ptr_conv, val);
 }
 
@@ -14606,6 +16997,7 @@ int16_t  __attribute__((visibility("default"))) TS_ChannelHandshakeConfig_get_ou
        LDKChannelHandshakeConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = ChannelHandshakeConfig_get_our_to_self_delay(&this_ptr_conv);
        return ret_val;
 }
@@ -14614,6 +17006,7 @@ void  __attribute__((visibility("default"))) TS_ChannelHandshakeConfig_set_our_t
        LDKChannelHandshakeConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelHandshakeConfig_set_our_to_self_delay(&this_ptr_conv, val);
 }
 
@@ -14621,6 +17014,7 @@ int64_t  __attribute__((visibility("default"))) TS_ChannelHandshakeConfig_get_ou
        LDKChannelHandshakeConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelHandshakeConfig_get_our_htlc_minimum_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -14629,6 +17023,7 @@ void  __attribute__((visibility("default"))) TS_ChannelHandshakeConfig_set_our_h
        LDKChannelHandshakeConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelHandshakeConfig_set_our_htlc_minimum_msat(&this_ptr_conv, val);
 }
 
@@ -14637,6 +17032,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelHandshakeConfig_new(i
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -14644,14 +17040,37 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelHandshakeConfig_new(i
        return ret_ref;
 }
 
+static inline uint64_t ChannelHandshakeConfig_clone_ptr(LDKChannelHandshakeConfig *NONNULL_PTR arg) {
+       LDKChannelHandshakeConfig ret_var = ChannelHandshakeConfig_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_ChannelHandshakeConfig_clone_ptr(uint32_t arg) {
+       LDKChannelHandshakeConfig arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChannelHandshakeConfig_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_ChannelHandshakeConfig_clone(uint32_t orig) {
        LDKChannelHandshakeConfig orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChannelHandshakeConfig ret_var = ChannelHandshakeConfig_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -14664,6 +17083,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelHandshakeConfig_defau
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -14675,6 +17095,7 @@ void  __attribute__((visibility("default"))) TS_ChannelHandshakeLimits_free(uint
        LDKChannelHandshakeLimits this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelHandshakeLimits_free(this_obj_conv);
 }
 
@@ -14682,6 +17103,7 @@ int64_t  __attribute__((visibility("default"))) TS_ChannelHandshakeLimits_get_mi
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelHandshakeLimits_get_min_funding_satoshis(&this_ptr_conv);
        return ret_val;
 }
@@ -14690,6 +17112,7 @@ void  __attribute__((visibility("default"))) TS_ChannelHandshakeLimits_set_min_f
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelHandshakeLimits_set_min_funding_satoshis(&this_ptr_conv, val);
 }
 
@@ -14697,6 +17120,7 @@ int64_t  __attribute__((visibility("default"))) TS_ChannelHandshakeLimits_get_ma
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelHandshakeLimits_get_max_htlc_minimum_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -14705,6 +17129,7 @@ void  __attribute__((visibility("default"))) TS_ChannelHandshakeLimits_set_max_h
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelHandshakeLimits_set_max_htlc_minimum_msat(&this_ptr_conv, val);
 }
 
@@ -14712,6 +17137,7 @@ int64_t  __attribute__((visibility("default"))) TS_ChannelHandshakeLimits_get_mi
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelHandshakeLimits_get_min_max_htlc_value_in_flight_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -14720,6 +17146,7 @@ void  __attribute__((visibility("default"))) TS_ChannelHandshakeLimits_set_min_m
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelHandshakeLimits_set_min_max_htlc_value_in_flight_msat(&this_ptr_conv, val);
 }
 
@@ -14727,6 +17154,7 @@ int64_t  __attribute__((visibility("default"))) TS_ChannelHandshakeLimits_get_ma
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelHandshakeLimits_get_max_channel_reserve_satoshis(&this_ptr_conv);
        return ret_val;
 }
@@ -14735,6 +17163,7 @@ void  __attribute__((visibility("default"))) TS_ChannelHandshakeLimits_set_max_c
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelHandshakeLimits_set_max_channel_reserve_satoshis(&this_ptr_conv, val);
 }
 
@@ -14742,6 +17171,7 @@ int16_t  __attribute__((visibility("default"))) TS_ChannelHandshakeLimits_get_mi
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = ChannelHandshakeLimits_get_min_max_accepted_htlcs(&this_ptr_conv);
        return ret_val;
 }
@@ -14750,6 +17180,7 @@ void  __attribute__((visibility("default"))) TS_ChannelHandshakeLimits_set_min_m
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelHandshakeLimits_set_min_max_accepted_htlcs(&this_ptr_conv, val);
 }
 
@@ -14757,6 +17188,7 @@ int32_t  __attribute__((visibility("default"))) TS_ChannelHandshakeLimits_get_ma
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = ChannelHandshakeLimits_get_max_minimum_depth(&this_ptr_conv);
        return ret_val;
 }
@@ -14765,6 +17197,7 @@ void  __attribute__((visibility("default"))) TS_ChannelHandshakeLimits_set_max_m
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelHandshakeLimits_set_max_minimum_depth(&this_ptr_conv, val);
 }
 
@@ -14772,6 +17205,7 @@ jboolean  __attribute__((visibility("default"))) TS_ChannelHandshakeLimits_get_f
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        jboolean ret_val = ChannelHandshakeLimits_get_force_announced_channel_preference(&this_ptr_conv);
        return ret_val;
 }
@@ -14780,6 +17214,7 @@ void  __attribute__((visibility("default"))) TS_ChannelHandshakeLimits_set_force
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelHandshakeLimits_set_force_announced_channel_preference(&this_ptr_conv, val);
 }
 
@@ -14787,6 +17222,7 @@ int16_t  __attribute__((visibility("default"))) TS_ChannelHandshakeLimits_get_th
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = ChannelHandshakeLimits_get_their_to_self_delay(&this_ptr_conv);
        return ret_val;
 }
@@ -14795,6 +17231,7 @@ void  __attribute__((visibility("default"))) TS_ChannelHandshakeLimits_set_their
        LDKChannelHandshakeLimits this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelHandshakeLimits_set_their_to_self_delay(&this_ptr_conv, val);
 }
 
@@ -14803,6 +17240,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelHandshakeLimits_new(i
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -14810,14 +17248,37 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelHandshakeLimits_new(i
        return ret_ref;
 }
 
+static inline uint64_t ChannelHandshakeLimits_clone_ptr(LDKChannelHandshakeLimits *NONNULL_PTR arg) {
+       LDKChannelHandshakeLimits ret_var = ChannelHandshakeLimits_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_ChannelHandshakeLimits_clone_ptr(uint32_t arg) {
+       LDKChannelHandshakeLimits arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChannelHandshakeLimits_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_ChannelHandshakeLimits_clone(uint32_t orig) {
        LDKChannelHandshakeLimits orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChannelHandshakeLimits ret_var = ChannelHandshakeLimits_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -14830,6 +17291,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelHandshakeLimits_defau
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -14841,6 +17303,7 @@ void  __attribute__((visibility("default"))) TS_ChannelConfig_free(uint32_t this
        LDKChannelConfig this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelConfig_free(this_obj_conv);
 }
 
@@ -14848,6 +17311,7 @@ int32_t  __attribute__((visibility("default"))) TS_ChannelConfig_get_forwarding_
        LDKChannelConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = ChannelConfig_get_forwarding_fee_proportional_millionths(&this_ptr_conv);
        return ret_val;
 }
@@ -14856,6 +17320,7 @@ void  __attribute__((visibility("default"))) TS_ChannelConfig_set_forwarding_fee
        LDKChannelConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelConfig_set_forwarding_fee_proportional_millionths(&this_ptr_conv, val);
 }
 
@@ -14863,6 +17328,7 @@ int32_t  __attribute__((visibility("default"))) TS_ChannelConfig_get_forwarding_
        LDKChannelConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = ChannelConfig_get_forwarding_fee_base_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -14871,6 +17337,7 @@ void  __attribute__((visibility("default"))) TS_ChannelConfig_set_forwarding_fee
        LDKChannelConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelConfig_set_forwarding_fee_base_msat(&this_ptr_conv, val);
 }
 
@@ -14878,6 +17345,7 @@ int16_t  __attribute__((visibility("default"))) TS_ChannelConfig_get_cltv_expiry
        LDKChannelConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = ChannelConfig_get_cltv_expiry_delta(&this_ptr_conv);
        return ret_val;
 }
@@ -14886,6 +17354,7 @@ void  __attribute__((visibility("default"))) TS_ChannelConfig_set_cltv_expiry_de
        LDKChannelConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelConfig_set_cltv_expiry_delta(&this_ptr_conv, val);
 }
 
@@ -14893,6 +17362,7 @@ jboolean  __attribute__((visibility("default"))) TS_ChannelConfig_get_announced_
        LDKChannelConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        jboolean ret_val = ChannelConfig_get_announced_channel(&this_ptr_conv);
        return ret_val;
 }
@@ -14901,6 +17371,7 @@ void  __attribute__((visibility("default"))) TS_ChannelConfig_set_announced_chan
        LDKChannelConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelConfig_set_announced_channel(&this_ptr_conv, val);
 }
 
@@ -14908,6 +17379,7 @@ jboolean  __attribute__((visibility("default"))) TS_ChannelConfig_get_commit_upf
        LDKChannelConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        jboolean ret_val = ChannelConfig_get_commit_upfront_shutdown_pubkey(&this_ptr_conv);
        return ret_val;
 }
@@ -14916,6 +17388,7 @@ void  __attribute__((visibility("default"))) TS_ChannelConfig_set_commit_upfront
        LDKChannelConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelConfig_set_commit_upfront_shutdown_pubkey(&this_ptr_conv, val);
 }
 
@@ -14923,6 +17396,7 @@ int64_t  __attribute__((visibility("default"))) TS_ChannelConfig_get_max_dust_ht
        LDKChannelConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelConfig_get_max_dust_htlc_exposure_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -14931,6 +17405,7 @@ void  __attribute__((visibility("default"))) TS_ChannelConfig_set_max_dust_htlc_
        LDKChannelConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelConfig_set_max_dust_htlc_exposure_msat(&this_ptr_conv, val);
 }
 
@@ -14938,6 +17413,7 @@ int64_t  __attribute__((visibility("default"))) TS_ChannelConfig_get_force_close
        LDKChannelConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelConfig_get_force_close_avoidance_max_fee_satoshis(&this_ptr_conv);
        return ret_val;
 }
@@ -14946,6 +17422,7 @@ void  __attribute__((visibility("default"))) TS_ChannelConfig_set_force_close_av
        LDKChannelConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelConfig_set_force_close_avoidance_max_fee_satoshis(&this_ptr_conv, val);
 }
 
@@ -14954,6 +17431,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelConfig_new(int32_t fo
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -14961,14 +17439,37 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelConfig_new(int32_t fo
        return ret_ref;
 }
 
+static inline uint64_t ChannelConfig_clone_ptr(LDKChannelConfig *NONNULL_PTR arg) {
+       LDKChannelConfig ret_var = ChannelConfig_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_ChannelConfig_clone_ptr(uint32_t arg) {
+       LDKChannelConfig arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChannelConfig_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_ChannelConfig_clone(uint32_t orig) {
        LDKChannelConfig orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChannelConfig ret_var = ChannelConfig_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -14981,6 +17482,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelConfig_default() {
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -14992,6 +17494,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ChannelConfig_write(uint3
        LDKChannelConfig obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ChannelConfig_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -15012,6 +17515,7 @@ void  __attribute__((visibility("default"))) TS_UserConfig_free(uint32_t this_ob
        LDKUserConfig this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        UserConfig_free(this_obj_conv);
 }
 
@@ -15019,10 +17523,12 @@ uint32_t  __attribute__((visibility("default"))) TS_UserConfig_get_own_channel_c
        LDKUserConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelHandshakeConfig ret_var = UserConfig_get_own_channel_config(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -15034,9 +17540,11 @@ void  __attribute__((visibility("default"))) TS_UserConfig_set_own_channel_confi
        LDKUserConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelHandshakeConfig val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = ChannelHandshakeConfig_clone(&val_conv);
        UserConfig_set_own_channel_config(&this_ptr_conv, val_conv);
 }
@@ -15045,10 +17553,12 @@ uint32_t  __attribute__((visibility("default"))) TS_UserConfig_get_peer_channel_
        LDKUserConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelHandshakeLimits ret_var = UserConfig_get_peer_channel_config_limits(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -15060,9 +17570,11 @@ void  __attribute__((visibility("default"))) TS_UserConfig_set_peer_channel_conf
        LDKUserConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelHandshakeLimits val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = ChannelHandshakeLimits_clone(&val_conv);
        UserConfig_set_peer_channel_config_limits(&this_ptr_conv, val_conv);
 }
@@ -15071,10 +17583,12 @@ uint32_t  __attribute__((visibility("default"))) TS_UserConfig_get_channel_optio
        LDKUserConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelConfig ret_var = UserConfig_get_channel_options(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -15086,9 +17600,11 @@ void  __attribute__((visibility("default"))) TS_UserConfig_set_channel_options(u
        LDKUserConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelConfig val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = ChannelConfig_clone(&val_conv);
        UserConfig_set_channel_options(&this_ptr_conv, val_conv);
 }
@@ -15097,6 +17613,7 @@ jboolean  __attribute__((visibility("default"))) TS_UserConfig_get_accept_forwar
        LDKUserConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        jboolean ret_val = UserConfig_get_accept_forwards_to_priv_channels(&this_ptr_conv);
        return ret_val;
 }
@@ -15105,6 +17622,7 @@ void  __attribute__((visibility("default"))) TS_UserConfig_set_accept_forwards_t
        LDKUserConfig this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UserConfig_set_accept_forwards_to_priv_channels(&this_ptr_conv, val);
 }
 
@@ -15112,19 +17630,23 @@ uint32_t  __attribute__((visibility("default"))) TS_UserConfig_new(uint32_t own_
        LDKChannelHandshakeConfig own_channel_config_arg_conv;
        own_channel_config_arg_conv.inner = (void*)(own_channel_config_arg & (~1));
        own_channel_config_arg_conv.is_owned = (own_channel_config_arg & 1) || (own_channel_config_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(own_channel_config_arg_conv);
        own_channel_config_arg_conv = ChannelHandshakeConfig_clone(&own_channel_config_arg_conv);
        LDKChannelHandshakeLimits peer_channel_config_limits_arg_conv;
        peer_channel_config_limits_arg_conv.inner = (void*)(peer_channel_config_limits_arg & (~1));
        peer_channel_config_limits_arg_conv.is_owned = (peer_channel_config_limits_arg & 1) || (peer_channel_config_limits_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(peer_channel_config_limits_arg_conv);
        peer_channel_config_limits_arg_conv = ChannelHandshakeLimits_clone(&peer_channel_config_limits_arg_conv);
        LDKChannelConfig channel_options_arg_conv;
        channel_options_arg_conv.inner = (void*)(channel_options_arg & (~1));
        channel_options_arg_conv.is_owned = (channel_options_arg & 1) || (channel_options_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_options_arg_conv);
        channel_options_arg_conv = ChannelConfig_clone(&channel_options_arg_conv);
        LDKUserConfig ret_var = UserConfig_new(own_channel_config_arg_conv, peer_channel_config_limits_arg_conv, channel_options_arg_conv, accept_forwards_to_priv_channels_arg);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -15132,14 +17654,37 @@ uint32_t  __attribute__((visibility("default"))) TS_UserConfig_new(uint32_t own_
        return ret_ref;
 }
 
+static inline uint64_t UserConfig_clone_ptr(LDKUserConfig *NONNULL_PTR arg) {
+       LDKUserConfig ret_var = UserConfig_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_UserConfig_clone_ptr(uint32_t arg) {
+       LDKUserConfig arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = UserConfig_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_UserConfig_clone(uint32_t orig) {
        LDKUserConfig orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKUserConfig ret_var = UserConfig_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -15152,6 +17697,7 @@ uint32_t  __attribute__((visibility("default"))) TS_UserConfig_default() {
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -15163,17 +17709,41 @@ void  __attribute__((visibility("default"))) TS_BestBlock_free(uint32_t this_obj
        LDKBestBlock this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        BestBlock_free(this_obj_conv);
 }
 
+static inline uint64_t BestBlock_clone_ptr(LDKBestBlock *NONNULL_PTR arg) {
+       LDKBestBlock ret_var = BestBlock_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_BestBlock_clone_ptr(uint32_t arg) {
+       LDKBestBlock arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = BestBlock_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_BestBlock_clone(uint32_t orig) {
        LDKBestBlock orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKBestBlock ret_var = BestBlock_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -15187,6 +17757,7 @@ uint32_t  __attribute__((visibility("default"))) TS_BestBlock_from_genesis(uint3
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -15202,6 +17773,7 @@ uint32_t  __attribute__((visibility("default"))) TS_BestBlock_new(int8_tArray bl
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -15213,6 +17785,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_BestBlock_block_hash(uint
        LDKBestBlock this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), BestBlock_block_hash(&this_arg_conv).data, 32);
        return ret_arr;
@@ -15222,6 +17795,7 @@ int32_t  __attribute__((visibility("default"))) TS_BestBlock_height(uint32_t thi
        LDKBestBlock this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int32_t ret_val = BestBlock_height(&this_arg_conv);
        return ret_val;
 }
@@ -15307,6 +17881,7 @@ void  __attribute__((visibility("default"))) TS_WatchedOutput_free(uint32_t this
        LDKWatchedOutput this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        WatchedOutput_free(this_obj_conv);
 }
 
@@ -15314,6 +17889,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_WatchedOutput_get_block_h
        LDKWatchedOutput this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), WatchedOutput_get_block_hash(&this_ptr_conv).data, 32);
        return ret_arr;
@@ -15323,6 +17899,7 @@ void  __attribute__((visibility("default"))) TS_WatchedOutput_set_block_hash(uin
        LDKWatchedOutput this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -15333,10 +17910,12 @@ uint32_t  __attribute__((visibility("default"))) TS_WatchedOutput_get_outpoint(u
        LDKWatchedOutput this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKOutPoint ret_var = WatchedOutput_get_outpoint(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -15348,9 +17927,11 @@ void  __attribute__((visibility("default"))) TS_WatchedOutput_set_outpoint(uint3
        LDKWatchedOutput this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKOutPoint val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = OutPoint_clone(&val_conv);
        WatchedOutput_set_outpoint(&this_ptr_conv, val_conv);
 }
@@ -15359,6 +17940,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_WatchedOutput_get_script_
        LDKWatchedOutput this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKu8slice ret_var = WatchedOutput_get_script_pubkey(&this_ptr_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -15369,6 +17951,7 @@ void  __attribute__((visibility("default"))) TS_WatchedOutput_set_script_pubkey(
        LDKWatchedOutput this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_u8Z val_ref;
        val_ref.datalen = *((uint32_t*)val);
        val_ref.data = MALLOC(val_ref.datalen, "LDKCVec_u8Z Bytes");
@@ -15383,6 +17966,7 @@ uint32_t  __attribute__((visibility("default"))) TS_WatchedOutput_new(int8_tArra
        LDKOutPoint outpoint_arg_conv;
        outpoint_arg_conv.inner = (void*)(outpoint_arg & (~1));
        outpoint_arg_conv.is_owned = (outpoint_arg & 1) || (outpoint_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_arg_conv);
        outpoint_arg_conv = OutPoint_clone(&outpoint_arg_conv);
        LDKCVec_u8Z script_pubkey_arg_ref;
        script_pubkey_arg_ref.datalen = *((uint32_t*)script_pubkey_arg);
@@ -15392,6 +17976,7 @@ uint32_t  __attribute__((visibility("default"))) TS_WatchedOutput_new(int8_tArra
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -15399,14 +17984,37 @@ uint32_t  __attribute__((visibility("default"))) TS_WatchedOutput_new(int8_tArra
        return ret_ref;
 }
 
+static inline uint64_t WatchedOutput_clone_ptr(LDKWatchedOutput *NONNULL_PTR arg) {
+       LDKWatchedOutput ret_var = WatchedOutput_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_WatchedOutput_clone_ptr(uint32_t arg) {
+       LDKWatchedOutput arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = WatchedOutput_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_WatchedOutput_clone(uint32_t orig) {
        LDKWatchedOutput orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKWatchedOutput ret_var = WatchedOutput_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -15418,6 +18026,7 @@ int64_t  __attribute__((visibility("default"))) TS_WatchedOutput_hash(uint32_t o
        LDKWatchedOutput o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = WatchedOutput_hash(&o_conv);
        return ret_val;
 }
@@ -15472,17 +18081,41 @@ void  __attribute__((visibility("default"))) TS_MonitorUpdateId_free(uint32_t th
        LDKMonitorUpdateId this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        MonitorUpdateId_free(this_obj_conv);
 }
 
+static inline uint64_t MonitorUpdateId_clone_ptr(LDKMonitorUpdateId *NONNULL_PTR arg) {
+       LDKMonitorUpdateId ret_var = MonitorUpdateId_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_MonitorUpdateId_clone_ptr(uint32_t arg) {
+       LDKMonitorUpdateId arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = MonitorUpdateId_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_MonitorUpdateId_clone(uint32_t orig) {
        LDKMonitorUpdateId orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKMonitorUpdateId ret_var = MonitorUpdateId_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -15494,6 +18127,7 @@ int64_t  __attribute__((visibility("default"))) TS_MonitorUpdateId_hash(uint32_t
        LDKMonitorUpdateId o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = MonitorUpdateId_hash(&o_conv);
        return ret_val;
 }
@@ -15502,9 +18136,11 @@ jboolean  __attribute__((visibility("default"))) TS_MonitorUpdateId_eq(uint32_t
        LDKMonitorUpdateId a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKMonitorUpdateId b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = MonitorUpdateId_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -15522,6 +18158,7 @@ void  __attribute__((visibility("default"))) TS_LockedChannelMonitor_free(uint32
        LDKLockedChannelMonitor this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        LockedChannelMonitor_free(this_obj_conv);
 }
 
@@ -15529,6 +18166,7 @@ void  __attribute__((visibility("default"))) TS_ChainMonitor_free(uint32_t this_
        LDKChainMonitor this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChainMonitor_free(this_obj_conv);
 }
 
@@ -15556,6 +18194,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChainMonitor_new(uint32_t ch
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -15567,6 +18206,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_ChainMonitor_get_claima
        LDKChainMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCVec_ChannelDetailsZ ignored_channels_constr;
        ignored_channels_constr.datalen = *((uint32_t*)ignored_channels);
        if (ignored_channels_constr.datalen > 0)
@@ -15579,6 +18219,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_ChainMonitor_get_claima
                LDKChannelDetails ignored_channels_conv_16_conv;
                ignored_channels_conv_16_conv.inner = (void*)(ignored_channels_conv_16 & (~1));
                ignored_channels_conv_16_conv.is_owned = (ignored_channels_conv_16 & 1) || (ignored_channels_conv_16 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ignored_channels_conv_16_conv);
                ignored_channels_conv_16_conv = ChannelDetails_clone(&ignored_channels_conv_16_conv);
                ignored_channels_constr.data[q] = ignored_channels_conv_16_conv;
        }
@@ -15601,9 +18242,11 @@ uint32_t  __attribute__((visibility("default"))) TS_ChainMonitor_get_monitor(uin
        LDKChainMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKOutPoint funding_txo_conv;
        funding_txo_conv.inner = (void*)(funding_txo & (~1));
        funding_txo_conv.is_owned = (funding_txo & 1) || (funding_txo == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_txo_conv);
        funding_txo_conv = OutPoint_clone(&funding_txo_conv);
        LDKCResult_LockedChannelMonitorNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_LockedChannelMonitorNoneZ), "LDKCResult_LockedChannelMonitorNoneZ");
        *ret_conv = ChainMonitor_get_monitor(&this_arg_conv, funding_txo_conv);
@@ -15614,6 +18257,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_ChainMonitor_list_monit
        LDKChainMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCVec_OutPointZ ret_var = ChainMonitor_list_monitors(&this_arg_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_arr(ret_var.datalen, sizeof(uint32_t), "Native uint32_tArray Bytes");
@@ -15623,6 +18267,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_ChainMonitor_list_monit
                uint64_t ret_conv_10_ref = 0;
                CHECK((((uint64_t)ret_conv_10_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_conv_10_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_10_var);
                ret_conv_10_ref = (uint64_t)ret_conv_10_var.inner;
                if (ret_conv_10_var.is_owned) {
                        ret_conv_10_ref |= 1;
@@ -15638,13 +18283,16 @@ uint32_t  __attribute__((visibility("default"))) TS_ChainMonitor_channel_monitor
        LDKChainMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKOutPoint funding_txo_conv;
        funding_txo_conv.inner = (void*)(funding_txo & (~1));
        funding_txo_conv.is_owned = (funding_txo & 1) || (funding_txo == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_txo_conv);
        funding_txo_conv = OutPoint_clone(&funding_txo_conv);
        LDKMonitorUpdateId completed_update_id_conv;
        completed_update_id_conv.inner = (void*)(completed_update_id & (~1));
        completed_update_id_conv.is_owned = (completed_update_id & 1) || (completed_update_id == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(completed_update_id_conv);
        completed_update_id_conv = MonitorUpdateId_clone(&completed_update_id_conv);
        LDKCResult_NoneAPIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneAPIErrorZ), "LDKCResult_NoneAPIErrorZ");
        *ret_conv = ChainMonitor_channel_monitor_updated(&this_arg_conv, funding_txo_conv, completed_update_id_conv);
@@ -15655,6 +18303,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChainMonitor_as_Listen(uint3
        LDKChainMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKListen* ret_ret = MALLOC(sizeof(LDKListen), "LDKListen");
        *ret_ret = ChainMonitor_as_Listen(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -15664,6 +18313,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChainMonitor_as_Confirm(uint
        LDKChainMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKConfirm* ret_ret = MALLOC(sizeof(LDKConfirm), "LDKConfirm");
        *ret_ret = ChainMonitor_as_Confirm(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -15673,6 +18323,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChainMonitor_as_Watch(uint32
        LDKChainMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKWatch* ret_ret = MALLOC(sizeof(LDKWatch), "LDKWatch");
        *ret_ret = ChainMonitor_as_Watch(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -15682,6 +18333,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChainMonitor_as_EventsProvid
        LDKChainMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKEventsProvider* ret_ret = MALLOC(sizeof(LDKEventsProvider), "LDKEventsProvider");
        *ret_ret = ChainMonitor_as_EventsProvider(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -15691,6 +18343,7 @@ void  __attribute__((visibility("default"))) TS_ChannelMonitorUpdate_free(uint32
        LDKChannelMonitorUpdate this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelMonitorUpdate_free(this_obj_conv);
 }
 
@@ -15698,6 +18351,7 @@ int64_t  __attribute__((visibility("default"))) TS_ChannelMonitorUpdate_get_upda
        LDKChannelMonitorUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelMonitorUpdate_get_update_id(&this_ptr_conv);
        return ret_val;
 }
@@ -15706,17 +18360,41 @@ void  __attribute__((visibility("default"))) TS_ChannelMonitorUpdate_set_update_
        LDKChannelMonitorUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelMonitorUpdate_set_update_id(&this_ptr_conv, val);
 }
 
+static inline uint64_t ChannelMonitorUpdate_clone_ptr(LDKChannelMonitorUpdate *NONNULL_PTR arg) {
+       LDKChannelMonitorUpdate ret_var = ChannelMonitorUpdate_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_ChannelMonitorUpdate_clone_ptr(uint32_t arg) {
+       LDKChannelMonitorUpdate arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChannelMonitorUpdate_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_ChannelMonitorUpdate_clone(uint32_t orig) {
        LDKChannelMonitorUpdate orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChannelMonitorUpdate ret_var = ChannelMonitorUpdate_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -15728,6 +18406,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ChannelMonitorUpdate_writ
        LDKChannelMonitorUpdate obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ChannelMonitorUpdate_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -15748,6 +18427,7 @@ void  __attribute__((visibility("default"))) TS_MonitorUpdateError_free(uint32_t
        LDKMonitorUpdateError this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        MonitorUpdateError_free(this_obj_conv);
 }
 
@@ -15755,6 +18435,7 @@ jstring  __attribute__((visibility("default"))) TS_MonitorUpdateError_get_a(uint
        LDKMonitorUpdateError this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKStr ret_str = MonitorUpdateError_get_a(&this_ptr_conv);
        jstring ret_conv = str_ref_to_ts(ret_str.chars, ret_str.len);
        Str_free(ret_str);
@@ -15765,6 +18446,7 @@ void  __attribute__((visibility("default"))) TS_MonitorUpdateError_set_a(uint32_
        LDKMonitorUpdateError this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKStr val_conv = str_ref_to_owned_c(val);
        MonitorUpdateError_set_a(&this_ptr_conv, val_conv);
 }
@@ -15775,6 +18457,7 @@ uint32_t  __attribute__((visibility("default"))) TS_MonitorUpdateError_new(jstri
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -15782,14 +18465,37 @@ uint32_t  __attribute__((visibility("default"))) TS_MonitorUpdateError_new(jstri
        return ret_ref;
 }
 
+static inline uint64_t MonitorUpdateError_clone_ptr(LDKMonitorUpdateError *NONNULL_PTR arg) {
+       LDKMonitorUpdateError ret_var = MonitorUpdateError_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_MonitorUpdateError_clone_ptr(uint32_t arg) {
+       LDKMonitorUpdateError arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = MonitorUpdateError_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_MonitorUpdateError_clone(uint32_t orig) {
        LDKMonitorUpdateError orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKMonitorUpdateError ret_var = MonitorUpdateError_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -15806,6 +18512,18 @@ void  __attribute__((visibility("default"))) TS_MonitorEvent_free(uint32_t this_
        MonitorEvent_free(this_ptr_conv);
 }
 
+static inline uint64_t MonitorEvent_clone_ptr(LDKMonitorEvent *NONNULL_PTR arg) {
+       LDKMonitorEvent *ret_copy = MALLOC(sizeof(LDKMonitorEvent), "LDKMonitorEvent");
+       *ret_copy = MonitorEvent_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_MonitorEvent_clone_ptr(uint32_t arg) {
+       LDKMonitorEvent* arg_conv = (LDKMonitorEvent*)arg;
+       int64_t ret_val = MonitorEvent_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_MonitorEvent_clone(uint32_t orig) {
        LDKMonitorEvent* orig_conv = (LDKMonitorEvent*)orig;
        LDKMonitorEvent *ret_copy = MALLOC(sizeof(LDKMonitorEvent), "LDKMonitorEvent");
@@ -15818,6 +18536,7 @@ uint32_t  __attribute__((visibility("default"))) TS_MonitorEvent_htlcevent(uint3
        LDKHTLCUpdate a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = (a & 1) || (a == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv = HTLCUpdate_clone(&a_conv);
        LDKMonitorEvent *ret_copy = MALLOC(sizeof(LDKMonitorEvent), "LDKMonitorEvent");
        *ret_copy = MonitorEvent_htlcevent(a_conv);
@@ -15829,6 +18548,7 @@ uint32_t  __attribute__((visibility("default"))) TS_MonitorEvent_commitment_tx_c
        LDKOutPoint a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = (a & 1) || (a == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv = OutPoint_clone(&a_conv);
        LDKMonitorEvent *ret_copy = MALLOC(sizeof(LDKMonitorEvent), "LDKMonitorEvent");
        *ret_copy = MonitorEvent_commitment_tx_confirmed(a_conv);
@@ -15840,6 +18560,7 @@ uint32_t  __attribute__((visibility("default"))) TS_MonitorEvent_update_complete
        LDKOutPoint funding_txo_conv;
        funding_txo_conv.inner = (void*)(funding_txo & (~1));
        funding_txo_conv.is_owned = (funding_txo & 1) || (funding_txo == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_txo_conv);
        funding_txo_conv = OutPoint_clone(&funding_txo_conv);
        LDKMonitorEvent *ret_copy = MALLOC(sizeof(LDKMonitorEvent), "LDKMonitorEvent");
        *ret_copy = MonitorEvent_update_completed(funding_txo_conv, monitor_update_id);
@@ -15851,6 +18572,7 @@ uint32_t  __attribute__((visibility("default"))) TS_MonitorEvent_update_failed(u
        LDKOutPoint a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = (a & 1) || (a == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv = OutPoint_clone(&a_conv);
        LDKMonitorEvent *ret_copy = MALLOC(sizeof(LDKMonitorEvent), "LDKMonitorEvent");
        *ret_copy = MonitorEvent_update_failed(a_conv);
@@ -15867,21 +18589,54 @@ int8_tArray  __attribute__((visibility("default"))) TS_MonitorEvent_write(uint32
        return ret_arr;
 }
 
+uint32_t  __attribute__((visibility("default"))) TS_MonitorEvent_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = *((uint32_t*)ser);
+       ser_ref.data = (int8_t*)(ser + 4);
+       LDKCResult_COption_MonitorEventZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_MonitorEventZDecodeErrorZ), "LDKCResult_COption_MonitorEventZDecodeErrorZ");
+       *ret_conv = MonitorEvent_read(ser_ref);
+       return (uint64_t)ret_conv;
+}
+
 void  __attribute__((visibility("default"))) TS_HTLCUpdate_free(uint32_t this_obj) {
        LDKHTLCUpdate this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        HTLCUpdate_free(this_obj_conv);
 }
 
+static inline uint64_t HTLCUpdate_clone_ptr(LDKHTLCUpdate *NONNULL_PTR arg) {
+       LDKHTLCUpdate ret_var = HTLCUpdate_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_HTLCUpdate_clone_ptr(uint32_t arg) {
+       LDKHTLCUpdate arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = HTLCUpdate_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_HTLCUpdate_clone(uint32_t orig) {
        LDKHTLCUpdate orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKHTLCUpdate ret_var = HTLCUpdate_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -15893,6 +18648,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_HTLCUpdate_write(uint32_t
        LDKHTLCUpdate obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = HTLCUpdate_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -15918,6 +18674,18 @@ void  __attribute__((visibility("default"))) TS_Balance_free(uint32_t this_ptr)
        Balance_free(this_ptr_conv);
 }
 
+static inline uint64_t Balance_clone_ptr(LDKBalance *NONNULL_PTR arg) {
+       LDKBalance *ret_copy = MALLOC(sizeof(LDKBalance), "LDKBalance");
+       *ret_copy = Balance_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_Balance_clone_ptr(uint32_t arg) {
+       LDKBalance* arg_conv = (LDKBalance*)arg;
+       int64_t ret_val = Balance_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_Balance_clone(uint32_t orig) {
        LDKBalance* orig_conv = (LDKBalance*)orig;
        LDKBalance *ret_copy = MALLOC(sizeof(LDKBalance), "LDKBalance");
@@ -15965,17 +18733,41 @@ void  __attribute__((visibility("default"))) TS_ChannelMonitor_free(uint32_t thi
        LDKChannelMonitor this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelMonitor_free(this_obj_conv);
 }
 
+static inline uint64_t ChannelMonitor_clone_ptr(LDKChannelMonitor *NONNULL_PTR arg) {
+       LDKChannelMonitor ret_var = ChannelMonitor_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_ChannelMonitor_clone_ptr(uint32_t arg) {
+       LDKChannelMonitor arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChannelMonitor_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_ChannelMonitor_clone(uint32_t orig) {
        LDKChannelMonitor orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChannelMonitor ret_var = ChannelMonitor_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -15987,6 +18779,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ChannelMonitor_write(uint
        LDKChannelMonitor obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ChannelMonitor_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -15998,9 +18791,11 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelMonitor_update_monito
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKChannelMonitorUpdate updates_conv;
        updates_conv.inner = (void*)(updates & (~1));
        updates_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(updates_conv);
        void* broadcaster_ptr = (void*)(((uint64_t)broadcaster) & ~1);
        if (!(broadcaster & 1)) { CHECK_ACCESS(broadcaster_ptr); }
        LDKBroadcasterInterface* broadcaster_conv = (LDKBroadcasterInterface*)broadcaster_ptr;
@@ -16019,6 +18814,7 @@ int64_t  __attribute__((visibility("default"))) TS_ChannelMonitor_get_latest_upd
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = ChannelMonitor_get_latest_update_id(&this_arg_conv);
        return ret_val;
 }
@@ -16027,6 +18823,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelMonitor_get_funding_t
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKC2Tuple_OutPointScriptZ* ret_conv = MALLOC(sizeof(LDKC2Tuple_OutPointScriptZ), "LDKC2Tuple_OutPointScriptZ");
        *ret_conv = ChannelMonitor_get_funding_txo(&this_arg_conv);
        return ((uint64_t)ret_conv);
@@ -16036,6 +18833,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_ChannelMonitor_get_outp
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ ret_var = ChannelMonitor_get_outputs_to_watch(&this_arg_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_arr(ret_var.datalen, sizeof(uint32_t), "Native uint32_tArray Bytes");
@@ -16054,6 +18852,7 @@ void  __attribute__((visibility("default"))) TS_ChannelMonitor_load_outputs_to_w
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        void* filter_ptr = (void*)(((uint64_t)filter) & ~1);
        if (!(filter & 1)) { CHECK_ACCESS(filter_ptr); }
        LDKFilter* filter_conv = (LDKFilter*)filter_ptr;
@@ -16064,6 +18863,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_ChannelMonitor_get_and_
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCVec_MonitorEventZ ret_var = ChannelMonitor_get_and_clear_pending_monitor_events(&this_arg_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_arr(ret_var.datalen, sizeof(uint32_t), "Native uint32_tArray Bytes");
@@ -16083,6 +18883,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_ChannelMonitor_get_and_
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCVec_EventZ ret_var = ChannelMonitor_get_and_clear_pending_events(&this_arg_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_arr(ret_var.datalen, sizeof(uint32_t), "Native uint32_tArray Bytes");
@@ -16102,6 +18903,7 @@ ptrArray  __attribute__((visibility("default"))) TS_ChannelMonitor_get_latest_ho
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        void* logger_ptr = (void*)(((uint64_t)logger) & ~1);
        if (!(logger & 1)) { CHECK_ACCESS(logger_ptr); }
        LDKLogger* logger_conv = (LDKLogger*)logger_ptr;
@@ -16125,6 +18927,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_ChannelMonitor_block_co
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char header_arr[80];
        CHECK(*((uint32_t*)header) == 80);
        memcpy(header_arr, (uint8_t*)(header + 4), 80);
@@ -16171,6 +18974,7 @@ void  __attribute__((visibility("default"))) TS_ChannelMonitor_block_disconnecte
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char header_arr[80];
        CHECK(*((uint32_t*)header) == 80);
        memcpy(header_arr, (uint8_t*)(header + 4), 80);
@@ -16191,6 +18995,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_ChannelMonitor_transact
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char header_arr[80];
        CHECK(*((uint32_t*)header) == 80);
        memcpy(header_arr, (uint8_t*)(header + 4), 80);
@@ -16237,6 +19042,7 @@ void  __attribute__((visibility("default"))) TS_ChannelMonitor_transaction_uncon
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char txid_arr[32];
        CHECK(*((uint32_t*)txid) == 32);
        memcpy(txid_arr, (uint8_t*)(txid + 4), 32);
@@ -16257,6 +19063,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_ChannelMonitor_best_blo
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char header_arr[80];
        CHECK(*((uint32_t*)header) == 80);
        memcpy(header_arr, (uint8_t*)(header + 4), 80);
@@ -16288,6 +19095,7 @@ ptrArray  __attribute__((visibility("default"))) TS_ChannelMonitor_get_relevant_
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCVec_TxidZ ret_var = ChannelMonitor_get_relevant_txids(&this_arg_conv);
        ptrArray ret_arr = NULL;
        ret_arr = init_arr(ret_var.datalen, sizeof(uint32_t), "Native ptrArray Bytes");
@@ -16306,10 +19114,12 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelMonitor_current_best_
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKBestBlock ret_var = ChannelMonitor_current_best_block(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -16321,6 +19131,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_ChannelMonitor_get_clai
        LDKChannelMonitor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCVec_BalanceZ ret_var = ChannelMonitor_get_claimable_balances(&this_arg_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_arr(ret_var.datalen, sizeof(uint32_t), "Native uint32_tArray Bytes");
@@ -16352,6 +19163,7 @@ void  __attribute__((visibility("default"))) TS_OutPoint_free(uint32_t this_obj)
        LDKOutPoint this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        OutPoint_free(this_obj_conv);
 }
 
@@ -16359,6 +19171,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_OutPoint_get_txid(uint32_
        LDKOutPoint this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *OutPoint_get_txid(&this_ptr_conv), 32);
        return ret_arr;
@@ -16368,6 +19181,7 @@ void  __attribute__((visibility("default"))) TS_OutPoint_set_txid(uint32_t this_
        LDKOutPoint this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -16378,6 +19192,7 @@ int16_t  __attribute__((visibility("default"))) TS_OutPoint_get_index(uint32_t t
        LDKOutPoint this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = OutPoint_get_index(&this_ptr_conv);
        return ret_val;
 }
@@ -16386,6 +19201,7 @@ void  __attribute__((visibility("default"))) TS_OutPoint_set_index(uint32_t this
        LDKOutPoint this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        OutPoint_set_index(&this_ptr_conv, val);
 }
 
@@ -16397,6 +19213,7 @@ uint32_t  __attribute__((visibility("default"))) TS_OutPoint_new(int8_tArray txi
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -16404,14 +19221,37 @@ uint32_t  __attribute__((visibility("default"))) TS_OutPoint_new(int8_tArray txi
        return ret_ref;
 }
 
+static inline uint64_t OutPoint_clone_ptr(LDKOutPoint *NONNULL_PTR arg) {
+       LDKOutPoint ret_var = OutPoint_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_OutPoint_clone_ptr(uint32_t arg) {
+       LDKOutPoint arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = OutPoint_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_OutPoint_clone(uint32_t orig) {
        LDKOutPoint orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKOutPoint ret_var = OutPoint_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -16423,9 +19263,11 @@ jboolean  __attribute__((visibility("default"))) TS_OutPoint_eq(uint32_t a, uint
        LDKOutPoint a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKOutPoint b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = OutPoint_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -16434,6 +19276,7 @@ int64_t  __attribute__((visibility("default"))) TS_OutPoint_hash(uint32_t o) {
        LDKOutPoint o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = OutPoint_hash(&o_conv);
        return ret_val;
 }
@@ -16442,6 +19285,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_OutPoint_to_channel_id(ui
        LDKOutPoint this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), OutPoint_to_channel_id(&this_arg_conv).data, 32);
        return ret_arr;
@@ -16451,6 +19295,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_OutPoint_write(uint32_t o
        LDKOutPoint obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = OutPoint_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -16471,6 +19316,7 @@ void  __attribute__((visibility("default"))) TS_DelayedPaymentOutputDescriptor_f
        LDKDelayedPaymentOutputDescriptor this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        DelayedPaymentOutputDescriptor_free(this_obj_conv);
 }
 
@@ -16478,10 +19324,12 @@ uint32_t  __attribute__((visibility("default"))) TS_DelayedPaymentOutputDescript
        LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKOutPoint ret_var = DelayedPaymentOutputDescriptor_get_outpoint(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -16493,9 +19341,11 @@ void  __attribute__((visibility("default"))) TS_DelayedPaymentOutputDescriptor_s
        LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKOutPoint val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = OutPoint_clone(&val_conv);
        DelayedPaymentOutputDescriptor_set_outpoint(&this_ptr_conv, val_conv);
 }
@@ -16504,6 +19354,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_DelayedPaymentOutputDescr
        LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), DelayedPaymentOutputDescriptor_get_per_commitment_point(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -16513,6 +19364,7 @@ void  __attribute__((visibility("default"))) TS_DelayedPaymentOutputDescriptor_s
        LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -16523,6 +19375,7 @@ int16_t  __attribute__((visibility("default"))) TS_DelayedPaymentOutputDescripto
        LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = DelayedPaymentOutputDescriptor_get_to_self_delay(&this_ptr_conv);
        return ret_val;
 }
@@ -16531,6 +19384,7 @@ void  __attribute__((visibility("default"))) TS_DelayedPaymentOutputDescriptor_s
        LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        DelayedPaymentOutputDescriptor_set_to_self_delay(&this_ptr_conv, val);
 }
 
@@ -16538,6 +19392,7 @@ void  __attribute__((visibility("default"))) TS_DelayedPaymentOutputDescriptor_s
        LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKTxOut val_conv = *(LDKTxOut*)(val_ptr);
@@ -16549,6 +19404,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_DelayedPaymentOutputDescr
        LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), DelayedPaymentOutputDescriptor_get_revocation_pubkey(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -16558,6 +19414,7 @@ void  __attribute__((visibility("default"))) TS_DelayedPaymentOutputDescriptor_s
        LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -16568,6 +19425,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_DelayedPaymentOutputDescr
        LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *DelayedPaymentOutputDescriptor_get_channel_keys_id(&this_ptr_conv), 32);
        return ret_arr;
@@ -16577,6 +19435,7 @@ void  __attribute__((visibility("default"))) TS_DelayedPaymentOutputDescriptor_s
        LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -16587,6 +19446,7 @@ int64_t  __attribute__((visibility("default"))) TS_DelayedPaymentOutputDescripto
        LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = DelayedPaymentOutputDescriptor_get_channel_value_satoshis(&this_ptr_conv);
        return ret_val;
 }
@@ -16595,6 +19455,7 @@ void  __attribute__((visibility("default"))) TS_DelayedPaymentOutputDescriptor_s
        LDKDelayedPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        DelayedPaymentOutputDescriptor_set_channel_value_satoshis(&this_ptr_conv, val);
 }
 
@@ -16602,6 +19463,7 @@ uint32_t  __attribute__((visibility("default"))) TS_DelayedPaymentOutputDescript
        LDKOutPoint outpoint_arg_conv;
        outpoint_arg_conv.inner = (void*)(outpoint_arg & (~1));
        outpoint_arg_conv.is_owned = (outpoint_arg & 1) || (outpoint_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_arg_conv);
        outpoint_arg_conv = OutPoint_clone(&outpoint_arg_conv);
        LDKPublicKey per_commitment_point_arg_ref;
        CHECK(*((uint32_t*)per_commitment_point_arg) == 33);
@@ -16620,6 +19482,7 @@ uint32_t  __attribute__((visibility("default"))) TS_DelayedPaymentOutputDescript
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -16627,14 +19490,37 @@ uint32_t  __attribute__((visibility("default"))) TS_DelayedPaymentOutputDescript
        return ret_ref;
 }
 
+static inline uint64_t DelayedPaymentOutputDescriptor_clone_ptr(LDKDelayedPaymentOutputDescriptor *NONNULL_PTR arg) {
+       LDKDelayedPaymentOutputDescriptor ret_var = DelayedPaymentOutputDescriptor_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_DelayedPaymentOutputDescriptor_clone_ptr(uint32_t arg) {
+       LDKDelayedPaymentOutputDescriptor arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = DelayedPaymentOutputDescriptor_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_DelayedPaymentOutputDescriptor_clone(uint32_t orig) {
        LDKDelayedPaymentOutputDescriptor orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKDelayedPaymentOutputDescriptor ret_var = DelayedPaymentOutputDescriptor_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -16646,6 +19532,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_DelayedPaymentOutputDescr
        LDKDelayedPaymentOutputDescriptor obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = DelayedPaymentOutputDescriptor_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -16666,6 +19553,7 @@ void  __attribute__((visibility("default"))) TS_StaticPaymentOutputDescriptor_fr
        LDKStaticPaymentOutputDescriptor this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        StaticPaymentOutputDescriptor_free(this_obj_conv);
 }
 
@@ -16673,10 +19561,12 @@ uint32_t  __attribute__((visibility("default"))) TS_StaticPaymentOutputDescripto
        LDKStaticPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKOutPoint ret_var = StaticPaymentOutputDescriptor_get_outpoint(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -16688,9 +19578,11 @@ void  __attribute__((visibility("default"))) TS_StaticPaymentOutputDescriptor_se
        LDKStaticPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKOutPoint val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = OutPoint_clone(&val_conv);
        StaticPaymentOutputDescriptor_set_outpoint(&this_ptr_conv, val_conv);
 }
@@ -16699,6 +19591,7 @@ void  __attribute__((visibility("default"))) TS_StaticPaymentOutputDescriptor_se
        LDKStaticPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKTxOut val_conv = *(LDKTxOut*)(val_ptr);
@@ -16710,6 +19603,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_StaticPaymentOutputDescri
        LDKStaticPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *StaticPaymentOutputDescriptor_get_channel_keys_id(&this_ptr_conv), 32);
        return ret_arr;
@@ -16719,6 +19613,7 @@ void  __attribute__((visibility("default"))) TS_StaticPaymentOutputDescriptor_se
        LDKStaticPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -16729,6 +19624,7 @@ int64_t  __attribute__((visibility("default"))) TS_StaticPaymentOutputDescriptor
        LDKStaticPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = StaticPaymentOutputDescriptor_get_channel_value_satoshis(&this_ptr_conv);
        return ret_val;
 }
@@ -16737,6 +19633,7 @@ void  __attribute__((visibility("default"))) TS_StaticPaymentOutputDescriptor_se
        LDKStaticPaymentOutputDescriptor this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        StaticPaymentOutputDescriptor_set_channel_value_satoshis(&this_ptr_conv, val);
 }
 
@@ -16744,6 +19641,7 @@ uint32_t  __attribute__((visibility("default"))) TS_StaticPaymentOutputDescripto
        LDKOutPoint outpoint_arg_conv;
        outpoint_arg_conv.inner = (void*)(outpoint_arg & (~1));
        outpoint_arg_conv.is_owned = (outpoint_arg & 1) || (outpoint_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_arg_conv);
        outpoint_arg_conv = OutPoint_clone(&outpoint_arg_conv);
        void* output_arg_ptr = (void*)(((uint64_t)output_arg) & ~1);
        CHECK_ACCESS(output_arg_ptr);
@@ -16756,6 +19654,7 @@ uint32_t  __attribute__((visibility("default"))) TS_StaticPaymentOutputDescripto
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -16763,14 +19662,37 @@ uint32_t  __attribute__((visibility("default"))) TS_StaticPaymentOutputDescripto
        return ret_ref;
 }
 
+static inline uint64_t StaticPaymentOutputDescriptor_clone_ptr(LDKStaticPaymentOutputDescriptor *NONNULL_PTR arg) {
+       LDKStaticPaymentOutputDescriptor ret_var = StaticPaymentOutputDescriptor_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_StaticPaymentOutputDescriptor_clone_ptr(uint32_t arg) {
+       LDKStaticPaymentOutputDescriptor arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = StaticPaymentOutputDescriptor_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_StaticPaymentOutputDescriptor_clone(uint32_t orig) {
        LDKStaticPaymentOutputDescriptor orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKStaticPaymentOutputDescriptor ret_var = StaticPaymentOutputDescriptor_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -16782,6 +19704,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_StaticPaymentOutputDescri
        LDKStaticPaymentOutputDescriptor obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = StaticPaymentOutputDescriptor_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -16807,6 +19730,18 @@ void  __attribute__((visibility("default"))) TS_SpendableOutputDescriptor_free(u
        SpendableOutputDescriptor_free(this_ptr_conv);
 }
 
+static inline uint64_t SpendableOutputDescriptor_clone_ptr(LDKSpendableOutputDescriptor *NONNULL_PTR arg) {
+       LDKSpendableOutputDescriptor *ret_copy = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor");
+       *ret_copy = SpendableOutputDescriptor_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_SpendableOutputDescriptor_clone_ptr(uint32_t arg) {
+       LDKSpendableOutputDescriptor* arg_conv = (LDKSpendableOutputDescriptor*)arg;
+       int64_t ret_val = SpendableOutputDescriptor_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_SpendableOutputDescriptor_clone(uint32_t orig) {
        LDKSpendableOutputDescriptor* orig_conv = (LDKSpendableOutputDescriptor*)orig;
        LDKSpendableOutputDescriptor *ret_copy = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor");
@@ -16819,6 +19754,7 @@ uint32_t  __attribute__((visibility("default"))) TS_SpendableOutputDescriptor_st
        LDKOutPoint outpoint_conv;
        outpoint_conv.inner = (void*)(outpoint & (~1));
        outpoint_conv.is_owned = (outpoint & 1) || (outpoint == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(outpoint_conv);
        outpoint_conv = OutPoint_clone(&outpoint_conv);
        void* output_ptr = (void*)(((uint64_t)output) & ~1);
        CHECK_ACCESS(output_ptr);
@@ -16834,6 +19770,7 @@ uint32_t  __attribute__((visibility("default"))) TS_SpendableOutputDescriptor_de
        LDKDelayedPaymentOutputDescriptor a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = (a & 1) || (a == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv = DelayedPaymentOutputDescriptor_clone(&a_conv);
        LDKSpendableOutputDescriptor *ret_copy = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor");
        *ret_copy = SpendableOutputDescriptor_delayed_payment_output(a_conv);
@@ -16845,6 +19782,7 @@ uint32_t  __attribute__((visibility("default"))) TS_SpendableOutputDescriptor_st
        LDKStaticPaymentOutputDescriptor a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = (a & 1) || (a == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv = StaticPaymentOutputDescriptor_clone(&a_conv);
        LDKSpendableOutputDescriptor *ret_copy = MALLOC(sizeof(LDKSpendableOutputDescriptor), "LDKSpendableOutputDescriptor");
        *ret_copy = SpendableOutputDescriptor_static_payment_output(a_conv);
@@ -16879,6 +19817,19 @@ void  __attribute__((visibility("default"))) TS_BaseSign_free(uint32_t this_ptr)
        BaseSign_free(this_ptr_conv);
 }
 
+static inline uint64_t Sign_clone_ptr(LDKSign *NONNULL_PTR arg) {
+       LDKSign* ret_ret = MALLOC(sizeof(LDKSign), "LDKSign");
+       *ret_ret = Sign_clone(arg);
+       return (uint64_t)ret_ret;
+}
+int64_t  __attribute__((visibility("default"))) TS_Sign_clone_ptr(uint32_t arg) {
+       void* arg_ptr = (void*)(((uint64_t)arg) & ~1);
+       if (!(arg & 1)) { CHECK_ACCESS(arg_ptr); }
+       LDKSign* arg_conv = (LDKSign*)arg_ptr;
+       int64_t ret_val = Sign_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_Sign_clone(uint32_t orig) {
        void* orig_ptr = (void*)(((uint64_t)orig) & ~1);
        if (!(orig & 1)) { CHECK_ACCESS(orig_ptr); }
@@ -16910,6 +19861,7 @@ void  __attribute__((visibility("default"))) TS_InMemorySigner_free(uint32_t thi
        LDKInMemorySigner this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        InMemorySigner_free(this_obj_conv);
 }
 
@@ -16917,6 +19869,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_InMemorySigner_get_fundin
        LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *InMemorySigner_get_funding_key(&this_ptr_conv), 32);
        return ret_arr;
@@ -16926,6 +19879,7 @@ void  __attribute__((visibility("default"))) TS_InMemorySigner_set_funding_key(u
        LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSecretKey val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.bytes, (uint8_t*)(val + 4), 32);
@@ -16936,6 +19890,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_InMemorySigner_get_revoca
        LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *InMemorySigner_get_revocation_base_key(&this_ptr_conv), 32);
        return ret_arr;
@@ -16945,6 +19900,7 @@ void  __attribute__((visibility("default"))) TS_InMemorySigner_set_revocation_ba
        LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSecretKey val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.bytes, (uint8_t*)(val + 4), 32);
@@ -16955,6 +19911,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_InMemorySigner_get_paymen
        LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *InMemorySigner_get_payment_key(&this_ptr_conv), 32);
        return ret_arr;
@@ -16964,6 +19921,7 @@ void  __attribute__((visibility("default"))) TS_InMemorySigner_set_payment_key(u
        LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSecretKey val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.bytes, (uint8_t*)(val + 4), 32);
@@ -16974,6 +19932,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_InMemorySigner_get_delaye
        LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *InMemorySigner_get_delayed_payment_base_key(&this_ptr_conv), 32);
        return ret_arr;
@@ -16983,6 +19942,7 @@ void  __attribute__((visibility("default"))) TS_InMemorySigner_set_delayed_payme
        LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSecretKey val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.bytes, (uint8_t*)(val + 4), 32);
@@ -16993,6 +19953,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_InMemorySigner_get_htlc_b
        LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *InMemorySigner_get_htlc_base_key(&this_ptr_conv), 32);
        return ret_arr;
@@ -17002,6 +19963,7 @@ void  __attribute__((visibility("default"))) TS_InMemorySigner_set_htlc_base_key
        LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSecretKey val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.bytes, (uint8_t*)(val + 4), 32);
@@ -17012,6 +19974,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_InMemorySigner_get_commit
        LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *InMemorySigner_get_commitment_seed(&this_ptr_conv), 32);
        return ret_arr;
@@ -17021,20 +19984,44 @@ void  __attribute__((visibility("default"))) TS_InMemorySigner_set_commitment_se
        LDKInMemorySigner this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
        InMemorySigner_set_commitment_seed(&this_ptr_conv, val_ref);
 }
 
+static inline uint64_t InMemorySigner_clone_ptr(LDKInMemorySigner *NONNULL_PTR arg) {
+       LDKInMemorySigner ret_var = InMemorySigner_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_InMemorySigner_clone_ptr(uint32_t arg) {
+       LDKInMemorySigner arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = InMemorySigner_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_InMemorySigner_clone(uint32_t orig) {
        LDKInMemorySigner orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKInMemorySigner ret_var = InMemorySigner_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -17068,6 +20055,7 @@ uint32_t  __attribute__((visibility("default"))) TS_InMemorySigner_new(int8_tArr
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -17079,10 +20067,12 @@ uint32_t  __attribute__((visibility("default"))) TS_InMemorySigner_counterparty_
        LDKInMemorySigner this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKChannelPublicKeys ret_var = InMemorySigner_counterparty_pubkeys(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -17094,6 +20084,7 @@ int16_t  __attribute__((visibility("default"))) TS_InMemorySigner_counterparty_s
        LDKInMemorySigner this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int16_t ret_val = InMemorySigner_counterparty_selected_contest_delay(&this_arg_conv);
        return ret_val;
 }
@@ -17102,6 +20093,7 @@ int16_t  __attribute__((visibility("default"))) TS_InMemorySigner_holder_selecte
        LDKInMemorySigner this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int16_t ret_val = InMemorySigner_holder_selected_contest_delay(&this_arg_conv);
        return ret_val;
 }
@@ -17110,6 +20102,7 @@ jboolean  __attribute__((visibility("default"))) TS_InMemorySigner_is_outbound(u
        LDKInMemorySigner this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        jboolean ret_val = InMemorySigner_is_outbound(&this_arg_conv);
        return ret_val;
 }
@@ -17118,10 +20111,12 @@ uint32_t  __attribute__((visibility("default"))) TS_InMemorySigner_funding_outpo
        LDKInMemorySigner this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKOutPoint ret_var = InMemorySigner_funding_outpoint(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -17133,10 +20128,12 @@ uint32_t  __attribute__((visibility("default"))) TS_InMemorySigner_get_channel_p
        LDKInMemorySigner this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKChannelTransactionParameters ret_var = InMemorySigner_get_channel_parameters(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -17148,6 +20145,7 @@ uint32_t  __attribute__((visibility("default"))) TS_InMemorySigner_sign_counterp
        LDKInMemorySigner this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKTransaction spend_tx_ref;
        spend_tx_ref.datalen = *((uint32_t*)spend_tx);
        spend_tx_ref.data = MALLOC(spend_tx_ref.datalen, "LDKTransaction Bytes");
@@ -17156,6 +20154,7 @@ uint32_t  __attribute__((visibility("default"))) TS_InMemorySigner_sign_counterp
        LDKStaticPaymentOutputDescriptor descriptor_conv;
        descriptor_conv.inner = (void*)(descriptor & (~1));
        descriptor_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(descriptor_conv);
        LDKCResult_CVec_CVec_u8ZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_CVec_u8ZZNoneZ), "LDKCResult_CVec_CVec_u8ZZNoneZ");
        *ret_conv = InMemorySigner_sign_counterparty_payment_input(&this_arg_conv, spend_tx_ref, input_idx, &descriptor_conv);
        return (uint64_t)ret_conv;
@@ -17165,6 +20164,7 @@ uint32_t  __attribute__((visibility("default"))) TS_InMemorySigner_sign_dynamic_
        LDKInMemorySigner this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKTransaction spend_tx_ref;
        spend_tx_ref.datalen = *((uint32_t*)spend_tx);
        spend_tx_ref.data = MALLOC(spend_tx_ref.datalen, "LDKTransaction Bytes");
@@ -17173,6 +20173,7 @@ uint32_t  __attribute__((visibility("default"))) TS_InMemorySigner_sign_dynamic_
        LDKDelayedPaymentOutputDescriptor descriptor_conv;
        descriptor_conv.inner = (void*)(descriptor & (~1));
        descriptor_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(descriptor_conv);
        LDKCResult_CVec_CVec_u8ZZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_CVec_u8ZZNoneZ), "LDKCResult_CVec_CVec_u8ZZNoneZ");
        *ret_conv = InMemorySigner_sign_dynamic_p2wsh_input(&this_arg_conv, spend_tx_ref, input_idx, &descriptor_conv);
        return (uint64_t)ret_conv;
@@ -17182,6 +20183,7 @@ uint32_t  __attribute__((visibility("default"))) TS_InMemorySigner_as_BaseSign(u
        LDKInMemorySigner this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKBaseSign* ret_ret = MALLOC(sizeof(LDKBaseSign), "LDKBaseSign");
        *ret_ret = InMemorySigner_as_BaseSign(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -17191,6 +20193,7 @@ uint32_t  __attribute__((visibility("default"))) TS_InMemorySigner_as_Sign(uint3
        LDKInMemorySigner this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKSign* ret_ret = MALLOC(sizeof(LDKSign), "LDKSign");
        *ret_ret = InMemorySigner_as_Sign(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -17200,6 +20203,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_InMemorySigner_write(uint
        LDKInMemorySigner obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = InMemorySigner_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -17220,6 +20224,7 @@ void  __attribute__((visibility("default"))) TS_KeysManager_free(uint32_t this_o
        LDKKeysManager this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        KeysManager_free(this_obj_conv);
 }
 
@@ -17232,6 +20237,7 @@ uint32_t  __attribute__((visibility("default"))) TS_KeysManager_new(int8_tArray
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -17243,6 +20249,7 @@ uint32_t  __attribute__((visibility("default"))) TS_KeysManager_derive_channel_k
        LDKKeysManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char params_arr[32];
        CHECK(*((uint32_t*)params) == 32);
        memcpy(params_arr, (uint8_t*)(params + 4), 32);
@@ -17251,6 +20258,7 @@ uint32_t  __attribute__((visibility("default"))) TS_KeysManager_derive_channel_k
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -17262,6 +20270,7 @@ uint32_t  __attribute__((visibility("default"))) TS_KeysManager_spend_spendable_
        LDKKeysManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCVec_SpendableOutputDescriptorZ descriptors_constr;
        descriptors_constr.datalen = *((uint32_t*)descriptors);
        if (descriptors_constr.datalen > 0)
@@ -17305,6 +20314,7 @@ uint32_t  __attribute__((visibility("default"))) TS_KeysManager_as_KeysInterface
        LDKKeysManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKKeysInterface* ret_ret = MALLOC(sizeof(LDKKeysInterface), "LDKKeysInterface");
        *ret_ret = KeysManager_as_KeysInterface(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -17314,6 +20324,7 @@ void  __attribute__((visibility("default"))) TS_ChannelManager_free(uint32_t thi
        LDKChannelManager this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelManager_free(this_obj_conv);
 }
 
@@ -17321,6 +20332,7 @@ void  __attribute__((visibility("default"))) TS_ChainParameters_free(uint32_t th
        LDKChainParameters this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChainParameters_free(this_obj_conv);
 }
 
@@ -17328,6 +20340,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChainParameters_get_network(
        LDKChainParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        uint32_t ret_conv = LDKNetwork_to_js(ChainParameters_get_network(&this_ptr_conv));
        return ret_conv;
 }
@@ -17336,6 +20349,7 @@ void  __attribute__((visibility("default"))) TS_ChainParameters_set_network(uint
        LDKChainParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNetwork val_conv = LDKNetwork_from_js(val);
        ChainParameters_set_network(&this_ptr_conv, val_conv);
 }
@@ -17344,10 +20358,12 @@ uint32_t  __attribute__((visibility("default"))) TS_ChainParameters_get_best_blo
        LDKChainParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKBestBlock ret_var = ChainParameters_get_best_block(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -17359,9 +20375,11 @@ void  __attribute__((visibility("default"))) TS_ChainParameters_set_best_block(u
        LDKChainParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKBestBlock val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = BestBlock_clone(&val_conv);
        ChainParameters_set_best_block(&this_ptr_conv, val_conv);
 }
@@ -17371,11 +20389,13 @@ uint32_t  __attribute__((visibility("default"))) TS_ChainParameters_new(uint32_t
        LDKBestBlock best_block_arg_conv;
        best_block_arg_conv.inner = (void*)(best_block_arg & (~1));
        best_block_arg_conv.is_owned = (best_block_arg & 1) || (best_block_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(best_block_arg_conv);
        best_block_arg_conv = BestBlock_clone(&best_block_arg_conv);
        LDKChainParameters ret_var = ChainParameters_new(network_arg_conv, best_block_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -17383,14 +20403,37 @@ uint32_t  __attribute__((visibility("default"))) TS_ChainParameters_new(uint32_t
        return ret_ref;
 }
 
+static inline uint64_t ChainParameters_clone_ptr(LDKChainParameters *NONNULL_PTR arg) {
+       LDKChainParameters ret_var = ChainParameters_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_ChainParameters_clone_ptr(uint32_t arg) {
+       LDKChainParameters arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChainParameters_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_ChainParameters_clone(uint32_t orig) {
        LDKChainParameters orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChainParameters ret_var = ChainParameters_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -17402,6 +20445,7 @@ void  __attribute__((visibility("default"))) TS_CounterpartyForwardingInfo_free(
        LDKCounterpartyForwardingInfo this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        CounterpartyForwardingInfo_free(this_obj_conv);
 }
 
@@ -17409,6 +20453,7 @@ int32_t  __attribute__((visibility("default"))) TS_CounterpartyForwardingInfo_ge
        LDKCounterpartyForwardingInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = CounterpartyForwardingInfo_get_fee_base_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -17417,6 +20462,7 @@ void  __attribute__((visibility("default"))) TS_CounterpartyForwardingInfo_set_f
        LDKCounterpartyForwardingInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        CounterpartyForwardingInfo_set_fee_base_msat(&this_ptr_conv, val);
 }
 
@@ -17424,6 +20470,7 @@ int32_t  __attribute__((visibility("default"))) TS_CounterpartyForwardingInfo_ge
        LDKCounterpartyForwardingInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = CounterpartyForwardingInfo_get_fee_proportional_millionths(&this_ptr_conv);
        return ret_val;
 }
@@ -17432,6 +20479,7 @@ void  __attribute__((visibility("default"))) TS_CounterpartyForwardingInfo_set_f
        LDKCounterpartyForwardingInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        CounterpartyForwardingInfo_set_fee_proportional_millionths(&this_ptr_conv, val);
 }
 
@@ -17439,6 +20487,7 @@ int16_t  __attribute__((visibility("default"))) TS_CounterpartyForwardingInfo_ge
        LDKCounterpartyForwardingInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = CounterpartyForwardingInfo_get_cltv_expiry_delta(&this_ptr_conv);
        return ret_val;
 }
@@ -17447,6 +20496,7 @@ void  __attribute__((visibility("default"))) TS_CounterpartyForwardingInfo_set_c
        LDKCounterpartyForwardingInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        CounterpartyForwardingInfo_set_cltv_expiry_delta(&this_ptr_conv, val);
 }
 
@@ -17455,6 +20505,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CounterpartyForwardingInfo_n
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -17462,14 +20513,37 @@ uint32_t  __attribute__((visibility("default"))) TS_CounterpartyForwardingInfo_n
        return ret_ref;
 }
 
+static inline uint64_t CounterpartyForwardingInfo_clone_ptr(LDKCounterpartyForwardingInfo *NONNULL_PTR arg) {
+       LDKCounterpartyForwardingInfo ret_var = CounterpartyForwardingInfo_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_CounterpartyForwardingInfo_clone_ptr(uint32_t arg) {
+       LDKCounterpartyForwardingInfo arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = CounterpartyForwardingInfo_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CounterpartyForwardingInfo_clone(uint32_t orig) {
        LDKCounterpartyForwardingInfo orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKCounterpartyForwardingInfo ret_var = CounterpartyForwardingInfo_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -17481,6 +20555,7 @@ void  __attribute__((visibility("default"))) TS_ChannelCounterparty_free(uint32_
        LDKChannelCounterparty this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelCounterparty_free(this_obj_conv);
 }
 
@@ -17488,6 +20563,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ChannelCounterparty_get_n
        LDKChannelCounterparty this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ChannelCounterparty_get_node_id(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -17497,6 +20573,7 @@ void  __attribute__((visibility("default"))) TS_ChannelCounterparty_set_node_id(
        LDKChannelCounterparty this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -17507,10 +20584,12 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelCounterparty_get_feat
        LDKChannelCounterparty this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKInitFeatures ret_var = ChannelCounterparty_get_features(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -17522,9 +20601,11 @@ void  __attribute__((visibility("default"))) TS_ChannelCounterparty_set_features
        LDKChannelCounterparty this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKInitFeatures val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = InitFeatures_clone(&val_conv);
        ChannelCounterparty_set_features(&this_ptr_conv, val_conv);
 }
@@ -17533,6 +20614,7 @@ int64_t  __attribute__((visibility("default"))) TS_ChannelCounterparty_get_unspe
        LDKChannelCounterparty this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelCounterparty_get_unspendable_punishment_reserve(&this_ptr_conv);
        return ret_val;
 }
@@ -17541,6 +20623,7 @@ void  __attribute__((visibility("default"))) TS_ChannelCounterparty_set_unspenda
        LDKChannelCounterparty this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelCounterparty_set_unspendable_punishment_reserve(&this_ptr_conv, val);
 }
 
@@ -17548,11 +20631,13 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelCounterparty_get_forw
        LDKChannelCounterparty this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCounterpartyForwardingInfo ret_var = ChannelCounterparty_get_forwarding_info(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -17565,9 +20650,11 @@ void  __attribute__((visibility("default"))) TS_ChannelCounterparty_set_forwardi
        LDKChannelCounterparty this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCounterpartyForwardingInfo val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = CounterpartyForwardingInfo_clone(&val_conv);
        ChannelCounterparty_set_forwarding_info(&this_ptr_conv, val_conv);
 }
@@ -17579,15 +20666,18 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelCounterparty_new(int8
        LDKInitFeatures features_arg_conv;
        features_arg_conv.inner = (void*)(features_arg & (~1));
        features_arg_conv.is_owned = (features_arg & 1) || (features_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_arg_conv);
        features_arg_conv = InitFeatures_clone(&features_arg_conv);
        LDKCounterpartyForwardingInfo forwarding_info_arg_conv;
        forwarding_info_arg_conv.inner = (void*)(forwarding_info_arg & (~1));
        forwarding_info_arg_conv.is_owned = (forwarding_info_arg & 1) || (forwarding_info_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(forwarding_info_arg_conv);
        forwarding_info_arg_conv = CounterpartyForwardingInfo_clone(&forwarding_info_arg_conv);
        LDKChannelCounterparty ret_var = ChannelCounterparty_new(node_id_arg_ref, features_arg_conv, unspendable_punishment_reserve_arg, forwarding_info_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -17595,14 +20685,37 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelCounterparty_new(int8
        return ret_ref;
 }
 
+static inline uint64_t ChannelCounterparty_clone_ptr(LDKChannelCounterparty *NONNULL_PTR arg) {
+       LDKChannelCounterparty ret_var = ChannelCounterparty_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_ChannelCounterparty_clone_ptr(uint32_t arg) {
+       LDKChannelCounterparty arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChannelCounterparty_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_ChannelCounterparty_clone(uint32_t orig) {
        LDKChannelCounterparty orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChannelCounterparty ret_var = ChannelCounterparty_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -17614,6 +20727,7 @@ void  __attribute__((visibility("default"))) TS_ChannelDetails_free(uint32_t thi
        LDKChannelDetails this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelDetails_free(this_obj_conv);
 }
 
@@ -17621,6 +20735,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ChannelDetails_get_channe
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *ChannelDetails_get_channel_id(&this_ptr_conv), 32);
        return ret_arr;
@@ -17630,6 +20745,7 @@ void  __attribute__((visibility("default"))) TS_ChannelDetails_set_channel_id(ui
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -17640,10 +20756,12 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelDetails_get_counterpa
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelCounterparty ret_var = ChannelDetails_get_counterparty(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -17655,9 +20773,11 @@ void  __attribute__((visibility("default"))) TS_ChannelDetails_set_counterparty(
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelCounterparty val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = ChannelCounterparty_clone(&val_conv);
        ChannelDetails_set_counterparty(&this_ptr_conv, val_conv);
 }
@@ -17666,11 +20786,13 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelDetails_get_funding_t
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKOutPoint ret_var = ChannelDetails_get_funding_txo(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -17683,9 +20805,11 @@ void  __attribute__((visibility("default"))) TS_ChannelDetails_set_funding_txo(u
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKOutPoint val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = OutPoint_clone(&val_conv);
        ChannelDetails_set_funding_txo(&this_ptr_conv, val_conv);
 }
@@ -17694,6 +20818,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelDetails_get_short_cha
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
        *ret_copy = ChannelDetails_get_short_channel_id(&this_ptr_conv);
        uint64_t ret_ref = (uint64_t)ret_copy;
@@ -17704,6 +20829,7 @@ void  __attribute__((visibility("default"))) TS_ChannelDetails_set_short_channel
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
@@ -17715,6 +20841,7 @@ int64_t  __attribute__((visibility("default"))) TS_ChannelDetails_get_channel_va
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelDetails_get_channel_value_satoshis(&this_ptr_conv);
        return ret_val;
 }
@@ -17723,6 +20850,7 @@ void  __attribute__((visibility("default"))) TS_ChannelDetails_set_channel_value
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelDetails_set_channel_value_satoshis(&this_ptr_conv, val);
 }
 
@@ -17730,6 +20858,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelDetails_get_unspendab
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
        *ret_copy = ChannelDetails_get_unspendable_punishment_reserve(&this_ptr_conv);
        uint64_t ret_ref = (uint64_t)ret_copy;
@@ -17740,6 +20869,7 @@ void  __attribute__((visibility("default"))) TS_ChannelDetails_set_unspendable_p
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
@@ -17751,6 +20881,7 @@ int64_t  __attribute__((visibility("default"))) TS_ChannelDetails_get_user_chann
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelDetails_get_user_channel_id(&this_ptr_conv);
        return ret_val;
 }
@@ -17759,6 +20890,7 @@ void  __attribute__((visibility("default"))) TS_ChannelDetails_set_user_channel_
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelDetails_set_user_channel_id(&this_ptr_conv, val);
 }
 
@@ -17766,6 +20898,7 @@ int64_t  __attribute__((visibility("default"))) TS_ChannelDetails_get_outbound_c
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelDetails_get_outbound_capacity_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -17774,6 +20907,7 @@ void  __attribute__((visibility("default"))) TS_ChannelDetails_set_outbound_capa
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelDetails_set_outbound_capacity_msat(&this_ptr_conv, val);
 }
 
@@ -17781,6 +20915,7 @@ int64_t  __attribute__((visibility("default"))) TS_ChannelDetails_get_inbound_ca
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelDetails_get_inbound_capacity_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -17789,6 +20924,7 @@ void  __attribute__((visibility("default"))) TS_ChannelDetails_set_inbound_capac
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelDetails_set_inbound_capacity_msat(&this_ptr_conv, val);
 }
 
@@ -17796,6 +20932,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelDetails_get_confirmat
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCOption_u32Z *ret_copy = MALLOC(sizeof(LDKCOption_u32Z), "LDKCOption_u32Z");
        *ret_copy = ChannelDetails_get_confirmations_required(&this_ptr_conv);
        uint64_t ret_ref = (uint64_t)ret_copy;
@@ -17806,6 +20943,7 @@ void  __attribute__((visibility("default"))) TS_ChannelDetails_set_confirmations
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKCOption_u32Z val_conv = *(LDKCOption_u32Z*)(val_ptr);
@@ -17817,6 +20955,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelDetails_get_force_clo
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCOption_u16Z *ret_copy = MALLOC(sizeof(LDKCOption_u16Z), "LDKCOption_u16Z");
        *ret_copy = ChannelDetails_get_force_close_spend_delay(&this_ptr_conv);
        uint64_t ret_ref = (uint64_t)ret_copy;
@@ -17827,6 +20966,7 @@ void  __attribute__((visibility("default"))) TS_ChannelDetails_set_force_close_s
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKCOption_u16Z val_conv = *(LDKCOption_u16Z*)(val_ptr);
@@ -17838,6 +20978,7 @@ jboolean  __attribute__((visibility("default"))) TS_ChannelDetails_get_is_outbou
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        jboolean ret_val = ChannelDetails_get_is_outbound(&this_ptr_conv);
        return ret_val;
 }
@@ -17846,6 +20987,7 @@ void  __attribute__((visibility("default"))) TS_ChannelDetails_set_is_outbound(u
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelDetails_set_is_outbound(&this_ptr_conv, val);
 }
 
@@ -17853,6 +20995,7 @@ jboolean  __attribute__((visibility("default"))) TS_ChannelDetails_get_is_fundin
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        jboolean ret_val = ChannelDetails_get_is_funding_locked(&this_ptr_conv);
        return ret_val;
 }
@@ -17861,6 +21004,7 @@ void  __attribute__((visibility("default"))) TS_ChannelDetails_set_is_funding_lo
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelDetails_set_is_funding_locked(&this_ptr_conv, val);
 }
 
@@ -17868,6 +21012,7 @@ jboolean  __attribute__((visibility("default"))) TS_ChannelDetails_get_is_usable
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        jboolean ret_val = ChannelDetails_get_is_usable(&this_ptr_conv);
        return ret_val;
 }
@@ -17876,6 +21021,7 @@ void  __attribute__((visibility("default"))) TS_ChannelDetails_set_is_usable(uin
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelDetails_set_is_usable(&this_ptr_conv, val);
 }
 
@@ -17883,6 +21029,7 @@ jboolean  __attribute__((visibility("default"))) TS_ChannelDetails_get_is_public
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        jboolean ret_val = ChannelDetails_get_is_public(&this_ptr_conv);
        return ret_val;
 }
@@ -17891,6 +21038,7 @@ void  __attribute__((visibility("default"))) TS_ChannelDetails_set_is_public(uin
        LDKChannelDetails this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelDetails_set_is_public(&this_ptr_conv, val);
 }
 
@@ -17901,10 +21049,12 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelDetails_new(int8_tArr
        LDKChannelCounterparty counterparty_arg_conv;
        counterparty_arg_conv.inner = (void*)(counterparty_arg & (~1));
        counterparty_arg_conv.is_owned = (counterparty_arg & 1) || (counterparty_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(counterparty_arg_conv);
        counterparty_arg_conv = ChannelCounterparty_clone(&counterparty_arg_conv);
        LDKOutPoint funding_txo_arg_conv;
        funding_txo_arg_conv.inner = (void*)(funding_txo_arg & (~1));
        funding_txo_arg_conv.is_owned = (funding_txo_arg & 1) || (funding_txo_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_txo_arg_conv);
        funding_txo_arg_conv = OutPoint_clone(&funding_txo_arg_conv);
        void* short_channel_id_arg_ptr = (void*)(((uint64_t)short_channel_id_arg) & ~1);
        CHECK_ACCESS(short_channel_id_arg_ptr);
@@ -17925,6 +21075,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelDetails_new(int8_tArr
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -17932,14 +21083,37 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelDetails_new(int8_tArr
        return ret_ref;
 }
 
+static inline uint64_t ChannelDetails_clone_ptr(LDKChannelDetails *NONNULL_PTR arg) {
+       LDKChannelDetails ret_var = ChannelDetails_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_ChannelDetails_clone_ptr(uint32_t arg) {
+       LDKChannelDetails arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChannelDetails_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_ChannelDetails_clone(uint32_t orig) {
        LDKChannelDetails orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChannelDetails ret_var = ChannelDetails_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -17956,6 +21130,18 @@ void  __attribute__((visibility("default"))) TS_PaymentSendFailure_free(uint32_t
        PaymentSendFailure_free(this_ptr_conv);
 }
 
+static inline uint64_t PaymentSendFailure_clone_ptr(LDKPaymentSendFailure *NONNULL_PTR arg) {
+       LDKPaymentSendFailure *ret_copy = MALLOC(sizeof(LDKPaymentSendFailure), "LDKPaymentSendFailure");
+       *ret_copy = PaymentSendFailure_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_PaymentSendFailure_clone_ptr(uint32_t arg) {
+       LDKPaymentSendFailure* arg_conv = (LDKPaymentSendFailure*)arg;
+       int64_t ret_val = PaymentSendFailure_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_PaymentSendFailure_clone(uint32_t orig) {
        LDKPaymentSendFailure* orig_conv = (LDKPaymentSendFailure*)orig;
        LDKPaymentSendFailure *ret_copy = MALLOC(sizeof(LDKPaymentSendFailure), "LDKPaymentSendFailure");
@@ -18037,6 +21223,7 @@ uint32_t  __attribute__((visibility("default"))) TS_PaymentSendFailure_partial_f
        LDKRouteParameters failed_paths_retry_conv;
        failed_paths_retry_conv.inner = (void*)(failed_paths_retry & (~1));
        failed_paths_retry_conv.is_owned = (failed_paths_retry & 1) || (failed_paths_retry == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(failed_paths_retry_conv);
        failed_paths_retry_conv = RouteParameters_clone(&failed_paths_retry_conv);
        LDKThirtyTwoBytes payment_id_ref;
        CHECK(*((uint32_t*)payment_id) == 32);
@@ -18066,15 +21253,18 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelManager_new(uint32_t
        LDKUserConfig config_conv;
        config_conv.inner = (void*)(config & (~1));
        config_conv.is_owned = (config & 1) || (config == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(config_conv);
        config_conv = UserConfig_clone(&config_conv);
        LDKChainParameters params_conv;
        params_conv.inner = (void*)(params & (~1));
        params_conv.is_owned = (params & 1) || (params == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(params_conv);
        params_conv = ChainParameters_clone(&params_conv);
        LDKChannelManager ret_var = ChannelManager_new(fee_est_conv, chain_monitor_conv, tx_broadcaster_conv, logger_conv, keys_manager_conv, config_conv, params_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18086,10 +21276,12 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelManager_get_current_d
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKUserConfig ret_var = ChannelManager_get_current_default_configuration(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18101,12 +21293,14 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelManager_create_channe
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKPublicKey their_network_key_ref;
        CHECK(*((uint32_t*)their_network_key) == 33);
        memcpy(their_network_key_ref.compressed_form, (uint8_t*)(their_network_key + 4), 33);
        LDKUserConfig override_config_conv;
        override_config_conv.inner = (void*)(override_config & (~1));
        override_config_conv.is_owned = (override_config & 1) || (override_config == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(override_config_conv);
        override_config_conv = UserConfig_clone(&override_config_conv);
        LDKCResult__u832APIErrorZ* ret_conv = MALLOC(sizeof(LDKCResult__u832APIErrorZ), "LDKCResult__u832APIErrorZ");
        *ret_conv = ChannelManager_create_channel(&this_arg_conv, their_network_key_ref, channel_value_satoshis, push_msat, user_channel_id, override_config_conv);
@@ -18117,6 +21311,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_ChannelManager_list_cha
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCVec_ChannelDetailsZ ret_var = ChannelManager_list_channels(&this_arg_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_arr(ret_var.datalen, sizeof(uint32_t), "Native uint32_tArray Bytes");
@@ -18126,6 +21321,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_ChannelManager_list_cha
                uint64_t ret_conv_16_ref = 0;
                CHECK((((uint64_t)ret_conv_16_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_conv_16_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_16_var);
                ret_conv_16_ref = (uint64_t)ret_conv_16_var.inner;
                if (ret_conv_16_var.is_owned) {
                        ret_conv_16_ref |= 1;
@@ -18141,6 +21337,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_ChannelManager_list_usa
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCVec_ChannelDetailsZ ret_var = ChannelManager_list_usable_channels(&this_arg_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_arr(ret_var.datalen, sizeof(uint32_t), "Native uint32_tArray Bytes");
@@ -18150,6 +21347,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_ChannelManager_list_usa
                uint64_t ret_conv_16_ref = 0;
                CHECK((((uint64_t)ret_conv_16_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_conv_16_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_16_var);
                ret_conv_16_ref = (uint64_t)ret_conv_16_var.inner;
                if (ret_conv_16_var.is_owned) {
                        ret_conv_16_ref |= 1;
@@ -18165,6 +21363,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelManager_close_channel
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char channel_id_arr[32];
        CHECK(*((uint32_t*)channel_id) == 32);
        memcpy(channel_id_arr, (uint8_t*)(channel_id + 4), 32);
@@ -18178,6 +21377,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelManager_close_channel
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char channel_id_arr[32];
        CHECK(*((uint32_t*)channel_id) == 32);
        memcpy(channel_id_arr, (uint8_t*)(channel_id + 4), 32);
@@ -18191,6 +21391,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelManager_force_close_c
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char channel_id_arr[32];
        CHECK(*((uint32_t*)channel_id) == 32);
        memcpy(channel_id_arr, (uint8_t*)(channel_id + 4), 32);
@@ -18204,6 +21405,7 @@ void  __attribute__((visibility("default"))) TS_ChannelManager_force_close_all_c
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        ChannelManager_force_close_all_channels(&this_arg_conv);
 }
 
@@ -18211,9 +21413,11 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelManager_send_payment(
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKRoute route_conv;
        route_conv.inner = (void*)(route & (~1));
        route_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(route_conv);
        LDKThirtyTwoBytes payment_hash_ref;
        CHECK(*((uint32_t*)payment_hash) == 32);
        memcpy(payment_hash_ref.data, (uint8_t*)(payment_hash + 4), 32);
@@ -18229,9 +21433,11 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelManager_retry_payment
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKRoute route_conv;
        route_conv.inner = (void*)(route & (~1));
        route_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(route_conv);
        LDKThirtyTwoBytes payment_id_ref;
        CHECK(*((uint32_t*)payment_id) == 32);
        memcpy(payment_id_ref.data, (uint8_t*)(payment_id + 4), 32);
@@ -18244,9 +21450,11 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelManager_send_spontane
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKRoute route_conv;
        route_conv.inner = (void*)(route & (~1));
        route_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(route_conv);
        LDKThirtyTwoBytes payment_preimage_ref;
        CHECK(*((uint32_t*)payment_preimage) == 32);
        memcpy(payment_preimage_ref.data, (uint8_t*)(payment_preimage + 4), 32);
@@ -18259,6 +21467,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelManager_funding_trans
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char temporary_channel_id_arr[32];
        CHECK(*((uint32_t*)temporary_channel_id) == 32);
        memcpy(temporary_channel_id_arr, (uint8_t*)(temporary_channel_id + 4), 32);
@@ -18277,6 +21486,7 @@ void  __attribute__((visibility("default"))) TS_ChannelManager_broadcast_node_an
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKThreeBytes rgb_ref;
        CHECK(*((uint32_t*)rgb) == 3);
        memcpy(rgb_ref.data, (uint8_t*)(rgb + 4), 3);
@@ -18304,6 +21514,7 @@ void  __attribute__((visibility("default"))) TS_ChannelManager_process_pending_h
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        ChannelManager_process_pending_htlc_forwards(&this_arg_conv);
 }
 
@@ -18311,6 +21522,7 @@ void  __attribute__((visibility("default"))) TS_ChannelManager_timer_tick_occurr
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        ChannelManager_timer_tick_occurred(&this_arg_conv);
 }
 
@@ -18318,6 +21530,7 @@ jboolean  __attribute__((visibility("default"))) TS_ChannelManager_fail_htlc_bac
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char payment_hash_arr[32];
        CHECK(*((uint32_t*)payment_hash) == 32);
        memcpy(payment_hash_arr, (uint8_t*)(payment_hash + 4), 32);
@@ -18330,6 +21543,7 @@ jboolean  __attribute__((visibility("default"))) TS_ChannelManager_claim_funds(u
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKThirtyTwoBytes payment_preimage_ref;
        CHECK(*((uint32_t*)payment_preimage) == 32);
        memcpy(payment_preimage_ref.data, (uint8_t*)(payment_preimage + 4), 32);
@@ -18341,6 +21555,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ChannelManager_get_our_no
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ChannelManager_get_our_node_id(&this_arg_conv).compressed_form, 33);
        return ret_arr;
@@ -18350,6 +21565,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelManager_create_inboun
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        void* min_value_msat_ptr = (void*)(((uint64_t)min_value_msat) & ~1);
        CHECK_ACCESS(min_value_msat_ptr);
        LDKCOption_u64Z min_value_msat_conv = *(LDKCOption_u64Z*)(min_value_msat_ptr);
@@ -18363,6 +21579,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelManager_create_inboun
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKThirtyTwoBytes payment_hash_ref;
        CHECK(*((uint32_t*)payment_hash) == 32);
        memcpy(payment_hash_ref.data, (uint8_t*)(payment_hash + 4), 32);
@@ -18379,6 +21596,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelManager_as_MessageSen
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKMessageSendEventsProvider* ret_ret = MALLOC(sizeof(LDKMessageSendEventsProvider), "LDKMessageSendEventsProvider");
        *ret_ret = ChannelManager_as_MessageSendEventsProvider(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -18388,6 +21606,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelManager_as_EventsProv
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKEventsProvider* ret_ret = MALLOC(sizeof(LDKEventsProvider), "LDKEventsProvider");
        *ret_ret = ChannelManager_as_EventsProvider(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -18397,6 +21616,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelManager_as_Listen(uin
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKListen* ret_ret = MALLOC(sizeof(LDKListen), "LDKListen");
        *ret_ret = ChannelManager_as_Listen(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -18406,6 +21626,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelManager_as_Confirm(ui
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKConfirm* ret_ret = MALLOC(sizeof(LDKConfirm), "LDKConfirm");
        *ret_ret = ChannelManager_as_Confirm(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -18415,6 +21636,7 @@ jboolean  __attribute__((visibility("default"))) TS_ChannelManager_await_persist
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        jboolean ret_val = ChannelManager_await_persistable_update_timeout(&this_arg_conv, max_wait);
        return ret_val;
 }
@@ -18423,6 +21645,7 @@ void  __attribute__((visibility("default"))) TS_ChannelManager_await_persistable
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        ChannelManager_await_persistable_update(&this_arg_conv);
 }
 
@@ -18430,10 +21653,12 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelManager_current_best_
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKBestBlock ret_var = ChannelManager_current_best_block(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18445,6 +21670,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelManager_as_ChannelMes
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKChannelMessageHandler* ret_ret = MALLOC(sizeof(LDKChannelMessageHandler), "LDKChannelMessageHandler");
        *ret_ret = ChannelManager_as_ChannelMessageHandler(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -18454,6 +21680,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ChannelManager_write(uint
        LDKChannelManager obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ChannelManager_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -18465,6 +21692,7 @@ void  __attribute__((visibility("default"))) TS_ChannelManagerReadArgs_free(uint
        LDKChannelManagerReadArgs this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelManagerReadArgs_free(this_obj_conv);
 }
 
@@ -18472,6 +21700,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelManagerReadArgs_get_k
        LDKChannelManagerReadArgs this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        // WARNING: This object doesn't live past this scope, needs clone!
        uint64_t ret_ret = ((uint64_t)ChannelManagerReadArgs_get_keys_manager(&this_ptr_conv)) | 1;
        return ret_ret;
@@ -18481,6 +21710,7 @@ void  __attribute__((visibility("default"))) TS_ChannelManagerReadArgs_set_keys_
        LDKChannelManagerReadArgs this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKKeysInterface val_conv = *(LDKKeysInterface*)(val_ptr);
@@ -18491,6 +21721,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelManagerReadArgs_get_f
        LDKChannelManagerReadArgs this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        // WARNING: This object doesn't live past this scope, needs clone!
        uint64_t ret_ret = ((uint64_t)ChannelManagerReadArgs_get_fee_estimator(&this_ptr_conv)) | 1;
        return ret_ret;
@@ -18500,6 +21731,7 @@ void  __attribute__((visibility("default"))) TS_ChannelManagerReadArgs_set_fee_e
        LDKChannelManagerReadArgs this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKFeeEstimator val_conv = *(LDKFeeEstimator*)(val_ptr);
@@ -18510,6 +21742,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelManagerReadArgs_get_c
        LDKChannelManagerReadArgs this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        // WARNING: This object doesn't live past this scope, needs clone!
        uint64_t ret_ret = ((uint64_t)ChannelManagerReadArgs_get_chain_monitor(&this_ptr_conv)) | 1;
        return ret_ret;
@@ -18519,6 +21752,7 @@ void  __attribute__((visibility("default"))) TS_ChannelManagerReadArgs_set_chain
        LDKChannelManagerReadArgs this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKWatch val_conv = *(LDKWatch*)(val_ptr);
@@ -18529,6 +21763,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelManagerReadArgs_get_t
        LDKChannelManagerReadArgs this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        // WARNING: This object doesn't live past this scope, needs clone!
        uint64_t ret_ret = ((uint64_t)ChannelManagerReadArgs_get_tx_broadcaster(&this_ptr_conv)) | 1;
        return ret_ret;
@@ -18538,6 +21773,7 @@ void  __attribute__((visibility("default"))) TS_ChannelManagerReadArgs_set_tx_br
        LDKChannelManagerReadArgs this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKBroadcasterInterface val_conv = *(LDKBroadcasterInterface*)(val_ptr);
@@ -18548,6 +21784,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelManagerReadArgs_get_l
        LDKChannelManagerReadArgs this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        // WARNING: This object doesn't live past this scope, needs clone!
        uint64_t ret_ret = ((uint64_t)ChannelManagerReadArgs_get_logger(&this_ptr_conv)) | 1;
        return ret_ret;
@@ -18557,6 +21794,7 @@ void  __attribute__((visibility("default"))) TS_ChannelManagerReadArgs_set_logge
        LDKChannelManagerReadArgs this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKLogger val_conv = *(LDKLogger*)(val_ptr);
@@ -18567,10 +21805,12 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelManagerReadArgs_get_d
        LDKChannelManagerReadArgs this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKUserConfig ret_var = ChannelManagerReadArgs_get_default_config(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18582,9 +21822,11 @@ void  __attribute__((visibility("default"))) TS_ChannelManagerReadArgs_set_defau
        LDKChannelManagerReadArgs this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKUserConfig val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = UserConfig_clone(&val_conv);
        ChannelManagerReadArgs_set_default_config(&this_ptr_conv, val_conv);
 }
@@ -18608,6 +21850,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelManagerReadArgs_new(u
        LDKUserConfig default_config_conv;
        default_config_conv.inner = (void*)(default_config & (~1));
        default_config_conv.is_owned = (default_config & 1) || (default_config == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(default_config_conv);
        default_config_conv = UserConfig_clone(&default_config_conv);
        LDKCVec_ChannelMonitorZ channel_monitors_constr;
        channel_monitors_constr.datalen = *((uint32_t*)channel_monitors);
@@ -18621,12 +21864,14 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelManagerReadArgs_new(u
                LDKChannelMonitor channel_monitors_conv_16_conv;
                channel_monitors_conv_16_conv.inner = (void*)(channel_monitors_conv_16 & (~1));
                channel_monitors_conv_16_conv.is_owned = (channel_monitors_conv_16 & 1) || (channel_monitors_conv_16 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_monitors_conv_16_conv);
                channel_monitors_constr.data[q] = channel_monitors_conv_16_conv;
        }
        LDKChannelManagerReadArgs ret_var = ChannelManagerReadArgs_new(keys_manager_conv, fee_estimator_conv, chain_monitor_conv, tx_broadcaster_conv, logger_conv, default_config_conv, channel_monitors_constr);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18641,6 +21886,7 @@ uint32_t  __attribute__((visibility("default"))) TS_C2Tuple_BlockHashChannelMana
        LDKChannelManagerReadArgs arg_conv;
        arg_conv.inner = (void*)(arg & (~1));
        arg_conv.is_owned = (arg & 1) || (arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
        // Warning: we need a move here but no clone is available for LDKChannelManagerReadArgs
        LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ), "LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ");
        *ret_conv = C2Tuple_BlockHashChannelManagerZ_read(ser_ref, arg_conv);
@@ -18651,17 +21897,41 @@ void  __attribute__((visibility("default"))) TS_DecodeError_free(uint32_t this_o
        LDKDecodeError this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        DecodeError_free(this_obj_conv);
 }
 
+static inline uint64_t DecodeError_clone_ptr(LDKDecodeError *NONNULL_PTR arg) {
+       LDKDecodeError ret_var = DecodeError_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_DecodeError_clone_ptr(uint32_t arg) {
+       LDKDecodeError arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = DecodeError_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_DecodeError_clone(uint32_t orig) {
        LDKDecodeError orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKDecodeError ret_var = DecodeError_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18673,6 +21943,7 @@ void  __attribute__((visibility("default"))) TS_Init_free(uint32_t this_obj) {
        LDKInit this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        Init_free(this_obj_conv);
 }
 
@@ -18680,10 +21951,12 @@ uint32_t  __attribute__((visibility("default"))) TS_Init_get_features(uint32_t t
        LDKInit this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKInitFeatures ret_var = Init_get_features(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18695,9 +21968,11 @@ void  __attribute__((visibility("default"))) TS_Init_set_features(uint32_t this_
        LDKInit this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKInitFeatures val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = InitFeatures_clone(&val_conv);
        Init_set_features(&this_ptr_conv, val_conv);
 }
@@ -18706,11 +21981,13 @@ uint32_t  __attribute__((visibility("default"))) TS_Init_new(uint32_t features_a
        LDKInitFeatures features_arg_conv;
        features_arg_conv.inner = (void*)(features_arg & (~1));
        features_arg_conv.is_owned = (features_arg & 1) || (features_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_arg_conv);
        features_arg_conv = InitFeatures_clone(&features_arg_conv);
        LDKInit ret_var = Init_new(features_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18718,14 +21995,37 @@ uint32_t  __attribute__((visibility("default"))) TS_Init_new(uint32_t features_a
        return ret_ref;
 }
 
+static inline uint64_t Init_clone_ptr(LDKInit *NONNULL_PTR arg) {
+       LDKInit ret_var = Init_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_Init_clone_ptr(uint32_t arg) {
+       LDKInit arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = Init_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_Init_clone(uint32_t orig) {
        LDKInit orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKInit ret_var = Init_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18737,6 +22037,7 @@ void  __attribute__((visibility("default"))) TS_ErrorMessage_free(uint32_t this_
        LDKErrorMessage this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ErrorMessage_free(this_obj_conv);
 }
 
@@ -18744,6 +22045,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ErrorMessage_get_channel_
        LDKErrorMessage this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *ErrorMessage_get_channel_id(&this_ptr_conv), 32);
        return ret_arr;
@@ -18753,6 +22055,7 @@ void  __attribute__((visibility("default"))) TS_ErrorMessage_set_channel_id(uint
        LDKErrorMessage this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -18763,6 +22066,7 @@ jstring  __attribute__((visibility("default"))) TS_ErrorMessage_get_data(uint32_
        LDKErrorMessage this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKStr ret_str = ErrorMessage_get_data(&this_ptr_conv);
        jstring ret_conv = str_ref_to_ts(ret_str.chars, ret_str.len);
        Str_free(ret_str);
@@ -18773,6 +22077,7 @@ void  __attribute__((visibility("default"))) TS_ErrorMessage_set_data(uint32_t t
        LDKErrorMessage this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKStr val_conv = str_ref_to_owned_c(val);
        ErrorMessage_set_data(&this_ptr_conv, val_conv);
 }
@@ -18786,6 +22091,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ErrorMessage_new(int8_tArray
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18793,14 +22099,37 @@ uint32_t  __attribute__((visibility("default"))) TS_ErrorMessage_new(int8_tArray
        return ret_ref;
 }
 
+static inline uint64_t ErrorMessage_clone_ptr(LDKErrorMessage *NONNULL_PTR arg) {
+       LDKErrorMessage ret_var = ErrorMessage_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_ErrorMessage_clone_ptr(uint32_t arg) {
+       LDKErrorMessage arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ErrorMessage_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_ErrorMessage_clone(uint32_t orig) {
        LDKErrorMessage orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKErrorMessage ret_var = ErrorMessage_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18812,6 +22141,7 @@ void  __attribute__((visibility("default"))) TS_Ping_free(uint32_t this_obj) {
        LDKPing this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        Ping_free(this_obj_conv);
 }
 
@@ -18819,6 +22149,7 @@ int16_t  __attribute__((visibility("default"))) TS_Ping_get_ponglen(uint32_t thi
        LDKPing this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = Ping_get_ponglen(&this_ptr_conv);
        return ret_val;
 }
@@ -18827,6 +22158,7 @@ void  __attribute__((visibility("default"))) TS_Ping_set_ponglen(uint32_t this_p
        LDKPing this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        Ping_set_ponglen(&this_ptr_conv, val);
 }
 
@@ -18834,6 +22166,7 @@ int16_t  __attribute__((visibility("default"))) TS_Ping_get_byteslen(uint32_t th
        LDKPing this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = Ping_get_byteslen(&this_ptr_conv);
        return ret_val;
 }
@@ -18842,6 +22175,7 @@ void  __attribute__((visibility("default"))) TS_Ping_set_byteslen(uint32_t this_
        LDKPing this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        Ping_set_byteslen(&this_ptr_conv, val);
 }
 
@@ -18850,6 +22184,7 @@ uint32_t  __attribute__((visibility("default"))) TS_Ping_new(int16_t ponglen_arg
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18857,14 +22192,37 @@ uint32_t  __attribute__((visibility("default"))) TS_Ping_new(int16_t ponglen_arg
        return ret_ref;
 }
 
+static inline uint64_t Ping_clone_ptr(LDKPing *NONNULL_PTR arg) {
+       LDKPing ret_var = Ping_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_Ping_clone_ptr(uint32_t arg) {
+       LDKPing arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = Ping_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_Ping_clone(uint32_t orig) {
        LDKPing orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKPing ret_var = Ping_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18876,6 +22234,7 @@ void  __attribute__((visibility("default"))) TS_Pong_free(uint32_t this_obj) {
        LDKPong this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        Pong_free(this_obj_conv);
 }
 
@@ -18883,6 +22242,7 @@ int16_t  __attribute__((visibility("default"))) TS_Pong_get_byteslen(uint32_t th
        LDKPong this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = Pong_get_byteslen(&this_ptr_conv);
        return ret_val;
 }
@@ -18891,6 +22251,7 @@ void  __attribute__((visibility("default"))) TS_Pong_set_byteslen(uint32_t this_
        LDKPong this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        Pong_set_byteslen(&this_ptr_conv, val);
 }
 
@@ -18899,6 +22260,7 @@ uint32_t  __attribute__((visibility("default"))) TS_Pong_new(int16_t byteslen_ar
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18906,14 +22268,37 @@ uint32_t  __attribute__((visibility("default"))) TS_Pong_new(int16_t byteslen_ar
        return ret_ref;
 }
 
+static inline uint64_t Pong_clone_ptr(LDKPong *NONNULL_PTR arg) {
+       LDKPong ret_var = Pong_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_Pong_clone_ptr(uint32_t arg) {
+       LDKPong arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = Pong_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_Pong_clone(uint32_t orig) {
        LDKPong orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKPong ret_var = Pong_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -18925,6 +22310,7 @@ void  __attribute__((visibility("default"))) TS_OpenChannel_free(uint32_t this_o
        LDKOpenChannel this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        OpenChannel_free(this_obj_conv);
 }
 
@@ -18932,6 +22318,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_OpenChannel_get_chain_has
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *OpenChannel_get_chain_hash(&this_ptr_conv), 32);
        return ret_arr;
@@ -18941,6 +22328,7 @@ void  __attribute__((visibility("default"))) TS_OpenChannel_set_chain_hash(uint3
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -18951,6 +22339,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_OpenChannel_get_temporary
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *OpenChannel_get_temporary_channel_id(&this_ptr_conv), 32);
        return ret_arr;
@@ -18960,6 +22349,7 @@ void  __attribute__((visibility("default"))) TS_OpenChannel_set_temporary_channe
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -18970,6 +22360,7 @@ int64_t  __attribute__((visibility("default"))) TS_OpenChannel_get_funding_satos
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = OpenChannel_get_funding_satoshis(&this_ptr_conv);
        return ret_val;
 }
@@ -18978,6 +22369,7 @@ void  __attribute__((visibility("default"))) TS_OpenChannel_set_funding_satoshis
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        OpenChannel_set_funding_satoshis(&this_ptr_conv, val);
 }
 
@@ -18985,6 +22377,7 @@ int64_t  __attribute__((visibility("default"))) TS_OpenChannel_get_push_msat(uin
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = OpenChannel_get_push_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -18993,6 +22386,7 @@ void  __attribute__((visibility("default"))) TS_OpenChannel_set_push_msat(uint32
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        OpenChannel_set_push_msat(&this_ptr_conv, val);
 }
 
@@ -19000,6 +22394,7 @@ int64_t  __attribute__((visibility("default"))) TS_OpenChannel_get_dust_limit_sa
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = OpenChannel_get_dust_limit_satoshis(&this_ptr_conv);
        return ret_val;
 }
@@ -19008,6 +22403,7 @@ void  __attribute__((visibility("default"))) TS_OpenChannel_set_dust_limit_satos
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        OpenChannel_set_dust_limit_satoshis(&this_ptr_conv, val);
 }
 
@@ -19015,6 +22411,7 @@ int64_t  __attribute__((visibility("default"))) TS_OpenChannel_get_max_htlc_valu
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = OpenChannel_get_max_htlc_value_in_flight_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -19023,6 +22420,7 @@ void  __attribute__((visibility("default"))) TS_OpenChannel_set_max_htlc_value_i
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        OpenChannel_set_max_htlc_value_in_flight_msat(&this_ptr_conv, val);
 }
 
@@ -19030,6 +22428,7 @@ int64_t  __attribute__((visibility("default"))) TS_OpenChannel_get_channel_reser
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = OpenChannel_get_channel_reserve_satoshis(&this_ptr_conv);
        return ret_val;
 }
@@ -19038,6 +22437,7 @@ void  __attribute__((visibility("default"))) TS_OpenChannel_set_channel_reserve_
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        OpenChannel_set_channel_reserve_satoshis(&this_ptr_conv, val);
 }
 
@@ -19045,6 +22445,7 @@ int64_t  __attribute__((visibility("default"))) TS_OpenChannel_get_htlc_minimum_
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = OpenChannel_get_htlc_minimum_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -19053,6 +22454,7 @@ void  __attribute__((visibility("default"))) TS_OpenChannel_set_htlc_minimum_msa
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        OpenChannel_set_htlc_minimum_msat(&this_ptr_conv, val);
 }
 
@@ -19060,6 +22462,7 @@ int32_t  __attribute__((visibility("default"))) TS_OpenChannel_get_feerate_per_k
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = OpenChannel_get_feerate_per_kw(&this_ptr_conv);
        return ret_val;
 }
@@ -19068,6 +22471,7 @@ void  __attribute__((visibility("default"))) TS_OpenChannel_set_feerate_per_kw(u
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        OpenChannel_set_feerate_per_kw(&this_ptr_conv, val);
 }
 
@@ -19075,6 +22479,7 @@ int16_t  __attribute__((visibility("default"))) TS_OpenChannel_get_to_self_delay
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = OpenChannel_get_to_self_delay(&this_ptr_conv);
        return ret_val;
 }
@@ -19083,6 +22488,7 @@ void  __attribute__((visibility("default"))) TS_OpenChannel_set_to_self_delay(ui
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        OpenChannel_set_to_self_delay(&this_ptr_conv, val);
 }
 
@@ -19090,6 +22496,7 @@ int16_t  __attribute__((visibility("default"))) TS_OpenChannel_get_max_accepted_
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = OpenChannel_get_max_accepted_htlcs(&this_ptr_conv);
        return ret_val;
 }
@@ -19098,6 +22505,7 @@ void  __attribute__((visibility("default"))) TS_OpenChannel_set_max_accepted_htl
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        OpenChannel_set_max_accepted_htlcs(&this_ptr_conv, val);
 }
 
@@ -19105,6 +22513,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_OpenChannel_get_funding_p
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), OpenChannel_get_funding_pubkey(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -19114,6 +22523,7 @@ void  __attribute__((visibility("default"))) TS_OpenChannel_set_funding_pubkey(u
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -19124,6 +22534,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_OpenChannel_get_revocatio
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), OpenChannel_get_revocation_basepoint(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -19133,6 +22544,7 @@ void  __attribute__((visibility("default"))) TS_OpenChannel_set_revocation_basep
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -19143,6 +22555,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_OpenChannel_get_payment_p
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), OpenChannel_get_payment_point(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -19152,6 +22565,7 @@ void  __attribute__((visibility("default"))) TS_OpenChannel_set_payment_point(ui
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -19162,6 +22576,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_OpenChannel_get_delayed_p
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), OpenChannel_get_delayed_payment_basepoint(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -19171,6 +22586,7 @@ void  __attribute__((visibility("default"))) TS_OpenChannel_set_delayed_payment_
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -19181,6 +22597,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_OpenChannel_get_htlc_base
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), OpenChannel_get_htlc_basepoint(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -19190,6 +22607,7 @@ void  __attribute__((visibility("default"))) TS_OpenChannel_set_htlc_basepoint(u
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -19200,6 +22618,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_OpenChannel_get_first_per
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), OpenChannel_get_first_per_commitment_point(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -19209,6 +22628,7 @@ void  __attribute__((visibility("default"))) TS_OpenChannel_set_first_per_commit
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -19219,6 +22639,7 @@ int8_t  __attribute__((visibility("default"))) TS_OpenChannel_get_channel_flags(
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_t ret_val = OpenChannel_get_channel_flags(&this_ptr_conv);
        return ret_val;
 }
@@ -19227,17 +22648,41 @@ void  __attribute__((visibility("default"))) TS_OpenChannel_set_channel_flags(ui
        LDKOpenChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        OpenChannel_set_channel_flags(&this_ptr_conv, val);
 }
 
+static inline uint64_t OpenChannel_clone_ptr(LDKOpenChannel *NONNULL_PTR arg) {
+       LDKOpenChannel ret_var = OpenChannel_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_OpenChannel_clone_ptr(uint32_t arg) {
+       LDKOpenChannel arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = OpenChannel_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_OpenChannel_clone(uint32_t orig) {
        LDKOpenChannel orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKOpenChannel ret_var = OpenChannel_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -19249,6 +22694,7 @@ void  __attribute__((visibility("default"))) TS_AcceptChannel_free(uint32_t this
        LDKAcceptChannel this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        AcceptChannel_free(this_obj_conv);
 }
 
@@ -19256,6 +22702,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_AcceptChannel_get_tempora
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *AcceptChannel_get_temporary_channel_id(&this_ptr_conv), 32);
        return ret_arr;
@@ -19265,6 +22712,7 @@ void  __attribute__((visibility("default"))) TS_AcceptChannel_set_temporary_chan
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -19275,6 +22723,7 @@ int64_t  __attribute__((visibility("default"))) TS_AcceptChannel_get_dust_limit_
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = AcceptChannel_get_dust_limit_satoshis(&this_ptr_conv);
        return ret_val;
 }
@@ -19283,6 +22732,7 @@ void  __attribute__((visibility("default"))) TS_AcceptChannel_set_dust_limit_sat
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        AcceptChannel_set_dust_limit_satoshis(&this_ptr_conv, val);
 }
 
@@ -19290,6 +22740,7 @@ int64_t  __attribute__((visibility("default"))) TS_AcceptChannel_get_max_htlc_va
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = AcceptChannel_get_max_htlc_value_in_flight_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -19298,6 +22749,7 @@ void  __attribute__((visibility("default"))) TS_AcceptChannel_set_max_htlc_value
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        AcceptChannel_set_max_htlc_value_in_flight_msat(&this_ptr_conv, val);
 }
 
@@ -19305,6 +22757,7 @@ int64_t  __attribute__((visibility("default"))) TS_AcceptChannel_get_channel_res
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = AcceptChannel_get_channel_reserve_satoshis(&this_ptr_conv);
        return ret_val;
 }
@@ -19313,6 +22766,7 @@ void  __attribute__((visibility("default"))) TS_AcceptChannel_set_channel_reserv
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        AcceptChannel_set_channel_reserve_satoshis(&this_ptr_conv, val);
 }
 
@@ -19320,6 +22774,7 @@ int64_t  __attribute__((visibility("default"))) TS_AcceptChannel_get_htlc_minimu
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = AcceptChannel_get_htlc_minimum_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -19328,6 +22783,7 @@ void  __attribute__((visibility("default"))) TS_AcceptChannel_set_htlc_minimum_m
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        AcceptChannel_set_htlc_minimum_msat(&this_ptr_conv, val);
 }
 
@@ -19335,6 +22791,7 @@ int32_t  __attribute__((visibility("default"))) TS_AcceptChannel_get_minimum_dep
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = AcceptChannel_get_minimum_depth(&this_ptr_conv);
        return ret_val;
 }
@@ -19343,6 +22800,7 @@ void  __attribute__((visibility("default"))) TS_AcceptChannel_set_minimum_depth(
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        AcceptChannel_set_minimum_depth(&this_ptr_conv, val);
 }
 
@@ -19350,6 +22808,7 @@ int16_t  __attribute__((visibility("default"))) TS_AcceptChannel_get_to_self_del
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = AcceptChannel_get_to_self_delay(&this_ptr_conv);
        return ret_val;
 }
@@ -19358,6 +22817,7 @@ void  __attribute__((visibility("default"))) TS_AcceptChannel_set_to_self_delay(
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        AcceptChannel_set_to_self_delay(&this_ptr_conv, val);
 }
 
@@ -19365,6 +22825,7 @@ int16_t  __attribute__((visibility("default"))) TS_AcceptChannel_get_max_accepte
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = AcceptChannel_get_max_accepted_htlcs(&this_ptr_conv);
        return ret_val;
 }
@@ -19373,6 +22834,7 @@ void  __attribute__((visibility("default"))) TS_AcceptChannel_set_max_accepted_h
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        AcceptChannel_set_max_accepted_htlcs(&this_ptr_conv, val);
 }
 
@@ -19380,6 +22842,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_AcceptChannel_get_funding
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), AcceptChannel_get_funding_pubkey(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -19389,6 +22852,7 @@ void  __attribute__((visibility("default"))) TS_AcceptChannel_set_funding_pubkey
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -19399,6 +22863,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_AcceptChannel_get_revocat
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), AcceptChannel_get_revocation_basepoint(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -19408,6 +22873,7 @@ void  __attribute__((visibility("default"))) TS_AcceptChannel_set_revocation_bas
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -19418,6 +22884,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_AcceptChannel_get_payment
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), AcceptChannel_get_payment_point(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -19427,6 +22894,7 @@ void  __attribute__((visibility("default"))) TS_AcceptChannel_set_payment_point(
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -19437,6 +22905,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_AcceptChannel_get_delayed
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), AcceptChannel_get_delayed_payment_basepoint(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -19446,6 +22915,7 @@ void  __attribute__((visibility("default"))) TS_AcceptChannel_set_delayed_paymen
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -19456,6 +22926,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_AcceptChannel_get_htlc_ba
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), AcceptChannel_get_htlc_basepoint(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -19465,6 +22936,7 @@ void  __attribute__((visibility("default"))) TS_AcceptChannel_set_htlc_basepoint
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -19475,6 +22947,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_AcceptChannel_get_first_p
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), AcceptChannel_get_first_per_commitment_point(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -19484,20 +22957,44 @@ void  __attribute__((visibility("default"))) TS_AcceptChannel_set_first_per_comm
        LDKAcceptChannel this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
        AcceptChannel_set_first_per_commitment_point(&this_ptr_conv, val_ref);
 }
 
+static inline uint64_t AcceptChannel_clone_ptr(LDKAcceptChannel *NONNULL_PTR arg) {
+       LDKAcceptChannel ret_var = AcceptChannel_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_AcceptChannel_clone_ptr(uint32_t arg) {
+       LDKAcceptChannel arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = AcceptChannel_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_AcceptChannel_clone(uint32_t orig) {
        LDKAcceptChannel orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKAcceptChannel ret_var = AcceptChannel_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -19509,6 +23006,7 @@ void  __attribute__((visibility("default"))) TS_FundingCreated_free(uint32_t thi
        LDKFundingCreated this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        FundingCreated_free(this_obj_conv);
 }
 
@@ -19516,6 +23014,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_FundingCreated_get_tempor
        LDKFundingCreated this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *FundingCreated_get_temporary_channel_id(&this_ptr_conv), 32);
        return ret_arr;
@@ -19525,6 +23024,7 @@ void  __attribute__((visibility("default"))) TS_FundingCreated_set_temporary_cha
        LDKFundingCreated this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -19535,6 +23035,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_FundingCreated_get_fundin
        LDKFundingCreated this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *FundingCreated_get_funding_txid(&this_ptr_conv), 32);
        return ret_arr;
@@ -19544,6 +23045,7 @@ void  __attribute__((visibility("default"))) TS_FundingCreated_set_funding_txid(
        LDKFundingCreated this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -19554,6 +23056,7 @@ int16_t  __attribute__((visibility("default"))) TS_FundingCreated_get_funding_ou
        LDKFundingCreated this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = FundingCreated_get_funding_output_index(&this_ptr_conv);
        return ret_val;
 }
@@ -19562,6 +23065,7 @@ void  __attribute__((visibility("default"))) TS_FundingCreated_set_funding_outpu
        LDKFundingCreated this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        FundingCreated_set_funding_output_index(&this_ptr_conv, val);
 }
 
@@ -19569,6 +23073,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_FundingCreated_get_signat
        LDKFundingCreated this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(64, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), FundingCreated_get_signature(&this_ptr_conv).compact_form, 64);
        return ret_arr;
@@ -19578,6 +23083,7 @@ void  __attribute__((visibility("default"))) TS_FundingCreated_set_signature(uin
        LDKFundingCreated this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSignature val_ref;
        CHECK(*((uint32_t*)val) == 64);
        memcpy(val_ref.compact_form, (uint8_t*)(val + 4), 64);
@@ -19598,6 +23104,7 @@ uint32_t  __attribute__((visibility("default"))) TS_FundingCreated_new(int8_tArr
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -19605,14 +23112,37 @@ uint32_t  __attribute__((visibility("default"))) TS_FundingCreated_new(int8_tArr
        return ret_ref;
 }
 
+static inline uint64_t FundingCreated_clone_ptr(LDKFundingCreated *NONNULL_PTR arg) {
+       LDKFundingCreated ret_var = FundingCreated_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_FundingCreated_clone_ptr(uint32_t arg) {
+       LDKFundingCreated arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = FundingCreated_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_FundingCreated_clone(uint32_t orig) {
        LDKFundingCreated orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKFundingCreated ret_var = FundingCreated_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -19624,6 +23154,7 @@ void  __attribute__((visibility("default"))) TS_FundingSigned_free(uint32_t this
        LDKFundingSigned this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        FundingSigned_free(this_obj_conv);
 }
 
@@ -19631,6 +23162,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_FundingSigned_get_channel
        LDKFundingSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *FundingSigned_get_channel_id(&this_ptr_conv), 32);
        return ret_arr;
@@ -19640,6 +23172,7 @@ void  __attribute__((visibility("default"))) TS_FundingSigned_set_channel_id(uin
        LDKFundingSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -19650,6 +23183,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_FundingSigned_get_signatu
        LDKFundingSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(64, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), FundingSigned_get_signature(&this_ptr_conv).compact_form, 64);
        return ret_arr;
@@ -19659,6 +23193,7 @@ void  __attribute__((visibility("default"))) TS_FundingSigned_set_signature(uint
        LDKFundingSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSignature val_ref;
        CHECK(*((uint32_t*)val) == 64);
        memcpy(val_ref.compact_form, (uint8_t*)(val + 4), 64);
@@ -19676,6 +23211,7 @@ uint32_t  __attribute__((visibility("default"))) TS_FundingSigned_new(int8_tArra
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -19683,14 +23219,37 @@ uint32_t  __attribute__((visibility("default"))) TS_FundingSigned_new(int8_tArra
        return ret_ref;
 }
 
+static inline uint64_t FundingSigned_clone_ptr(LDKFundingSigned *NONNULL_PTR arg) {
+       LDKFundingSigned ret_var = FundingSigned_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_FundingSigned_clone_ptr(uint32_t arg) {
+       LDKFundingSigned arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = FundingSigned_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_FundingSigned_clone(uint32_t orig) {
        LDKFundingSigned orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKFundingSigned ret_var = FundingSigned_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -19702,6 +23261,7 @@ void  __attribute__((visibility("default"))) TS_FundingLocked_free(uint32_t this
        LDKFundingLocked this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        FundingLocked_free(this_obj_conv);
 }
 
@@ -19709,6 +23269,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_FundingLocked_get_channel
        LDKFundingLocked this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *FundingLocked_get_channel_id(&this_ptr_conv), 32);
        return ret_arr;
@@ -19718,6 +23279,7 @@ void  __attribute__((visibility("default"))) TS_FundingLocked_set_channel_id(uin
        LDKFundingLocked this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -19728,6 +23290,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_FundingLocked_get_next_pe
        LDKFundingLocked this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), FundingLocked_get_next_per_commitment_point(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -19737,6 +23300,7 @@ void  __attribute__((visibility("default"))) TS_FundingLocked_set_next_per_commi
        LDKFundingLocked this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -19754,6 +23318,7 @@ uint32_t  __attribute__((visibility("default"))) TS_FundingLocked_new(int8_tArra
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -19761,14 +23326,37 @@ uint32_t  __attribute__((visibility("default"))) TS_FundingLocked_new(int8_tArra
        return ret_ref;
 }
 
+static inline uint64_t FundingLocked_clone_ptr(LDKFundingLocked *NONNULL_PTR arg) {
+       LDKFundingLocked ret_var = FundingLocked_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_FundingLocked_clone_ptr(uint32_t arg) {
+       LDKFundingLocked arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = FundingLocked_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_FundingLocked_clone(uint32_t orig) {
        LDKFundingLocked orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKFundingLocked ret_var = FundingLocked_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -19780,6 +23368,7 @@ void  __attribute__((visibility("default"))) TS_Shutdown_free(uint32_t this_obj)
        LDKShutdown this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        Shutdown_free(this_obj_conv);
 }
 
@@ -19787,6 +23376,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_Shutdown_get_channel_id(u
        LDKShutdown this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *Shutdown_get_channel_id(&this_ptr_conv), 32);
        return ret_arr;
@@ -19796,6 +23386,7 @@ void  __attribute__((visibility("default"))) TS_Shutdown_set_channel_id(uint32_t
        LDKShutdown this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -19806,6 +23397,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_Shutdown_get_scriptpubkey
        LDKShutdown this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKu8slice ret_var = Shutdown_get_scriptpubkey(&this_ptr_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -19816,6 +23408,7 @@ void  __attribute__((visibility("default"))) TS_Shutdown_set_scriptpubkey(uint32
        LDKShutdown this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_u8Z val_ref;
        val_ref.datalen = *((uint32_t*)val);
        val_ref.data = MALLOC(val_ref.datalen, "LDKCVec_u8Z Bytes");
@@ -19835,6 +23428,7 @@ uint32_t  __attribute__((visibility("default"))) TS_Shutdown_new(int8_tArray cha
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -19842,14 +23436,37 @@ uint32_t  __attribute__((visibility("default"))) TS_Shutdown_new(int8_tArray cha
        return ret_ref;
 }
 
+static inline uint64_t Shutdown_clone_ptr(LDKShutdown *NONNULL_PTR arg) {
+       LDKShutdown ret_var = Shutdown_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_Shutdown_clone_ptr(uint32_t arg) {
+       LDKShutdown arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = Shutdown_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_Shutdown_clone(uint32_t orig) {
        LDKShutdown orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKShutdown ret_var = Shutdown_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -19861,6 +23478,7 @@ void  __attribute__((visibility("default"))) TS_ClosingSignedFeeRange_free(uint3
        LDKClosingSignedFeeRange this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ClosingSignedFeeRange_free(this_obj_conv);
 }
 
@@ -19868,6 +23486,7 @@ int64_t  __attribute__((visibility("default"))) TS_ClosingSignedFeeRange_get_min
        LDKClosingSignedFeeRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ClosingSignedFeeRange_get_min_fee_satoshis(&this_ptr_conv);
        return ret_val;
 }
@@ -19876,6 +23495,7 @@ void  __attribute__((visibility("default"))) TS_ClosingSignedFeeRange_set_min_fe
        LDKClosingSignedFeeRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ClosingSignedFeeRange_set_min_fee_satoshis(&this_ptr_conv, val);
 }
 
@@ -19883,6 +23503,7 @@ int64_t  __attribute__((visibility("default"))) TS_ClosingSignedFeeRange_get_max
        LDKClosingSignedFeeRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ClosingSignedFeeRange_get_max_fee_satoshis(&this_ptr_conv);
        return ret_val;
 }
@@ -19891,6 +23512,7 @@ void  __attribute__((visibility("default"))) TS_ClosingSignedFeeRange_set_max_fe
        LDKClosingSignedFeeRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ClosingSignedFeeRange_set_max_fee_satoshis(&this_ptr_conv, val);
 }
 
@@ -19899,6 +23521,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ClosingSignedFeeRange_new(in
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -19906,14 +23529,37 @@ uint32_t  __attribute__((visibility("default"))) TS_ClosingSignedFeeRange_new(in
        return ret_ref;
 }
 
+static inline uint64_t ClosingSignedFeeRange_clone_ptr(LDKClosingSignedFeeRange *NONNULL_PTR arg) {
+       LDKClosingSignedFeeRange ret_var = ClosingSignedFeeRange_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_ClosingSignedFeeRange_clone_ptr(uint32_t arg) {
+       LDKClosingSignedFeeRange arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ClosingSignedFeeRange_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_ClosingSignedFeeRange_clone(uint32_t orig) {
        LDKClosingSignedFeeRange orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKClosingSignedFeeRange ret_var = ClosingSignedFeeRange_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -19925,6 +23571,7 @@ void  __attribute__((visibility("default"))) TS_ClosingSigned_free(uint32_t this
        LDKClosingSigned this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ClosingSigned_free(this_obj_conv);
 }
 
@@ -19932,6 +23579,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ClosingSigned_get_channel
        LDKClosingSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *ClosingSigned_get_channel_id(&this_ptr_conv), 32);
        return ret_arr;
@@ -19941,6 +23589,7 @@ void  __attribute__((visibility("default"))) TS_ClosingSigned_set_channel_id(uin
        LDKClosingSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -19951,6 +23600,7 @@ int64_t  __attribute__((visibility("default"))) TS_ClosingSigned_get_fee_satoshi
        LDKClosingSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ClosingSigned_get_fee_satoshis(&this_ptr_conv);
        return ret_val;
 }
@@ -19959,6 +23609,7 @@ void  __attribute__((visibility("default"))) TS_ClosingSigned_set_fee_satoshis(u
        LDKClosingSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ClosingSigned_set_fee_satoshis(&this_ptr_conv, val);
 }
 
@@ -19966,6 +23617,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ClosingSigned_get_signatu
        LDKClosingSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(64, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ClosingSigned_get_signature(&this_ptr_conv).compact_form, 64);
        return ret_arr;
@@ -19975,6 +23627,7 @@ void  __attribute__((visibility("default"))) TS_ClosingSigned_set_signature(uint
        LDKClosingSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSignature val_ref;
        CHECK(*((uint32_t*)val) == 64);
        memcpy(val_ref.compact_form, (uint8_t*)(val + 4), 64);
@@ -19985,11 +23638,13 @@ uint32_t  __attribute__((visibility("default"))) TS_ClosingSigned_get_fee_range(
        LDKClosingSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKClosingSignedFeeRange ret_var = ClosingSigned_get_fee_range(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -20002,9 +23657,11 @@ void  __attribute__((visibility("default"))) TS_ClosingSigned_set_fee_range(uint
        LDKClosingSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKClosingSignedFeeRange val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = ClosingSignedFeeRange_clone(&val_conv);
        ClosingSigned_set_fee_range(&this_ptr_conv, val_conv);
 }
@@ -20019,11 +23676,13 @@ uint32_t  __attribute__((visibility("default"))) TS_ClosingSigned_new(int8_tArra
        LDKClosingSignedFeeRange fee_range_arg_conv;
        fee_range_arg_conv.inner = (void*)(fee_range_arg & (~1));
        fee_range_arg_conv.is_owned = (fee_range_arg & 1) || (fee_range_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(fee_range_arg_conv);
        fee_range_arg_conv = ClosingSignedFeeRange_clone(&fee_range_arg_conv);
        LDKClosingSigned ret_var = ClosingSigned_new(channel_id_arg_ref, fee_satoshis_arg, signature_arg_ref, fee_range_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20031,14 +23690,37 @@ uint32_t  __attribute__((visibility("default"))) TS_ClosingSigned_new(int8_tArra
        return ret_ref;
 }
 
+static inline uint64_t ClosingSigned_clone_ptr(LDKClosingSigned *NONNULL_PTR arg) {
+       LDKClosingSigned ret_var = ClosingSigned_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_ClosingSigned_clone_ptr(uint32_t arg) {
+       LDKClosingSigned arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ClosingSigned_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_ClosingSigned_clone(uint32_t orig) {
        LDKClosingSigned orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKClosingSigned ret_var = ClosingSigned_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20050,6 +23732,7 @@ void  __attribute__((visibility("default"))) TS_UpdateAddHTLC_free(uint32_t this
        LDKUpdateAddHTLC this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        UpdateAddHTLC_free(this_obj_conv);
 }
 
@@ -20057,6 +23740,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_UpdateAddHTLC_get_channel
        LDKUpdateAddHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *UpdateAddHTLC_get_channel_id(&this_ptr_conv), 32);
        return ret_arr;
@@ -20066,6 +23750,7 @@ void  __attribute__((visibility("default"))) TS_UpdateAddHTLC_set_channel_id(uin
        LDKUpdateAddHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -20076,6 +23761,7 @@ int64_t  __attribute__((visibility("default"))) TS_UpdateAddHTLC_get_htlc_id(uin
        LDKUpdateAddHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = UpdateAddHTLC_get_htlc_id(&this_ptr_conv);
        return ret_val;
 }
@@ -20084,6 +23770,7 @@ void  __attribute__((visibility("default"))) TS_UpdateAddHTLC_set_htlc_id(uint32
        LDKUpdateAddHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UpdateAddHTLC_set_htlc_id(&this_ptr_conv, val);
 }
 
@@ -20091,6 +23778,7 @@ int64_t  __attribute__((visibility("default"))) TS_UpdateAddHTLC_get_amount_msat
        LDKUpdateAddHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = UpdateAddHTLC_get_amount_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -20099,6 +23787,7 @@ void  __attribute__((visibility("default"))) TS_UpdateAddHTLC_set_amount_msat(ui
        LDKUpdateAddHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UpdateAddHTLC_set_amount_msat(&this_ptr_conv, val);
 }
 
@@ -20106,6 +23795,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_UpdateAddHTLC_get_payment
        LDKUpdateAddHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *UpdateAddHTLC_get_payment_hash(&this_ptr_conv), 32);
        return ret_arr;
@@ -20115,6 +23805,7 @@ void  __attribute__((visibility("default"))) TS_UpdateAddHTLC_set_payment_hash(u
        LDKUpdateAddHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -20125,6 +23816,7 @@ int32_t  __attribute__((visibility("default"))) TS_UpdateAddHTLC_get_cltv_expiry
        LDKUpdateAddHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = UpdateAddHTLC_get_cltv_expiry(&this_ptr_conv);
        return ret_val;
 }
@@ -20133,17 +23825,41 @@ void  __attribute__((visibility("default"))) TS_UpdateAddHTLC_set_cltv_expiry(ui
        LDKUpdateAddHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UpdateAddHTLC_set_cltv_expiry(&this_ptr_conv, val);
 }
 
+static inline uint64_t UpdateAddHTLC_clone_ptr(LDKUpdateAddHTLC *NONNULL_PTR arg) {
+       LDKUpdateAddHTLC ret_var = UpdateAddHTLC_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_UpdateAddHTLC_clone_ptr(uint32_t arg) {
+       LDKUpdateAddHTLC arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = UpdateAddHTLC_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_UpdateAddHTLC_clone(uint32_t orig) {
        LDKUpdateAddHTLC orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKUpdateAddHTLC ret_var = UpdateAddHTLC_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20155,6 +23871,7 @@ void  __attribute__((visibility("default"))) TS_UpdateFulfillHTLC_free(uint32_t
        LDKUpdateFulfillHTLC this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        UpdateFulfillHTLC_free(this_obj_conv);
 }
 
@@ -20162,6 +23879,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_UpdateFulfillHTLC_get_cha
        LDKUpdateFulfillHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *UpdateFulfillHTLC_get_channel_id(&this_ptr_conv), 32);
        return ret_arr;
@@ -20171,6 +23889,7 @@ void  __attribute__((visibility("default"))) TS_UpdateFulfillHTLC_set_channel_id
        LDKUpdateFulfillHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -20181,6 +23900,7 @@ int64_t  __attribute__((visibility("default"))) TS_UpdateFulfillHTLC_get_htlc_id
        LDKUpdateFulfillHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = UpdateFulfillHTLC_get_htlc_id(&this_ptr_conv);
        return ret_val;
 }
@@ -20189,6 +23909,7 @@ void  __attribute__((visibility("default"))) TS_UpdateFulfillHTLC_set_htlc_id(ui
        LDKUpdateFulfillHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UpdateFulfillHTLC_set_htlc_id(&this_ptr_conv, val);
 }
 
@@ -20196,6 +23917,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_UpdateFulfillHTLC_get_pay
        LDKUpdateFulfillHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *UpdateFulfillHTLC_get_payment_preimage(&this_ptr_conv), 32);
        return ret_arr;
@@ -20205,6 +23927,7 @@ void  __attribute__((visibility("default"))) TS_UpdateFulfillHTLC_set_payment_pr
        LDKUpdateFulfillHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -20222,6 +23945,7 @@ uint32_t  __attribute__((visibility("default"))) TS_UpdateFulfillHTLC_new(int8_t
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20229,14 +23953,37 @@ uint32_t  __attribute__((visibility("default"))) TS_UpdateFulfillHTLC_new(int8_t
        return ret_ref;
 }
 
+static inline uint64_t UpdateFulfillHTLC_clone_ptr(LDKUpdateFulfillHTLC *NONNULL_PTR arg) {
+       LDKUpdateFulfillHTLC ret_var = UpdateFulfillHTLC_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_UpdateFulfillHTLC_clone_ptr(uint32_t arg) {
+       LDKUpdateFulfillHTLC arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = UpdateFulfillHTLC_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_UpdateFulfillHTLC_clone(uint32_t orig) {
        LDKUpdateFulfillHTLC orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKUpdateFulfillHTLC ret_var = UpdateFulfillHTLC_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20248,6 +23995,7 @@ void  __attribute__((visibility("default"))) TS_UpdateFailHTLC_free(uint32_t thi
        LDKUpdateFailHTLC this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        UpdateFailHTLC_free(this_obj_conv);
 }
 
@@ -20255,6 +24003,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_UpdateFailHTLC_get_channe
        LDKUpdateFailHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *UpdateFailHTLC_get_channel_id(&this_ptr_conv), 32);
        return ret_arr;
@@ -20264,6 +24013,7 @@ void  __attribute__((visibility("default"))) TS_UpdateFailHTLC_set_channel_id(ui
        LDKUpdateFailHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -20274,6 +24024,7 @@ int64_t  __attribute__((visibility("default"))) TS_UpdateFailHTLC_get_htlc_id(ui
        LDKUpdateFailHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = UpdateFailHTLC_get_htlc_id(&this_ptr_conv);
        return ret_val;
 }
@@ -20282,17 +24033,41 @@ void  __attribute__((visibility("default"))) TS_UpdateFailHTLC_set_htlc_id(uint3
        LDKUpdateFailHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UpdateFailHTLC_set_htlc_id(&this_ptr_conv, val);
 }
 
+static inline uint64_t UpdateFailHTLC_clone_ptr(LDKUpdateFailHTLC *NONNULL_PTR arg) {
+       LDKUpdateFailHTLC ret_var = UpdateFailHTLC_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_UpdateFailHTLC_clone_ptr(uint32_t arg) {
+       LDKUpdateFailHTLC arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = UpdateFailHTLC_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_UpdateFailHTLC_clone(uint32_t orig) {
        LDKUpdateFailHTLC orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKUpdateFailHTLC ret_var = UpdateFailHTLC_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20304,6 +24079,7 @@ void  __attribute__((visibility("default"))) TS_UpdateFailMalformedHTLC_free(uin
        LDKUpdateFailMalformedHTLC this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        UpdateFailMalformedHTLC_free(this_obj_conv);
 }
 
@@ -20311,6 +24087,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_UpdateFailMalformedHTLC_g
        LDKUpdateFailMalformedHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *UpdateFailMalformedHTLC_get_channel_id(&this_ptr_conv), 32);
        return ret_arr;
@@ -20320,6 +24097,7 @@ void  __attribute__((visibility("default"))) TS_UpdateFailMalformedHTLC_set_chan
        LDKUpdateFailMalformedHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -20330,6 +24108,7 @@ int64_t  __attribute__((visibility("default"))) TS_UpdateFailMalformedHTLC_get_h
        LDKUpdateFailMalformedHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = UpdateFailMalformedHTLC_get_htlc_id(&this_ptr_conv);
        return ret_val;
 }
@@ -20338,6 +24117,7 @@ void  __attribute__((visibility("default"))) TS_UpdateFailMalformedHTLC_set_htlc
        LDKUpdateFailMalformedHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UpdateFailMalformedHTLC_set_htlc_id(&this_ptr_conv, val);
 }
 
@@ -20345,6 +24125,7 @@ int16_t  __attribute__((visibility("default"))) TS_UpdateFailMalformedHTLC_get_f
        LDKUpdateFailMalformedHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = UpdateFailMalformedHTLC_get_failure_code(&this_ptr_conv);
        return ret_val;
 }
@@ -20353,17 +24134,41 @@ void  __attribute__((visibility("default"))) TS_UpdateFailMalformedHTLC_set_fail
        LDKUpdateFailMalformedHTLC this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UpdateFailMalformedHTLC_set_failure_code(&this_ptr_conv, val);
 }
 
+static inline uint64_t UpdateFailMalformedHTLC_clone_ptr(LDKUpdateFailMalformedHTLC *NONNULL_PTR arg) {
+       LDKUpdateFailMalformedHTLC ret_var = UpdateFailMalformedHTLC_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_UpdateFailMalformedHTLC_clone_ptr(uint32_t arg) {
+       LDKUpdateFailMalformedHTLC arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = UpdateFailMalformedHTLC_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_UpdateFailMalformedHTLC_clone(uint32_t orig) {
        LDKUpdateFailMalformedHTLC orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKUpdateFailMalformedHTLC ret_var = UpdateFailMalformedHTLC_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20375,6 +24180,7 @@ void  __attribute__((visibility("default"))) TS_CommitmentSigned_free(uint32_t t
        LDKCommitmentSigned this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        CommitmentSigned_free(this_obj_conv);
 }
 
@@ -20382,6 +24188,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_CommitmentSigned_get_chan
        LDKCommitmentSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *CommitmentSigned_get_channel_id(&this_ptr_conv), 32);
        return ret_arr;
@@ -20391,6 +24198,7 @@ void  __attribute__((visibility("default"))) TS_CommitmentSigned_set_channel_id(
        LDKCommitmentSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -20401,6 +24209,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_CommitmentSigned_get_sign
        LDKCommitmentSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(64, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), CommitmentSigned_get_signature(&this_ptr_conv).compact_form, 64);
        return ret_arr;
@@ -20410,6 +24219,7 @@ void  __attribute__((visibility("default"))) TS_CommitmentSigned_set_signature(u
        LDKCommitmentSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSignature val_ref;
        CHECK(*((uint32_t*)val) == 64);
        memcpy(val_ref.compact_form, (uint8_t*)(val + 4), 64);
@@ -20420,6 +24230,7 @@ void  __attribute__((visibility("default"))) TS_CommitmentSigned_set_htlc_signat
        LDKCommitmentSigned this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_SignatureZ val_constr;
        val_constr.datalen = *((uint32_t*)val);
        if (val_constr.datalen > 0)
@@ -20462,6 +24273,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CommitmentSigned_new(int8_tA
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20469,14 +24281,37 @@ uint32_t  __attribute__((visibility("default"))) TS_CommitmentSigned_new(int8_tA
        return ret_ref;
 }
 
+static inline uint64_t CommitmentSigned_clone_ptr(LDKCommitmentSigned *NONNULL_PTR arg) {
+       LDKCommitmentSigned ret_var = CommitmentSigned_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_CommitmentSigned_clone_ptr(uint32_t arg) {
+       LDKCommitmentSigned arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = CommitmentSigned_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CommitmentSigned_clone(uint32_t orig) {
        LDKCommitmentSigned orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKCommitmentSigned ret_var = CommitmentSigned_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20488,6 +24323,7 @@ void  __attribute__((visibility("default"))) TS_RevokeAndACK_free(uint32_t this_
        LDKRevokeAndACK this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        RevokeAndACK_free(this_obj_conv);
 }
 
@@ -20495,6 +24331,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_RevokeAndACK_get_channel_
        LDKRevokeAndACK this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *RevokeAndACK_get_channel_id(&this_ptr_conv), 32);
        return ret_arr;
@@ -20504,6 +24341,7 @@ void  __attribute__((visibility("default"))) TS_RevokeAndACK_set_channel_id(uint
        LDKRevokeAndACK this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -20514,6 +24352,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_RevokeAndACK_get_per_comm
        LDKRevokeAndACK this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *RevokeAndACK_get_per_commitment_secret(&this_ptr_conv), 32);
        return ret_arr;
@@ -20523,6 +24362,7 @@ void  __attribute__((visibility("default"))) TS_RevokeAndACK_set_per_commitment_
        LDKRevokeAndACK this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -20533,6 +24373,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_RevokeAndACK_get_next_per
        LDKRevokeAndACK this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), RevokeAndACK_get_next_per_commitment_point(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -20542,6 +24383,7 @@ void  __attribute__((visibility("default"))) TS_RevokeAndACK_set_next_per_commit
        LDKRevokeAndACK this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -20562,6 +24404,7 @@ uint32_t  __attribute__((visibility("default"))) TS_RevokeAndACK_new(int8_tArray
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20569,14 +24412,37 @@ uint32_t  __attribute__((visibility("default"))) TS_RevokeAndACK_new(int8_tArray
        return ret_ref;
 }
 
+static inline uint64_t RevokeAndACK_clone_ptr(LDKRevokeAndACK *NONNULL_PTR arg) {
+       LDKRevokeAndACK ret_var = RevokeAndACK_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_RevokeAndACK_clone_ptr(uint32_t arg) {
+       LDKRevokeAndACK arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = RevokeAndACK_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_RevokeAndACK_clone(uint32_t orig) {
        LDKRevokeAndACK orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKRevokeAndACK ret_var = RevokeAndACK_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20588,6 +24454,7 @@ void  __attribute__((visibility("default"))) TS_UpdateFee_free(uint32_t this_obj
        LDKUpdateFee this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        UpdateFee_free(this_obj_conv);
 }
 
@@ -20595,6 +24462,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_UpdateFee_get_channel_id(
        LDKUpdateFee this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *UpdateFee_get_channel_id(&this_ptr_conv), 32);
        return ret_arr;
@@ -20604,6 +24472,7 @@ void  __attribute__((visibility("default"))) TS_UpdateFee_set_channel_id(uint32_
        LDKUpdateFee this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -20614,6 +24483,7 @@ int32_t  __attribute__((visibility("default"))) TS_UpdateFee_get_feerate_per_kw(
        LDKUpdateFee this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = UpdateFee_get_feerate_per_kw(&this_ptr_conv);
        return ret_val;
 }
@@ -20622,6 +24492,7 @@ void  __attribute__((visibility("default"))) TS_UpdateFee_set_feerate_per_kw(uin
        LDKUpdateFee this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UpdateFee_set_feerate_per_kw(&this_ptr_conv, val);
 }
 
@@ -20633,6 +24504,7 @@ uint32_t  __attribute__((visibility("default"))) TS_UpdateFee_new(int8_tArray ch
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20640,14 +24512,37 @@ uint32_t  __attribute__((visibility("default"))) TS_UpdateFee_new(int8_tArray ch
        return ret_ref;
 }
 
+static inline uint64_t UpdateFee_clone_ptr(LDKUpdateFee *NONNULL_PTR arg) {
+       LDKUpdateFee ret_var = UpdateFee_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_UpdateFee_clone_ptr(uint32_t arg) {
+       LDKUpdateFee arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = UpdateFee_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_UpdateFee_clone(uint32_t orig) {
        LDKUpdateFee orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKUpdateFee ret_var = UpdateFee_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20659,6 +24554,7 @@ void  __attribute__((visibility("default"))) TS_DataLossProtect_free(uint32_t th
        LDKDataLossProtect this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        DataLossProtect_free(this_obj_conv);
 }
 
@@ -20666,6 +24562,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_DataLossProtect_get_your_
        LDKDataLossProtect this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *DataLossProtect_get_your_last_per_commitment_secret(&this_ptr_conv), 32);
        return ret_arr;
@@ -20675,6 +24572,7 @@ void  __attribute__((visibility("default"))) TS_DataLossProtect_set_your_last_pe
        LDKDataLossProtect this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -20685,6 +24583,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_DataLossProtect_get_my_cu
        LDKDataLossProtect this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), DataLossProtect_get_my_current_per_commitment_point(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -20694,6 +24593,7 @@ void  __attribute__((visibility("default"))) TS_DataLossProtect_set_my_current_p
        LDKDataLossProtect this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -20711,6 +24611,7 @@ uint32_t  __attribute__((visibility("default"))) TS_DataLossProtect_new(int8_tAr
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20718,14 +24619,37 @@ uint32_t  __attribute__((visibility("default"))) TS_DataLossProtect_new(int8_tAr
        return ret_ref;
 }
 
+static inline uint64_t DataLossProtect_clone_ptr(LDKDataLossProtect *NONNULL_PTR arg) {
+       LDKDataLossProtect ret_var = DataLossProtect_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_DataLossProtect_clone_ptr(uint32_t arg) {
+       LDKDataLossProtect arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = DataLossProtect_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_DataLossProtect_clone(uint32_t orig) {
        LDKDataLossProtect orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKDataLossProtect ret_var = DataLossProtect_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20737,6 +24661,7 @@ void  __attribute__((visibility("default"))) TS_ChannelReestablish_free(uint32_t
        LDKChannelReestablish this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelReestablish_free(this_obj_conv);
 }
 
@@ -20744,6 +24669,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ChannelReestablish_get_ch
        LDKChannelReestablish this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *ChannelReestablish_get_channel_id(&this_ptr_conv), 32);
        return ret_arr;
@@ -20753,6 +24679,7 @@ void  __attribute__((visibility("default"))) TS_ChannelReestablish_set_channel_i
        LDKChannelReestablish this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -20763,6 +24690,7 @@ int64_t  __attribute__((visibility("default"))) TS_ChannelReestablish_get_next_l
        LDKChannelReestablish this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelReestablish_get_next_local_commitment_number(&this_ptr_conv);
        return ret_val;
 }
@@ -20771,6 +24699,7 @@ void  __attribute__((visibility("default"))) TS_ChannelReestablish_set_next_loca
        LDKChannelReestablish this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelReestablish_set_next_local_commitment_number(&this_ptr_conv, val);
 }
 
@@ -20778,6 +24707,7 @@ int64_t  __attribute__((visibility("default"))) TS_ChannelReestablish_get_next_r
        LDKChannelReestablish this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ChannelReestablish_get_next_remote_commitment_number(&this_ptr_conv);
        return ret_val;
 }
@@ -20786,17 +24716,41 @@ void  __attribute__((visibility("default"))) TS_ChannelReestablish_set_next_remo
        LDKChannelReestablish this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelReestablish_set_next_remote_commitment_number(&this_ptr_conv, val);
 }
 
+static inline uint64_t ChannelReestablish_clone_ptr(LDKChannelReestablish *NONNULL_PTR arg) {
+       LDKChannelReestablish ret_var = ChannelReestablish_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_ChannelReestablish_clone_ptr(uint32_t arg) {
+       LDKChannelReestablish arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChannelReestablish_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_ChannelReestablish_clone(uint32_t orig) {
        LDKChannelReestablish orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChannelReestablish ret_var = ChannelReestablish_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20808,6 +24762,7 @@ void  __attribute__((visibility("default"))) TS_AnnouncementSignatures_free(uint
        LDKAnnouncementSignatures this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        AnnouncementSignatures_free(this_obj_conv);
 }
 
@@ -20815,6 +24770,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_AnnouncementSignatures_ge
        LDKAnnouncementSignatures this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *AnnouncementSignatures_get_channel_id(&this_ptr_conv), 32);
        return ret_arr;
@@ -20824,6 +24780,7 @@ void  __attribute__((visibility("default"))) TS_AnnouncementSignatures_set_chann
        LDKAnnouncementSignatures this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -20834,6 +24791,7 @@ int64_t  __attribute__((visibility("default"))) TS_AnnouncementSignatures_get_sh
        LDKAnnouncementSignatures this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = AnnouncementSignatures_get_short_channel_id(&this_ptr_conv);
        return ret_val;
 }
@@ -20842,6 +24800,7 @@ void  __attribute__((visibility("default"))) TS_AnnouncementSignatures_set_short
        LDKAnnouncementSignatures this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        AnnouncementSignatures_set_short_channel_id(&this_ptr_conv, val);
 }
 
@@ -20849,6 +24808,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_AnnouncementSignatures_ge
        LDKAnnouncementSignatures this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(64, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), AnnouncementSignatures_get_node_signature(&this_ptr_conv).compact_form, 64);
        return ret_arr;
@@ -20858,6 +24818,7 @@ void  __attribute__((visibility("default"))) TS_AnnouncementSignatures_set_node_
        LDKAnnouncementSignatures this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSignature val_ref;
        CHECK(*((uint32_t*)val) == 64);
        memcpy(val_ref.compact_form, (uint8_t*)(val + 4), 64);
@@ -20868,6 +24829,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_AnnouncementSignatures_ge
        LDKAnnouncementSignatures this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(64, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), AnnouncementSignatures_get_bitcoin_signature(&this_ptr_conv).compact_form, 64);
        return ret_arr;
@@ -20877,6 +24839,7 @@ void  __attribute__((visibility("default"))) TS_AnnouncementSignatures_set_bitco
        LDKAnnouncementSignatures this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSignature val_ref;
        CHECK(*((uint32_t*)val) == 64);
        memcpy(val_ref.compact_form, (uint8_t*)(val + 4), 64);
@@ -20897,6 +24860,7 @@ uint32_t  __attribute__((visibility("default"))) TS_AnnouncementSignatures_new(i
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20904,14 +24868,37 @@ uint32_t  __attribute__((visibility("default"))) TS_AnnouncementSignatures_new(i
        return ret_ref;
 }
 
+static inline uint64_t AnnouncementSignatures_clone_ptr(LDKAnnouncementSignatures *NONNULL_PTR arg) {
+       LDKAnnouncementSignatures ret_var = AnnouncementSignatures_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_AnnouncementSignatures_clone_ptr(uint32_t arg) {
+       LDKAnnouncementSignatures arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = AnnouncementSignatures_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_AnnouncementSignatures_clone(uint32_t orig) {
        LDKAnnouncementSignatures orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKAnnouncementSignatures ret_var = AnnouncementSignatures_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -20928,6 +24915,18 @@ void  __attribute__((visibility("default"))) TS_NetAddress_free(uint32_t this_pt
        NetAddress_free(this_ptr_conv);
 }
 
+static inline uint64_t NetAddress_clone_ptr(LDKNetAddress *NONNULL_PTR arg) {
+       LDKNetAddress *ret_copy = MALLOC(sizeof(LDKNetAddress), "LDKNetAddress");
+       *ret_copy = NetAddress_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_NetAddress_clone_ptr(uint32_t arg) {
+       LDKNetAddress* arg_conv = (LDKNetAddress*)arg;
+       int64_t ret_val = NetAddress_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_NetAddress_clone(uint32_t orig) {
        LDKNetAddress* orig_conv = (LDKNetAddress*)orig;
        LDKNetAddress *ret_copy = MALLOC(sizeof(LDKNetAddress), "LDKNetAddress");
@@ -20998,6 +24997,7 @@ void  __attribute__((visibility("default"))) TS_UnsignedNodeAnnouncement_free(ui
        LDKUnsignedNodeAnnouncement this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        UnsignedNodeAnnouncement_free(this_obj_conv);
 }
 
@@ -21005,10 +25005,12 @@ uint32_t  __attribute__((visibility("default"))) TS_UnsignedNodeAnnouncement_get
        LDKUnsignedNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNodeFeatures ret_var = UnsignedNodeAnnouncement_get_features(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -21020,9 +25022,11 @@ void  __attribute__((visibility("default"))) TS_UnsignedNodeAnnouncement_set_fea
        LDKUnsignedNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNodeFeatures val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = NodeFeatures_clone(&val_conv);
        UnsignedNodeAnnouncement_set_features(&this_ptr_conv, val_conv);
 }
@@ -21031,6 +25035,7 @@ int32_t  __attribute__((visibility("default"))) TS_UnsignedNodeAnnouncement_get_
        LDKUnsignedNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = UnsignedNodeAnnouncement_get_timestamp(&this_ptr_conv);
        return ret_val;
 }
@@ -21039,6 +25044,7 @@ void  __attribute__((visibility("default"))) TS_UnsignedNodeAnnouncement_set_tim
        LDKUnsignedNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UnsignedNodeAnnouncement_set_timestamp(&this_ptr_conv, val);
 }
 
@@ -21046,6 +25052,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_UnsignedNodeAnnouncement_
        LDKUnsignedNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), UnsignedNodeAnnouncement_get_node_id(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -21055,6 +25062,7 @@ void  __attribute__((visibility("default"))) TS_UnsignedNodeAnnouncement_set_nod
        LDKUnsignedNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -21065,6 +25073,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_UnsignedNodeAnnouncement_
        LDKUnsignedNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(3, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *UnsignedNodeAnnouncement_get_rgb(&this_ptr_conv), 3);
        return ret_arr;
@@ -21074,6 +25083,7 @@ void  __attribute__((visibility("default"))) TS_UnsignedNodeAnnouncement_set_rgb
        LDKUnsignedNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThreeBytes val_ref;
        CHECK(*((uint32_t*)val) == 3);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 3);
@@ -21084,6 +25094,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_UnsignedNodeAnnouncement_
        LDKUnsignedNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *UnsignedNodeAnnouncement_get_alias(&this_ptr_conv), 32);
        return ret_arr;
@@ -21093,6 +25104,7 @@ void  __attribute__((visibility("default"))) TS_UnsignedNodeAnnouncement_set_ali
        LDKUnsignedNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -21103,6 +25115,7 @@ void  __attribute__((visibility("default"))) TS_UnsignedNodeAnnouncement_set_add
        LDKUnsignedNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_NetAddressZ val_constr;
        val_constr.datalen = *((uint32_t*)val);
        if (val_constr.datalen > 0)
@@ -21121,14 +25134,37 @@ void  __attribute__((visibility("default"))) TS_UnsignedNodeAnnouncement_set_add
        UnsignedNodeAnnouncement_set_addresses(&this_ptr_conv, val_constr);
 }
 
+static inline uint64_t UnsignedNodeAnnouncement_clone_ptr(LDKUnsignedNodeAnnouncement *NONNULL_PTR arg) {
+       LDKUnsignedNodeAnnouncement ret_var = UnsignedNodeAnnouncement_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_UnsignedNodeAnnouncement_clone_ptr(uint32_t arg) {
+       LDKUnsignedNodeAnnouncement arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = UnsignedNodeAnnouncement_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_UnsignedNodeAnnouncement_clone(uint32_t orig) {
        LDKUnsignedNodeAnnouncement orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKUnsignedNodeAnnouncement ret_var = UnsignedNodeAnnouncement_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -21140,6 +25176,7 @@ void  __attribute__((visibility("default"))) TS_NodeAnnouncement_free(uint32_t t
        LDKNodeAnnouncement this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        NodeAnnouncement_free(this_obj_conv);
 }
 
@@ -21147,6 +25184,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_NodeAnnouncement_get_sign
        LDKNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(64, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), NodeAnnouncement_get_signature(&this_ptr_conv).compact_form, 64);
        return ret_arr;
@@ -21156,6 +25194,7 @@ void  __attribute__((visibility("default"))) TS_NodeAnnouncement_set_signature(u
        LDKNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSignature val_ref;
        CHECK(*((uint32_t*)val) == 64);
        memcpy(val_ref.compact_form, (uint8_t*)(val + 4), 64);
@@ -21166,10 +25205,12 @@ uint32_t  __attribute__((visibility("default"))) TS_NodeAnnouncement_get_content
        LDKNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKUnsignedNodeAnnouncement ret_var = NodeAnnouncement_get_contents(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -21181,9 +25222,11 @@ void  __attribute__((visibility("default"))) TS_NodeAnnouncement_set_contents(ui
        LDKNodeAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKUnsignedNodeAnnouncement val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = UnsignedNodeAnnouncement_clone(&val_conv);
        NodeAnnouncement_set_contents(&this_ptr_conv, val_conv);
 }
@@ -21195,11 +25238,13 @@ uint32_t  __attribute__((visibility("default"))) TS_NodeAnnouncement_new(int8_tA
        LDKUnsignedNodeAnnouncement contents_arg_conv;
        contents_arg_conv.inner = (void*)(contents_arg & (~1));
        contents_arg_conv.is_owned = (contents_arg & 1) || (contents_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(contents_arg_conv);
        contents_arg_conv = UnsignedNodeAnnouncement_clone(&contents_arg_conv);
        LDKNodeAnnouncement ret_var = NodeAnnouncement_new(signature_arg_ref, contents_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -21207,14 +25252,37 @@ uint32_t  __attribute__((visibility("default"))) TS_NodeAnnouncement_new(int8_tA
        return ret_ref;
 }
 
+static inline uint64_t NodeAnnouncement_clone_ptr(LDKNodeAnnouncement *NONNULL_PTR arg) {
+       LDKNodeAnnouncement ret_var = NodeAnnouncement_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_NodeAnnouncement_clone_ptr(uint32_t arg) {
+       LDKNodeAnnouncement arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = NodeAnnouncement_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_NodeAnnouncement_clone(uint32_t orig) {
        LDKNodeAnnouncement orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKNodeAnnouncement ret_var = NodeAnnouncement_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -21226,6 +25294,7 @@ void  __attribute__((visibility("default"))) TS_UnsignedChannelAnnouncement_free
        LDKUnsignedChannelAnnouncement this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        UnsignedChannelAnnouncement_free(this_obj_conv);
 }
 
@@ -21233,10 +25302,12 @@ uint32_t  __attribute__((visibility("default"))) TS_UnsignedChannelAnnouncement_
        LDKUnsignedChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelFeatures ret_var = UnsignedChannelAnnouncement_get_features(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -21248,9 +25319,11 @@ void  __attribute__((visibility("default"))) TS_UnsignedChannelAnnouncement_set_
        LDKUnsignedChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelFeatures val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = ChannelFeatures_clone(&val_conv);
        UnsignedChannelAnnouncement_set_features(&this_ptr_conv, val_conv);
 }
@@ -21259,6 +25332,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_UnsignedChannelAnnounceme
        LDKUnsignedChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *UnsignedChannelAnnouncement_get_chain_hash(&this_ptr_conv), 32);
        return ret_arr;
@@ -21268,6 +25342,7 @@ void  __attribute__((visibility("default"))) TS_UnsignedChannelAnnouncement_set_
        LDKUnsignedChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -21278,6 +25353,7 @@ int64_t  __attribute__((visibility("default"))) TS_UnsignedChannelAnnouncement_g
        LDKUnsignedChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = UnsignedChannelAnnouncement_get_short_channel_id(&this_ptr_conv);
        return ret_val;
 }
@@ -21286,6 +25362,7 @@ void  __attribute__((visibility("default"))) TS_UnsignedChannelAnnouncement_set_
        LDKUnsignedChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UnsignedChannelAnnouncement_set_short_channel_id(&this_ptr_conv, val);
 }
 
@@ -21293,6 +25370,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_UnsignedChannelAnnounceme
        LDKUnsignedChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), UnsignedChannelAnnouncement_get_node_id_1(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -21302,6 +25380,7 @@ void  __attribute__((visibility("default"))) TS_UnsignedChannelAnnouncement_set_
        LDKUnsignedChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -21312,6 +25391,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_UnsignedChannelAnnounceme
        LDKUnsignedChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), UnsignedChannelAnnouncement_get_node_id_2(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -21321,6 +25401,7 @@ void  __attribute__((visibility("default"))) TS_UnsignedChannelAnnouncement_set_
        LDKUnsignedChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -21331,6 +25412,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_UnsignedChannelAnnounceme
        LDKUnsignedChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), UnsignedChannelAnnouncement_get_bitcoin_key_1(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -21340,6 +25422,7 @@ void  __attribute__((visibility("default"))) TS_UnsignedChannelAnnouncement_set_
        LDKUnsignedChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -21350,6 +25433,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_UnsignedChannelAnnounceme
        LDKUnsignedChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), UnsignedChannelAnnouncement_get_bitcoin_key_2(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -21359,20 +25443,44 @@ void  __attribute__((visibility("default"))) TS_UnsignedChannelAnnouncement_set_
        LDKUnsignedChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
        UnsignedChannelAnnouncement_set_bitcoin_key_2(&this_ptr_conv, val_ref);
 }
 
+static inline uint64_t UnsignedChannelAnnouncement_clone_ptr(LDKUnsignedChannelAnnouncement *NONNULL_PTR arg) {
+       LDKUnsignedChannelAnnouncement ret_var = UnsignedChannelAnnouncement_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_UnsignedChannelAnnouncement_clone_ptr(uint32_t arg) {
+       LDKUnsignedChannelAnnouncement arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = UnsignedChannelAnnouncement_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_UnsignedChannelAnnouncement_clone(uint32_t orig) {
        LDKUnsignedChannelAnnouncement orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKUnsignedChannelAnnouncement ret_var = UnsignedChannelAnnouncement_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -21384,6 +25492,7 @@ void  __attribute__((visibility("default"))) TS_ChannelAnnouncement_free(uint32_
        LDKChannelAnnouncement this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelAnnouncement_free(this_obj_conv);
 }
 
@@ -21391,6 +25500,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ChannelAnnouncement_get_n
        LDKChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(64, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ChannelAnnouncement_get_node_signature_1(&this_ptr_conv).compact_form, 64);
        return ret_arr;
@@ -21400,6 +25510,7 @@ void  __attribute__((visibility("default"))) TS_ChannelAnnouncement_set_node_sig
        LDKChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSignature val_ref;
        CHECK(*((uint32_t*)val) == 64);
        memcpy(val_ref.compact_form, (uint8_t*)(val + 4), 64);
@@ -21410,6 +25521,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ChannelAnnouncement_get_n
        LDKChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(64, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ChannelAnnouncement_get_node_signature_2(&this_ptr_conv).compact_form, 64);
        return ret_arr;
@@ -21419,6 +25531,7 @@ void  __attribute__((visibility("default"))) TS_ChannelAnnouncement_set_node_sig
        LDKChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSignature val_ref;
        CHECK(*((uint32_t*)val) == 64);
        memcpy(val_ref.compact_form, (uint8_t*)(val + 4), 64);
@@ -21429,6 +25542,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ChannelAnnouncement_get_b
        LDKChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(64, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ChannelAnnouncement_get_bitcoin_signature_1(&this_ptr_conv).compact_form, 64);
        return ret_arr;
@@ -21438,6 +25552,7 @@ void  __attribute__((visibility("default"))) TS_ChannelAnnouncement_set_bitcoin_
        LDKChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSignature val_ref;
        CHECK(*((uint32_t*)val) == 64);
        memcpy(val_ref.compact_form, (uint8_t*)(val + 4), 64);
@@ -21448,6 +25563,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ChannelAnnouncement_get_b
        LDKChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(64, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ChannelAnnouncement_get_bitcoin_signature_2(&this_ptr_conv).compact_form, 64);
        return ret_arr;
@@ -21457,6 +25573,7 @@ void  __attribute__((visibility("default"))) TS_ChannelAnnouncement_set_bitcoin_
        LDKChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSignature val_ref;
        CHECK(*((uint32_t*)val) == 64);
        memcpy(val_ref.compact_form, (uint8_t*)(val + 4), 64);
@@ -21467,10 +25584,12 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelAnnouncement_get_cont
        LDKChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKUnsignedChannelAnnouncement ret_var = ChannelAnnouncement_get_contents(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -21482,9 +25601,11 @@ void  __attribute__((visibility("default"))) TS_ChannelAnnouncement_set_contents
        LDKChannelAnnouncement this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKUnsignedChannelAnnouncement val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = UnsignedChannelAnnouncement_clone(&val_conv);
        ChannelAnnouncement_set_contents(&this_ptr_conv, val_conv);
 }
@@ -21505,11 +25626,13 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelAnnouncement_new(int8
        LDKUnsignedChannelAnnouncement contents_arg_conv;
        contents_arg_conv.inner = (void*)(contents_arg & (~1));
        contents_arg_conv.is_owned = (contents_arg & 1) || (contents_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(contents_arg_conv);
        contents_arg_conv = UnsignedChannelAnnouncement_clone(&contents_arg_conv);
        LDKChannelAnnouncement ret_var = ChannelAnnouncement_new(node_signature_1_arg_ref, node_signature_2_arg_ref, bitcoin_signature_1_arg_ref, bitcoin_signature_2_arg_ref, contents_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -21517,14 +25640,37 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelAnnouncement_new(int8
        return ret_ref;
 }
 
+static inline uint64_t ChannelAnnouncement_clone_ptr(LDKChannelAnnouncement *NONNULL_PTR arg) {
+       LDKChannelAnnouncement ret_var = ChannelAnnouncement_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_ChannelAnnouncement_clone_ptr(uint32_t arg) {
+       LDKChannelAnnouncement arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChannelAnnouncement_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_ChannelAnnouncement_clone(uint32_t orig) {
        LDKChannelAnnouncement orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChannelAnnouncement ret_var = ChannelAnnouncement_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -21536,6 +25682,7 @@ void  __attribute__((visibility("default"))) TS_UnsignedChannelUpdate_free(uint3
        LDKUnsignedChannelUpdate this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        UnsignedChannelUpdate_free(this_obj_conv);
 }
 
@@ -21543,6 +25690,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_UnsignedChannelUpdate_get
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *UnsignedChannelUpdate_get_chain_hash(&this_ptr_conv), 32);
        return ret_arr;
@@ -21552,6 +25700,7 @@ void  __attribute__((visibility("default"))) TS_UnsignedChannelUpdate_set_chain_
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -21562,6 +25711,7 @@ int64_t  __attribute__((visibility("default"))) TS_UnsignedChannelUpdate_get_sho
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = UnsignedChannelUpdate_get_short_channel_id(&this_ptr_conv);
        return ret_val;
 }
@@ -21570,6 +25720,7 @@ void  __attribute__((visibility("default"))) TS_UnsignedChannelUpdate_set_short_
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UnsignedChannelUpdate_set_short_channel_id(&this_ptr_conv, val);
 }
 
@@ -21577,6 +25728,7 @@ int32_t  __attribute__((visibility("default"))) TS_UnsignedChannelUpdate_get_tim
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = UnsignedChannelUpdate_get_timestamp(&this_ptr_conv);
        return ret_val;
 }
@@ -21585,6 +25737,7 @@ void  __attribute__((visibility("default"))) TS_UnsignedChannelUpdate_set_timest
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UnsignedChannelUpdate_set_timestamp(&this_ptr_conv, val);
 }
 
@@ -21592,6 +25745,7 @@ int8_t  __attribute__((visibility("default"))) TS_UnsignedChannelUpdate_get_flag
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_t ret_val = UnsignedChannelUpdate_get_flags(&this_ptr_conv);
        return ret_val;
 }
@@ -21600,6 +25754,7 @@ void  __attribute__((visibility("default"))) TS_UnsignedChannelUpdate_set_flags(
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UnsignedChannelUpdate_set_flags(&this_ptr_conv, val);
 }
 
@@ -21607,6 +25762,7 @@ int16_t  __attribute__((visibility("default"))) TS_UnsignedChannelUpdate_get_clt
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = UnsignedChannelUpdate_get_cltv_expiry_delta(&this_ptr_conv);
        return ret_val;
 }
@@ -21615,6 +25771,7 @@ void  __attribute__((visibility("default"))) TS_UnsignedChannelUpdate_set_cltv_e
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UnsignedChannelUpdate_set_cltv_expiry_delta(&this_ptr_conv, val);
 }
 
@@ -21622,6 +25779,7 @@ int64_t  __attribute__((visibility("default"))) TS_UnsignedChannelUpdate_get_htl
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = UnsignedChannelUpdate_get_htlc_minimum_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -21630,6 +25788,7 @@ void  __attribute__((visibility("default"))) TS_UnsignedChannelUpdate_set_htlc_m
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UnsignedChannelUpdate_set_htlc_minimum_msat(&this_ptr_conv, val);
 }
 
@@ -21637,6 +25796,7 @@ int32_t  __attribute__((visibility("default"))) TS_UnsignedChannelUpdate_get_fee
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = UnsignedChannelUpdate_get_fee_base_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -21645,6 +25805,7 @@ void  __attribute__((visibility("default"))) TS_UnsignedChannelUpdate_set_fee_ba
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UnsignedChannelUpdate_set_fee_base_msat(&this_ptr_conv, val);
 }
 
@@ -21652,6 +25813,7 @@ int32_t  __attribute__((visibility("default"))) TS_UnsignedChannelUpdate_get_fee
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = UnsignedChannelUpdate_get_fee_proportional_millionths(&this_ptr_conv);
        return ret_val;
 }
@@ -21660,17 +25822,41 @@ void  __attribute__((visibility("default"))) TS_UnsignedChannelUpdate_set_fee_pr
        LDKUnsignedChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        UnsignedChannelUpdate_set_fee_proportional_millionths(&this_ptr_conv, val);
 }
 
+static inline uint64_t UnsignedChannelUpdate_clone_ptr(LDKUnsignedChannelUpdate *NONNULL_PTR arg) {
+       LDKUnsignedChannelUpdate ret_var = UnsignedChannelUpdate_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_UnsignedChannelUpdate_clone_ptr(uint32_t arg) {
+       LDKUnsignedChannelUpdate arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = UnsignedChannelUpdate_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_UnsignedChannelUpdate_clone(uint32_t orig) {
        LDKUnsignedChannelUpdate orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKUnsignedChannelUpdate ret_var = UnsignedChannelUpdate_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -21682,6 +25868,7 @@ void  __attribute__((visibility("default"))) TS_ChannelUpdate_free(uint32_t this
        LDKChannelUpdate this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelUpdate_free(this_obj_conv);
 }
 
@@ -21689,6 +25876,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ChannelUpdate_get_signatu
        LDKChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(64, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ChannelUpdate_get_signature(&this_ptr_conv).compact_form, 64);
        return ret_arr;
@@ -21698,6 +25886,7 @@ void  __attribute__((visibility("default"))) TS_ChannelUpdate_set_signature(uint
        LDKChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSignature val_ref;
        CHECK(*((uint32_t*)val) == 64);
        memcpy(val_ref.compact_form, (uint8_t*)(val + 4), 64);
@@ -21708,10 +25897,12 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelUpdate_get_contents(u
        LDKChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKUnsignedChannelUpdate ret_var = ChannelUpdate_get_contents(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -21723,9 +25914,11 @@ void  __attribute__((visibility("default"))) TS_ChannelUpdate_set_contents(uint3
        LDKChannelUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKUnsignedChannelUpdate val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = UnsignedChannelUpdate_clone(&val_conv);
        ChannelUpdate_set_contents(&this_ptr_conv, val_conv);
 }
@@ -21737,11 +25930,13 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelUpdate_new(int8_tArra
        LDKUnsignedChannelUpdate contents_arg_conv;
        contents_arg_conv.inner = (void*)(contents_arg & (~1));
        contents_arg_conv.is_owned = (contents_arg & 1) || (contents_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(contents_arg_conv);
        contents_arg_conv = UnsignedChannelUpdate_clone(&contents_arg_conv);
        LDKChannelUpdate ret_var = ChannelUpdate_new(signature_arg_ref, contents_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -21749,14 +25944,37 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelUpdate_new(int8_tArra
        return ret_ref;
 }
 
+static inline uint64_t ChannelUpdate_clone_ptr(LDKChannelUpdate *NONNULL_PTR arg) {
+       LDKChannelUpdate ret_var = ChannelUpdate_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_ChannelUpdate_clone_ptr(uint32_t arg) {
+       LDKChannelUpdate arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChannelUpdate_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_ChannelUpdate_clone(uint32_t orig) {
        LDKChannelUpdate orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChannelUpdate ret_var = ChannelUpdate_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -21768,6 +25986,7 @@ void  __attribute__((visibility("default"))) TS_QueryChannelRange_free(uint32_t
        LDKQueryChannelRange this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        QueryChannelRange_free(this_obj_conv);
 }
 
@@ -21775,6 +25994,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_QueryChannelRange_get_cha
        LDKQueryChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *QueryChannelRange_get_chain_hash(&this_ptr_conv), 32);
        return ret_arr;
@@ -21784,6 +26004,7 @@ void  __attribute__((visibility("default"))) TS_QueryChannelRange_set_chain_hash
        LDKQueryChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -21794,6 +26015,7 @@ int32_t  __attribute__((visibility("default"))) TS_QueryChannelRange_get_first_b
        LDKQueryChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = QueryChannelRange_get_first_blocknum(&this_ptr_conv);
        return ret_val;
 }
@@ -21802,6 +26024,7 @@ void  __attribute__((visibility("default"))) TS_QueryChannelRange_set_first_bloc
        LDKQueryChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        QueryChannelRange_set_first_blocknum(&this_ptr_conv, val);
 }
 
@@ -21809,6 +26032,7 @@ int32_t  __attribute__((visibility("default"))) TS_QueryChannelRange_get_number_
        LDKQueryChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = QueryChannelRange_get_number_of_blocks(&this_ptr_conv);
        return ret_val;
 }
@@ -21817,6 +26041,7 @@ void  __attribute__((visibility("default"))) TS_QueryChannelRange_set_number_of_
        LDKQueryChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        QueryChannelRange_set_number_of_blocks(&this_ptr_conv, val);
 }
 
@@ -21828,6 +26053,7 @@ uint32_t  __attribute__((visibility("default"))) TS_QueryChannelRange_new(int8_t
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -21835,14 +26061,37 @@ uint32_t  __attribute__((visibility("default"))) TS_QueryChannelRange_new(int8_t
        return ret_ref;
 }
 
+static inline uint64_t QueryChannelRange_clone_ptr(LDKQueryChannelRange *NONNULL_PTR arg) {
+       LDKQueryChannelRange ret_var = QueryChannelRange_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_QueryChannelRange_clone_ptr(uint32_t arg) {
+       LDKQueryChannelRange arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = QueryChannelRange_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_QueryChannelRange_clone(uint32_t orig) {
        LDKQueryChannelRange orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKQueryChannelRange ret_var = QueryChannelRange_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -21854,6 +26103,7 @@ void  __attribute__((visibility("default"))) TS_ReplyChannelRange_free(uint32_t
        LDKReplyChannelRange this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ReplyChannelRange_free(this_obj_conv);
 }
 
@@ -21861,6 +26111,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ReplyChannelRange_get_cha
        LDKReplyChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *ReplyChannelRange_get_chain_hash(&this_ptr_conv), 32);
        return ret_arr;
@@ -21870,6 +26121,7 @@ void  __attribute__((visibility("default"))) TS_ReplyChannelRange_set_chain_hash
        LDKReplyChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -21880,6 +26132,7 @@ int32_t  __attribute__((visibility("default"))) TS_ReplyChannelRange_get_first_b
        LDKReplyChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = ReplyChannelRange_get_first_blocknum(&this_ptr_conv);
        return ret_val;
 }
@@ -21888,6 +26141,7 @@ void  __attribute__((visibility("default"))) TS_ReplyChannelRange_set_first_bloc
        LDKReplyChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ReplyChannelRange_set_first_blocknum(&this_ptr_conv, val);
 }
 
@@ -21895,6 +26149,7 @@ int32_t  __attribute__((visibility("default"))) TS_ReplyChannelRange_get_number_
        LDKReplyChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = ReplyChannelRange_get_number_of_blocks(&this_ptr_conv);
        return ret_val;
 }
@@ -21903,6 +26158,7 @@ void  __attribute__((visibility("default"))) TS_ReplyChannelRange_set_number_of_
        LDKReplyChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ReplyChannelRange_set_number_of_blocks(&this_ptr_conv, val);
 }
 
@@ -21910,6 +26166,7 @@ jboolean  __attribute__((visibility("default"))) TS_ReplyChannelRange_get_sync_c
        LDKReplyChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        jboolean ret_val = ReplyChannelRange_get_sync_complete(&this_ptr_conv);
        return ret_val;
 }
@@ -21918,6 +26175,7 @@ void  __attribute__((visibility("default"))) TS_ReplyChannelRange_set_sync_compl
        LDKReplyChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ReplyChannelRange_set_sync_complete(&this_ptr_conv, val);
 }
 
@@ -21925,6 +26183,7 @@ void  __attribute__((visibility("default"))) TS_ReplyChannelRange_set_short_chan
        LDKReplyChannelRange this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_u64Z val_constr;
        val_constr.datalen = *((uint32_t*)val);
        if (val_constr.datalen > 0)
@@ -21958,6 +26217,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ReplyChannelRange_new(int8_t
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -21965,14 +26225,37 @@ uint32_t  __attribute__((visibility("default"))) TS_ReplyChannelRange_new(int8_t
        return ret_ref;
 }
 
+static inline uint64_t ReplyChannelRange_clone_ptr(LDKReplyChannelRange *NONNULL_PTR arg) {
+       LDKReplyChannelRange ret_var = ReplyChannelRange_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_ReplyChannelRange_clone_ptr(uint32_t arg) {
+       LDKReplyChannelRange arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ReplyChannelRange_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_ReplyChannelRange_clone(uint32_t orig) {
        LDKReplyChannelRange orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKReplyChannelRange ret_var = ReplyChannelRange_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -21984,6 +26267,7 @@ void  __attribute__((visibility("default"))) TS_QueryShortChannelIds_free(uint32
        LDKQueryShortChannelIds this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        QueryShortChannelIds_free(this_obj_conv);
 }
 
@@ -21991,6 +26275,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_QueryShortChannelIds_get_
        LDKQueryShortChannelIds this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *QueryShortChannelIds_get_chain_hash(&this_ptr_conv), 32);
        return ret_arr;
@@ -22000,6 +26285,7 @@ void  __attribute__((visibility("default"))) TS_QueryShortChannelIds_set_chain_h
        LDKQueryShortChannelIds this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -22010,6 +26296,7 @@ void  __attribute__((visibility("default"))) TS_QueryShortChannelIds_set_short_c
        LDKQueryShortChannelIds this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_u64Z val_constr;
        val_constr.datalen = *((uint32_t*)val);
        if (val_constr.datalen > 0)
@@ -22043,6 +26330,7 @@ uint32_t  __attribute__((visibility("default"))) TS_QueryShortChannelIds_new(int
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -22050,14 +26338,37 @@ uint32_t  __attribute__((visibility("default"))) TS_QueryShortChannelIds_new(int
        return ret_ref;
 }
 
+static inline uint64_t QueryShortChannelIds_clone_ptr(LDKQueryShortChannelIds *NONNULL_PTR arg) {
+       LDKQueryShortChannelIds ret_var = QueryShortChannelIds_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_QueryShortChannelIds_clone_ptr(uint32_t arg) {
+       LDKQueryShortChannelIds arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = QueryShortChannelIds_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_QueryShortChannelIds_clone(uint32_t orig) {
        LDKQueryShortChannelIds orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKQueryShortChannelIds ret_var = QueryShortChannelIds_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -22069,6 +26380,7 @@ void  __attribute__((visibility("default"))) TS_ReplyShortChannelIdsEnd_free(uin
        LDKReplyShortChannelIdsEnd this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ReplyShortChannelIdsEnd_free(this_obj_conv);
 }
 
@@ -22076,6 +26388,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ReplyShortChannelIdsEnd_g
        LDKReplyShortChannelIdsEnd this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *ReplyShortChannelIdsEnd_get_chain_hash(&this_ptr_conv), 32);
        return ret_arr;
@@ -22085,6 +26398,7 @@ void  __attribute__((visibility("default"))) TS_ReplyShortChannelIdsEnd_set_chai
        LDKReplyShortChannelIdsEnd this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -22095,6 +26409,7 @@ jboolean  __attribute__((visibility("default"))) TS_ReplyShortChannelIdsEnd_get_
        LDKReplyShortChannelIdsEnd this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        jboolean ret_val = ReplyShortChannelIdsEnd_get_full_information(&this_ptr_conv);
        return ret_val;
 }
@@ -22103,6 +26418,7 @@ void  __attribute__((visibility("default"))) TS_ReplyShortChannelIdsEnd_set_full
        LDKReplyShortChannelIdsEnd this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ReplyShortChannelIdsEnd_set_full_information(&this_ptr_conv, val);
 }
 
@@ -22114,6 +26430,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ReplyShortChannelIdsEnd_new(
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -22121,14 +26438,37 @@ uint32_t  __attribute__((visibility("default"))) TS_ReplyShortChannelIdsEnd_new(
        return ret_ref;
 }
 
+static inline uint64_t ReplyShortChannelIdsEnd_clone_ptr(LDKReplyShortChannelIdsEnd *NONNULL_PTR arg) {
+       LDKReplyShortChannelIdsEnd ret_var = ReplyShortChannelIdsEnd_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_ReplyShortChannelIdsEnd_clone_ptr(uint32_t arg) {
+       LDKReplyShortChannelIdsEnd arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ReplyShortChannelIdsEnd_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_ReplyShortChannelIdsEnd_clone(uint32_t orig) {
        LDKReplyShortChannelIdsEnd orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKReplyShortChannelIdsEnd ret_var = ReplyShortChannelIdsEnd_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -22140,6 +26480,7 @@ void  __attribute__((visibility("default"))) TS_GossipTimestampFilter_free(uint3
        LDKGossipTimestampFilter this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        GossipTimestampFilter_free(this_obj_conv);
 }
 
@@ -22147,6 +26488,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_GossipTimestampFilter_get
        LDKGossipTimestampFilter this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *GossipTimestampFilter_get_chain_hash(&this_ptr_conv), 32);
        return ret_arr;
@@ -22156,6 +26498,7 @@ void  __attribute__((visibility("default"))) TS_GossipTimestampFilter_set_chain_
        LDKGossipTimestampFilter this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -22166,6 +26509,7 @@ int32_t  __attribute__((visibility("default"))) TS_GossipTimestampFilter_get_fir
        LDKGossipTimestampFilter this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = GossipTimestampFilter_get_first_timestamp(&this_ptr_conv);
        return ret_val;
 }
@@ -22174,6 +26518,7 @@ void  __attribute__((visibility("default"))) TS_GossipTimestampFilter_set_first_
        LDKGossipTimestampFilter this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        GossipTimestampFilter_set_first_timestamp(&this_ptr_conv, val);
 }
 
@@ -22181,6 +26526,7 @@ int32_t  __attribute__((visibility("default"))) TS_GossipTimestampFilter_get_tim
        LDKGossipTimestampFilter this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = GossipTimestampFilter_get_timestamp_range(&this_ptr_conv);
        return ret_val;
 }
@@ -22189,6 +26535,7 @@ void  __attribute__((visibility("default"))) TS_GossipTimestampFilter_set_timest
        LDKGossipTimestampFilter this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        GossipTimestampFilter_set_timestamp_range(&this_ptr_conv, val);
 }
 
@@ -22200,6 +26547,7 @@ uint32_t  __attribute__((visibility("default"))) TS_GossipTimestampFilter_new(in
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -22207,14 +26555,37 @@ uint32_t  __attribute__((visibility("default"))) TS_GossipTimestampFilter_new(in
        return ret_ref;
 }
 
+static inline uint64_t GossipTimestampFilter_clone_ptr(LDKGossipTimestampFilter *NONNULL_PTR arg) {
+       LDKGossipTimestampFilter ret_var = GossipTimestampFilter_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_GossipTimestampFilter_clone_ptr(uint32_t arg) {
+       LDKGossipTimestampFilter arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = GossipTimestampFilter_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_GossipTimestampFilter_clone(uint32_t orig) {
        LDKGossipTimestampFilter orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKGossipTimestampFilter ret_var = GossipTimestampFilter_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -22231,6 +26602,18 @@ void  __attribute__((visibility("default"))) TS_ErrorAction_free(uint32_t this_p
        ErrorAction_free(this_ptr_conv);
 }
 
+static inline uint64_t ErrorAction_clone_ptr(LDKErrorAction *NONNULL_PTR arg) {
+       LDKErrorAction *ret_copy = MALLOC(sizeof(LDKErrorAction), "LDKErrorAction");
+       *ret_copy = ErrorAction_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_ErrorAction_clone_ptr(uint32_t arg) {
+       LDKErrorAction* arg_conv = (LDKErrorAction*)arg;
+       int64_t ret_val = ErrorAction_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_ErrorAction_clone(uint32_t orig) {
        LDKErrorAction* orig_conv = (LDKErrorAction*)orig;
        LDKErrorAction *ret_copy = MALLOC(sizeof(LDKErrorAction), "LDKErrorAction");
@@ -22243,6 +26626,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ErrorAction_disconnect_peer(
        LDKErrorMessage msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = ErrorMessage_clone(&msg_conv);
        LDKErrorAction *ret_copy = MALLOC(sizeof(LDKErrorAction), "LDKErrorAction");
        *ret_copy = ErrorAction_disconnect_peer(msg_conv);
@@ -22269,6 +26653,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ErrorAction_send_error_messa
        LDKErrorMessage msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = ErrorMessage_clone(&msg_conv);
        LDKErrorAction *ret_copy = MALLOC(sizeof(LDKErrorAction), "LDKErrorAction");
        *ret_copy = ErrorAction_send_error_message(msg_conv);
@@ -22280,6 +26665,7 @@ void  __attribute__((visibility("default"))) TS_LightningError_free(uint32_t thi
        LDKLightningError this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        LightningError_free(this_obj_conv);
 }
 
@@ -22287,6 +26673,7 @@ jstring  __attribute__((visibility("default"))) TS_LightningError_get_err(uint32
        LDKLightningError this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKStr ret_str = LightningError_get_err(&this_ptr_conv);
        jstring ret_conv = str_ref_to_ts(ret_str.chars, ret_str.len);
        Str_free(ret_str);
@@ -22297,6 +26684,7 @@ void  __attribute__((visibility("default"))) TS_LightningError_set_err(uint32_t
        LDKLightningError this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKStr val_conv = str_ref_to_owned_c(val);
        LightningError_set_err(&this_ptr_conv, val_conv);
 }
@@ -22305,6 +26693,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LightningError_get_action(ui
        LDKLightningError this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKErrorAction *ret_copy = MALLOC(sizeof(LDKErrorAction), "LDKErrorAction");
        *ret_copy = LightningError_get_action(&this_ptr_conv);
        uint64_t ret_ref = (uint64_t)ret_copy;
@@ -22315,6 +26704,7 @@ void  __attribute__((visibility("default"))) TS_LightningError_set_action(uint32
        LDKLightningError this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKErrorAction val_conv = *(LDKErrorAction*)(val_ptr);
@@ -22332,6 +26722,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LightningError_new(jstring e
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -22339,14 +26730,37 @@ uint32_t  __attribute__((visibility("default"))) TS_LightningError_new(jstring e
        return ret_ref;
 }
 
+static inline uint64_t LightningError_clone_ptr(LDKLightningError *NONNULL_PTR arg) {
+       LDKLightningError ret_var = LightningError_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_LightningError_clone_ptr(uint32_t arg) {
+       LDKLightningError arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = LightningError_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_LightningError_clone(uint32_t orig) {
        LDKLightningError orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKLightningError ret_var = LightningError_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -22358,6 +26772,7 @@ void  __attribute__((visibility("default"))) TS_CommitmentUpdate_free(uint32_t t
        LDKCommitmentUpdate this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        CommitmentUpdate_free(this_obj_conv);
 }
 
@@ -22365,6 +26780,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_CommitmentUpdate_get_up
        LDKCommitmentUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_UpdateAddHTLCZ ret_var = CommitmentUpdate_get_update_add_htlcs(&this_ptr_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_arr(ret_var.datalen, sizeof(uint32_t), "Native uint32_tArray Bytes");
@@ -22374,6 +26790,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_CommitmentUpdate_get_up
                uint64_t ret_conv_15_ref = 0;
                CHECK((((uint64_t)ret_conv_15_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_conv_15_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_15_var);
                ret_conv_15_ref = (uint64_t)ret_conv_15_var.inner;
                if (ret_conv_15_var.is_owned) {
                        ret_conv_15_ref |= 1;
@@ -22389,6 +26806,7 @@ void  __attribute__((visibility("default"))) TS_CommitmentUpdate_set_update_add_
        LDKCommitmentUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_UpdateAddHTLCZ val_constr;
        val_constr.datalen = *((uint32_t*)val);
        if (val_constr.datalen > 0)
@@ -22401,6 +26819,7 @@ void  __attribute__((visibility("default"))) TS_CommitmentUpdate_set_update_add_
                LDKUpdateAddHTLC val_conv_15_conv;
                val_conv_15_conv.inner = (void*)(val_conv_15 & (~1));
                val_conv_15_conv.is_owned = (val_conv_15 & 1) || (val_conv_15 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_15_conv);
                val_conv_15_conv = UpdateAddHTLC_clone(&val_conv_15_conv);
                val_constr.data[p] = val_conv_15_conv;
        }
@@ -22411,6 +26830,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_CommitmentUpdate_get_up
        LDKCommitmentUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_UpdateFulfillHTLCZ ret_var = CommitmentUpdate_get_update_fulfill_htlcs(&this_ptr_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_arr(ret_var.datalen, sizeof(uint32_t), "Native uint32_tArray Bytes");
@@ -22420,6 +26840,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_CommitmentUpdate_get_up
                uint64_t ret_conv_19_ref = 0;
                CHECK((((uint64_t)ret_conv_19_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_conv_19_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_19_var);
                ret_conv_19_ref = (uint64_t)ret_conv_19_var.inner;
                if (ret_conv_19_var.is_owned) {
                        ret_conv_19_ref |= 1;
@@ -22435,6 +26856,7 @@ void  __attribute__((visibility("default"))) TS_CommitmentUpdate_set_update_fulf
        LDKCommitmentUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_UpdateFulfillHTLCZ val_constr;
        val_constr.datalen = *((uint32_t*)val);
        if (val_constr.datalen > 0)
@@ -22447,6 +26869,7 @@ void  __attribute__((visibility("default"))) TS_CommitmentUpdate_set_update_fulf
                LDKUpdateFulfillHTLC val_conv_19_conv;
                val_conv_19_conv.inner = (void*)(val_conv_19 & (~1));
                val_conv_19_conv.is_owned = (val_conv_19 & 1) || (val_conv_19 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_19_conv);
                val_conv_19_conv = UpdateFulfillHTLC_clone(&val_conv_19_conv);
                val_constr.data[t] = val_conv_19_conv;
        }
@@ -22457,6 +26880,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_CommitmentUpdate_get_up
        LDKCommitmentUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_UpdateFailHTLCZ ret_var = CommitmentUpdate_get_update_fail_htlcs(&this_ptr_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_arr(ret_var.datalen, sizeof(uint32_t), "Native uint32_tArray Bytes");
@@ -22466,6 +26890,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_CommitmentUpdate_get_up
                uint64_t ret_conv_16_ref = 0;
                CHECK((((uint64_t)ret_conv_16_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_conv_16_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_16_var);
                ret_conv_16_ref = (uint64_t)ret_conv_16_var.inner;
                if (ret_conv_16_var.is_owned) {
                        ret_conv_16_ref |= 1;
@@ -22481,6 +26906,7 @@ void  __attribute__((visibility("default"))) TS_CommitmentUpdate_set_update_fail
        LDKCommitmentUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_UpdateFailHTLCZ val_constr;
        val_constr.datalen = *((uint32_t*)val);
        if (val_constr.datalen > 0)
@@ -22493,6 +26919,7 @@ void  __attribute__((visibility("default"))) TS_CommitmentUpdate_set_update_fail
                LDKUpdateFailHTLC val_conv_16_conv;
                val_conv_16_conv.inner = (void*)(val_conv_16 & (~1));
                val_conv_16_conv.is_owned = (val_conv_16 & 1) || (val_conv_16 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_16_conv);
                val_conv_16_conv = UpdateFailHTLC_clone(&val_conv_16_conv);
                val_constr.data[q] = val_conv_16_conv;
        }
@@ -22503,6 +26930,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_CommitmentUpdate_get_up
        LDKCommitmentUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_UpdateFailMalformedHTLCZ ret_var = CommitmentUpdate_get_update_fail_malformed_htlcs(&this_ptr_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_arr(ret_var.datalen, sizeof(uint32_t), "Native uint32_tArray Bytes");
@@ -22512,6 +26940,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_CommitmentUpdate_get_up
                uint64_t ret_conv_25_ref = 0;
                CHECK((((uint64_t)ret_conv_25_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_conv_25_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_25_var);
                ret_conv_25_ref = (uint64_t)ret_conv_25_var.inner;
                if (ret_conv_25_var.is_owned) {
                        ret_conv_25_ref |= 1;
@@ -22527,6 +26956,7 @@ void  __attribute__((visibility("default"))) TS_CommitmentUpdate_set_update_fail
        LDKCommitmentUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_UpdateFailMalformedHTLCZ val_constr;
        val_constr.datalen = *((uint32_t*)val);
        if (val_constr.datalen > 0)
@@ -22539,6 +26969,7 @@ void  __attribute__((visibility("default"))) TS_CommitmentUpdate_set_update_fail
                LDKUpdateFailMalformedHTLC val_conv_25_conv;
                val_conv_25_conv.inner = (void*)(val_conv_25 & (~1));
                val_conv_25_conv.is_owned = (val_conv_25 & 1) || (val_conv_25 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_25_conv);
                val_conv_25_conv = UpdateFailMalformedHTLC_clone(&val_conv_25_conv);
                val_constr.data[z] = val_conv_25_conv;
        }
@@ -22549,11 +26980,13 @@ uint32_t  __attribute__((visibility("default"))) TS_CommitmentUpdate_get_update_
        LDKCommitmentUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKUpdateFee ret_var = CommitmentUpdate_get_update_fee(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -22566,9 +26999,11 @@ void  __attribute__((visibility("default"))) TS_CommitmentUpdate_set_update_fee(
        LDKCommitmentUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKUpdateFee val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = UpdateFee_clone(&val_conv);
        CommitmentUpdate_set_update_fee(&this_ptr_conv, val_conv);
 }
@@ -22577,10 +27012,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CommitmentUpdate_get_commitm
        LDKCommitmentUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCommitmentSigned ret_var = CommitmentUpdate_get_commitment_signed(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -22592,9 +27029,11 @@ void  __attribute__((visibility("default"))) TS_CommitmentUpdate_set_commitment_
        LDKCommitmentUpdate this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCommitmentSigned val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = CommitmentSigned_clone(&val_conv);
        CommitmentUpdate_set_commitment_signed(&this_ptr_conv, val_conv);
 }
@@ -22612,6 +27051,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CommitmentUpdate_new(uint32_
                LDKUpdateAddHTLC update_add_htlcs_arg_conv_15_conv;
                update_add_htlcs_arg_conv_15_conv.inner = (void*)(update_add_htlcs_arg_conv_15 & (~1));
                update_add_htlcs_arg_conv_15_conv.is_owned = (update_add_htlcs_arg_conv_15 & 1) || (update_add_htlcs_arg_conv_15 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(update_add_htlcs_arg_conv_15_conv);
                update_add_htlcs_arg_conv_15_conv = UpdateAddHTLC_clone(&update_add_htlcs_arg_conv_15_conv);
                update_add_htlcs_arg_constr.data[p] = update_add_htlcs_arg_conv_15_conv;
        }
@@ -22627,6 +27067,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CommitmentUpdate_new(uint32_
                LDKUpdateFulfillHTLC update_fulfill_htlcs_arg_conv_19_conv;
                update_fulfill_htlcs_arg_conv_19_conv.inner = (void*)(update_fulfill_htlcs_arg_conv_19 & (~1));
                update_fulfill_htlcs_arg_conv_19_conv.is_owned = (update_fulfill_htlcs_arg_conv_19 & 1) || (update_fulfill_htlcs_arg_conv_19 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(update_fulfill_htlcs_arg_conv_19_conv);
                update_fulfill_htlcs_arg_conv_19_conv = UpdateFulfillHTLC_clone(&update_fulfill_htlcs_arg_conv_19_conv);
                update_fulfill_htlcs_arg_constr.data[t] = update_fulfill_htlcs_arg_conv_19_conv;
        }
@@ -22642,6 +27083,7 @@ uint32_t  __attribute__((visibility("default"))) TS_CommitmentUpdate_new(uint32_
                LDKUpdateFailHTLC update_fail_htlcs_arg_conv_16_conv;
                update_fail_htlcs_arg_conv_16_conv.inner = (void*)(update_fail_htlcs_arg_conv_16 & (~1));
                update_fail_htlcs_arg_conv_16_conv.is_owned = (update_fail_htlcs_arg_conv_16 & 1) || (update_fail_htlcs_arg_conv_16 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(update_fail_htlcs_arg_conv_16_conv);
                update_fail_htlcs_arg_conv_16_conv = UpdateFailHTLC_clone(&update_fail_htlcs_arg_conv_16_conv);
                update_fail_htlcs_arg_constr.data[q] = update_fail_htlcs_arg_conv_16_conv;
        }
@@ -22657,21 +27099,25 @@ uint32_t  __attribute__((visibility("default"))) TS_CommitmentUpdate_new(uint32_
                LDKUpdateFailMalformedHTLC update_fail_malformed_htlcs_arg_conv_25_conv;
                update_fail_malformed_htlcs_arg_conv_25_conv.inner = (void*)(update_fail_malformed_htlcs_arg_conv_25 & (~1));
                update_fail_malformed_htlcs_arg_conv_25_conv.is_owned = (update_fail_malformed_htlcs_arg_conv_25 & 1) || (update_fail_malformed_htlcs_arg_conv_25 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(update_fail_malformed_htlcs_arg_conv_25_conv);
                update_fail_malformed_htlcs_arg_conv_25_conv = UpdateFailMalformedHTLC_clone(&update_fail_malformed_htlcs_arg_conv_25_conv);
                update_fail_malformed_htlcs_arg_constr.data[z] = update_fail_malformed_htlcs_arg_conv_25_conv;
        }
        LDKUpdateFee update_fee_arg_conv;
        update_fee_arg_conv.inner = (void*)(update_fee_arg & (~1));
        update_fee_arg_conv.is_owned = (update_fee_arg & 1) || (update_fee_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(update_fee_arg_conv);
        update_fee_arg_conv = UpdateFee_clone(&update_fee_arg_conv);
        LDKCommitmentSigned commitment_signed_arg_conv;
        commitment_signed_arg_conv.inner = (void*)(commitment_signed_arg & (~1));
        commitment_signed_arg_conv.is_owned = (commitment_signed_arg & 1) || (commitment_signed_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(commitment_signed_arg_conv);
        commitment_signed_arg_conv = CommitmentSigned_clone(&commitment_signed_arg_conv);
        LDKCommitmentUpdate ret_var = CommitmentUpdate_new(update_add_htlcs_arg_constr, update_fulfill_htlcs_arg_constr, update_fail_htlcs_arg_constr, update_fail_malformed_htlcs_arg_constr, update_fee_arg_conv, commitment_signed_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -22679,14 +27125,37 @@ uint32_t  __attribute__((visibility("default"))) TS_CommitmentUpdate_new(uint32_
        return ret_ref;
 }
 
+static inline uint64_t CommitmentUpdate_clone_ptr(LDKCommitmentUpdate *NONNULL_PTR arg) {
+       LDKCommitmentUpdate ret_var = CommitmentUpdate_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_CommitmentUpdate_clone_ptr(uint32_t arg) {
+       LDKCommitmentUpdate arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = CommitmentUpdate_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CommitmentUpdate_clone(uint32_t orig) {
        LDKCommitmentUpdate orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKCommitmentUpdate ret_var = CommitmentUpdate_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -22716,6 +27185,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_AcceptChannel_write(uint3
        LDKAcceptChannel obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = AcceptChannel_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -22736,6 +27206,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_AnnouncementSignatures_wr
        LDKAnnouncementSignatures obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = AnnouncementSignatures_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -22756,6 +27227,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ChannelReestablish_write(
        LDKChannelReestablish obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ChannelReestablish_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -22776,6 +27248,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ClosingSigned_write(uint3
        LDKClosingSigned obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ClosingSigned_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -22796,6 +27269,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ClosingSignedFeeRange_wri
        LDKClosingSignedFeeRange obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ClosingSignedFeeRange_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -22816,6 +27290,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_CommitmentSigned_write(ui
        LDKCommitmentSigned obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = CommitmentSigned_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -22836,6 +27311,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_FundingCreated_write(uint
        LDKFundingCreated obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = FundingCreated_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -22856,6 +27332,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_FundingSigned_write(uint3
        LDKFundingSigned obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = FundingSigned_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -22876,6 +27353,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_FundingLocked_write(uint3
        LDKFundingLocked obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = FundingLocked_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -22896,6 +27374,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_Init_write(uint32_t obj)
        LDKInit obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = Init_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -22916,6 +27395,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_OpenChannel_write(uint32_
        LDKOpenChannel obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = OpenChannel_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -22936,6 +27416,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_RevokeAndACK_write(uint32
        LDKRevokeAndACK obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = RevokeAndACK_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -22956,6 +27437,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_Shutdown_write(uint32_t o
        LDKShutdown obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = Shutdown_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -22976,6 +27458,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_UpdateFailHTLC_write(uint
        LDKUpdateFailHTLC obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = UpdateFailHTLC_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -22996,6 +27479,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_UpdateFailMalformedHTLC_w
        LDKUpdateFailMalformedHTLC obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = UpdateFailMalformedHTLC_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -23016,6 +27500,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_UpdateFee_write(uint32_t
        LDKUpdateFee obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = UpdateFee_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -23036,6 +27521,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_UpdateFulfillHTLC_write(u
        LDKUpdateFulfillHTLC obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = UpdateFulfillHTLC_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -23056,6 +27542,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_UpdateAddHTLC_write(uint3
        LDKUpdateAddHTLC obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = UpdateAddHTLC_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -23076,6 +27563,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_Ping_write(uint32_t obj)
        LDKPing obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = Ping_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -23096,6 +27584,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_Pong_write(uint32_t obj)
        LDKPong obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = Pong_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -23116,6 +27605,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_UnsignedChannelAnnounceme
        LDKUnsignedChannelAnnouncement obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = UnsignedChannelAnnouncement_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -23136,6 +27626,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ChannelAnnouncement_write
        LDKChannelAnnouncement obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ChannelAnnouncement_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -23156,6 +27647,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_UnsignedChannelUpdate_wri
        LDKUnsignedChannelUpdate obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = UnsignedChannelUpdate_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -23176,6 +27668,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ChannelUpdate_write(uint3
        LDKChannelUpdate obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ChannelUpdate_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -23196,6 +27689,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ErrorMessage_write(uint32
        LDKErrorMessage obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ErrorMessage_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -23216,6 +27710,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_UnsignedNodeAnnouncement_
        LDKUnsignedNodeAnnouncement obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = UnsignedNodeAnnouncement_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -23236,6 +27731,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_NodeAnnouncement_write(ui
        LDKNodeAnnouncement obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = NodeAnnouncement_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -23265,6 +27761,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_QueryShortChannelIds_writ
        LDKQueryShortChannelIds obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = QueryShortChannelIds_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -23276,6 +27773,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ReplyShortChannelIdsEnd_w
        LDKReplyShortChannelIdsEnd obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ReplyShortChannelIdsEnd_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -23296,6 +27794,7 @@ int32_t  __attribute__((visibility("default"))) TS_QueryChannelRange_end_blocknu
        LDKQueryChannelRange this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int32_t ret_val = QueryChannelRange_end_blocknum(&this_arg_conv);
        return ret_val;
 }
@@ -23304,6 +27803,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_QueryChannelRange_write(u
        LDKQueryChannelRange obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = QueryChannelRange_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -23333,6 +27833,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ReplyChannelRange_write(u
        LDKReplyChannelRange obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ReplyChannelRange_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -23344,6 +27845,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_GossipTimestampFilter_wri
        LDKGossipTimestampFilter obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = GossipTimestampFilter_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -23373,6 +27875,7 @@ void  __attribute__((visibility("default"))) TS_IgnoringMessageHandler_free(uint
        LDKIgnoringMessageHandler this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        IgnoringMessageHandler_free(this_obj_conv);
 }
 
@@ -23381,6 +27884,7 @@ uint32_t  __attribute__((visibility("default"))) TS_IgnoringMessageHandler_new()
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -23392,6 +27896,7 @@ uint32_t  __attribute__((visibility("default"))) TS_IgnoringMessageHandler_as_Me
        LDKIgnoringMessageHandler this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKMessageSendEventsProvider* ret_ret = MALLOC(sizeof(LDKMessageSendEventsProvider), "LDKMessageSendEventsProvider");
        *ret_ret = IgnoringMessageHandler_as_MessageSendEventsProvider(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -23401,6 +27906,7 @@ uint32_t  __attribute__((visibility("default"))) TS_IgnoringMessageHandler_as_Ro
        LDKIgnoringMessageHandler this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKRoutingMessageHandler* ret_ret = MALLOC(sizeof(LDKRoutingMessageHandler), "LDKRoutingMessageHandler");
        *ret_ret = IgnoringMessageHandler_as_RoutingMessageHandler(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -23410,6 +27916,7 @@ uint32_t  __attribute__((visibility("default"))) TS_IgnoringMessageHandler_as_Cu
        LDKIgnoringMessageHandler this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCustomMessageReader* ret_ret = MALLOC(sizeof(LDKCustomMessageReader), "LDKCustomMessageReader");
        *ret_ret = IgnoringMessageHandler_as_CustomMessageReader(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -23419,6 +27926,7 @@ uint32_t  __attribute__((visibility("default"))) TS_IgnoringMessageHandler_as_Cu
        LDKIgnoringMessageHandler this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCustomMessageHandler* ret_ret = MALLOC(sizeof(LDKCustomMessageHandler), "LDKCustomMessageHandler");
        *ret_ret = IgnoringMessageHandler_as_CustomMessageHandler(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -23428,6 +27936,7 @@ void  __attribute__((visibility("default"))) TS_ErroringMessageHandler_free(uint
        LDKErroringMessageHandler this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ErroringMessageHandler_free(this_obj_conv);
 }
 
@@ -23436,6 +27945,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ErroringMessageHandler_new()
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -23447,6 +27957,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ErroringMessageHandler_as_Me
        LDKErroringMessageHandler this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKMessageSendEventsProvider* ret_ret = MALLOC(sizeof(LDKMessageSendEventsProvider), "LDKMessageSendEventsProvider");
        *ret_ret = ErroringMessageHandler_as_MessageSendEventsProvider(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -23456,6 +27967,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ErroringMessageHandler_as_Ch
        LDKErroringMessageHandler this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKChannelMessageHandler* ret_ret = MALLOC(sizeof(LDKChannelMessageHandler), "LDKChannelMessageHandler");
        *ret_ret = ErroringMessageHandler_as_ChannelMessageHandler(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -23465,6 +27977,7 @@ void  __attribute__((visibility("default"))) TS_MessageHandler_free(uint32_t thi
        LDKMessageHandler this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        MessageHandler_free(this_obj_conv);
 }
 
@@ -23472,6 +27985,7 @@ uint32_t  __attribute__((visibility("default"))) TS_MessageHandler_get_chan_hand
        LDKMessageHandler this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        // WARNING: This object doesn't live past this scope, needs clone!
        uint64_t ret_ret = ((uint64_t)MessageHandler_get_chan_handler(&this_ptr_conv)) | 1;
        return ret_ret;
@@ -23481,6 +27995,7 @@ void  __attribute__((visibility("default"))) TS_MessageHandler_set_chan_handler(
        LDKMessageHandler this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKChannelMessageHandler val_conv = *(LDKChannelMessageHandler*)(val_ptr);
@@ -23491,6 +28006,7 @@ uint32_t  __attribute__((visibility("default"))) TS_MessageHandler_get_route_han
        LDKMessageHandler this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        // WARNING: This object doesn't live past this scope, needs clone!
        uint64_t ret_ret = ((uint64_t)MessageHandler_get_route_handler(&this_ptr_conv)) | 1;
        return ret_ret;
@@ -23500,6 +28016,7 @@ void  __attribute__((visibility("default"))) TS_MessageHandler_set_route_handler
        LDKMessageHandler this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKRoutingMessageHandler val_conv = *(LDKRoutingMessageHandler*)(val_ptr);
@@ -23517,6 +28034,7 @@ uint32_t  __attribute__((visibility("default"))) TS_MessageHandler_new(uint32_t
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -23524,6 +28042,19 @@ uint32_t  __attribute__((visibility("default"))) TS_MessageHandler_new(uint32_t
        return ret_ref;
 }
 
+static inline uint64_t SocketDescriptor_clone_ptr(LDKSocketDescriptor *NONNULL_PTR arg) {
+       LDKSocketDescriptor* ret_ret = MALLOC(sizeof(LDKSocketDescriptor), "LDKSocketDescriptor");
+       *ret_ret = SocketDescriptor_clone(arg);
+       return (uint64_t)ret_ret;
+}
+int64_t  __attribute__((visibility("default"))) TS_SocketDescriptor_clone_ptr(uint32_t arg) {
+       void* arg_ptr = (void*)(((uint64_t)arg) & ~1);
+       if (!(arg & 1)) { CHECK_ACCESS(arg_ptr); }
+       LDKSocketDescriptor* arg_conv = (LDKSocketDescriptor*)arg_ptr;
+       int64_t ret_val = SocketDescriptor_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_SocketDescriptor_clone(uint32_t orig) {
        void* orig_ptr = (void*)(((uint64_t)orig) & ~1);
        if (!(orig & 1)) { CHECK_ACCESS(orig_ptr); }
@@ -23546,6 +28077,7 @@ void  __attribute__((visibility("default"))) TS_PeerHandleError_free(uint32_t th
        LDKPeerHandleError this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        PeerHandleError_free(this_obj_conv);
 }
 
@@ -23553,6 +28085,7 @@ jboolean  __attribute__((visibility("default"))) TS_PeerHandleError_get_no_conne
        LDKPeerHandleError this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        jboolean ret_val = PeerHandleError_get_no_connection_possible(&this_ptr_conv);
        return ret_val;
 }
@@ -23561,6 +28094,7 @@ void  __attribute__((visibility("default"))) TS_PeerHandleError_set_no_connectio
        LDKPeerHandleError this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        PeerHandleError_set_no_connection_possible(&this_ptr_conv, val);
 }
 
@@ -23569,6 +28103,7 @@ uint32_t  __attribute__((visibility("default"))) TS_PeerHandleError_new(jboolean
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -23576,14 +28111,37 @@ uint32_t  __attribute__((visibility("default"))) TS_PeerHandleError_new(jboolean
        return ret_ref;
 }
 
+static inline uint64_t PeerHandleError_clone_ptr(LDKPeerHandleError *NONNULL_PTR arg) {
+       LDKPeerHandleError ret_var = PeerHandleError_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_PeerHandleError_clone_ptr(uint32_t arg) {
+       LDKPeerHandleError arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = PeerHandleError_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_PeerHandleError_clone(uint32_t orig) {
        LDKPeerHandleError orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKPeerHandleError ret_var = PeerHandleError_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -23595,6 +28153,7 @@ void  __attribute__((visibility("default"))) TS_PeerManager_free(uint32_t this_o
        LDKPeerManager this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        PeerManager_free(this_obj_conv);
 }
 
@@ -23602,6 +28161,7 @@ uint32_t  __attribute__((visibility("default"))) TS_PeerManager_new(uint32_t mes
        LDKMessageHandler message_handler_conv;
        message_handler_conv.inner = (void*)(message_handler & (~1));
        message_handler_conv.is_owned = (message_handler & 1) || (message_handler == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(message_handler_conv);
        // Warning: we need a move here but no clone is available for LDKMessageHandler
        LDKSecretKey our_node_secret_ref;
        CHECK(*((uint32_t*)our_node_secret) == 32);
@@ -23620,6 +28180,7 @@ uint32_t  __attribute__((visibility("default"))) TS_PeerManager_new(uint32_t mes
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -23631,6 +28192,7 @@ ptrArray  __attribute__((visibility("default"))) TS_PeerManager_get_peer_node_id
        LDKPeerManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCVec_PublicKeyZ ret_var = PeerManager_get_peer_node_ids(&this_arg_conv);
        ptrArray ret_arr = NULL;
        ret_arr = init_arr(ret_var.datalen, sizeof(uint32_t), "Native ptrArray Bytes");
@@ -23649,6 +28211,7 @@ uint32_t  __attribute__((visibility("default"))) TS_PeerManager_new_outbound_con
        LDKPeerManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKPublicKey their_node_id_ref;
        CHECK(*((uint32_t*)their_node_id) == 33);
        memcpy(their_node_id_ref.compressed_form, (uint8_t*)(their_node_id + 4), 33);
@@ -23664,6 +28227,7 @@ uint32_t  __attribute__((visibility("default"))) TS_PeerManager_new_inbound_conn
        LDKPeerManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        void* descriptor_ptr = (void*)(((uint64_t)descriptor) & ~1);
        CHECK_ACCESS(descriptor_ptr);
        LDKSocketDescriptor descriptor_conv = *(LDKSocketDescriptor*)(descriptor_ptr);
@@ -23676,6 +28240,7 @@ uint32_t  __attribute__((visibility("default"))) TS_PeerManager_write_buffer_spa
        LDKPeerManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        void* descriptor_ptr = (void*)(((uint64_t)descriptor) & ~1);
        if (!(descriptor & 1)) { CHECK_ACCESS(descriptor_ptr); }
        LDKSocketDescriptor* descriptor_conv = (LDKSocketDescriptor*)descriptor_ptr;
@@ -23688,6 +28253,7 @@ uint32_t  __attribute__((visibility("default"))) TS_PeerManager_read_event(uint3
        LDKPeerManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        void* peer_descriptor_ptr = (void*)(((uint64_t)peer_descriptor) & ~1);
        if (!(peer_descriptor & 1)) { CHECK_ACCESS(peer_descriptor_ptr); }
        LDKSocketDescriptor* peer_descriptor_conv = (LDKSocketDescriptor*)peer_descriptor_ptr;
@@ -23703,6 +28269,7 @@ void  __attribute__((visibility("default"))) TS_PeerManager_process_events(uint3
        LDKPeerManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        PeerManager_process_events(&this_arg_conv);
 }
 
@@ -23710,6 +28277,7 @@ void  __attribute__((visibility("default"))) TS_PeerManager_socket_disconnected(
        LDKPeerManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        void* descriptor_ptr = (void*)(((uint64_t)descriptor) & ~1);
        if (!(descriptor & 1)) { CHECK_ACCESS(descriptor_ptr); }
        LDKSocketDescriptor* descriptor_conv = (LDKSocketDescriptor*)descriptor_ptr;
@@ -23720,6 +28288,7 @@ void  __attribute__((visibility("default"))) TS_PeerManager_disconnect_by_node_i
        LDKPeerManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKPublicKey node_id_ref;
        CHECK(*((uint32_t*)node_id) == 33);
        memcpy(node_id_ref.compressed_form, (uint8_t*)(node_id + 4), 33);
@@ -23730,6 +28299,7 @@ void  __attribute__((visibility("default"))) TS_PeerManager_disconnect_all_peers
        LDKPeerManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        PeerManager_disconnect_all_peers(&this_arg_conv);
 }
 
@@ -23737,6 +28307,7 @@ void  __attribute__((visibility("default"))) TS_PeerManager_timer_tick_occurred(
        LDKPeerManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        PeerManager_timer_tick_occurred(&this_arg_conv);
 }
 
@@ -23762,6 +28333,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_build_closing_transaction
        LDKOutPoint funding_outpoint_conv;
        funding_outpoint_conv.inner = (void*)(funding_outpoint & (~1));
        funding_outpoint_conv.is_owned = (funding_outpoint & 1) || (funding_outpoint == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_outpoint_conv);
        funding_outpoint_conv = OutPoint_clone(&funding_outpoint_conv);
        LDKTransaction ret_var = build_closing_transaction(to_holder_value_sat, to_counterparty_value_sat, to_holder_script_ref, to_counterparty_script_ref, funding_outpoint_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
@@ -23825,6 +28397,7 @@ void  __attribute__((visibility("default"))) TS_TxCreationKeys_free(uint32_t thi
        LDKTxCreationKeys this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        TxCreationKeys_free(this_obj_conv);
 }
 
@@ -23832,6 +28405,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_TxCreationKeys_get_per_co
        LDKTxCreationKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), TxCreationKeys_get_per_commitment_point(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -23841,6 +28415,7 @@ void  __attribute__((visibility("default"))) TS_TxCreationKeys_set_per_commitmen
        LDKTxCreationKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -23851,6 +28426,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_TxCreationKeys_get_revoca
        LDKTxCreationKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), TxCreationKeys_get_revocation_key(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -23860,6 +28436,7 @@ void  __attribute__((visibility("default"))) TS_TxCreationKeys_set_revocation_ke
        LDKTxCreationKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -23870,6 +28447,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_TxCreationKeys_get_broadc
        LDKTxCreationKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), TxCreationKeys_get_broadcaster_htlc_key(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -23879,6 +28457,7 @@ void  __attribute__((visibility("default"))) TS_TxCreationKeys_set_broadcaster_h
        LDKTxCreationKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -23889,6 +28468,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_TxCreationKeys_get_counte
        LDKTxCreationKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), TxCreationKeys_get_countersignatory_htlc_key(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -23898,6 +28478,7 @@ void  __attribute__((visibility("default"))) TS_TxCreationKeys_set_countersignat
        LDKTxCreationKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -23908,6 +28489,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_TxCreationKeys_get_broadc
        LDKTxCreationKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), TxCreationKeys_get_broadcaster_delayed_payment_key(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -23917,6 +28499,7 @@ void  __attribute__((visibility("default"))) TS_TxCreationKeys_set_broadcaster_d
        LDKTxCreationKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -23943,6 +28526,7 @@ uint32_t  __attribute__((visibility("default"))) TS_TxCreationKeys_new(int8_tArr
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -23950,14 +28534,37 @@ uint32_t  __attribute__((visibility("default"))) TS_TxCreationKeys_new(int8_tArr
        return ret_ref;
 }
 
+static inline uint64_t TxCreationKeys_clone_ptr(LDKTxCreationKeys *NONNULL_PTR arg) {
+       LDKTxCreationKeys ret_var = TxCreationKeys_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_TxCreationKeys_clone_ptr(uint32_t arg) {
+       LDKTxCreationKeys arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = TxCreationKeys_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_TxCreationKeys_clone(uint32_t orig) {
        LDKTxCreationKeys orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKTxCreationKeys ret_var = TxCreationKeys_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -23969,6 +28576,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_TxCreationKeys_write(uint
        LDKTxCreationKeys obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = TxCreationKeys_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -23989,6 +28597,7 @@ void  __attribute__((visibility("default"))) TS_ChannelPublicKeys_free(uint32_t
        LDKChannelPublicKeys this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelPublicKeys_free(this_obj_conv);
 }
 
@@ -23996,6 +28605,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ChannelPublicKeys_get_fun
        LDKChannelPublicKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ChannelPublicKeys_get_funding_pubkey(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -24005,6 +28615,7 @@ void  __attribute__((visibility("default"))) TS_ChannelPublicKeys_set_funding_pu
        LDKChannelPublicKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -24015,6 +28626,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ChannelPublicKeys_get_rev
        LDKChannelPublicKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ChannelPublicKeys_get_revocation_basepoint(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -24024,6 +28636,7 @@ void  __attribute__((visibility("default"))) TS_ChannelPublicKeys_set_revocation
        LDKChannelPublicKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -24034,6 +28647,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ChannelPublicKeys_get_pay
        LDKChannelPublicKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ChannelPublicKeys_get_payment_point(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -24043,6 +28657,7 @@ void  __attribute__((visibility("default"))) TS_ChannelPublicKeys_set_payment_po
        LDKChannelPublicKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -24053,6 +28668,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ChannelPublicKeys_get_del
        LDKChannelPublicKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ChannelPublicKeys_get_delayed_payment_basepoint(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -24062,6 +28678,7 @@ void  __attribute__((visibility("default"))) TS_ChannelPublicKeys_set_delayed_pa
        LDKChannelPublicKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -24072,6 +28689,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ChannelPublicKeys_get_htl
        LDKChannelPublicKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ChannelPublicKeys_get_htlc_basepoint(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -24081,6 +28699,7 @@ void  __attribute__((visibility("default"))) TS_ChannelPublicKeys_set_htlc_basep
        LDKChannelPublicKeys this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -24107,6 +28726,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelPublicKeys_new(int8_t
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24114,14 +28734,37 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelPublicKeys_new(int8_t
        return ret_ref;
 }
 
+static inline uint64_t ChannelPublicKeys_clone_ptr(LDKChannelPublicKeys *NONNULL_PTR arg) {
+       LDKChannelPublicKeys ret_var = ChannelPublicKeys_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_ChannelPublicKeys_clone_ptr(uint32_t arg) {
+       LDKChannelPublicKeys arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChannelPublicKeys_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_ChannelPublicKeys_clone(uint32_t orig) {
        LDKChannelPublicKeys orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChannelPublicKeys ret_var = ChannelPublicKeys_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24133,6 +28776,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ChannelPublicKeys_write(u
        LDKChannelPublicKeys obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ChannelPublicKeys_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -24177,9 +28821,11 @@ uint32_t  __attribute__((visibility("default"))) TS_TxCreationKeys_from_channel_
        LDKChannelPublicKeys broadcaster_keys_conv;
        broadcaster_keys_conv.inner = (void*)(broadcaster_keys & (~1));
        broadcaster_keys_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(broadcaster_keys_conv);
        LDKChannelPublicKeys countersignatory_keys_conv;
        countersignatory_keys_conv.inner = (void*)(countersignatory_keys & (~1));
        countersignatory_keys_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(countersignatory_keys_conv);
        LDKCResult_TxCreationKeysErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_TxCreationKeysErrorZ), "LDKCResult_TxCreationKeysErrorZ");
        *ret_conv = TxCreationKeys_from_channel_static_keys(per_commitment_point_ref, &broadcaster_keys_conv, &countersignatory_keys_conv);
        return (uint64_t)ret_conv;
@@ -24203,6 +28849,7 @@ void  __attribute__((visibility("default"))) TS_HTLCOutputInCommitment_free(uint
        LDKHTLCOutputInCommitment this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        HTLCOutputInCommitment_free(this_obj_conv);
 }
 
@@ -24210,6 +28857,7 @@ jboolean  __attribute__((visibility("default"))) TS_HTLCOutputInCommitment_get_o
        LDKHTLCOutputInCommitment this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        jboolean ret_val = HTLCOutputInCommitment_get_offered(&this_ptr_conv);
        return ret_val;
 }
@@ -24218,6 +28866,7 @@ void  __attribute__((visibility("default"))) TS_HTLCOutputInCommitment_set_offer
        LDKHTLCOutputInCommitment this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        HTLCOutputInCommitment_set_offered(&this_ptr_conv, val);
 }
 
@@ -24225,6 +28874,7 @@ int64_t  __attribute__((visibility("default"))) TS_HTLCOutputInCommitment_get_am
        LDKHTLCOutputInCommitment this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = HTLCOutputInCommitment_get_amount_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -24233,6 +28883,7 @@ void  __attribute__((visibility("default"))) TS_HTLCOutputInCommitment_set_amoun
        LDKHTLCOutputInCommitment this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        HTLCOutputInCommitment_set_amount_msat(&this_ptr_conv, val);
 }
 
@@ -24240,6 +28891,7 @@ int32_t  __attribute__((visibility("default"))) TS_HTLCOutputInCommitment_get_cl
        LDKHTLCOutputInCommitment this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = HTLCOutputInCommitment_get_cltv_expiry(&this_ptr_conv);
        return ret_val;
 }
@@ -24248,6 +28900,7 @@ void  __attribute__((visibility("default"))) TS_HTLCOutputInCommitment_set_cltv_
        LDKHTLCOutputInCommitment this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        HTLCOutputInCommitment_set_cltv_expiry(&this_ptr_conv, val);
 }
 
@@ -24255,6 +28908,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_HTLCOutputInCommitment_ge
        LDKHTLCOutputInCommitment this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *HTLCOutputInCommitment_get_payment_hash(&this_ptr_conv), 32);
        return ret_arr;
@@ -24264,6 +28918,7 @@ void  __attribute__((visibility("default"))) TS_HTLCOutputInCommitment_set_payme
        LDKHTLCOutputInCommitment this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -24274,6 +28929,7 @@ uint32_t  __attribute__((visibility("default"))) TS_HTLCOutputInCommitment_get_t
        LDKHTLCOutputInCommitment this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCOption_u32Z *ret_copy = MALLOC(sizeof(LDKCOption_u32Z), "LDKCOption_u32Z");
        *ret_copy = HTLCOutputInCommitment_get_transaction_output_index(&this_ptr_conv);
        uint64_t ret_ref = (uint64_t)ret_copy;
@@ -24284,6 +28940,7 @@ void  __attribute__((visibility("default"))) TS_HTLCOutputInCommitment_set_trans
        LDKHTLCOutputInCommitment this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKCOption_u32Z val_conv = *(LDKCOption_u32Z*)(val_ptr);
@@ -24303,6 +28960,7 @@ uint32_t  __attribute__((visibility("default"))) TS_HTLCOutputInCommitment_new(j
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24310,14 +28968,37 @@ uint32_t  __attribute__((visibility("default"))) TS_HTLCOutputInCommitment_new(j
        return ret_ref;
 }
 
+static inline uint64_t HTLCOutputInCommitment_clone_ptr(LDKHTLCOutputInCommitment *NONNULL_PTR arg) {
+       LDKHTLCOutputInCommitment ret_var = HTLCOutputInCommitment_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_HTLCOutputInCommitment_clone_ptr(uint32_t arg) {
+       LDKHTLCOutputInCommitment arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = HTLCOutputInCommitment_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_HTLCOutputInCommitment_clone(uint32_t orig) {
        LDKHTLCOutputInCommitment orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKHTLCOutputInCommitment ret_var = HTLCOutputInCommitment_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24329,6 +29010,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_HTLCOutputInCommitment_wr
        LDKHTLCOutputInCommitment obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = HTLCOutputInCommitment_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -24349,9 +29031,11 @@ int8_tArray  __attribute__((visibility("default"))) TS_get_htlc_redeemscript(uin
        LDKHTLCOutputInCommitment htlc_conv;
        htlc_conv.inner = (void*)(htlc & (~1));
        htlc_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(htlc_conv);
        LDKTxCreationKeys keys_conv;
        keys_conv.inner = (void*)(keys & (~1));
        keys_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(keys_conv);
        LDKCVec_u8Z ret_var = get_htlc_redeemscript(&htlc_conv, &keys_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -24381,6 +29065,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_build_htlc_transaction(in
        LDKHTLCOutputInCommitment htlc_conv;
        htlc_conv.inner = (void*)(htlc & (~1));
        htlc_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(htlc_conv);
        LDKPublicKey broadcaster_delayed_payment_key_ref;
        CHECK(*((uint32_t*)broadcaster_delayed_payment_key) == 33);
        memcpy(broadcaster_delayed_payment_key_ref.compressed_form, (uint8_t*)(broadcaster_delayed_payment_key + 4), 33);
@@ -24398,6 +29083,7 @@ void  __attribute__((visibility("default"))) TS_ChannelTransactionParameters_fre
        LDKChannelTransactionParameters this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelTransactionParameters_free(this_obj_conv);
 }
 
@@ -24405,10 +29091,12 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelTransactionParameters
        LDKChannelTransactionParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelPublicKeys ret_var = ChannelTransactionParameters_get_holder_pubkeys(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24420,9 +29108,11 @@ void  __attribute__((visibility("default"))) TS_ChannelTransactionParameters_set
        LDKChannelTransactionParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelPublicKeys val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = ChannelPublicKeys_clone(&val_conv);
        ChannelTransactionParameters_set_holder_pubkeys(&this_ptr_conv, val_conv);
 }
@@ -24431,6 +29121,7 @@ int16_t  __attribute__((visibility("default"))) TS_ChannelTransactionParameters_
        LDKChannelTransactionParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = ChannelTransactionParameters_get_holder_selected_contest_delay(&this_ptr_conv);
        return ret_val;
 }
@@ -24439,6 +29130,7 @@ void  __attribute__((visibility("default"))) TS_ChannelTransactionParameters_set
        LDKChannelTransactionParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelTransactionParameters_set_holder_selected_contest_delay(&this_ptr_conv, val);
 }
 
@@ -24446,6 +29138,7 @@ jboolean  __attribute__((visibility("default"))) TS_ChannelTransactionParameters
        LDKChannelTransactionParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        jboolean ret_val = ChannelTransactionParameters_get_is_outbound_from_holder(&this_ptr_conv);
        return ret_val;
 }
@@ -24454,6 +29147,7 @@ void  __attribute__((visibility("default"))) TS_ChannelTransactionParameters_set
        LDKChannelTransactionParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ChannelTransactionParameters_set_is_outbound_from_holder(&this_ptr_conv, val);
 }
 
@@ -24461,11 +29155,13 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelTransactionParameters
        LDKChannelTransactionParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCounterpartyChannelTransactionParameters ret_var = ChannelTransactionParameters_get_counterparty_parameters(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -24478,9 +29174,11 @@ void  __attribute__((visibility("default"))) TS_ChannelTransactionParameters_set
        LDKChannelTransactionParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCounterpartyChannelTransactionParameters val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = CounterpartyChannelTransactionParameters_clone(&val_conv);
        ChannelTransactionParameters_set_counterparty_parameters(&this_ptr_conv, val_conv);
 }
@@ -24489,11 +29187,13 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelTransactionParameters
        LDKChannelTransactionParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKOutPoint ret_var = ChannelTransactionParameters_get_funding_outpoint(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -24506,9 +29206,11 @@ void  __attribute__((visibility("default"))) TS_ChannelTransactionParameters_set
        LDKChannelTransactionParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKOutPoint val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = OutPoint_clone(&val_conv);
        ChannelTransactionParameters_set_funding_outpoint(&this_ptr_conv, val_conv);
 }
@@ -24517,19 +29219,23 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelTransactionParameters
        LDKChannelPublicKeys holder_pubkeys_arg_conv;
        holder_pubkeys_arg_conv.inner = (void*)(holder_pubkeys_arg & (~1));
        holder_pubkeys_arg_conv.is_owned = (holder_pubkeys_arg & 1) || (holder_pubkeys_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(holder_pubkeys_arg_conv);
        holder_pubkeys_arg_conv = ChannelPublicKeys_clone(&holder_pubkeys_arg_conv);
        LDKCounterpartyChannelTransactionParameters counterparty_parameters_arg_conv;
        counterparty_parameters_arg_conv.inner = (void*)(counterparty_parameters_arg & (~1));
        counterparty_parameters_arg_conv.is_owned = (counterparty_parameters_arg & 1) || (counterparty_parameters_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(counterparty_parameters_arg_conv);
        counterparty_parameters_arg_conv = CounterpartyChannelTransactionParameters_clone(&counterparty_parameters_arg_conv);
        LDKOutPoint funding_outpoint_arg_conv;
        funding_outpoint_arg_conv.inner = (void*)(funding_outpoint_arg & (~1));
        funding_outpoint_arg_conv.is_owned = (funding_outpoint_arg & 1) || (funding_outpoint_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_outpoint_arg_conv);
        funding_outpoint_arg_conv = OutPoint_clone(&funding_outpoint_arg_conv);
        LDKChannelTransactionParameters ret_var = ChannelTransactionParameters_new(holder_pubkeys_arg_conv, holder_selected_contest_delay_arg, is_outbound_from_holder_arg, counterparty_parameters_arg_conv, funding_outpoint_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24537,14 +29243,37 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelTransactionParameters
        return ret_ref;
 }
 
+static inline uint64_t ChannelTransactionParameters_clone_ptr(LDKChannelTransactionParameters *NONNULL_PTR arg) {
+       LDKChannelTransactionParameters ret_var = ChannelTransactionParameters_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_ChannelTransactionParameters_clone_ptr(uint32_t arg) {
+       LDKChannelTransactionParameters arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChannelTransactionParameters_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_ChannelTransactionParameters_clone(uint32_t orig) {
        LDKChannelTransactionParameters orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChannelTransactionParameters ret_var = ChannelTransactionParameters_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24556,6 +29285,7 @@ void  __attribute__((visibility("default"))) TS_CounterpartyChannelTransactionPa
        LDKCounterpartyChannelTransactionParameters this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        CounterpartyChannelTransactionParameters_free(this_obj_conv);
 }
 
@@ -24563,10 +29293,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CounterpartyChannelTransacti
        LDKCounterpartyChannelTransactionParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelPublicKeys ret_var = CounterpartyChannelTransactionParameters_get_pubkeys(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24578,9 +29310,11 @@ void  __attribute__((visibility("default"))) TS_CounterpartyChannelTransactionPa
        LDKCounterpartyChannelTransactionParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelPublicKeys val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = ChannelPublicKeys_clone(&val_conv);
        CounterpartyChannelTransactionParameters_set_pubkeys(&this_ptr_conv, val_conv);
 }
@@ -24589,6 +29323,7 @@ int16_t  __attribute__((visibility("default"))) TS_CounterpartyChannelTransactio
        LDKCounterpartyChannelTransactionParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = CounterpartyChannelTransactionParameters_get_selected_contest_delay(&this_ptr_conv);
        return ret_val;
 }
@@ -24597,6 +29332,7 @@ void  __attribute__((visibility("default"))) TS_CounterpartyChannelTransactionPa
        LDKCounterpartyChannelTransactionParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        CounterpartyChannelTransactionParameters_set_selected_contest_delay(&this_ptr_conv, val);
 }
 
@@ -24604,11 +29340,13 @@ uint32_t  __attribute__((visibility("default"))) TS_CounterpartyChannelTransacti
        LDKChannelPublicKeys pubkeys_arg_conv;
        pubkeys_arg_conv.inner = (void*)(pubkeys_arg & (~1));
        pubkeys_arg_conv.is_owned = (pubkeys_arg & 1) || (pubkeys_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(pubkeys_arg_conv);
        pubkeys_arg_conv = ChannelPublicKeys_clone(&pubkeys_arg_conv);
        LDKCounterpartyChannelTransactionParameters ret_var = CounterpartyChannelTransactionParameters_new(pubkeys_arg_conv, selected_contest_delay_arg);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24616,14 +29354,37 @@ uint32_t  __attribute__((visibility("default"))) TS_CounterpartyChannelTransacti
        return ret_ref;
 }
 
+static inline uint64_t CounterpartyChannelTransactionParameters_clone_ptr(LDKCounterpartyChannelTransactionParameters *NONNULL_PTR arg) {
+       LDKCounterpartyChannelTransactionParameters ret_var = CounterpartyChannelTransactionParameters_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_CounterpartyChannelTransactionParameters_clone_ptr(uint32_t arg) {
+       LDKCounterpartyChannelTransactionParameters arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = CounterpartyChannelTransactionParameters_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CounterpartyChannelTransactionParameters_clone(uint32_t orig) {
        LDKCounterpartyChannelTransactionParameters orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKCounterpartyChannelTransactionParameters ret_var = CounterpartyChannelTransactionParameters_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24635,6 +29396,7 @@ jboolean  __attribute__((visibility("default"))) TS_ChannelTransactionParameters
        LDKChannelTransactionParameters this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        jboolean ret_val = ChannelTransactionParameters_is_populated(&this_arg_conv);
        return ret_val;
 }
@@ -24643,10 +29405,12 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelTransactionParameters
        LDKChannelTransactionParameters this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKDirectedChannelTransactionParameters ret_var = ChannelTransactionParameters_as_holder_broadcastable(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24658,10 +29422,12 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelTransactionParameters
        LDKChannelTransactionParameters this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKDirectedChannelTransactionParameters ret_var = ChannelTransactionParameters_as_counterparty_broadcastable(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24673,6 +29439,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_CounterpartyChannelTransa
        LDKCounterpartyChannelTransactionParameters obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = CounterpartyChannelTransactionParameters_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -24693,6 +29460,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ChannelTransactionParamet
        LDKChannelTransactionParameters obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ChannelTransactionParameters_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -24713,6 +29481,7 @@ void  __attribute__((visibility("default"))) TS_DirectedChannelTransactionParame
        LDKDirectedChannelTransactionParameters this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        DirectedChannelTransactionParameters_free(this_obj_conv);
 }
 
@@ -24720,10 +29489,12 @@ uint32_t  __attribute__((visibility("default"))) TS_DirectedChannelTransactionPa
        LDKDirectedChannelTransactionParameters this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKChannelPublicKeys ret_var = DirectedChannelTransactionParameters_broadcaster_pubkeys(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24735,10 +29506,12 @@ uint32_t  __attribute__((visibility("default"))) TS_DirectedChannelTransactionPa
        LDKDirectedChannelTransactionParameters this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKChannelPublicKeys ret_var = DirectedChannelTransactionParameters_countersignatory_pubkeys(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24750,6 +29523,7 @@ int16_t  __attribute__((visibility("default"))) TS_DirectedChannelTransactionPar
        LDKDirectedChannelTransactionParameters this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int16_t ret_val = DirectedChannelTransactionParameters_contest_delay(&this_arg_conv);
        return ret_val;
 }
@@ -24758,6 +29532,7 @@ jboolean  __attribute__((visibility("default"))) TS_DirectedChannelTransactionPa
        LDKDirectedChannelTransactionParameters this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        jboolean ret_val = DirectedChannelTransactionParameters_is_outbound(&this_arg_conv);
        return ret_val;
 }
@@ -24766,10 +29541,12 @@ uint32_t  __attribute__((visibility("default"))) TS_DirectedChannelTransactionPa
        LDKDirectedChannelTransactionParameters this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKOutPoint ret_var = DirectedChannelTransactionParameters_funding_outpoint(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24781,6 +29558,7 @@ void  __attribute__((visibility("default"))) TS_HolderCommitmentTransaction_free
        LDKHolderCommitmentTransaction this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        HolderCommitmentTransaction_free(this_obj_conv);
 }
 
@@ -24788,6 +29566,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_HolderCommitmentTransacti
        LDKHolderCommitmentTransaction this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(64, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), HolderCommitmentTransaction_get_counterparty_sig(&this_ptr_conv).compact_form, 64);
        return ret_arr;
@@ -24797,6 +29576,7 @@ void  __attribute__((visibility("default"))) TS_HolderCommitmentTransaction_set_
        LDKHolderCommitmentTransaction this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKSignature val_ref;
        CHECK(*((uint32_t*)val) == 64);
        memcpy(val_ref.compact_form, (uint8_t*)(val + 4), 64);
@@ -24807,6 +29587,7 @@ void  __attribute__((visibility("default"))) TS_HolderCommitmentTransaction_set_
        LDKHolderCommitmentTransaction this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_SignatureZ val_constr;
        val_constr.datalen = *((uint32_t*)val);
        if (val_constr.datalen > 0)
@@ -24824,14 +29605,37 @@ void  __attribute__((visibility("default"))) TS_HolderCommitmentTransaction_set_
        HolderCommitmentTransaction_set_counterparty_htlc_sigs(&this_ptr_conv, val_constr);
 }
 
+static inline uint64_t HolderCommitmentTransaction_clone_ptr(LDKHolderCommitmentTransaction *NONNULL_PTR arg) {
+       LDKHolderCommitmentTransaction ret_var = HolderCommitmentTransaction_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_HolderCommitmentTransaction_clone_ptr(uint32_t arg) {
+       LDKHolderCommitmentTransaction arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = HolderCommitmentTransaction_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_HolderCommitmentTransaction_clone(uint32_t orig) {
        LDKHolderCommitmentTransaction orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKHolderCommitmentTransaction ret_var = HolderCommitmentTransaction_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24843,6 +29647,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_HolderCommitmentTransacti
        LDKHolderCommitmentTransaction obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = HolderCommitmentTransaction_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -24863,6 +29668,7 @@ uint32_t  __attribute__((visibility("default"))) TS_HolderCommitmentTransaction_
        LDKCommitmentTransaction commitment_tx_conv;
        commitment_tx_conv.inner = (void*)(commitment_tx & (~1));
        commitment_tx_conv.is_owned = (commitment_tx & 1) || (commitment_tx == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(commitment_tx_conv);
        commitment_tx_conv = CommitmentTransaction_clone(&commitment_tx_conv);
        LDKSignature counterparty_sig_ref;
        CHECK(*((uint32_t*)counterparty_sig) == 64);
@@ -24891,6 +29697,7 @@ uint32_t  __attribute__((visibility("default"))) TS_HolderCommitmentTransaction_
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24902,6 +29709,7 @@ void  __attribute__((visibility("default"))) TS_BuiltCommitmentTransaction_free(
        LDKBuiltCommitmentTransaction this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        BuiltCommitmentTransaction_free(this_obj_conv);
 }
 
@@ -24909,6 +29717,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_BuiltCommitmentTransactio
        LDKBuiltCommitmentTransaction this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKTransaction ret_var = BuiltCommitmentTransaction_get_transaction(&this_ptr_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -24920,6 +29729,7 @@ void  __attribute__((visibility("default"))) TS_BuiltCommitmentTransaction_set_t
        LDKBuiltCommitmentTransaction this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKTransaction val_ref;
        val_ref.datalen = *((uint32_t*)val);
        val_ref.data = MALLOC(val_ref.datalen, "LDKTransaction Bytes");
@@ -24932,6 +29742,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_BuiltCommitmentTransactio
        LDKBuiltCommitmentTransaction this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *BuiltCommitmentTransaction_get_txid(&this_ptr_conv), 32);
        return ret_arr;
@@ -24941,6 +29752,7 @@ void  __attribute__((visibility("default"))) TS_BuiltCommitmentTransaction_set_t
        LDKBuiltCommitmentTransaction this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -24960,6 +29772,7 @@ uint32_t  __attribute__((visibility("default"))) TS_BuiltCommitmentTransaction_n
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24967,14 +29780,37 @@ uint32_t  __attribute__((visibility("default"))) TS_BuiltCommitmentTransaction_n
        return ret_ref;
 }
 
+static inline uint64_t BuiltCommitmentTransaction_clone_ptr(LDKBuiltCommitmentTransaction *NONNULL_PTR arg) {
+       LDKBuiltCommitmentTransaction ret_var = BuiltCommitmentTransaction_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_BuiltCommitmentTransaction_clone_ptr(uint32_t arg) {
+       LDKBuiltCommitmentTransaction arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = BuiltCommitmentTransaction_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_BuiltCommitmentTransaction_clone(uint32_t orig) {
        LDKBuiltCommitmentTransaction orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKBuiltCommitmentTransaction ret_var = BuiltCommitmentTransaction_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -24986,6 +29822,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_BuiltCommitmentTransactio
        LDKBuiltCommitmentTransaction obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = BuiltCommitmentTransaction_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -25006,6 +29843,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_BuiltCommitmentTransactio
        LDKBuiltCommitmentTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKu8slice funding_redeemscript_ref;
        funding_redeemscript_ref.datalen = *((uint32_t*)funding_redeemscript);
        funding_redeemscript_ref.data = (int8_t*)(funding_redeemscript + 4);
@@ -25018,6 +29856,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_BuiltCommitmentTransactio
        LDKBuiltCommitmentTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char funding_key_arr[32];
        CHECK(*((uint32_t*)funding_key) == 32);
        memcpy(funding_key_arr, (uint8_t*)(funding_key + 4), 32);
@@ -25034,17 +29873,41 @@ void  __attribute__((visibility("default"))) TS_ClosingTransaction_free(uint32_t
        LDKClosingTransaction this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ClosingTransaction_free(this_obj_conv);
 }
 
+static inline uint64_t ClosingTransaction_clone_ptr(LDKClosingTransaction *NONNULL_PTR arg) {
+       LDKClosingTransaction ret_var = ClosingTransaction_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_ClosingTransaction_clone_ptr(uint32_t arg) {
+       LDKClosingTransaction arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ClosingTransaction_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_ClosingTransaction_clone(uint32_t orig) {
        LDKClosingTransaction orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKClosingTransaction ret_var = ClosingTransaction_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25056,6 +29919,7 @@ int64_t  __attribute__((visibility("default"))) TS_ClosingTransaction_hash(uint3
        LDKClosingTransaction o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = ClosingTransaction_hash(&o_conv);
        return ret_val;
 }
@@ -25072,11 +29936,13 @@ uint32_t  __attribute__((visibility("default"))) TS_ClosingTransaction_new(int64
        LDKOutPoint funding_outpoint_conv;
        funding_outpoint_conv.inner = (void*)(funding_outpoint & (~1));
        funding_outpoint_conv.is_owned = (funding_outpoint & 1) || (funding_outpoint == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_outpoint_conv);
        funding_outpoint_conv = OutPoint_clone(&funding_outpoint_conv);
        LDKClosingTransaction ret_var = ClosingTransaction_new(to_holder_value_sat, to_counterparty_value_sat, to_holder_script_ref, to_counterparty_script_ref, funding_outpoint_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25088,10 +29954,12 @@ uint32_t  __attribute__((visibility("default"))) TS_ClosingTransaction_trust(uin
        LDKClosingTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKTrustedClosingTransaction ret_var = ClosingTransaction_trust(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25103,9 +29971,11 @@ uint32_t  __attribute__((visibility("default"))) TS_ClosingTransaction_verify(ui
        LDKClosingTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKOutPoint funding_outpoint_conv;
        funding_outpoint_conv.inner = (void*)(funding_outpoint & (~1));
        funding_outpoint_conv.is_owned = (funding_outpoint & 1) || (funding_outpoint == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(funding_outpoint_conv);
        funding_outpoint_conv = OutPoint_clone(&funding_outpoint_conv);
        LDKCResult_TrustedClosingTransactionNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_TrustedClosingTransactionNoneZ), "LDKCResult_TrustedClosingTransactionNoneZ");
        *ret_conv = ClosingTransaction_verify(&this_arg_conv, funding_outpoint_conv);
@@ -25116,6 +29986,7 @@ int64_t  __attribute__((visibility("default"))) TS_ClosingTransaction_to_holder_
        LDKClosingTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = ClosingTransaction_to_holder_value_sat(&this_arg_conv);
        return ret_val;
 }
@@ -25124,6 +29995,7 @@ int64_t  __attribute__((visibility("default"))) TS_ClosingTransaction_to_counter
        LDKClosingTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = ClosingTransaction_to_counterparty_value_sat(&this_arg_conv);
        return ret_val;
 }
@@ -25132,6 +30004,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ClosingTransaction_to_hol
        LDKClosingTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKu8slice ret_var = ClosingTransaction_to_holder_script(&this_arg_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -25142,6 +30015,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ClosingTransaction_to_cou
        LDKClosingTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKu8slice ret_var = ClosingTransaction_to_counterparty_script(&this_arg_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -25152,6 +30026,7 @@ void  __attribute__((visibility("default"))) TS_TrustedClosingTransaction_free(u
        LDKTrustedClosingTransaction this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        TrustedClosingTransaction_free(this_obj_conv);
 }
 
@@ -25159,6 +30034,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_TrustedClosingTransaction
        LDKTrustedClosingTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKTransaction ret_var = TrustedClosingTransaction_built_transaction(&this_arg_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -25170,6 +30046,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_TrustedClosingTransaction
        LDKTrustedClosingTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKu8slice funding_redeemscript_ref;
        funding_redeemscript_ref.datalen = *((uint32_t*)funding_redeemscript);
        funding_redeemscript_ref.data = (int8_t*)(funding_redeemscript + 4);
@@ -25182,6 +30059,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_TrustedClosingTransaction
        LDKTrustedClosingTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char funding_key_arr[32];
        CHECK(*((uint32_t*)funding_key) == 32);
        memcpy(funding_key_arr, (uint8_t*)(funding_key + 4), 32);
@@ -25198,17 +30076,41 @@ void  __attribute__((visibility("default"))) TS_CommitmentTransaction_free(uint3
        LDKCommitmentTransaction this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        CommitmentTransaction_free(this_obj_conv);
 }
 
+static inline uint64_t CommitmentTransaction_clone_ptr(LDKCommitmentTransaction *NONNULL_PTR arg) {
+       LDKCommitmentTransaction ret_var = CommitmentTransaction_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_CommitmentTransaction_clone_ptr(uint32_t arg) {
+       LDKCommitmentTransaction arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = CommitmentTransaction_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_CommitmentTransaction_clone(uint32_t orig) {
        LDKCommitmentTransaction orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKCommitmentTransaction ret_var = CommitmentTransaction_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25220,6 +30122,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_CommitmentTransaction_wri
        LDKCommitmentTransaction obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = CommitmentTransaction_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -25240,6 +30143,7 @@ int64_t  __attribute__((visibility("default"))) TS_CommitmentTransaction_commitm
        LDKCommitmentTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = CommitmentTransaction_commitment_number(&this_arg_conv);
        return ret_val;
 }
@@ -25248,6 +30152,7 @@ int64_t  __attribute__((visibility("default"))) TS_CommitmentTransaction_to_broa
        LDKCommitmentTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = CommitmentTransaction_to_broadcaster_value_sat(&this_arg_conv);
        return ret_val;
 }
@@ -25256,6 +30161,7 @@ int64_t  __attribute__((visibility("default"))) TS_CommitmentTransaction_to_coun
        LDKCommitmentTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = CommitmentTransaction_to_countersignatory_value_sat(&this_arg_conv);
        return ret_val;
 }
@@ -25264,6 +30170,7 @@ int32_t  __attribute__((visibility("default"))) TS_CommitmentTransaction_feerate
        LDKCommitmentTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int32_t ret_val = CommitmentTransaction_feerate_per_kw(&this_arg_conv);
        return ret_val;
 }
@@ -25272,10 +30179,12 @@ uint32_t  __attribute__((visibility("default"))) TS_CommitmentTransaction_trust(
        LDKCommitmentTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKTrustedCommitmentTransaction ret_var = CommitmentTransaction_trust(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25287,15 +30196,19 @@ uint32_t  __attribute__((visibility("default"))) TS_CommitmentTransaction_verify
        LDKCommitmentTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKDirectedChannelTransactionParameters channel_parameters_conv;
        channel_parameters_conv.inner = (void*)(channel_parameters & (~1));
        channel_parameters_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_parameters_conv);
        LDKChannelPublicKeys broadcaster_keys_conv;
        broadcaster_keys_conv.inner = (void*)(broadcaster_keys & (~1));
        broadcaster_keys_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(broadcaster_keys_conv);
        LDKChannelPublicKeys countersignatory_keys_conv;
        countersignatory_keys_conv.inner = (void*)(countersignatory_keys & (~1));
        countersignatory_keys_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(countersignatory_keys_conv);
        LDKCResult_TrustedCommitmentTransactionNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_TrustedCommitmentTransactionNoneZ), "LDKCResult_TrustedCommitmentTransactionNoneZ");
        *ret_conv = CommitmentTransaction_verify(&this_arg_conv, &channel_parameters_conv, &broadcaster_keys_conv, &countersignatory_keys_conv);
        return (uint64_t)ret_conv;
@@ -25305,6 +30218,7 @@ void  __attribute__((visibility("default"))) TS_TrustedCommitmentTransaction_fre
        LDKTrustedCommitmentTransaction this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        TrustedCommitmentTransaction_free(this_obj_conv);
 }
 
@@ -25312,6 +30226,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_TrustedCommitmentTransact
        LDKTrustedCommitmentTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), TrustedCommitmentTransaction_txid(&this_arg_conv).data, 32);
        return ret_arr;
@@ -25321,10 +30236,12 @@ uint32_t  __attribute__((visibility("default"))) TS_TrustedCommitmentTransaction
        LDKTrustedCommitmentTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKBuiltCommitmentTransaction ret_var = TrustedCommitmentTransaction_built_transaction(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25336,10 +30253,12 @@ uint32_t  __attribute__((visibility("default"))) TS_TrustedCommitmentTransaction
        LDKTrustedCommitmentTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKTxCreationKeys ret_var = TrustedCommitmentTransaction_keys(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25351,6 +30270,7 @@ uint32_t  __attribute__((visibility("default"))) TS_TrustedCommitmentTransaction
        LDKTrustedCommitmentTransaction this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char htlc_base_key_arr[32];
        CHECK(*((uint32_t*)htlc_base_key) == 32);
        memcpy(htlc_base_key_arr, (uint8_t*)(htlc_base_key + 4), 32);
@@ -25358,6 +30278,7 @@ uint32_t  __attribute__((visibility("default"))) TS_TrustedCommitmentTransaction
        LDKDirectedChannelTransactionParameters channel_parameters_conv;
        channel_parameters_conv.inner = (void*)(channel_parameters & (~1));
        channel_parameters_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_parameters_conv);
        LDKCResult_CVec_SignatureZNoneZ* ret_conv = MALLOC(sizeof(LDKCResult_CVec_SignatureZNoneZ), "LDKCResult_CVec_SignatureZNoneZ");
        *ret_conv = TrustedCommitmentTransaction_get_htlc_sigs(&this_arg_conv, htlc_base_key_ref, &channel_parameters_conv);
        return (uint64_t)ret_conv;
@@ -25378,9 +30299,11 @@ jboolean  __attribute__((visibility("default"))) TS_InitFeatures_eq(uint32_t a,
        LDKInitFeatures a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKInitFeatures b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = InitFeatures_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -25389,9 +30312,11 @@ jboolean  __attribute__((visibility("default"))) TS_NodeFeatures_eq(uint32_t a,
        LDKNodeFeatures a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKNodeFeatures b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = NodeFeatures_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -25400,9 +30325,11 @@ jboolean  __attribute__((visibility("default"))) TS_ChannelFeatures_eq(uint32_t
        LDKChannelFeatures a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKChannelFeatures b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = ChannelFeatures_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -25411,21 +30338,46 @@ jboolean  __attribute__((visibility("default"))) TS_InvoiceFeatures_eq(uint32_t
        LDKInvoiceFeatures a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKInvoiceFeatures b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = InvoiceFeatures_eq(&a_conv, &b_conv);
        return ret_val;
 }
 
+static inline uint64_t InitFeatures_clone_ptr(LDKInitFeatures *NONNULL_PTR arg) {
+       LDKInitFeatures ret_var = InitFeatures_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_InitFeatures_clone_ptr(uint32_t arg) {
+       LDKInitFeatures arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = InitFeatures_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_InitFeatures_clone(uint32_t orig) {
        LDKInitFeatures orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKInitFeatures ret_var = InitFeatures_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25433,14 +30385,37 @@ uint32_t  __attribute__((visibility("default"))) TS_InitFeatures_clone(uint32_t
        return ret_ref;
 }
 
+static inline uint64_t NodeFeatures_clone_ptr(LDKNodeFeatures *NONNULL_PTR arg) {
+       LDKNodeFeatures ret_var = NodeFeatures_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_NodeFeatures_clone_ptr(uint32_t arg) {
+       LDKNodeFeatures arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = NodeFeatures_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_NodeFeatures_clone(uint32_t orig) {
        LDKNodeFeatures orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKNodeFeatures ret_var = NodeFeatures_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25448,14 +30423,37 @@ uint32_t  __attribute__((visibility("default"))) TS_NodeFeatures_clone(uint32_t
        return ret_ref;
 }
 
+static inline uint64_t ChannelFeatures_clone_ptr(LDKChannelFeatures *NONNULL_PTR arg) {
+       LDKChannelFeatures ret_var = ChannelFeatures_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_ChannelFeatures_clone_ptr(uint32_t arg) {
+       LDKChannelFeatures arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChannelFeatures_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_ChannelFeatures_clone(uint32_t orig) {
        LDKChannelFeatures orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChannelFeatures ret_var = ChannelFeatures_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25463,14 +30461,37 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelFeatures_clone(uint32
        return ret_ref;
 }
 
+static inline uint64_t InvoiceFeatures_clone_ptr(LDKInvoiceFeatures *NONNULL_PTR arg) {
+       LDKInvoiceFeatures ret_var = InvoiceFeatures_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_InvoiceFeatures_clone_ptr(uint32_t arg) {
+       LDKInvoiceFeatures arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = InvoiceFeatures_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_InvoiceFeatures_clone(uint32_t orig) {
        LDKInvoiceFeatures orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKInvoiceFeatures ret_var = InvoiceFeatures_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25482,6 +30503,7 @@ void  __attribute__((visibility("default"))) TS_InitFeatures_free(uint32_t this_
        LDKInitFeatures this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        InitFeatures_free(this_obj_conv);
 }
 
@@ -25489,6 +30511,7 @@ void  __attribute__((visibility("default"))) TS_NodeFeatures_free(uint32_t this_
        LDKNodeFeatures this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        NodeFeatures_free(this_obj_conv);
 }
 
@@ -25496,6 +30519,7 @@ void  __attribute__((visibility("default"))) TS_ChannelFeatures_free(uint32_t th
        LDKChannelFeatures this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelFeatures_free(this_obj_conv);
 }
 
@@ -25503,6 +30527,7 @@ void  __attribute__((visibility("default"))) TS_InvoiceFeatures_free(uint32_t th
        LDKInvoiceFeatures this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        InvoiceFeatures_free(this_obj_conv);
 }
 
@@ -25511,6 +30536,7 @@ uint32_t  __attribute__((visibility("default"))) TS_InitFeatures_empty() {
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25523,6 +30549,7 @@ uint32_t  __attribute__((visibility("default"))) TS_InitFeatures_known() {
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25534,6 +30561,7 @@ jboolean  __attribute__((visibility("default"))) TS_InitFeatures_requires_unknow
        LDKInitFeatures this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        jboolean ret_val = InitFeatures_requires_unknown_bits(&this_arg_conv);
        return ret_val;
 }
@@ -25543,6 +30571,7 @@ uint32_t  __attribute__((visibility("default"))) TS_NodeFeatures_empty() {
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25555,6 +30584,7 @@ uint32_t  __attribute__((visibility("default"))) TS_NodeFeatures_known() {
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25566,6 +30596,7 @@ jboolean  __attribute__((visibility("default"))) TS_NodeFeatures_requires_unknow
        LDKNodeFeatures this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        jboolean ret_val = NodeFeatures_requires_unknown_bits(&this_arg_conv);
        return ret_val;
 }
@@ -25575,6 +30606,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelFeatures_empty() {
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25587,6 +30619,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelFeatures_known() {
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25598,6 +30631,7 @@ jboolean  __attribute__((visibility("default"))) TS_ChannelFeatures_requires_unk
        LDKChannelFeatures this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        jboolean ret_val = ChannelFeatures_requires_unknown_bits(&this_arg_conv);
        return ret_val;
 }
@@ -25607,6 +30641,7 @@ uint32_t  __attribute__((visibility("default"))) TS_InvoiceFeatures_empty() {
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25619,6 +30654,7 @@ uint32_t  __attribute__((visibility("default"))) TS_InvoiceFeatures_known() {
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25630,6 +30666,7 @@ jboolean  __attribute__((visibility("default"))) TS_InvoiceFeatures_requires_unk
        LDKInvoiceFeatures this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        jboolean ret_val = InvoiceFeatures_requires_unknown_bits(&this_arg_conv);
        return ret_val;
 }
@@ -25638,6 +30675,7 @@ jboolean  __attribute__((visibility("default"))) TS_InitFeatures_supports_paymen
        LDKInitFeatures this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        jboolean ret_val = InitFeatures_supports_payment_secret(&this_arg_conv);
        return ret_val;
 }
@@ -25646,6 +30684,7 @@ jboolean  __attribute__((visibility("default"))) TS_NodeFeatures_supports_paymen
        LDKNodeFeatures this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        jboolean ret_val = NodeFeatures_supports_payment_secret(&this_arg_conv);
        return ret_val;
 }
@@ -25654,6 +30693,7 @@ jboolean  __attribute__((visibility("default"))) TS_InvoiceFeatures_supports_pay
        LDKInvoiceFeatures this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        jboolean ret_val = InvoiceFeatures_supports_payment_secret(&this_arg_conv);
        return ret_val;
 }
@@ -25662,6 +30702,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_InitFeatures_write(uint32
        LDKInitFeatures obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = InitFeatures_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -25673,6 +30714,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_NodeFeatures_write(uint32
        LDKNodeFeatures obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = NodeFeatures_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -25684,6 +30726,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ChannelFeatures_write(uin
        LDKChannelFeatures obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ChannelFeatures_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -25695,6 +30738,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_InvoiceFeatures_write(uin
        LDKInvoiceFeatures obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = InvoiceFeatures_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -25742,17 +30786,41 @@ void  __attribute__((visibility("default"))) TS_ShutdownScript_free(uint32_t thi
        LDKShutdownScript this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ShutdownScript_free(this_obj_conv);
 }
 
+static inline uint64_t ShutdownScript_clone_ptr(LDKShutdownScript *NONNULL_PTR arg) {
+       LDKShutdownScript ret_var = ShutdownScript_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_ShutdownScript_clone_ptr(uint32_t arg) {
+       LDKShutdownScript arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ShutdownScript_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_ShutdownScript_clone(uint32_t orig) {
        LDKShutdownScript orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKShutdownScript ret_var = ShutdownScript_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25764,6 +30832,7 @@ void  __attribute__((visibility("default"))) TS_InvalidShutdownScript_free(uint3
        LDKInvalidShutdownScript this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        InvalidShutdownScript_free(this_obj_conv);
 }
 
@@ -25771,6 +30840,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_InvalidShutdownScript_get
        LDKInvalidShutdownScript this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKu8slice ret_var = InvalidShutdownScript_get_script(&this_ptr_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -25781,6 +30851,7 @@ void  __attribute__((visibility("default"))) TS_InvalidShutdownScript_set_script
        LDKInvalidShutdownScript this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_u8Z val_ref;
        val_ref.datalen = *((uint32_t*)val);
        val_ref.data = MALLOC(val_ref.datalen, "LDKCVec_u8Z Bytes");
@@ -25797,6 +30868,7 @@ uint32_t  __attribute__((visibility("default"))) TS_InvalidShutdownScript_new(in
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25804,14 +30876,37 @@ uint32_t  __attribute__((visibility("default"))) TS_InvalidShutdownScript_new(in
        return ret_ref;
 }
 
+static inline uint64_t InvalidShutdownScript_clone_ptr(LDKInvalidShutdownScript *NONNULL_PTR arg) {
+       LDKInvalidShutdownScript ret_var = InvalidShutdownScript_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_InvalidShutdownScript_clone_ptr(uint32_t arg) {
+       LDKInvalidShutdownScript arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = InvalidShutdownScript_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_InvalidShutdownScript_clone(uint32_t orig) {
        LDKInvalidShutdownScript orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKInvalidShutdownScript ret_var = InvalidShutdownScript_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25823,6 +30918,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ShutdownScript_write(uint
        LDKShutdownScript obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ShutdownScript_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -25848,6 +30944,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ShutdownScript_new_p2wpkh(in
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25864,6 +30961,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ShutdownScript_new_p2wsh(int
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25884,6 +30982,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ShutdownScript_into_inner
        LDKShutdownScript this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = (this_arg & 1) || (this_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv = ShutdownScript_clone(&this_arg_conv);
        LDKCVec_u8Z ret_var = ShutdownScript_into_inner(this_arg_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
@@ -25896,6 +30995,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ShutdownScript_as_legacy_
        LDKShutdownScript this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ShutdownScript_as_legacy_pubkey(&this_arg_conv).compressed_form, 33);
        return ret_arr;
@@ -25905,9 +31005,11 @@ jboolean  __attribute__((visibility("default"))) TS_ShutdownScript_is_compatible
        LDKShutdownScript this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKInitFeatures features_conv;
        features_conv.inner = (void*)(features & (~1));
        features_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_conv);
        jboolean ret_val = ShutdownScript_is_compatible(&this_arg_conv, &features_conv);
        return ret_val;
 }
@@ -25921,6 +31023,19 @@ void  __attribute__((visibility("default"))) TS_CustomMessageReader_free(uint32_
        CustomMessageReader_free(this_ptr_conv);
 }
 
+static inline uint64_t Type_clone_ptr(LDKType *NONNULL_PTR arg) {
+       LDKType* ret_ret = MALLOC(sizeof(LDKType), "LDKType");
+       *ret_ret = Type_clone(arg);
+       return (uint64_t)ret_ret;
+}
+int64_t  __attribute__((visibility("default"))) TS_Type_clone_ptr(uint32_t arg) {
+       void* arg_ptr = (void*)(((uint64_t)arg) & ~1);
+       if (!(arg & 1)) { CHECK_ACCESS(arg_ptr); }
+       LDKType* arg_conv = (LDKType*)arg_ptr;
+       int64_t ret_val = Type_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_Type_clone(uint32_t orig) {
        void* orig_ptr = (void*)(((uint64_t)orig) & ~1);
        if (!(orig & 1)) { CHECK_ACCESS(orig_ptr); }
@@ -25952,6 +31067,7 @@ void  __attribute__((visibility("default"))) TS_LockableScore_free(uint32_t this
        LDKLockableScore this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        LockableScore_free(this_obj_conv);
 }
 
@@ -25963,6 +31079,7 @@ uint32_t  __attribute__((visibility("default"))) TS_LockableScore_new(uint32_t s
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -25974,6 +31091,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_LockableScore_write(uint3
        LDKLockableScore obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = LockableScore_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -25985,17 +31103,41 @@ void  __attribute__((visibility("default"))) TS_NodeId_free(uint32_t this_obj) {
        LDKNodeId this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        NodeId_free(this_obj_conv);
 }
 
+static inline uint64_t NodeId_clone_ptr(LDKNodeId *NONNULL_PTR arg) {
+       LDKNodeId ret_var = NodeId_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_NodeId_clone_ptr(uint32_t arg) {
+       LDKNodeId arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = NodeId_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_NodeId_clone(uint32_t orig) {
        LDKNodeId orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKNodeId ret_var = NodeId_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -26011,6 +31153,7 @@ uint32_t  __attribute__((visibility("default"))) TS_NodeId_from_pubkey(int8_tArr
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -26022,6 +31165,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_NodeId_as_slice(uint32_t
        LDKNodeId this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKu8slice ret_var = NodeId_as_slice(&this_arg_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -26032,6 +31176,7 @@ int64_t  __attribute__((visibility("default"))) TS_NodeId_hash(uint32_t o) {
        LDKNodeId o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = NodeId_hash(&o_conv);
        return ret_val;
 }
@@ -26040,6 +31185,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_NodeId_write(uint32_t obj
        LDKNodeId obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = NodeId_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -26060,17 +31206,41 @@ void  __attribute__((visibility("default"))) TS_NetworkGraph_free(uint32_t this_
        LDKNetworkGraph this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        NetworkGraph_free(this_obj_conv);
 }
 
+static inline uint64_t NetworkGraph_clone_ptr(LDKNetworkGraph *NONNULL_PTR arg) {
+       LDKNetworkGraph ret_var = NetworkGraph_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_NetworkGraph_clone_ptr(uint32_t arg) {
+       LDKNetworkGraph arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = NetworkGraph_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_NetworkGraph_clone(uint32_t orig) {
        LDKNetworkGraph orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKNetworkGraph ret_var = NetworkGraph_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -26082,6 +31252,7 @@ void  __attribute__((visibility("default"))) TS_ReadOnlyNetworkGraph_free(uint32
        LDKReadOnlyNetworkGraph this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ReadOnlyNetworkGraph_free(this_obj_conv);
 }
 
@@ -26094,6 +31265,18 @@ void  __attribute__((visibility("default"))) TS_NetworkUpdate_free(uint32_t this
        NetworkUpdate_free(this_ptr_conv);
 }
 
+static inline uint64_t NetworkUpdate_clone_ptr(LDKNetworkUpdate *NONNULL_PTR arg) {
+       LDKNetworkUpdate *ret_copy = MALLOC(sizeof(LDKNetworkUpdate), "LDKNetworkUpdate");
+       *ret_copy = NetworkUpdate_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_NetworkUpdate_clone_ptr(uint32_t arg) {
+       LDKNetworkUpdate* arg_conv = (LDKNetworkUpdate*)arg;
+       int64_t ret_val = NetworkUpdate_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_NetworkUpdate_clone(uint32_t orig) {
        LDKNetworkUpdate* orig_conv = (LDKNetworkUpdate*)orig;
        LDKNetworkUpdate *ret_copy = MALLOC(sizeof(LDKNetworkUpdate), "LDKNetworkUpdate");
@@ -26106,6 +31289,7 @@ uint32_t  __attribute__((visibility("default"))) TS_NetworkUpdate_channel_update
        LDKChannelUpdate msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = (msg & 1) || (msg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        msg_conv = ChannelUpdate_clone(&msg_conv);
        LDKNetworkUpdate *ret_copy = MALLOC(sizeof(LDKNetworkUpdate), "LDKNetworkUpdate");
        *ret_copy = NetworkUpdate_channel_update_message(msg_conv);
@@ -26139,10 +31323,20 @@ int8_tArray  __attribute__((visibility("default"))) TS_NetworkUpdate_write(uint3
        return ret_arr;
 }
 
+uint32_t  __attribute__((visibility("default"))) TS_NetworkUpdate_read(int8_tArray ser) {
+       LDKu8slice ser_ref;
+       ser_ref.datalen = *((uint32_t*)ser);
+       ser_ref.data = (int8_t*)(ser + 4);
+       LDKCResult_COption_NetworkUpdateZDecodeErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_COption_NetworkUpdateZDecodeErrorZ), "LDKCResult_COption_NetworkUpdateZDecodeErrorZ");
+       *ret_conv = NetworkUpdate_read(ser_ref);
+       return (uint64_t)ret_conv;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_NetGraphMsgHandler_as_EventHandler(uint32_t this_arg) {
        LDKNetGraphMsgHandler this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKEventHandler* ret_ret = MALLOC(sizeof(LDKEventHandler), "LDKEventHandler");
        *ret_ret = NetGraphMsgHandler_as_EventHandler(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -26152,6 +31346,7 @@ void  __attribute__((visibility("default"))) TS_NetGraphMsgHandler_free(uint32_t
        LDKNetGraphMsgHandler this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        NetGraphMsgHandler_free(this_obj_conv);
 }
 
@@ -26159,6 +31354,7 @@ uint32_t  __attribute__((visibility("default"))) TS_NetGraphMsgHandler_new(uint3
        LDKNetworkGraph network_graph_conv;
        network_graph_conv.inner = (void*)(network_graph & (~1));
        network_graph_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
        void* chain_access_ptr = (void*)(((uint64_t)chain_access) & ~1);
        CHECK_ACCESS(chain_access_ptr);
        LDKCOption_AccessZ chain_access_conv = *(LDKCOption_AccessZ*)(chain_access_ptr);
@@ -26173,6 +31369,7 @@ uint32_t  __attribute__((visibility("default"))) TS_NetGraphMsgHandler_new(uint3
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -26184,6 +31381,7 @@ void  __attribute__((visibility("default"))) TS_NetGraphMsgHandler_add_chain_acc
        LDKNetGraphMsgHandler this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        void* chain_access_ptr = (void*)(((uint64_t)chain_access) & ~1);
        CHECK_ACCESS(chain_access_ptr);
        LDKCOption_AccessZ chain_access_conv = *(LDKCOption_AccessZ*)(chain_access_ptr);
@@ -26198,6 +31396,7 @@ uint32_t  __attribute__((visibility("default"))) TS_NetGraphMsgHandler_as_Routin
        LDKNetGraphMsgHandler this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKRoutingMessageHandler* ret_ret = MALLOC(sizeof(LDKRoutingMessageHandler), "LDKRoutingMessageHandler");
        *ret_ret = NetGraphMsgHandler_as_RoutingMessageHandler(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -26207,6 +31406,7 @@ uint32_t  __attribute__((visibility("default"))) TS_NetGraphMsgHandler_as_Messag
        LDKNetGraphMsgHandler this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKMessageSendEventsProvider* ret_ret = MALLOC(sizeof(LDKMessageSendEventsProvider), "LDKMessageSendEventsProvider");
        *ret_ret = NetGraphMsgHandler_as_MessageSendEventsProvider(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -26216,6 +31416,7 @@ void  __attribute__((visibility("default"))) TS_DirectionalChannelInfo_free(uint
        LDKDirectionalChannelInfo this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        DirectionalChannelInfo_free(this_obj_conv);
 }
 
@@ -26223,6 +31424,7 @@ int32_t  __attribute__((visibility("default"))) TS_DirectionalChannelInfo_get_la
        LDKDirectionalChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = DirectionalChannelInfo_get_last_update(&this_ptr_conv);
        return ret_val;
 }
@@ -26231,6 +31433,7 @@ void  __attribute__((visibility("default"))) TS_DirectionalChannelInfo_set_last_
        LDKDirectionalChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        DirectionalChannelInfo_set_last_update(&this_ptr_conv, val);
 }
 
@@ -26238,6 +31441,7 @@ jboolean  __attribute__((visibility("default"))) TS_DirectionalChannelInfo_get_e
        LDKDirectionalChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        jboolean ret_val = DirectionalChannelInfo_get_enabled(&this_ptr_conv);
        return ret_val;
 }
@@ -26246,6 +31450,7 @@ void  __attribute__((visibility("default"))) TS_DirectionalChannelInfo_set_enabl
        LDKDirectionalChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        DirectionalChannelInfo_set_enabled(&this_ptr_conv, val);
 }
 
@@ -26253,6 +31458,7 @@ int16_t  __attribute__((visibility("default"))) TS_DirectionalChannelInfo_get_cl
        LDKDirectionalChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = DirectionalChannelInfo_get_cltv_expiry_delta(&this_ptr_conv);
        return ret_val;
 }
@@ -26261,6 +31467,7 @@ void  __attribute__((visibility("default"))) TS_DirectionalChannelInfo_set_cltv_
        LDKDirectionalChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        DirectionalChannelInfo_set_cltv_expiry_delta(&this_ptr_conv, val);
 }
 
@@ -26268,6 +31475,7 @@ int64_t  __attribute__((visibility("default"))) TS_DirectionalChannelInfo_get_ht
        LDKDirectionalChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = DirectionalChannelInfo_get_htlc_minimum_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -26276,6 +31484,7 @@ void  __attribute__((visibility("default"))) TS_DirectionalChannelInfo_set_htlc_
        LDKDirectionalChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        DirectionalChannelInfo_set_htlc_minimum_msat(&this_ptr_conv, val);
 }
 
@@ -26283,6 +31492,7 @@ uint32_t  __attribute__((visibility("default"))) TS_DirectionalChannelInfo_get_h
        LDKDirectionalChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
        *ret_copy = DirectionalChannelInfo_get_htlc_maximum_msat(&this_ptr_conv);
        uint64_t ret_ref = (uint64_t)ret_copy;
@@ -26293,6 +31503,7 @@ void  __attribute__((visibility("default"))) TS_DirectionalChannelInfo_set_htlc_
        LDKDirectionalChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
@@ -26304,10 +31515,12 @@ uint32_t  __attribute__((visibility("default"))) TS_DirectionalChannelInfo_get_f
        LDKDirectionalChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKRoutingFees ret_var = DirectionalChannelInfo_get_fees(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -26319,9 +31532,11 @@ void  __attribute__((visibility("default"))) TS_DirectionalChannelInfo_set_fees(
        LDKDirectionalChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKRoutingFees val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = RoutingFees_clone(&val_conv);
        DirectionalChannelInfo_set_fees(&this_ptr_conv, val_conv);
 }
@@ -26330,11 +31545,13 @@ uint32_t  __attribute__((visibility("default"))) TS_DirectionalChannelInfo_get_l
        LDKDirectionalChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelUpdate ret_var = DirectionalChannelInfo_get_last_update_message(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -26347,9 +31564,11 @@ void  __attribute__((visibility("default"))) TS_DirectionalChannelInfo_set_last_
        LDKDirectionalChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelUpdate val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = ChannelUpdate_clone(&val_conv);
        DirectionalChannelInfo_set_last_update_message(&this_ptr_conv, val_conv);
 }
@@ -26362,15 +31581,18 @@ uint32_t  __attribute__((visibility("default"))) TS_DirectionalChannelInfo_new(i
        LDKRoutingFees fees_arg_conv;
        fees_arg_conv.inner = (void*)(fees_arg & (~1));
        fees_arg_conv.is_owned = (fees_arg & 1) || (fees_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(fees_arg_conv);
        fees_arg_conv = RoutingFees_clone(&fees_arg_conv);
        LDKChannelUpdate last_update_message_arg_conv;
        last_update_message_arg_conv.inner = (void*)(last_update_message_arg & (~1));
        last_update_message_arg_conv.is_owned = (last_update_message_arg & 1) || (last_update_message_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(last_update_message_arg_conv);
        last_update_message_arg_conv = ChannelUpdate_clone(&last_update_message_arg_conv);
        LDKDirectionalChannelInfo ret_var = DirectionalChannelInfo_new(last_update_arg, enabled_arg, cltv_expiry_delta_arg, htlc_minimum_msat_arg, htlc_maximum_msat_arg_conv, fees_arg_conv, last_update_message_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -26378,14 +31600,37 @@ uint32_t  __attribute__((visibility("default"))) TS_DirectionalChannelInfo_new(i
        return ret_ref;
 }
 
+static inline uint64_t DirectionalChannelInfo_clone_ptr(LDKDirectionalChannelInfo *NONNULL_PTR arg) {
+       LDKDirectionalChannelInfo ret_var = DirectionalChannelInfo_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_DirectionalChannelInfo_clone_ptr(uint32_t arg) {
+       LDKDirectionalChannelInfo arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = DirectionalChannelInfo_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_DirectionalChannelInfo_clone(uint32_t orig) {
        LDKDirectionalChannelInfo orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKDirectionalChannelInfo ret_var = DirectionalChannelInfo_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -26397,6 +31642,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_DirectionalChannelInfo_wr
        LDKDirectionalChannelInfo obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = DirectionalChannelInfo_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -26417,6 +31663,7 @@ void  __attribute__((visibility("default"))) TS_ChannelInfo_free(uint32_t this_o
        LDKChannelInfo this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ChannelInfo_free(this_obj_conv);
 }
 
@@ -26424,10 +31671,12 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelInfo_get_features(uin
        LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelFeatures ret_var = ChannelInfo_get_features(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -26439,9 +31688,11 @@ void  __attribute__((visibility("default"))) TS_ChannelInfo_set_features(uint32_
        LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelFeatures val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = ChannelFeatures_clone(&val_conv);
        ChannelInfo_set_features(&this_ptr_conv, val_conv);
 }
@@ -26450,10 +31701,12 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelInfo_get_node_one(uin
        LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNodeId ret_var = ChannelInfo_get_node_one(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -26465,9 +31718,11 @@ void  __attribute__((visibility("default"))) TS_ChannelInfo_set_node_one(uint32_
        LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNodeId val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = NodeId_clone(&val_conv);
        ChannelInfo_set_node_one(&this_ptr_conv, val_conv);
 }
@@ -26476,11 +31731,13 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelInfo_get_one_to_two(u
        LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKDirectionalChannelInfo ret_var = ChannelInfo_get_one_to_two(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -26493,9 +31750,11 @@ void  __attribute__((visibility("default"))) TS_ChannelInfo_set_one_to_two(uint3
        LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKDirectionalChannelInfo val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = DirectionalChannelInfo_clone(&val_conv);
        ChannelInfo_set_one_to_two(&this_ptr_conv, val_conv);
 }
@@ -26504,10 +31763,12 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelInfo_get_node_two(uin
        LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNodeId ret_var = ChannelInfo_get_node_two(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -26519,9 +31780,11 @@ void  __attribute__((visibility("default"))) TS_ChannelInfo_set_node_two(uint32_
        LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNodeId val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = NodeId_clone(&val_conv);
        ChannelInfo_set_node_two(&this_ptr_conv, val_conv);
 }
@@ -26530,11 +31793,13 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelInfo_get_two_to_one(u
        LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKDirectionalChannelInfo ret_var = ChannelInfo_get_two_to_one(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -26547,9 +31812,11 @@ void  __attribute__((visibility("default"))) TS_ChannelInfo_set_two_to_one(uint3
        LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKDirectionalChannelInfo val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = DirectionalChannelInfo_clone(&val_conv);
        ChannelInfo_set_two_to_one(&this_ptr_conv, val_conv);
 }
@@ -26558,6 +31825,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelInfo_get_capacity_sat
        LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
        *ret_copy = ChannelInfo_get_capacity_sats(&this_ptr_conv);
        uint64_t ret_ref = (uint64_t)ret_copy;
@@ -26568,6 +31836,7 @@ void  __attribute__((visibility("default"))) TS_ChannelInfo_set_capacity_sats(ui
        LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
@@ -26579,11 +31848,13 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelInfo_get_announcement
        LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelAnnouncement ret_var = ChannelInfo_get_announcement_message(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -26596,9 +31867,11 @@ void  __attribute__((visibility("default"))) TS_ChannelInfo_set_announcement_mes
        LDKChannelInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelAnnouncement val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = ChannelAnnouncement_clone(&val_conv);
        ChannelInfo_set_announcement_message(&this_ptr_conv, val_conv);
 }
@@ -26607,22 +31880,27 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelInfo_new(uint32_t fea
        LDKChannelFeatures features_arg_conv;
        features_arg_conv.inner = (void*)(features_arg & (~1));
        features_arg_conv.is_owned = (features_arg & 1) || (features_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_arg_conv);
        features_arg_conv = ChannelFeatures_clone(&features_arg_conv);
        LDKNodeId node_one_arg_conv;
        node_one_arg_conv.inner = (void*)(node_one_arg & (~1));
        node_one_arg_conv.is_owned = (node_one_arg & 1) || (node_one_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_one_arg_conv);
        node_one_arg_conv = NodeId_clone(&node_one_arg_conv);
        LDKDirectionalChannelInfo one_to_two_arg_conv;
        one_to_two_arg_conv.inner = (void*)(one_to_two_arg & (~1));
        one_to_two_arg_conv.is_owned = (one_to_two_arg & 1) || (one_to_two_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(one_to_two_arg_conv);
        one_to_two_arg_conv = DirectionalChannelInfo_clone(&one_to_two_arg_conv);
        LDKNodeId node_two_arg_conv;
        node_two_arg_conv.inner = (void*)(node_two_arg & (~1));
        node_two_arg_conv.is_owned = (node_two_arg & 1) || (node_two_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_two_arg_conv);
        node_two_arg_conv = NodeId_clone(&node_two_arg_conv);
        LDKDirectionalChannelInfo two_to_one_arg_conv;
        two_to_one_arg_conv.inner = (void*)(two_to_one_arg & (~1));
        two_to_one_arg_conv.is_owned = (two_to_one_arg & 1) || (two_to_one_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(two_to_one_arg_conv);
        two_to_one_arg_conv = DirectionalChannelInfo_clone(&two_to_one_arg_conv);
        void* capacity_sats_arg_ptr = (void*)(((uint64_t)capacity_sats_arg) & ~1);
        CHECK_ACCESS(capacity_sats_arg_ptr);
@@ -26631,11 +31909,13 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelInfo_new(uint32_t fea
        LDKChannelAnnouncement announcement_message_arg_conv;
        announcement_message_arg_conv.inner = (void*)(announcement_message_arg & (~1));
        announcement_message_arg_conv.is_owned = (announcement_message_arg & 1) || (announcement_message_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(announcement_message_arg_conv);
        announcement_message_arg_conv = ChannelAnnouncement_clone(&announcement_message_arg_conv);
        LDKChannelInfo ret_var = ChannelInfo_new(features_arg_conv, node_one_arg_conv, one_to_two_arg_conv, node_two_arg_conv, two_to_one_arg_conv, capacity_sats_arg_conv, announcement_message_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -26643,14 +31923,37 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelInfo_new(uint32_t fea
        return ret_ref;
 }
 
+static inline uint64_t ChannelInfo_clone_ptr(LDKChannelInfo *NONNULL_PTR arg) {
+       LDKChannelInfo ret_var = ChannelInfo_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_ChannelInfo_clone_ptr(uint32_t arg) {
+       LDKChannelInfo arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ChannelInfo_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_ChannelInfo_clone(uint32_t orig) {
        LDKChannelInfo orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKChannelInfo ret_var = ChannelInfo_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -26662,6 +31965,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ChannelInfo_write(uint32_
        LDKChannelInfo obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ChannelInfo_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -26682,6 +31986,7 @@ void  __attribute__((visibility("default"))) TS_RoutingFees_free(uint32_t this_o
        LDKRoutingFees this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        RoutingFees_free(this_obj_conv);
 }
 
@@ -26689,6 +31994,7 @@ int32_t  __attribute__((visibility("default"))) TS_RoutingFees_get_base_msat(uin
        LDKRoutingFees this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = RoutingFees_get_base_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -26697,6 +32003,7 @@ void  __attribute__((visibility("default"))) TS_RoutingFees_set_base_msat(uint32
        LDKRoutingFees this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        RoutingFees_set_base_msat(&this_ptr_conv, val);
 }
 
@@ -26704,6 +32011,7 @@ int32_t  __attribute__((visibility("default"))) TS_RoutingFees_get_proportional_
        LDKRoutingFees this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = RoutingFees_get_proportional_millionths(&this_ptr_conv);
        return ret_val;
 }
@@ -26712,6 +32020,7 @@ void  __attribute__((visibility("default"))) TS_RoutingFees_set_proportional_mil
        LDKRoutingFees this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        RoutingFees_set_proportional_millionths(&this_ptr_conv, val);
 }
 
@@ -26720,6 +32029,7 @@ uint32_t  __attribute__((visibility("default"))) TS_RoutingFees_new(int32_t base
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -26731,21 +32041,46 @@ jboolean  __attribute__((visibility("default"))) TS_RoutingFees_eq(uint32_t a, u
        LDKRoutingFees a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKRoutingFees b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = RoutingFees_eq(&a_conv, &b_conv);
        return ret_val;
 }
 
+static inline uint64_t RoutingFees_clone_ptr(LDKRoutingFees *NONNULL_PTR arg) {
+       LDKRoutingFees ret_var = RoutingFees_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_RoutingFees_clone_ptr(uint32_t arg) {
+       LDKRoutingFees arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = RoutingFees_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_RoutingFees_clone(uint32_t orig) {
        LDKRoutingFees orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKRoutingFees ret_var = RoutingFees_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -26757,6 +32092,7 @@ int64_t  __attribute__((visibility("default"))) TS_RoutingFees_hash(uint32_t o)
        LDKRoutingFees o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = RoutingFees_hash(&o_conv);
        return ret_val;
 }
@@ -26765,6 +32101,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_RoutingFees_write(uint32_
        LDKRoutingFees obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = RoutingFees_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -26785,6 +32122,7 @@ void  __attribute__((visibility("default"))) TS_NodeAnnouncementInfo_free(uint32
        LDKNodeAnnouncementInfo this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        NodeAnnouncementInfo_free(this_obj_conv);
 }
 
@@ -26792,10 +32130,12 @@ uint32_t  __attribute__((visibility("default"))) TS_NodeAnnouncementInfo_get_fea
        LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNodeFeatures ret_var = NodeAnnouncementInfo_get_features(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -26807,9 +32147,11 @@ void  __attribute__((visibility("default"))) TS_NodeAnnouncementInfo_set_feature
        LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNodeFeatures val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = NodeFeatures_clone(&val_conv);
        NodeAnnouncementInfo_set_features(&this_ptr_conv, val_conv);
 }
@@ -26818,6 +32160,7 @@ int32_t  __attribute__((visibility("default"))) TS_NodeAnnouncementInfo_get_last
        LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = NodeAnnouncementInfo_get_last_update(&this_ptr_conv);
        return ret_val;
 }
@@ -26826,6 +32169,7 @@ void  __attribute__((visibility("default"))) TS_NodeAnnouncementInfo_set_last_up
        LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        NodeAnnouncementInfo_set_last_update(&this_ptr_conv, val);
 }
 
@@ -26833,6 +32177,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_NodeAnnouncementInfo_get_
        LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(3, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *NodeAnnouncementInfo_get_rgb(&this_ptr_conv), 3);
        return ret_arr;
@@ -26842,6 +32187,7 @@ void  __attribute__((visibility("default"))) TS_NodeAnnouncementInfo_set_rgb(uin
        LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThreeBytes val_ref;
        CHECK(*((uint32_t*)val) == 3);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 3);
@@ -26852,6 +32198,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_NodeAnnouncementInfo_get_
        LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *NodeAnnouncementInfo_get_alias(&this_ptr_conv), 32);
        return ret_arr;
@@ -26861,6 +32208,7 @@ void  __attribute__((visibility("default"))) TS_NodeAnnouncementInfo_set_alias(u
        LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKThirtyTwoBytes val_ref;
        CHECK(*((uint32_t*)val) == 32);
        memcpy(val_ref.data, (uint8_t*)(val + 4), 32);
@@ -26871,6 +32219,7 @@ void  __attribute__((visibility("default"))) TS_NodeAnnouncementInfo_set_address
        LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_NetAddressZ val_constr;
        val_constr.datalen = *((uint32_t*)val);
        if (val_constr.datalen > 0)
@@ -26893,11 +32242,13 @@ uint32_t  __attribute__((visibility("default"))) TS_NodeAnnouncementInfo_get_ann
        LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNodeAnnouncement ret_var = NodeAnnouncementInfo_get_announcement_message(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -26910,9 +32261,11 @@ void  __attribute__((visibility("default"))) TS_NodeAnnouncementInfo_set_announc
        LDKNodeAnnouncementInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNodeAnnouncement val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = NodeAnnouncement_clone(&val_conv);
        NodeAnnouncementInfo_set_announcement_message(&this_ptr_conv, val_conv);
 }
@@ -26921,6 +32274,7 @@ uint32_t  __attribute__((visibility("default"))) TS_NodeAnnouncementInfo_new(uin
        LDKNodeFeatures features_arg_conv;
        features_arg_conv.inner = (void*)(features_arg & (~1));
        features_arg_conv.is_owned = (features_arg & 1) || (features_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_arg_conv);
        features_arg_conv = NodeFeatures_clone(&features_arg_conv);
        LDKThreeBytes rgb_arg_ref;
        CHECK(*((uint32_t*)rgb_arg) == 3);
@@ -26945,11 +32299,13 @@ uint32_t  __attribute__((visibility("default"))) TS_NodeAnnouncementInfo_new(uin
        LDKNodeAnnouncement announcement_message_arg_conv;
        announcement_message_arg_conv.inner = (void*)(announcement_message_arg & (~1));
        announcement_message_arg_conv.is_owned = (announcement_message_arg & 1) || (announcement_message_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(announcement_message_arg_conv);
        announcement_message_arg_conv = NodeAnnouncement_clone(&announcement_message_arg_conv);
        LDKNodeAnnouncementInfo ret_var = NodeAnnouncementInfo_new(features_arg_conv, last_update_arg, rgb_arg_ref, alias_arg_ref, addresses_arg_constr, announcement_message_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -26957,14 +32313,37 @@ uint32_t  __attribute__((visibility("default"))) TS_NodeAnnouncementInfo_new(uin
        return ret_ref;
 }
 
+static inline uint64_t NodeAnnouncementInfo_clone_ptr(LDKNodeAnnouncementInfo *NONNULL_PTR arg) {
+       LDKNodeAnnouncementInfo ret_var = NodeAnnouncementInfo_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_NodeAnnouncementInfo_clone_ptr(uint32_t arg) {
+       LDKNodeAnnouncementInfo arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = NodeAnnouncementInfo_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_NodeAnnouncementInfo_clone(uint32_t orig) {
        LDKNodeAnnouncementInfo orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKNodeAnnouncementInfo ret_var = NodeAnnouncementInfo_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -26976,6 +32355,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_NodeAnnouncementInfo_writ
        LDKNodeAnnouncementInfo obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = NodeAnnouncementInfo_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -26996,6 +32376,7 @@ void  __attribute__((visibility("default"))) TS_NodeInfo_free(uint32_t this_obj)
        LDKNodeInfo this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        NodeInfo_free(this_obj_conv);
 }
 
@@ -27003,6 +32384,7 @@ void  __attribute__((visibility("default"))) TS_NodeInfo_set_channels(uint32_t t
        LDKNodeInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_u64Z val_constr;
        val_constr.datalen = *((uint32_t*)val);
        if (val_constr.datalen > 0)
@@ -27021,11 +32403,13 @@ uint32_t  __attribute__((visibility("default"))) TS_NodeInfo_get_lowest_inbound_
        LDKNodeInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKRoutingFees ret_var = NodeInfo_get_lowest_inbound_channel_fees(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -27038,9 +32422,11 @@ void  __attribute__((visibility("default"))) TS_NodeInfo_set_lowest_inbound_chan
        LDKNodeInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKRoutingFees val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = RoutingFees_clone(&val_conv);
        NodeInfo_set_lowest_inbound_channel_fees(&this_ptr_conv, val_conv);
 }
@@ -27049,11 +32435,13 @@ uint32_t  __attribute__((visibility("default"))) TS_NodeInfo_get_announcement_in
        LDKNodeInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNodeAnnouncementInfo ret_var = NodeInfo_get_announcement_info(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -27066,9 +32454,11 @@ void  __attribute__((visibility("default"))) TS_NodeInfo_set_announcement_info(u
        LDKNodeInfo this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNodeAnnouncementInfo val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = NodeAnnouncementInfo_clone(&val_conv);
        NodeInfo_set_announcement_info(&this_ptr_conv, val_conv);
 }
@@ -27088,15 +32478,18 @@ uint32_t  __attribute__((visibility("default"))) TS_NodeInfo_new(int64_tArray ch
        LDKRoutingFees lowest_inbound_channel_fees_arg_conv;
        lowest_inbound_channel_fees_arg_conv.inner = (void*)(lowest_inbound_channel_fees_arg & (~1));
        lowest_inbound_channel_fees_arg_conv.is_owned = (lowest_inbound_channel_fees_arg & 1) || (lowest_inbound_channel_fees_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(lowest_inbound_channel_fees_arg_conv);
        lowest_inbound_channel_fees_arg_conv = RoutingFees_clone(&lowest_inbound_channel_fees_arg_conv);
        LDKNodeAnnouncementInfo announcement_info_arg_conv;
        announcement_info_arg_conv.inner = (void*)(announcement_info_arg & (~1));
        announcement_info_arg_conv.is_owned = (announcement_info_arg & 1) || (announcement_info_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(announcement_info_arg_conv);
        announcement_info_arg_conv = NodeAnnouncementInfo_clone(&announcement_info_arg_conv);
        LDKNodeInfo ret_var = NodeInfo_new(channels_arg_constr, lowest_inbound_channel_fees_arg_conv, announcement_info_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -27104,14 +32497,37 @@ uint32_t  __attribute__((visibility("default"))) TS_NodeInfo_new(int64_tArray ch
        return ret_ref;
 }
 
+static inline uint64_t NodeInfo_clone_ptr(LDKNodeInfo *NONNULL_PTR arg) {
+       LDKNodeInfo ret_var = NodeInfo_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_NodeInfo_clone_ptr(uint32_t arg) {
+       LDKNodeInfo arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = NodeInfo_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_NodeInfo_clone(uint32_t orig) {
        LDKNodeInfo orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKNodeInfo ret_var = NodeInfo_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -27123,6 +32539,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_NodeInfo_write(uint32_t o
        LDKNodeInfo obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = NodeInfo_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -27143,6 +32560,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_NetworkGraph_write(uint32
        LDKNetworkGraph obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = NetworkGraph_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -27167,6 +32585,7 @@ uint32_t  __attribute__((visibility("default"))) TS_NetworkGraph_new(int8_tArray
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -27178,10 +32597,12 @@ uint32_t  __attribute__((visibility("default"))) TS_NetworkGraph_read_only(uint3
        LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKReadOnlyNetworkGraph ret_var = NetworkGraph_read_only(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -27193,9 +32614,11 @@ uint32_t  __attribute__((visibility("default"))) TS_NetworkGraph_update_node_fro
        LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKNodeAnnouncement msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
        *ret_conv = NetworkGraph_update_node_from_announcement(&this_arg_conv, &msg_conv);
        return (uint64_t)ret_conv;
@@ -27205,9 +32628,11 @@ uint32_t  __attribute__((visibility("default"))) TS_NetworkGraph_update_node_fro
        LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKUnsignedNodeAnnouncement msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
        *ret_conv = NetworkGraph_update_node_from_unsigned_announcement(&this_arg_conv, &msg_conv);
        return (uint64_t)ret_conv;
@@ -27217,9 +32642,11 @@ uint32_t  __attribute__((visibility("default"))) TS_NetworkGraph_update_channel_
        LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKChannelAnnouncement msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        void* chain_access_ptr = (void*)(((uint64_t)chain_access) & ~1);
        CHECK_ACCESS(chain_access_ptr);
        LDKCOption_AccessZ chain_access_conv = *(LDKCOption_AccessZ*)(chain_access_ptr);
@@ -27236,9 +32663,11 @@ uint32_t  __attribute__((visibility("default"))) TS_NetworkGraph_update_channel_
        LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKUnsignedChannelAnnouncement msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        void* chain_access_ptr = (void*)(((uint64_t)chain_access) & ~1);
        CHECK_ACCESS(chain_access_ptr);
        LDKCOption_AccessZ chain_access_conv = *(LDKCOption_AccessZ*)(chain_access_ptr);
@@ -27255,6 +32684,7 @@ void  __attribute__((visibility("default"))) TS_NetworkGraph_close_channel_from_
        LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        NetworkGraph_close_channel_from_update(&this_arg_conv, short_channel_id, is_permanent);
 }
 
@@ -27262,6 +32692,7 @@ void  __attribute__((visibility("default"))) TS_NetworkGraph_fail_node(uint32_t
        LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKPublicKey _node_id_ref;
        CHECK(*((uint32_t*)_node_id) == 33);
        memcpy(_node_id_ref.compressed_form, (uint8_t*)(_node_id + 4), 33);
@@ -27272,9 +32703,11 @@ uint32_t  __attribute__((visibility("default"))) TS_NetworkGraph_update_channel(
        LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKChannelUpdate msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
        *ret_conv = NetworkGraph_update_channel(&this_arg_conv, &msg_conv);
        return (uint64_t)ret_conv;
@@ -27284,9 +32717,11 @@ uint32_t  __attribute__((visibility("default"))) TS_NetworkGraph_update_channel_
        LDKNetworkGraph this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKUnsignedChannelUpdate msg_conv;
        msg_conv.inner = (void*)(msg & (~1));
        msg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(msg_conv);
        LDKCResult_NoneLightningErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneLightningErrorZ), "LDKCResult_NoneLightningErrorZ");
        *ret_conv = NetworkGraph_update_channel_unsigned(&this_arg_conv, &msg_conv);
        return (uint64_t)ret_conv;
@@ -27296,6 +32731,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ReadOnlyNetworkGraph_get_add
        LDKReadOnlyNetworkGraph this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKPublicKey pubkey_ref;
        CHECK(*((uint32_t*)pubkey) == 33);
        memcpy(pubkey_ref.compressed_form, (uint8_t*)(pubkey + 4), 33);
@@ -27309,6 +32745,7 @@ void  __attribute__((visibility("default"))) TS_RouteHop_free(uint32_t this_obj)
        LDKRouteHop this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        RouteHop_free(this_obj_conv);
 }
 
@@ -27316,6 +32753,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_RouteHop_get_pubkey(uint3
        LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), RouteHop_get_pubkey(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -27325,6 +32763,7 @@ void  __attribute__((visibility("default"))) TS_RouteHop_set_pubkey(uint32_t thi
        LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -27335,10 +32774,12 @@ uint32_t  __attribute__((visibility("default"))) TS_RouteHop_get_node_features(u
        LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNodeFeatures ret_var = RouteHop_get_node_features(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -27350,9 +32791,11 @@ void  __attribute__((visibility("default"))) TS_RouteHop_set_node_features(uint3
        LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKNodeFeatures val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = NodeFeatures_clone(&val_conv);
        RouteHop_set_node_features(&this_ptr_conv, val_conv);
 }
@@ -27361,6 +32804,7 @@ int64_t  __attribute__((visibility("default"))) TS_RouteHop_get_short_channel_id
        LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = RouteHop_get_short_channel_id(&this_ptr_conv);
        return ret_val;
 }
@@ -27369,6 +32813,7 @@ void  __attribute__((visibility("default"))) TS_RouteHop_set_short_channel_id(ui
        LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        RouteHop_set_short_channel_id(&this_ptr_conv, val);
 }
 
@@ -27376,10 +32821,12 @@ uint32_t  __attribute__((visibility("default"))) TS_RouteHop_get_channel_feature
        LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelFeatures ret_var = RouteHop_get_channel_features(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -27391,9 +32838,11 @@ void  __attribute__((visibility("default"))) TS_RouteHop_set_channel_features(ui
        LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKChannelFeatures val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = ChannelFeatures_clone(&val_conv);
        RouteHop_set_channel_features(&this_ptr_conv, val_conv);
 }
@@ -27402,6 +32851,7 @@ int64_t  __attribute__((visibility("default"))) TS_RouteHop_get_fee_msat(uint32_
        LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = RouteHop_get_fee_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -27410,6 +32860,7 @@ void  __attribute__((visibility("default"))) TS_RouteHop_set_fee_msat(uint32_t t
        LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        RouteHop_set_fee_msat(&this_ptr_conv, val);
 }
 
@@ -27417,6 +32868,7 @@ int32_t  __attribute__((visibility("default"))) TS_RouteHop_get_cltv_expiry_delt
        LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = RouteHop_get_cltv_expiry_delta(&this_ptr_conv);
        return ret_val;
 }
@@ -27425,6 +32877,7 @@ void  __attribute__((visibility("default"))) TS_RouteHop_set_cltv_expiry_delta(u
        LDKRouteHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        RouteHop_set_cltv_expiry_delta(&this_ptr_conv, val);
 }
 
@@ -27435,15 +32888,18 @@ uint32_t  __attribute__((visibility("default"))) TS_RouteHop_new(int8_tArray pub
        LDKNodeFeatures node_features_arg_conv;
        node_features_arg_conv.inner = (void*)(node_features_arg & (~1));
        node_features_arg_conv.is_owned = (node_features_arg & 1) || (node_features_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(node_features_arg_conv);
        node_features_arg_conv = NodeFeatures_clone(&node_features_arg_conv);
        LDKChannelFeatures channel_features_arg_conv;
        channel_features_arg_conv.inner = (void*)(channel_features_arg & (~1));
        channel_features_arg_conv.is_owned = (channel_features_arg & 1) || (channel_features_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_features_arg_conv);
        channel_features_arg_conv = ChannelFeatures_clone(&channel_features_arg_conv);
        LDKRouteHop ret_var = RouteHop_new(pubkey_arg_ref, node_features_arg_conv, short_channel_id_arg, channel_features_arg_conv, fee_msat_arg, cltv_expiry_delta_arg);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -27451,14 +32907,37 @@ uint32_t  __attribute__((visibility("default"))) TS_RouteHop_new(int8_tArray pub
        return ret_ref;
 }
 
+static inline uint64_t RouteHop_clone_ptr(LDKRouteHop *NONNULL_PTR arg) {
+       LDKRouteHop ret_var = RouteHop_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_RouteHop_clone_ptr(uint32_t arg) {
+       LDKRouteHop arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = RouteHop_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_RouteHop_clone(uint32_t orig) {
        LDKRouteHop orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKRouteHop ret_var = RouteHop_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -27470,6 +32949,7 @@ int64_t  __attribute__((visibility("default"))) TS_RouteHop_hash(uint32_t o) {
        LDKRouteHop o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = RouteHop_hash(&o_conv);
        return ret_val;
 }
@@ -27478,9 +32958,11 @@ jboolean  __attribute__((visibility("default"))) TS_RouteHop_eq(uint32_t a, uint
        LDKRouteHop a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKRouteHop b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = RouteHop_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -27489,6 +32971,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_RouteHop_write(uint32_t o
        LDKRouteHop obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = RouteHop_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -27509,6 +32992,7 @@ void  __attribute__((visibility("default"))) TS_Route_free(uint32_t this_obj) {
        LDKRoute this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        Route_free(this_obj_conv);
 }
 
@@ -27516,6 +33000,7 @@ ptrArray  __attribute__((visibility("default"))) TS_Route_get_paths(uint32_t thi
        LDKRoute this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_CVec_RouteHopZZ ret_var = Route_get_paths(&this_ptr_conv);
        ptrArray ret_arr = NULL;
        ret_arr = init_arr(ret_var.datalen, sizeof(uint32_t), "Native ptrArray Bytes");
@@ -27530,6 +33015,7 @@ ptrArray  __attribute__((visibility("default"))) TS_Route_get_paths(uint32_t thi
                        uint64_t ret_conv_12_conv_10_ref = 0;
                        CHECK((((uint64_t)ret_conv_12_conv_10_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                        CHECK((((uint64_t)&ret_conv_12_conv_10_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_12_conv_10_var);
                        ret_conv_12_conv_10_ref = (uint64_t)ret_conv_12_conv_10_var.inner;
                        if (ret_conv_12_conv_10_var.is_owned) {
                                ret_conv_12_conv_10_ref |= 1;
@@ -27549,6 +33035,7 @@ void  __attribute__((visibility("default"))) TS_Route_set_paths(uint32_t this_pt
        LDKRoute this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_CVec_RouteHopZZ val_constr;
        val_constr.datalen = *((uint32_t*)val);
        if (val_constr.datalen > 0)
@@ -27570,6 +33057,7 @@ void  __attribute__((visibility("default"))) TS_Route_set_paths(uint32_t this_pt
                        LDKRouteHop val_conv_12_conv_10_conv;
                        val_conv_12_conv_10_conv.inner = (void*)(val_conv_12_conv_10 & (~1));
                        val_conv_12_conv_10_conv.is_owned = (val_conv_12_conv_10 & 1) || (val_conv_12_conv_10 == 0);
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_12_conv_10_conv);
                        val_conv_12_conv_10_conv = RouteHop_clone(&val_conv_12_conv_10_conv);
                        val_conv_12_constr.data[k] = val_conv_12_conv_10_conv;
                }
@@ -27582,11 +33070,13 @@ uint32_t  __attribute__((visibility("default"))) TS_Route_get_payee(uint32_t thi
        LDKRoute this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPayee ret_var = Route_get_payee(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -27599,9 +33089,11 @@ void  __attribute__((visibility("default"))) TS_Route_set_payee(uint32_t this_pt
        LDKRoute this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPayee val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = Payee_clone(&val_conv);
        Route_set_payee(&this_ptr_conv, val_conv);
 }
@@ -27628,6 +33120,7 @@ uint32_t  __attribute__((visibility("default"))) TS_Route_new(ptrArray paths_arg
                        LDKRouteHop paths_arg_conv_12_conv_10_conv;
                        paths_arg_conv_12_conv_10_conv.inner = (void*)(paths_arg_conv_12_conv_10 & (~1));
                        paths_arg_conv_12_conv_10_conv.is_owned = (paths_arg_conv_12_conv_10 & 1) || (paths_arg_conv_12_conv_10 == 0);
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(paths_arg_conv_12_conv_10_conv);
                        paths_arg_conv_12_conv_10_conv = RouteHop_clone(&paths_arg_conv_12_conv_10_conv);
                        paths_arg_conv_12_constr.data[k] = paths_arg_conv_12_conv_10_conv;
                }
@@ -27636,11 +33129,13 @@ uint32_t  __attribute__((visibility("default"))) TS_Route_new(ptrArray paths_arg
        LDKPayee payee_arg_conv;
        payee_arg_conv.inner = (void*)(payee_arg & (~1));
        payee_arg_conv.is_owned = (payee_arg & 1) || (payee_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(payee_arg_conv);
        payee_arg_conv = Payee_clone(&payee_arg_conv);
        LDKRoute ret_var = Route_new(paths_arg_constr, payee_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -27648,14 +33143,37 @@ uint32_t  __attribute__((visibility("default"))) TS_Route_new(ptrArray paths_arg
        return ret_ref;
 }
 
+static inline uint64_t Route_clone_ptr(LDKRoute *NONNULL_PTR arg) {
+       LDKRoute ret_var = Route_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_Route_clone_ptr(uint32_t arg) {
+       LDKRoute arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = Route_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_Route_clone(uint32_t orig) {
        LDKRoute orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKRoute ret_var = Route_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -27667,6 +33185,7 @@ int64_t  __attribute__((visibility("default"))) TS_Route_hash(uint32_t o) {
        LDKRoute o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = Route_hash(&o_conv);
        return ret_val;
 }
@@ -27675,9 +33194,11 @@ jboolean  __attribute__((visibility("default"))) TS_Route_eq(uint32_t a, uint32_
        LDKRoute a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKRoute b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = Route_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -27686,6 +33207,7 @@ int64_t  __attribute__((visibility("default"))) TS_Route_get_total_fees(uint32_t
        LDKRoute this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = Route_get_total_fees(&this_arg_conv);
        return ret_val;
 }
@@ -27694,6 +33216,7 @@ int64_t  __attribute__((visibility("default"))) TS_Route_get_total_amount(uint32
        LDKRoute this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = Route_get_total_amount(&this_arg_conv);
        return ret_val;
 }
@@ -27702,6 +33225,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_Route_write(uint32_t obj)
        LDKRoute obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = Route_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -27722,6 +33246,7 @@ void  __attribute__((visibility("default"))) TS_RouteParameters_free(uint32_t th
        LDKRouteParameters this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        RouteParameters_free(this_obj_conv);
 }
 
@@ -27729,10 +33254,12 @@ uint32_t  __attribute__((visibility("default"))) TS_RouteParameters_get_payee(ui
        LDKRouteParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPayee ret_var = RouteParameters_get_payee(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -27744,9 +33271,11 @@ void  __attribute__((visibility("default"))) TS_RouteParameters_set_payee(uint32
        LDKRouteParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPayee val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = Payee_clone(&val_conv);
        RouteParameters_set_payee(&this_ptr_conv, val_conv);
 }
@@ -27755,6 +33284,7 @@ int64_t  __attribute__((visibility("default"))) TS_RouteParameters_get_final_val
        LDKRouteParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = RouteParameters_get_final_value_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -27763,6 +33293,7 @@ void  __attribute__((visibility("default"))) TS_RouteParameters_set_final_value_
        LDKRouteParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        RouteParameters_set_final_value_msat(&this_ptr_conv, val);
 }
 
@@ -27770,6 +33301,7 @@ int32_t  __attribute__((visibility("default"))) TS_RouteParameters_get_final_clt
        LDKRouteParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int32_t ret_val = RouteParameters_get_final_cltv_expiry_delta(&this_ptr_conv);
        return ret_val;
 }
@@ -27778,6 +33310,7 @@ void  __attribute__((visibility("default"))) TS_RouteParameters_set_final_cltv_e
        LDKRouteParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        RouteParameters_set_final_cltv_expiry_delta(&this_ptr_conv, val);
 }
 
@@ -27785,11 +33318,13 @@ uint32_t  __attribute__((visibility("default"))) TS_RouteParameters_new(uint32_t
        LDKPayee payee_arg_conv;
        payee_arg_conv.inner = (void*)(payee_arg & (~1));
        payee_arg_conv.is_owned = (payee_arg & 1) || (payee_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(payee_arg_conv);
        payee_arg_conv = Payee_clone(&payee_arg_conv);
        LDKRouteParameters ret_var = RouteParameters_new(payee_arg_conv, final_value_msat_arg, final_cltv_expiry_delta_arg);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -27797,14 +33332,37 @@ uint32_t  __attribute__((visibility("default"))) TS_RouteParameters_new(uint32_t
        return ret_ref;
 }
 
+static inline uint64_t RouteParameters_clone_ptr(LDKRouteParameters *NONNULL_PTR arg) {
+       LDKRouteParameters ret_var = RouteParameters_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_RouteParameters_clone_ptr(uint32_t arg) {
+       LDKRouteParameters arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = RouteParameters_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_RouteParameters_clone(uint32_t orig) {
        LDKRouteParameters orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKRouteParameters ret_var = RouteParameters_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -27816,6 +33374,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_RouteParameters_write(uin
        LDKRouteParameters obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = RouteParameters_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -27836,6 +33395,7 @@ void  __attribute__((visibility("default"))) TS_Payee_free(uint32_t this_obj) {
        LDKPayee this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        Payee_free(this_obj_conv);
 }
 
@@ -27843,6 +33403,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_Payee_get_pubkey(uint32_t
        LDKPayee this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), Payee_get_pubkey(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -27852,6 +33413,7 @@ void  __attribute__((visibility("default"))) TS_Payee_set_pubkey(uint32_t this_p
        LDKPayee this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -27862,11 +33424,13 @@ uint32_t  __attribute__((visibility("default"))) TS_Payee_get_features(uint32_t
        LDKPayee this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKInvoiceFeatures ret_var = Payee_get_features(&this_ptr_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -27879,9 +33443,11 @@ void  __attribute__((visibility("default"))) TS_Payee_set_features(uint32_t this
        LDKPayee this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKInvoiceFeatures val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = InvoiceFeatures_clone(&val_conv);
        Payee_set_features(&this_ptr_conv, val_conv);
 }
@@ -27890,6 +33456,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_Payee_get_route_hints(u
        LDKPayee this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_RouteHintZ ret_var = Payee_get_route_hints(&this_ptr_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_arr(ret_var.datalen, sizeof(uint32_t), "Native uint32_tArray Bytes");
@@ -27899,6 +33466,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_Payee_get_route_hints(u
                uint64_t ret_conv_11_ref = 0;
                CHECK((((uint64_t)ret_conv_11_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_conv_11_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_11_var);
                ret_conv_11_ref = (uint64_t)ret_conv_11_var.inner;
                if (ret_conv_11_var.is_owned) {
                        ret_conv_11_ref |= 1;
@@ -27914,6 +33482,7 @@ void  __attribute__((visibility("default"))) TS_Payee_set_route_hints(uint32_t t
        LDKPayee this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_RouteHintZ val_constr;
        val_constr.datalen = *((uint32_t*)val);
        if (val_constr.datalen > 0)
@@ -27926,6 +33495,7 @@ void  __attribute__((visibility("default"))) TS_Payee_set_route_hints(uint32_t t
                LDKRouteHint val_conv_11_conv;
                val_conv_11_conv.inner = (void*)(val_conv_11 & (~1));
                val_conv_11_conv.is_owned = (val_conv_11 & 1) || (val_conv_11 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_11_conv);
                val_conv_11_conv = RouteHint_clone(&val_conv_11_conv);
                val_constr.data[l] = val_conv_11_conv;
        }
@@ -27936,6 +33506,7 @@ uint32_t  __attribute__((visibility("default"))) TS_Payee_get_expiry_time(uint32
        LDKPayee this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
        *ret_copy = Payee_get_expiry_time(&this_ptr_conv);
        uint64_t ret_ref = (uint64_t)ret_copy;
@@ -27946,6 +33517,7 @@ void  __attribute__((visibility("default"))) TS_Payee_set_expiry_time(uint32_t t
        LDKPayee this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
@@ -27960,6 +33532,7 @@ uint32_t  __attribute__((visibility("default"))) TS_Payee_new(int8_tArray pubkey
        LDKInvoiceFeatures features_arg_conv;
        features_arg_conv.inner = (void*)(features_arg & (~1));
        features_arg_conv.is_owned = (features_arg & 1) || (features_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(features_arg_conv);
        features_arg_conv = InvoiceFeatures_clone(&features_arg_conv);
        LDKCVec_RouteHintZ route_hints_arg_constr;
        route_hints_arg_constr.datalen = *((uint32_t*)route_hints_arg);
@@ -27973,6 +33546,7 @@ uint32_t  __attribute__((visibility("default"))) TS_Payee_new(int8_tArray pubkey
                LDKRouteHint route_hints_arg_conv_11_conv;
                route_hints_arg_conv_11_conv.inner = (void*)(route_hints_arg_conv_11 & (~1));
                route_hints_arg_conv_11_conv.is_owned = (route_hints_arg_conv_11 & 1) || (route_hints_arg_conv_11 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(route_hints_arg_conv_11_conv);
                route_hints_arg_conv_11_conv = RouteHint_clone(&route_hints_arg_conv_11_conv);
                route_hints_arg_constr.data[l] = route_hints_arg_conv_11_conv;
        }
@@ -27984,6 +33558,7 @@ uint32_t  __attribute__((visibility("default"))) TS_Payee_new(int8_tArray pubkey
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -27991,14 +33566,37 @@ uint32_t  __attribute__((visibility("default"))) TS_Payee_new(int8_tArray pubkey
        return ret_ref;
 }
 
+static inline uint64_t Payee_clone_ptr(LDKPayee *NONNULL_PTR arg) {
+       LDKPayee ret_var = Payee_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_Payee_clone_ptr(uint32_t arg) {
+       LDKPayee arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = Payee_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_Payee_clone(uint32_t orig) {
        LDKPayee orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKPayee ret_var = Payee_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28010,6 +33608,7 @@ int64_t  __attribute__((visibility("default"))) TS_Payee_hash(uint32_t o) {
        LDKPayee o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = Payee_hash(&o_conv);
        return ret_val;
 }
@@ -28018,9 +33617,11 @@ jboolean  __attribute__((visibility("default"))) TS_Payee_eq(uint32_t a, uint32_
        LDKPayee a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKPayee b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = Payee_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -28029,6 +33630,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_Payee_write(uint32_t obj)
        LDKPayee obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = Payee_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -28053,6 +33655,7 @@ uint32_t  __attribute__((visibility("default"))) TS_Payee_from_node_id(int8_tArr
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28068,6 +33671,7 @@ uint32_t  __attribute__((visibility("default"))) TS_Payee_for_keysend(int8_tArra
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28079,6 +33683,7 @@ void  __attribute__((visibility("default"))) TS_RouteHint_free(uint32_t this_obj
        LDKRouteHint this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        RouteHint_free(this_obj_conv);
 }
 
@@ -28086,6 +33691,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_RouteHint_get_a(uint32_
        LDKRouteHint this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_RouteHintHopZ ret_var = RouteHint_get_a(&this_ptr_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_arr(ret_var.datalen, sizeof(uint32_t), "Native uint32_tArray Bytes");
@@ -28095,6 +33701,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_RouteHint_get_a(uint32_
                uint64_t ret_conv_14_ref = 0;
                CHECK((((uint64_t)ret_conv_14_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_conv_14_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_14_var);
                ret_conv_14_ref = (uint64_t)ret_conv_14_var.inner;
                if (ret_conv_14_var.is_owned) {
                        ret_conv_14_ref |= 1;
@@ -28110,6 +33717,7 @@ void  __attribute__((visibility("default"))) TS_RouteHint_set_a(uint32_t this_pt
        LDKRouteHint this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCVec_RouteHintHopZ val_constr;
        val_constr.datalen = *((uint32_t*)val);
        if (val_constr.datalen > 0)
@@ -28122,6 +33730,7 @@ void  __attribute__((visibility("default"))) TS_RouteHint_set_a(uint32_t this_pt
                LDKRouteHintHop val_conv_14_conv;
                val_conv_14_conv.inner = (void*)(val_conv_14 & (~1));
                val_conv_14_conv.is_owned = (val_conv_14 & 1) || (val_conv_14 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv_14_conv);
                val_conv_14_conv = RouteHintHop_clone(&val_conv_14_conv);
                val_constr.data[o] = val_conv_14_conv;
        }
@@ -28141,6 +33750,7 @@ uint32_t  __attribute__((visibility("default"))) TS_RouteHint_new(uint32_tArray
                LDKRouteHintHop a_arg_conv_14_conv;
                a_arg_conv_14_conv.inner = (void*)(a_arg_conv_14 & (~1));
                a_arg_conv_14_conv.is_owned = (a_arg_conv_14 & 1) || (a_arg_conv_14 == 0);
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(a_arg_conv_14_conv);
                a_arg_conv_14_conv = RouteHintHop_clone(&a_arg_conv_14_conv);
                a_arg_constr.data[o] = a_arg_conv_14_conv;
        }
@@ -28148,6 +33758,7 @@ uint32_t  __attribute__((visibility("default"))) TS_RouteHint_new(uint32_tArray
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28155,14 +33766,37 @@ uint32_t  __attribute__((visibility("default"))) TS_RouteHint_new(uint32_tArray
        return ret_ref;
 }
 
+static inline uint64_t RouteHint_clone_ptr(LDKRouteHint *NONNULL_PTR arg) {
+       LDKRouteHint ret_var = RouteHint_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_RouteHint_clone_ptr(uint32_t arg) {
+       LDKRouteHint arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = RouteHint_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_RouteHint_clone(uint32_t orig) {
        LDKRouteHint orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKRouteHint ret_var = RouteHint_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28174,6 +33808,7 @@ int64_t  __attribute__((visibility("default"))) TS_RouteHint_hash(uint32_t o) {
        LDKRouteHint o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = RouteHint_hash(&o_conv);
        return ret_val;
 }
@@ -28182,9 +33817,11 @@ jboolean  __attribute__((visibility("default"))) TS_RouteHint_eq(uint32_t a, uin
        LDKRouteHint a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKRouteHint b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = RouteHint_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -28193,6 +33830,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_RouteHint_write(uint32_t
        LDKRouteHint obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = RouteHint_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -28213,6 +33851,7 @@ void  __attribute__((visibility("default"))) TS_RouteHintHop_free(uint32_t this_
        LDKRouteHintHop this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        RouteHintHop_free(this_obj_conv);
 }
 
@@ -28220,6 +33859,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_RouteHintHop_get_src_node
        LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), RouteHintHop_get_src_node_id(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -28229,6 +33869,7 @@ void  __attribute__((visibility("default"))) TS_RouteHintHop_set_src_node_id(uin
        LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -28239,6 +33880,7 @@ int64_t  __attribute__((visibility("default"))) TS_RouteHintHop_get_short_channe
        LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = RouteHintHop_get_short_channel_id(&this_ptr_conv);
        return ret_val;
 }
@@ -28247,6 +33889,7 @@ void  __attribute__((visibility("default"))) TS_RouteHintHop_set_short_channel_i
        LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        RouteHintHop_set_short_channel_id(&this_ptr_conv, val);
 }
 
@@ -28254,10 +33897,12 @@ uint32_t  __attribute__((visibility("default"))) TS_RouteHintHop_get_fees(uint32
        LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKRoutingFees ret_var = RouteHintHop_get_fees(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28269,9 +33914,11 @@ void  __attribute__((visibility("default"))) TS_RouteHintHop_set_fees(uint32_t t
        LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKRoutingFees val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = RoutingFees_clone(&val_conv);
        RouteHintHop_set_fees(&this_ptr_conv, val_conv);
 }
@@ -28280,6 +33927,7 @@ int16_t  __attribute__((visibility("default"))) TS_RouteHintHop_get_cltv_expiry_
        LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int16_t ret_val = RouteHintHop_get_cltv_expiry_delta(&this_ptr_conv);
        return ret_val;
 }
@@ -28288,6 +33936,7 @@ void  __attribute__((visibility("default"))) TS_RouteHintHop_set_cltv_expiry_del
        LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        RouteHintHop_set_cltv_expiry_delta(&this_ptr_conv, val);
 }
 
@@ -28295,6 +33944,7 @@ uint32_t  __attribute__((visibility("default"))) TS_RouteHintHop_get_htlc_minimu
        LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
        *ret_copy = RouteHintHop_get_htlc_minimum_msat(&this_ptr_conv);
        uint64_t ret_ref = (uint64_t)ret_copy;
@@ -28305,6 +33955,7 @@ void  __attribute__((visibility("default"))) TS_RouteHintHop_set_htlc_minimum_ms
        LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
@@ -28316,6 +33967,7 @@ uint32_t  __attribute__((visibility("default"))) TS_RouteHintHop_get_htlc_maximu
        LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
        *ret_copy = RouteHintHop_get_htlc_maximum_msat(&this_ptr_conv);
        uint64_t ret_ref = (uint64_t)ret_copy;
@@ -28326,6 +33978,7 @@ void  __attribute__((visibility("default"))) TS_RouteHintHop_set_htlc_maximum_ms
        LDKRouteHintHop this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        void* val_ptr = (void*)(((uint64_t)val) & ~1);
        CHECK_ACCESS(val_ptr);
        LDKCOption_u64Z val_conv = *(LDKCOption_u64Z*)(val_ptr);
@@ -28340,6 +33993,7 @@ uint32_t  __attribute__((visibility("default"))) TS_RouteHintHop_new(int8_tArray
        LDKRoutingFees fees_arg_conv;
        fees_arg_conv.inner = (void*)(fees_arg & (~1));
        fees_arg_conv.is_owned = (fees_arg & 1) || (fees_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(fees_arg_conv);
        fees_arg_conv = RoutingFees_clone(&fees_arg_conv);
        void* htlc_minimum_msat_arg_ptr = (void*)(((uint64_t)htlc_minimum_msat_arg) & ~1);
        CHECK_ACCESS(htlc_minimum_msat_arg_ptr);
@@ -28353,6 +34007,7 @@ uint32_t  __attribute__((visibility("default"))) TS_RouteHintHop_new(int8_tArray
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28360,14 +34015,37 @@ uint32_t  __attribute__((visibility("default"))) TS_RouteHintHop_new(int8_tArray
        return ret_ref;
 }
 
+static inline uint64_t RouteHintHop_clone_ptr(LDKRouteHintHop *NONNULL_PTR arg) {
+       LDKRouteHintHop ret_var = RouteHintHop_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_RouteHintHop_clone_ptr(uint32_t arg) {
+       LDKRouteHintHop arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = RouteHintHop_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_RouteHintHop_clone(uint32_t orig) {
        LDKRouteHintHop orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKRouteHintHop ret_var = RouteHintHop_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28379,6 +34057,7 @@ int64_t  __attribute__((visibility("default"))) TS_RouteHintHop_hash(uint32_t o)
        LDKRouteHintHop o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = RouteHintHop_hash(&o_conv);
        return ret_val;
 }
@@ -28387,9 +34066,11 @@ jboolean  __attribute__((visibility("default"))) TS_RouteHintHop_eq(uint32_t a,
        LDKRouteHintHop a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKRouteHintHop b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = RouteHintHop_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -28398,6 +34079,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_RouteHintHop_write(uint32
        LDKRouteHintHop obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = RouteHintHop_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -28421,9 +34103,11 @@ uint32_t  __attribute__((visibility("default"))) TS_find_route(int8_tArray our_n
        LDKRouteParameters params_conv;
        params_conv.inner = (void*)(params & (~1));
        params_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(params_conv);
        LDKNetworkGraph network_conv;
        network_conv.inner = (void*)(network & (~1));
        network_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_conv);
        LDKCVec_ChannelDetailsZ first_hops_constr;
        LDKCVec_ChannelDetailsZ *first_hops_ptr = NULL;
        if (first_hops != 0) {
@@ -28438,6 +34122,7 @@ uint32_t  __attribute__((visibility("default"))) TS_find_route(int8_tArray our_n
                        LDKChannelDetails first_hops_conv_16_conv;
                        first_hops_conv_16_conv.inner = (void*)(first_hops_conv_16 & (~1));
                        first_hops_conv_16_conv.is_owned = (first_hops_conv_16 & 1) || (first_hops_conv_16 == 0);
+                       CHECK_INNER_FIELD_ACCESS_OR_NULL(first_hops_conv_16_conv);
                        first_hops_constr.data[q] = first_hops_conv_16_conv;
                }
                first_hops_ptr = &first_hops_constr;
@@ -28458,6 +34143,7 @@ void  __attribute__((visibility("default"))) TS_Scorer_free(uint32_t this_obj) {
        LDKScorer this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        Scorer_free(this_obj_conv);
 }
 
@@ -28465,6 +34151,7 @@ void  __attribute__((visibility("default"))) TS_ScoringParameters_free(uint32_t
        LDKScoringParameters this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ScoringParameters_free(this_obj_conv);
 }
 
@@ -28472,6 +34159,7 @@ int64_t  __attribute__((visibility("default"))) TS_ScoringParameters_get_base_pe
        LDKScoringParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ScoringParameters_get_base_penalty_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -28480,6 +34168,7 @@ void  __attribute__((visibility("default"))) TS_ScoringParameters_set_base_penal
        LDKScoringParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ScoringParameters_set_base_penalty_msat(&this_ptr_conv, val);
 }
 
@@ -28487,6 +34176,7 @@ int64_t  __attribute__((visibility("default"))) TS_ScoringParameters_get_failure
        LDKScoringParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ScoringParameters_get_failure_penalty_msat(&this_ptr_conv);
        return ret_val;
 }
@@ -28495,6 +34185,7 @@ void  __attribute__((visibility("default"))) TS_ScoringParameters_set_failure_pe
        LDKScoringParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ScoringParameters_set_failure_penalty_msat(&this_ptr_conv, val);
 }
 
@@ -28502,6 +34193,7 @@ int64_t  __attribute__((visibility("default"))) TS_ScoringParameters_get_failure
        LDKScoringParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = ScoringParameters_get_failure_penalty_half_life(&this_ptr_conv);
        return ret_val;
 }
@@ -28510,6 +34202,7 @@ void  __attribute__((visibility("default"))) TS_ScoringParameters_set_failure_pe
        LDKScoringParameters this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        ScoringParameters_set_failure_penalty_half_life(&this_ptr_conv, val);
 }
 
@@ -28518,6 +34211,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ScoringParameters_new(int64_
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28529,6 +34223,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_ScoringParameters_write(u
        LDKScoringParameters obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = ScoringParameters_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -28549,11 +34244,13 @@ uint32_t  __attribute__((visibility("default"))) TS_Scorer_new(uint32_t params)
        LDKScoringParameters params_conv;
        params_conv.inner = (void*)(params & (~1));
        params_conv.is_owned = (params & 1) || (params == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(params_conv);
        // Warning: we need a move here but no clone is available for LDKScoringParameters
        LDKScorer ret_var = Scorer_new(params_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28566,6 +34263,7 @@ uint32_t  __attribute__((visibility("default"))) TS_Scorer_default() {
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28578,6 +34276,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ScoringParameters_default()
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28589,6 +34288,7 @@ uint32_t  __attribute__((visibility("default"))) TS_Scorer_as_Score(uint32_t thi
        LDKScorer this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKScore* ret_ret = MALLOC(sizeof(LDKScore), "LDKScore");
        *ret_ret = Scorer_as_Score(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -28598,6 +34298,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_Scorer_write(uint32_t obj
        LDKScorer obj_conv;
        obj_conv.inner = (void*)(obj & (~1));
        obj_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(obj_conv);
        LDKCVec_u8Z ret_var = Scorer_write(&obj_conv);
        int8_tArray ret_arr = init_arr(ret_var.datalen, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), ret_var.data, ret_var.datalen);
@@ -28618,6 +34319,7 @@ void  __attribute__((visibility("default"))) TS_FilesystemPersister_free(uint32_
        LDKFilesystemPersister this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        FilesystemPersister_free(this_obj_conv);
 }
 
@@ -28627,6 +34329,7 @@ uint32_t  __attribute__((visibility("default"))) TS_FilesystemPersister_new(jstr
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28638,6 +34341,7 @@ jstring  __attribute__((visibility("default"))) TS_FilesystemPersister_get_data_
        LDKFilesystemPersister this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKStr ret_str = FilesystemPersister_get_data_dir(&this_arg_conv);
        jstring ret_conv = str_ref_to_ts(ret_str.chars, ret_str.len);
        Str_free(ret_str);
@@ -28649,6 +34353,7 @@ uint32_t  __attribute__((visibility("default"))) TS_FilesystemPersister_persist_
        LDKChannelManager manager_conv;
        manager_conv.inner = (void*)(manager & (~1));
        manager_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(manager_conv);
        LDKCResult_NoneErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneErrorZ), "LDKCResult_NoneErrorZ");
        *ret_conv = FilesystemPersister_persist_manager(data_dir_conv, &manager_conv);
        return (uint64_t)ret_conv;
@@ -28658,6 +34363,7 @@ uint32_t  __attribute__((visibility("default"))) TS_FilesystemPersister_read_cha
        LDKFilesystemPersister this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        void* keys_manager_ptr = (void*)(((uint64_t)keys_manager) & ~1);
        CHECK_ACCESS(keys_manager_ptr);
        LDKKeysInterface keys_manager_conv = *(LDKKeysInterface*)(keys_manager_ptr);
@@ -28670,6 +34376,7 @@ uint32_t  __attribute__((visibility("default"))) TS_FilesystemPersister_as_Persi
        LDKFilesystemPersister this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKPersist* ret_ret = MALLOC(sizeof(LDKPersist), "LDKPersist");
        *ret_ret = FilesystemPersister_as_Persist(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -28679,6 +34386,7 @@ void  __attribute__((visibility("default"))) TS_BackgroundProcessor_free(uint32_
        LDKBackgroundProcessor this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        BackgroundProcessor_free(this_obj_conv);
 }
 
@@ -28701,15 +34409,19 @@ uint32_t  __attribute__((visibility("default"))) TS_BackgroundProcessor_start(ui
        LDKChainMonitor chain_monitor_conv;
        chain_monitor_conv.inner = (void*)(chain_monitor & (~1));
        chain_monitor_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(chain_monitor_conv);
        LDKChannelManager channel_manager_conv;
        channel_manager_conv.inner = (void*)(channel_manager & (~1));
        channel_manager_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channel_manager_conv);
        LDKNetGraphMsgHandler net_graph_msg_handler_conv;
        net_graph_msg_handler_conv.inner = (void*)(net_graph_msg_handler & (~1));
        net_graph_msg_handler_conv.is_owned = (net_graph_msg_handler & 1) || (net_graph_msg_handler == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(net_graph_msg_handler_conv);
        LDKPeerManager peer_manager_conv;
        peer_manager_conv.inner = (void*)(peer_manager & (~1));
        peer_manager_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(peer_manager_conv);
        void* logger_ptr = (void*)(((uint64_t)logger) & ~1);
        CHECK_ACCESS(logger_ptr);
        LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
@@ -28717,6 +34429,7 @@ uint32_t  __attribute__((visibility("default"))) TS_BackgroundProcessor_start(ui
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28728,6 +34441,7 @@ uint32_t  __attribute__((visibility("default"))) TS_BackgroundProcessor_join(uin
        LDKBackgroundProcessor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = (this_arg & 1) || (this_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        // Warning: we need a move here but no clone is available for LDKBackgroundProcessor
        LDKCResult_NoneErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneErrorZ), "LDKCResult_NoneErrorZ");
        *ret_conv = BackgroundProcessor_join(this_arg_conv);
@@ -28738,6 +34452,7 @@ uint32_t  __attribute__((visibility("default"))) TS_BackgroundProcessor_stop(uin
        LDKBackgroundProcessor this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = (this_arg & 1) || (this_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        // Warning: we need a move here but no clone is available for LDKBackgroundProcessor
        LDKCResult_NoneErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneErrorZ), "LDKCResult_NoneErrorZ");
        *ret_conv = BackgroundProcessor_stop(this_arg_conv);
@@ -28752,6 +34467,7 @@ void  __attribute__((visibility("default"))) TS_Invoice_free(uint32_t this_obj)
        LDKInvoice this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        Invoice_free(this_obj_conv);
 }
 
@@ -28759,21 +34475,46 @@ jboolean  __attribute__((visibility("default"))) TS_Invoice_eq(uint32_t a, uint3
        LDKInvoice a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKInvoice b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = Invoice_eq(&a_conv, &b_conv);
        return ret_val;
 }
 
+static inline uint64_t Invoice_clone_ptr(LDKInvoice *NONNULL_PTR arg) {
+       LDKInvoice ret_var = Invoice_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_Invoice_clone_ptr(uint32_t arg) {
+       LDKInvoice arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = Invoice_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_Invoice_clone(uint32_t orig) {
        LDKInvoice orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKInvoice ret_var = Invoice_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28785,6 +34526,7 @@ void  __attribute__((visibility("default"))) TS_SignedRawInvoice_free(uint32_t t
        LDKSignedRawInvoice this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        SignedRawInvoice_free(this_obj_conv);
 }
 
@@ -28792,21 +34534,46 @@ jboolean  __attribute__((visibility("default"))) TS_SignedRawInvoice_eq(uint32_t
        LDKSignedRawInvoice a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKSignedRawInvoice b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = SignedRawInvoice_eq(&a_conv, &b_conv);
        return ret_val;
 }
 
+static inline uint64_t SignedRawInvoice_clone_ptr(LDKSignedRawInvoice *NONNULL_PTR arg) {
+       LDKSignedRawInvoice ret_var = SignedRawInvoice_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_SignedRawInvoice_clone_ptr(uint32_t arg) {
+       LDKSignedRawInvoice arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = SignedRawInvoice_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_SignedRawInvoice_clone(uint32_t orig) {
        LDKSignedRawInvoice orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKSignedRawInvoice ret_var = SignedRawInvoice_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28818,6 +34585,7 @@ void  __attribute__((visibility("default"))) TS_RawInvoice_free(uint32_t this_ob
        LDKRawInvoice this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        RawInvoice_free(this_obj_conv);
 }
 
@@ -28825,10 +34593,12 @@ uint32_t  __attribute__((visibility("default"))) TS_RawInvoice_get_data(uint32_t
        LDKRawInvoice this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKRawDataPart ret_var = RawInvoice_get_data(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28840,9 +34610,11 @@ void  __attribute__((visibility("default"))) TS_RawInvoice_set_data(uint32_t thi
        LDKRawInvoice this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKRawDataPart val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = RawDataPart_clone(&val_conv);
        RawInvoice_set_data(&this_ptr_conv, val_conv);
 }
@@ -28851,21 +34623,46 @@ jboolean  __attribute__((visibility("default"))) TS_RawInvoice_eq(uint32_t a, ui
        LDKRawInvoice a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKRawInvoice b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = RawInvoice_eq(&a_conv, &b_conv);
        return ret_val;
 }
 
+static inline uint64_t RawInvoice_clone_ptr(LDKRawInvoice *NONNULL_PTR arg) {
+       LDKRawInvoice ret_var = RawInvoice_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_RawInvoice_clone_ptr(uint32_t arg) {
+       LDKRawInvoice arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = RawInvoice_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_RawInvoice_clone(uint32_t orig) {
        LDKRawInvoice orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKRawInvoice ret_var = RawInvoice_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28877,6 +34674,7 @@ void  __attribute__((visibility("default"))) TS_RawDataPart_free(uint32_t this_o
        LDKRawDataPart this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        RawDataPart_free(this_obj_conv);
 }
 
@@ -28884,10 +34682,12 @@ uint32_t  __attribute__((visibility("default"))) TS_RawDataPart_get_timestamp(ui
        LDKRawDataPart this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPositiveTimestamp ret_var = RawDataPart_get_timestamp(&this_ptr_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28899,9 +34699,11 @@ void  __attribute__((visibility("default"))) TS_RawDataPart_set_timestamp(uint32
        LDKRawDataPart this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPositiveTimestamp val_conv;
        val_conv.inner = (void*)(val & (~1));
        val_conv.is_owned = (val & 1) || (val == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(val_conv);
        val_conv = PositiveTimestamp_clone(&val_conv);
        RawDataPart_set_timestamp(&this_ptr_conv, val_conv);
 }
@@ -28910,21 +34712,46 @@ jboolean  __attribute__((visibility("default"))) TS_RawDataPart_eq(uint32_t a, u
        LDKRawDataPart a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKRawDataPart b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = RawDataPart_eq(&a_conv, &b_conv);
        return ret_val;
 }
 
+static inline uint64_t RawDataPart_clone_ptr(LDKRawDataPart *NONNULL_PTR arg) {
+       LDKRawDataPart ret_var = RawDataPart_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_RawDataPart_clone_ptr(uint32_t arg) {
+       LDKRawDataPart arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = RawDataPart_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_RawDataPart_clone(uint32_t orig) {
        LDKRawDataPart orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKRawDataPart ret_var = RawDataPart_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -28936,6 +34763,7 @@ void  __attribute__((visibility("default"))) TS_PositiveTimestamp_free(uint32_t
        LDKPositiveTimestamp this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        PositiveTimestamp_free(this_obj_conv);
 }
 
@@ -28943,21 +34771,46 @@ jboolean  __attribute__((visibility("default"))) TS_PositiveTimestamp_eq(uint32_
        LDKPositiveTimestamp a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKPositiveTimestamp b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = PositiveTimestamp_eq(&a_conv, &b_conv);
        return ret_val;
 }
 
+static inline uint64_t PositiveTimestamp_clone_ptr(LDKPositiveTimestamp *NONNULL_PTR arg) {
+       LDKPositiveTimestamp ret_var = PositiveTimestamp_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_PositiveTimestamp_clone_ptr(uint32_t arg) {
+       LDKPositiveTimestamp arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = PositiveTimestamp_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_PositiveTimestamp_clone(uint32_t orig) {
        LDKPositiveTimestamp orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKPositiveTimestamp ret_var = PositiveTimestamp_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29052,17 +34905,41 @@ void  __attribute__((visibility("default"))) TS_Sha256_free(uint32_t this_obj) {
        LDKSha256 this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        Sha256_free(this_obj_conv);
 }
 
+static inline uint64_t Sha256_clone_ptr(LDKSha256 *NONNULL_PTR arg) {
+       LDKSha256 ret_var = Sha256_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_Sha256_clone_ptr(uint32_t arg) {
+       LDKSha256 arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = Sha256_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_Sha256_clone(uint32_t orig) {
        LDKSha256 orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKSha256 ret_var = Sha256_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29074,6 +34951,7 @@ int64_t  __attribute__((visibility("default"))) TS_Sha256_hash(uint32_t o) {
        LDKSha256 o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = Sha256_hash(&o_conv);
        return ret_val;
 }
@@ -29082,9 +34960,11 @@ jboolean  __attribute__((visibility("default"))) TS_Sha256_eq(uint32_t a, uint32
        LDKSha256 a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKSha256 b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = Sha256_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -29093,17 +34973,41 @@ void  __attribute__((visibility("default"))) TS_Description_free(uint32_t this_o
        LDKDescription this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        Description_free(this_obj_conv);
 }
 
+static inline uint64_t Description_clone_ptr(LDKDescription *NONNULL_PTR arg) {
+       LDKDescription ret_var = Description_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_Description_clone_ptr(uint32_t arg) {
+       LDKDescription arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = Description_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_Description_clone(uint32_t orig) {
        LDKDescription orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKDescription ret_var = Description_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29115,6 +35019,7 @@ int64_t  __attribute__((visibility("default"))) TS_Description_hash(uint32_t o)
        LDKDescription o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = Description_hash(&o_conv);
        return ret_val;
 }
@@ -29123,9 +35028,11 @@ jboolean  __attribute__((visibility("default"))) TS_Description_eq(uint32_t a, u
        LDKDescription a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKDescription b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = Description_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -29134,6 +35041,7 @@ void  __attribute__((visibility("default"))) TS_PayeePubKey_free(uint32_t this_o
        LDKPayeePubKey this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        PayeePubKey_free(this_obj_conv);
 }
 
@@ -29141,6 +35049,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_PayeePubKey_get_a(uint32_
        LDKPayeePubKey this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), PayeePubKey_get_a(&this_ptr_conv).compressed_form, 33);
        return ret_arr;
@@ -29150,6 +35059,7 @@ void  __attribute__((visibility("default"))) TS_PayeePubKey_set_a(uint32_t this_
        LDKPayeePubKey this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        LDKPublicKey val_ref;
        CHECK(*((uint32_t*)val) == 33);
        memcpy(val_ref.compressed_form, (uint8_t*)(val + 4), 33);
@@ -29164,6 +35074,7 @@ uint32_t  __attribute__((visibility("default"))) TS_PayeePubKey_new(int8_tArray
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29171,14 +35082,37 @@ uint32_t  __attribute__((visibility("default"))) TS_PayeePubKey_new(int8_tArray
        return ret_ref;
 }
 
+static inline uint64_t PayeePubKey_clone_ptr(LDKPayeePubKey *NONNULL_PTR arg) {
+       LDKPayeePubKey ret_var = PayeePubKey_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_PayeePubKey_clone_ptr(uint32_t arg) {
+       LDKPayeePubKey arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = PayeePubKey_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_PayeePubKey_clone(uint32_t orig) {
        LDKPayeePubKey orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKPayeePubKey ret_var = PayeePubKey_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29190,6 +35124,7 @@ int64_t  __attribute__((visibility("default"))) TS_PayeePubKey_hash(uint32_t o)
        LDKPayeePubKey o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = PayeePubKey_hash(&o_conv);
        return ret_val;
 }
@@ -29198,9 +35133,11 @@ jboolean  __attribute__((visibility("default"))) TS_PayeePubKey_eq(uint32_t a, u
        LDKPayeePubKey a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKPayeePubKey b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = PayeePubKey_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -29209,17 +35146,41 @@ void  __attribute__((visibility("default"))) TS_ExpiryTime_free(uint32_t this_ob
        LDKExpiryTime this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        ExpiryTime_free(this_obj_conv);
 }
 
+static inline uint64_t ExpiryTime_clone_ptr(LDKExpiryTime *NONNULL_PTR arg) {
+       LDKExpiryTime ret_var = ExpiryTime_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_ExpiryTime_clone_ptr(uint32_t arg) {
+       LDKExpiryTime arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = ExpiryTime_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_ExpiryTime_clone(uint32_t orig) {
        LDKExpiryTime orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKExpiryTime ret_var = ExpiryTime_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29231,6 +35192,7 @@ int64_t  __attribute__((visibility("default"))) TS_ExpiryTime_hash(uint32_t o) {
        LDKExpiryTime o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = ExpiryTime_hash(&o_conv);
        return ret_val;
 }
@@ -29239,9 +35201,11 @@ jboolean  __attribute__((visibility("default"))) TS_ExpiryTime_eq(uint32_t a, ui
        LDKExpiryTime a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKExpiryTime b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = ExpiryTime_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -29250,6 +35214,7 @@ void  __attribute__((visibility("default"))) TS_MinFinalCltvExpiry_free(uint32_t
        LDKMinFinalCltvExpiry this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        MinFinalCltvExpiry_free(this_obj_conv);
 }
 
@@ -29257,6 +35222,7 @@ int64_t  __attribute__((visibility("default"))) TS_MinFinalCltvExpiry_get_a(uint
        LDKMinFinalCltvExpiry this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = MinFinalCltvExpiry_get_a(&this_ptr_conv);
        return ret_val;
 }
@@ -29265,6 +35231,7 @@ void  __attribute__((visibility("default"))) TS_MinFinalCltvExpiry_set_a(uint32_
        LDKMinFinalCltvExpiry this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        MinFinalCltvExpiry_set_a(&this_ptr_conv, val);
 }
 
@@ -29273,6 +35240,7 @@ uint32_t  __attribute__((visibility("default"))) TS_MinFinalCltvExpiry_new(int64
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29280,14 +35248,37 @@ uint32_t  __attribute__((visibility("default"))) TS_MinFinalCltvExpiry_new(int64
        return ret_ref;
 }
 
+static inline uint64_t MinFinalCltvExpiry_clone_ptr(LDKMinFinalCltvExpiry *NONNULL_PTR arg) {
+       LDKMinFinalCltvExpiry ret_var = MinFinalCltvExpiry_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_MinFinalCltvExpiry_clone_ptr(uint32_t arg) {
+       LDKMinFinalCltvExpiry arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = MinFinalCltvExpiry_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_MinFinalCltvExpiry_clone(uint32_t orig) {
        LDKMinFinalCltvExpiry orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKMinFinalCltvExpiry ret_var = MinFinalCltvExpiry_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29299,6 +35290,7 @@ int64_t  __attribute__((visibility("default"))) TS_MinFinalCltvExpiry_hash(uint3
        LDKMinFinalCltvExpiry o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = MinFinalCltvExpiry_hash(&o_conv);
        return ret_val;
 }
@@ -29307,9 +35299,11 @@ jboolean  __attribute__((visibility("default"))) TS_MinFinalCltvExpiry_eq(uint32
        LDKMinFinalCltvExpiry a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKMinFinalCltvExpiry b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = MinFinalCltvExpiry_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -29323,6 +35317,18 @@ void  __attribute__((visibility("default"))) TS_Fallback_free(uint32_t this_ptr)
        Fallback_free(this_ptr_conv);
 }
 
+static inline uint64_t Fallback_clone_ptr(LDKFallback *NONNULL_PTR arg) {
+       LDKFallback *ret_copy = MALLOC(sizeof(LDKFallback), "LDKFallback");
+       *ret_copy = Fallback_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_Fallback_clone_ptr(uint32_t arg) {
+       LDKFallback* arg_conv = (LDKFallback*)arg;
+       int64_t ret_val = Fallback_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_Fallback_clone(uint32_t orig) {
        LDKFallback* orig_conv = (LDKFallback*)orig;
        LDKFallback *ret_copy = MALLOC(sizeof(LDKFallback), "LDKFallback");
@@ -29380,17 +35386,41 @@ void  __attribute__((visibility("default"))) TS_InvoiceSignature_free(uint32_t t
        LDKInvoiceSignature this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        InvoiceSignature_free(this_obj_conv);
 }
 
+static inline uint64_t InvoiceSignature_clone_ptr(LDKInvoiceSignature *NONNULL_PTR arg) {
+       LDKInvoiceSignature ret_var = InvoiceSignature_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_InvoiceSignature_clone_ptr(uint32_t arg) {
+       LDKInvoiceSignature arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = InvoiceSignature_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_InvoiceSignature_clone(uint32_t orig) {
        LDKInvoiceSignature orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKInvoiceSignature ret_var = InvoiceSignature_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29402,9 +35432,11 @@ jboolean  __attribute__((visibility("default"))) TS_InvoiceSignature_eq(uint32_t
        LDKInvoiceSignature a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKInvoiceSignature b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = InvoiceSignature_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -29413,17 +35445,41 @@ void  __attribute__((visibility("default"))) TS_PrivateRoute_free(uint32_t this_
        LDKPrivateRoute this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        PrivateRoute_free(this_obj_conv);
 }
 
+static inline uint64_t PrivateRoute_clone_ptr(LDKPrivateRoute *NONNULL_PTR arg) {
+       LDKPrivateRoute ret_var = PrivateRoute_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_PrivateRoute_clone_ptr(uint32_t arg) {
+       LDKPrivateRoute arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = PrivateRoute_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_PrivateRoute_clone(uint32_t orig) {
        LDKPrivateRoute orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKPrivateRoute ret_var = PrivateRoute_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29435,6 +35491,7 @@ int64_t  __attribute__((visibility("default"))) TS_PrivateRoute_hash(uint32_t o)
        LDKPrivateRoute o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = PrivateRoute_hash(&o_conv);
        return ret_val;
 }
@@ -29443,9 +35500,11 @@ jboolean  __attribute__((visibility("default"))) TS_PrivateRoute_eq(uint32_t a,
        LDKPrivateRoute a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKPrivateRoute b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = PrivateRoute_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -29454,6 +35513,7 @@ uint32_t  __attribute__((visibility("default"))) TS_SignedRawInvoice_into_parts(
        LDKSignedRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = (this_arg & 1) || (this_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv = SignedRawInvoice_clone(&this_arg_conv);
        LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ* ret_conv = MALLOC(sizeof(LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ), "LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ");
        *ret_conv = SignedRawInvoice_into_parts(this_arg_conv);
@@ -29464,10 +35524,12 @@ uint32_t  __attribute__((visibility("default"))) TS_SignedRawInvoice_raw_invoice
        LDKSignedRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKRawInvoice ret_var = SignedRawInvoice_raw_invoice(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29479,6 +35541,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_SignedRawInvoice_hash(uin
        LDKSignedRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *SignedRawInvoice_hash(&this_arg_conv), 32);
        return ret_arr;
@@ -29488,10 +35551,12 @@ uint32_t  __attribute__((visibility("default"))) TS_SignedRawInvoice_signature(u
        LDKSignedRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKInvoiceSignature ret_var = SignedRawInvoice_signature(&this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29503,6 +35568,7 @@ uint32_t  __attribute__((visibility("default"))) TS_SignedRawInvoice_recover_pay
        LDKSignedRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCResult_PayeePubKeyErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PayeePubKeyErrorZ), "LDKCResult_PayeePubKeyErrorZ");
        *ret_conv = SignedRawInvoice_recover_payee_pub_key(&this_arg_conv);
        return (uint64_t)ret_conv;
@@ -29512,6 +35578,7 @@ jboolean  __attribute__((visibility("default"))) TS_SignedRawInvoice_check_signa
        LDKSignedRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        jboolean ret_val = SignedRawInvoice_check_signature(&this_arg_conv);
        return ret_val;
 }
@@ -29520,6 +35587,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_RawInvoice_hash(uint32_t
        LDKRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), RawInvoice_hash(&this_arg_conv).data, 32);
        return ret_arr;
@@ -29529,11 +35597,13 @@ uint32_t  __attribute__((visibility("default"))) TS_RawInvoice_payment_hash(uint
        LDKRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKSha256 ret_var = RawInvoice_payment_hash(&this_arg_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -29546,11 +35616,13 @@ uint32_t  __attribute__((visibility("default"))) TS_RawInvoice_description(uint3
        LDKRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKDescription ret_var = RawInvoice_description(&this_arg_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -29563,11 +35635,13 @@ uint32_t  __attribute__((visibility("default"))) TS_RawInvoice_payee_pub_key(uin
        LDKRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKPayeePubKey ret_var = RawInvoice_payee_pub_key(&this_arg_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -29580,11 +35654,13 @@ uint32_t  __attribute__((visibility("default"))) TS_RawInvoice_description_hash(
        LDKRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKSha256 ret_var = RawInvoice_description_hash(&this_arg_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -29597,11 +35673,13 @@ uint32_t  __attribute__((visibility("default"))) TS_RawInvoice_expiry_time(uint3
        LDKRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKExpiryTime ret_var = RawInvoice_expiry_time(&this_arg_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -29614,11 +35692,13 @@ uint32_t  __attribute__((visibility("default"))) TS_RawInvoice_min_final_cltv_ex
        LDKRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKMinFinalCltvExpiry ret_var = RawInvoice_min_final_cltv_expiry(&this_arg_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -29631,6 +35711,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_RawInvoice_payment_secret
        LDKRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), RawInvoice_payment_secret(&this_arg_conv).data, 32);
        return ret_arr;
@@ -29640,11 +35721,13 @@ uint32_t  __attribute__((visibility("default"))) TS_RawInvoice_features(uint32_t
        LDKRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKInvoiceFeatures ret_var = RawInvoice_features(&this_arg_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -29657,6 +35740,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_RawInvoice_private_rout
        LDKRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCVec_PrivateRouteZ ret_var = RawInvoice_private_routes(&this_arg_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_arr(ret_var.datalen, sizeof(uint32_t), "Native uint32_tArray Bytes");
@@ -29666,6 +35750,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_RawInvoice_private_rout
                uint64_t ret_conv_14_ref = 0;
                CHECK((((uint64_t)ret_conv_14_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_conv_14_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_14_var);
                ret_conv_14_ref = (uint64_t)ret_conv_14_var.inner;
                if (ret_conv_14_var.is_owned) {
                        ret_conv_14_ref |= 1;
@@ -29681,6 +35766,7 @@ uint32_t  __attribute__((visibility("default"))) TS_RawInvoice_amount_pico_btc(u
        LDKRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
        *ret_copy = RawInvoice_amount_pico_btc(&this_arg_conv);
        uint64_t ret_ref = (uint64_t)ret_copy;
@@ -29691,6 +35777,7 @@ uint32_t  __attribute__((visibility("default"))) TS_RawInvoice_currency(uint32_t
        LDKRawInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        uint32_t ret_conv = LDKCurrency_to_js(RawInvoice_currency(&this_arg_conv));
        return ret_conv;
 }
@@ -29711,6 +35798,7 @@ int64_t  __attribute__((visibility("default"))) TS_PositiveTimestamp_as_unix_tim
        LDKPositiveTimestamp this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = PositiveTimestamp_as_unix_timestamp(&this_arg_conv);
        return ret_val;
 }
@@ -29719,6 +35807,7 @@ int64_t  __attribute__((visibility("default"))) TS_PositiveTimestamp_as_time(uin
        LDKPositiveTimestamp this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = PositiveTimestamp_as_time(&this_arg_conv);
        return ret_val;
 }
@@ -29727,11 +35816,13 @@ uint32_t  __attribute__((visibility("default"))) TS_Invoice_into_signed_raw(uint
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = (this_arg & 1) || (this_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv = Invoice_clone(&this_arg_conv);
        LDKSignedRawInvoice ret_var = Invoice_into_signed_raw(this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -29743,6 +35834,7 @@ uint32_t  __attribute__((visibility("default"))) TS_Invoice_check_signature(uint
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCResult_NoneSemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_NoneSemanticErrorZ), "LDKCResult_NoneSemanticErrorZ");
        *ret_conv = Invoice_check_signature(&this_arg_conv);
        return (uint64_t)ret_conv;
@@ -29752,6 +35844,7 @@ uint32_t  __attribute__((visibility("default"))) TS_Invoice_from_signed(uint32_t
        LDKSignedRawInvoice signed_invoice_conv;
        signed_invoice_conv.inner = (void*)(signed_invoice & (~1));
        signed_invoice_conv.is_owned = (signed_invoice & 1) || (signed_invoice == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(signed_invoice_conv);
        signed_invoice_conv = SignedRawInvoice_clone(&signed_invoice_conv);
        LDKCResult_InvoiceSemanticErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_InvoiceSemanticErrorZ), "LDKCResult_InvoiceSemanticErrorZ");
        *ret_conv = Invoice_from_signed(signed_invoice_conv);
@@ -29762,6 +35855,7 @@ int64_t  __attribute__((visibility("default"))) TS_Invoice_timestamp(uint32_t th
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = Invoice_timestamp(&this_arg_conv);
        return ret_val;
 }
@@ -29770,6 +35864,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_Invoice_payment_hash(uint
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *Invoice_payment_hash(&this_arg_conv), 32);
        return ret_arr;
@@ -29779,6 +35874,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_Invoice_payee_pub_key(uin
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), Invoice_payee_pub_key(&this_arg_conv).compressed_form, 33);
        return ret_arr;
@@ -29788,6 +35884,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_Invoice_payment_secret(ui
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int8_tArray ret_arr = init_arr(32, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), *Invoice_payment_secret(&this_arg_conv), 32);
        return ret_arr;
@@ -29797,11 +35894,13 @@ uint32_t  __attribute__((visibility("default"))) TS_Invoice_features(uint32_t th
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKInvoiceFeatures ret_var = Invoice_features(&this_arg_conv);
        uint64_t ret_ref = 0;
        if ((uint64_t)ret_var.inner > 4096) {
                CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
                ret_ref = (uint64_t)ret_var.inner;
                if (ret_var.is_owned) {
                        ret_ref |= 1;
@@ -29814,6 +35913,7 @@ int8_tArray  __attribute__((visibility("default"))) TS_Invoice_recover_payee_pub
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int8_tArray ret_arr = init_arr(33, sizeof(uint8_t), "Native int8_tArray Bytes");
        memcpy((uint8_t*)(ret_arr + 4), Invoice_recover_payee_pub_key(&this_arg_conv).compressed_form, 33);
        return ret_arr;
@@ -29823,6 +35923,7 @@ int64_t  __attribute__((visibility("default"))) TS_Invoice_expiry_time(uint32_t
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = Invoice_expiry_time(&this_arg_conv);
        return ret_val;
 }
@@ -29831,6 +35932,7 @@ jboolean  __attribute__((visibility("default"))) TS_Invoice_is_expired(uint32_t
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        jboolean ret_val = Invoice_is_expired(&this_arg_conv);
        return ret_val;
 }
@@ -29839,6 +35941,7 @@ int64_t  __attribute__((visibility("default"))) TS_Invoice_min_final_cltv_expiry
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = Invoice_min_final_cltv_expiry(&this_arg_conv);
        return ret_val;
 }
@@ -29847,6 +35950,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_Invoice_private_routes(
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCVec_PrivateRouteZ ret_var = Invoice_private_routes(&this_arg_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_arr(ret_var.datalen, sizeof(uint32_t), "Native uint32_tArray Bytes");
@@ -29856,6 +35960,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_Invoice_private_routes(
                uint64_t ret_conv_14_ref = 0;
                CHECK((((uint64_t)ret_conv_14_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_conv_14_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_14_var);
                ret_conv_14_ref = (uint64_t)ret_conv_14_var.inner;
                if (ret_conv_14_var.is_owned) {
                        ret_conv_14_ref |= 1;
@@ -29871,6 +35976,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_Invoice_route_hints(uin
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCVec_RouteHintZ ret_var = Invoice_route_hints(&this_arg_conv);
        uint32_tArray ret_arr = NULL;
        ret_arr = init_arr(ret_var.datalen, sizeof(uint32_t), "Native uint32_tArray Bytes");
@@ -29880,6 +35986,7 @@ uint32_tArray  __attribute__((visibility("default"))) TS_Invoice_route_hints(uin
                uint64_t ret_conv_11_ref = 0;
                CHECK((((uint64_t)ret_conv_11_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
                CHECK((((uint64_t)&ret_conv_11_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+               CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_conv_11_var);
                ret_conv_11_ref = (uint64_t)ret_conv_11_var.inner;
                if (ret_conv_11_var.is_owned) {
                        ret_conv_11_ref |= 1;
@@ -29895,6 +36002,7 @@ uint32_t  __attribute__((visibility("default"))) TS_Invoice_currency(uint32_t th
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        uint32_t ret_conv = LDKCurrency_to_js(Invoice_currency(&this_arg_conv));
        return ret_conv;
 }
@@ -29903,6 +36011,7 @@ uint32_t  __attribute__((visibility("default"))) TS_Invoice_amount_milli_satoshi
        LDKInvoice this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKCOption_u64Z *ret_copy = MALLOC(sizeof(LDKCOption_u64Z), "LDKCOption_u64Z");
        *ret_copy = Invoice_amount_milli_satoshis(&this_arg_conv);
        uint64_t ret_ref = (uint64_t)ret_copy;
@@ -29920,6 +36029,7 @@ jstring  __attribute__((visibility("default"))) TS_Description_into_inner(uint32
        LDKDescription this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = (this_arg & 1) || (this_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv = Description_clone(&this_arg_conv);
        LDKStr ret_str = Description_into_inner(this_arg_conv);
        jstring ret_conv = str_ref_to_ts(ret_str.chars, ret_str.len);
@@ -29943,6 +36053,7 @@ int64_t  __attribute__((visibility("default"))) TS_ExpiryTime_as_seconds(uint32_
        LDKExpiryTime this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = ExpiryTime_as_seconds(&this_arg_conv);
        return ret_val;
 }
@@ -29951,6 +36062,7 @@ int64_t  __attribute__((visibility("default"))) TS_ExpiryTime_as_duration(uint32
        LDKExpiryTime this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        int64_t ret_val = ExpiryTime_as_duration(&this_arg_conv);
        return ret_val;
 }
@@ -29959,6 +36071,7 @@ uint32_t  __attribute__((visibility("default"))) TS_PrivateRoute_new(uint32_t ho
        LDKRouteHint hops_conv;
        hops_conv.inner = (void*)(hops & (~1));
        hops_conv.is_owned = (hops & 1) || (hops == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(hops_conv);
        hops_conv = RouteHint_clone(&hops_conv);
        LDKCResult_PrivateRouteCreationErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PrivateRouteCreationErrorZ), "LDKCResult_PrivateRouteCreationErrorZ");
        *ret_conv = PrivateRoute_new(hops_conv);
@@ -29969,11 +36082,13 @@ uint32_t  __attribute__((visibility("default"))) TS_PrivateRoute_into_inner(uint
        LDKPrivateRoute this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = (this_arg & 1) || (this_arg == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        this_arg_conv = PrivateRoute_clone(&this_arg_conv);
        LDKRouteHint ret_var = PrivateRoute_into_inner(this_arg_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -30102,6 +36217,18 @@ void  __attribute__((visibility("default"))) TS_SignOrCreationError_free(uint32_
        SignOrCreationError_free(this_ptr_conv);
 }
 
+static inline uint64_t SignOrCreationError_clone_ptr(LDKSignOrCreationError *NONNULL_PTR arg) {
+       LDKSignOrCreationError *ret_copy = MALLOC(sizeof(LDKSignOrCreationError), "LDKSignOrCreationError");
+       *ret_copy = SignOrCreationError_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_SignOrCreationError_clone_ptr(uint32_t arg) {
+       LDKSignOrCreationError* arg_conv = (LDKSignOrCreationError*)arg;
+       int64_t ret_val = SignOrCreationError_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_SignOrCreationError_clone(uint32_t orig) {
        LDKSignOrCreationError* orig_conv = (LDKSignOrCreationError*)orig;
        LDKSignOrCreationError *ret_copy = MALLOC(sizeof(LDKSignOrCreationError), "LDKSignOrCreationError");
@@ -30144,6 +36271,7 @@ void  __attribute__((visibility("default"))) TS_InvoicePayer_free(uint32_t this_
        LDKInvoicePayer this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        InvoicePayer_free(this_obj_conv);
 }
 
@@ -30169,6 +36297,7 @@ void  __attribute__((visibility("default"))) TS_RetryAttempts_free(uint32_t this
        LDKRetryAttempts this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        RetryAttempts_free(this_obj_conv);
 }
 
@@ -30176,6 +36305,7 @@ int64_t  __attribute__((visibility("default"))) TS_RetryAttempts_get_a(uint32_t
        LDKRetryAttempts this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        int64_t ret_val = RetryAttempts_get_a(&this_ptr_conv);
        return ret_val;
 }
@@ -30184,6 +36314,7 @@ void  __attribute__((visibility("default"))) TS_RetryAttempts_set_a(uint32_t thi
        LDKRetryAttempts this_ptr_conv;
        this_ptr_conv.inner = (void*)(this_ptr & (~1));
        this_ptr_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_ptr_conv);
        RetryAttempts_set_a(&this_ptr_conv, val);
 }
 
@@ -30192,6 +36323,7 @@ uint32_t  __attribute__((visibility("default"))) TS_RetryAttempts_new(int64_t a_
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -30199,14 +36331,37 @@ uint32_t  __attribute__((visibility("default"))) TS_RetryAttempts_new(int64_t a_
        return ret_ref;
 }
 
+static inline uint64_t RetryAttempts_clone_ptr(LDKRetryAttempts *NONNULL_PTR arg) {
+       LDKRetryAttempts ret_var = RetryAttempts_clone(arg);
+uint64_t ret_ref = 0;
+CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
+CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
+ret_ref = (uint64_t)ret_var.inner;
+if (ret_var.is_owned) {
+       ret_ref |= 1;
+}
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_RetryAttempts_clone_ptr(uint32_t arg) {
+       LDKRetryAttempts arg_conv;
+       arg_conv.inner = (void*)(arg & (~1));
+       arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(arg_conv);
+       int64_t ret_val = RetryAttempts_clone_ptr(&arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_RetryAttempts_clone(uint32_t orig) {
        LDKRetryAttempts orig_conv;
        orig_conv.inner = (void*)(orig & (~1));
        orig_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(orig_conv);
        LDKRetryAttempts ret_var = RetryAttempts_clone(&orig_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -30218,9 +36373,11 @@ jboolean  __attribute__((visibility("default"))) TS_RetryAttempts_eq(uint32_t a,
        LDKRetryAttempts a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        LDKRetryAttempts b_conv;
        b_conv.inner = (void*)(b & (~1));
        b_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(b_conv);
        jboolean ret_val = RetryAttempts_eq(&a_conv, &b_conv);
        return ret_val;
 }
@@ -30229,6 +36386,7 @@ int64_t  __attribute__((visibility("default"))) TS_RetryAttempts_hash(uint32_t o
        LDKRetryAttempts o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        int64_t ret_val = RetryAttempts_hash(&o_conv);
        return ret_val;
 }
@@ -30242,6 +36400,18 @@ void  __attribute__((visibility("default"))) TS_PaymentError_free(uint32_t this_
        PaymentError_free(this_ptr_conv);
 }
 
+static inline uint64_t PaymentError_clone_ptr(LDKPaymentError *NONNULL_PTR arg) {
+       LDKPaymentError *ret_copy = MALLOC(sizeof(LDKPaymentError), "LDKPaymentError");
+       *ret_copy = PaymentError_clone(arg);
+uint64_t ret_ref = (uint64_t)ret_copy;
+       return ret_ref;
+}
+int64_t  __attribute__((visibility("default"))) TS_PaymentError_clone_ptr(uint32_t arg) {
+       LDKPaymentError* arg_conv = (LDKPaymentError*)arg;
+       int64_t ret_val = PaymentError_clone_ptr(arg_conv);
+       return ret_val;
+}
+
 uint32_t  __attribute__((visibility("default"))) TS_PaymentError_clone(uint32_t orig) {
        LDKPaymentError* orig_conv = (LDKPaymentError*)orig;
        LDKPaymentError *ret_copy = MALLOC(sizeof(LDKPaymentError), "LDKPaymentError");
@@ -30262,6 +36432,7 @@ uint32_t  __attribute__((visibility("default"))) TS_PaymentError_routing(uint32_
        LDKLightningError a_conv;
        a_conv.inner = (void*)(a & (~1));
        a_conv.is_owned = (a & 1) || (a == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(a_conv);
        a_conv = LightningError_clone(&a_conv);
        LDKPaymentError *ret_copy = MALLOC(sizeof(LDKPaymentError), "LDKPaymentError");
        *ret_copy = PaymentError_routing(a_conv);
@@ -30290,6 +36461,7 @@ uint32_t  __attribute__((visibility("default"))) TS_InvoicePayer_new(uint32_t pa
        LDKLockableScore scorer_conv;
        scorer_conv.inner = (void*)(scorer & (~1));
        scorer_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(scorer_conv);
        void* logger_ptr = (void*)(((uint64_t)logger) & ~1);
        CHECK_ACCESS(logger_ptr);
        LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
@@ -30299,11 +36471,13 @@ uint32_t  __attribute__((visibility("default"))) TS_InvoicePayer_new(uint32_t pa
        LDKRetryAttempts retry_attempts_conv;
        retry_attempts_conv.inner = (void*)(retry_attempts & (~1));
        retry_attempts_conv.is_owned = (retry_attempts & 1) || (retry_attempts == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(retry_attempts_conv);
        retry_attempts_conv = RetryAttempts_clone(&retry_attempts_conv);
        LDKInvoicePayer ret_var = InvoicePayer_new(payer_conv, router_conv, &scorer_conv, logger_conv, event_handler_conv, retry_attempts_conv);
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -30315,9 +36489,11 @@ uint32_t  __attribute__((visibility("default"))) TS_InvoicePayer_pay_invoice(uin
        LDKInvoicePayer this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKInvoice invoice_conv;
        invoice_conv.inner = (void*)(invoice & (~1));
        invoice_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(invoice_conv);
        LDKCResult_PaymentIdPaymentErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentIdPaymentErrorZ), "LDKCResult_PaymentIdPaymentErrorZ");
        *ret_conv = InvoicePayer_pay_invoice(&this_arg_conv, &invoice_conv);
        return (uint64_t)ret_conv;
@@ -30327,9 +36503,11 @@ uint32_t  __attribute__((visibility("default"))) TS_InvoicePayer_pay_zero_value_
        LDKInvoicePayer this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKInvoice invoice_conv;
        invoice_conv.inner = (void*)(invoice & (~1));
        invoice_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(invoice_conv);
        LDKCResult_PaymentIdPaymentErrorZ* ret_conv = MALLOC(sizeof(LDKCResult_PaymentIdPaymentErrorZ), "LDKCResult_PaymentIdPaymentErrorZ");
        *ret_conv = InvoicePayer_pay_zero_value_invoice(&this_arg_conv, &invoice_conv, amount_msats);
        return (uint64_t)ret_conv;
@@ -30339,6 +36517,7 @@ void  __attribute__((visibility("default"))) TS_InvoicePayer_remove_cached_payme
        LDKInvoicePayer this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        unsigned char payment_hash_arr[32];
        CHECK(*((uint32_t*)payment_hash) == 32);
        memcpy(payment_hash_arr, (uint8_t*)(payment_hash + 4), 32);
@@ -30350,6 +36529,7 @@ uint32_t  __attribute__((visibility("default"))) TS_InvoicePayer_as_EventHandler
        LDKInvoicePayer this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKEventHandler* ret_ret = MALLOC(sizeof(LDKEventHandler), "LDKEventHandler");
        *ret_ret = InvoicePayer_as_EventHandler(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -30359,6 +36539,7 @@ uint32_t  __attribute__((visibility("default"))) TS_create_invoice_from_channelm
        LDKChannelManager channelmanager_conv;
        channelmanager_conv.inner = (void*)(channelmanager & (~1));
        channelmanager_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(channelmanager_conv);
        void* keys_manager_ptr = (void*)(((uint64_t)keys_manager) & ~1);
        CHECK_ACCESS(keys_manager_ptr);
        LDKKeysInterface keys_manager_conv = *(LDKKeysInterface*)(keys_manager_ptr);
@@ -30377,6 +36558,7 @@ void  __attribute__((visibility("default"))) TS_DefaultRouter_free(uint32_t this
        LDKDefaultRouter this_obj_conv;
        this_obj_conv.inner = (void*)(this_obj & (~1));
        this_obj_conv.is_owned = (this_obj & 1) || (this_obj == 0);
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_obj_conv);
        DefaultRouter_free(this_obj_conv);
 }
 
@@ -30384,6 +36566,7 @@ uint32_t  __attribute__((visibility("default"))) TS_DefaultRouter_new(uint32_t n
        LDKNetworkGraph network_graph_conv;
        network_graph_conv.inner = (void*)(network_graph & (~1));
        network_graph_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(network_graph_conv);
        void* logger_ptr = (void*)(((uint64_t)logger) & ~1);
        CHECK_ACCESS(logger_ptr);
        LDKLogger logger_conv = *(LDKLogger*)(logger_ptr);
@@ -30391,6 +36574,7 @@ uint32_t  __attribute__((visibility("default"))) TS_DefaultRouter_new(uint32_t n
        uint64_t ret_ref = 0;
        CHECK((((uint64_t)ret_var.inner) & 1) == 0); // We rely on a free low bit, malloc guarantees this.
        CHECK((((uint64_t)&ret_var) & 1) == 0); // We rely on a free low bit, pointer alignment guarantees this.
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(ret_var);
        ret_ref = (uint64_t)ret_var.inner;
        if (ret_var.is_owned) {
                ret_ref |= 1;
@@ -30402,6 +36586,7 @@ uint32_t  __attribute__((visibility("default"))) TS_DefaultRouter_as_Router(uint
        LDKDefaultRouter this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKRouter* ret_ret = MALLOC(sizeof(LDKRouter), "LDKRouter");
        *ret_ret = DefaultRouter_as_Router(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -30411,6 +36596,7 @@ uint32_t  __attribute__((visibility("default"))) TS_ChannelManager_as_Payer(uint
        LDKChannelManager this_arg_conv;
        this_arg_conv.inner = (void*)(this_arg & (~1));
        this_arg_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(this_arg_conv);
        LDKPayer* ret_ret = MALLOC(sizeof(LDKPayer), "LDKPayer");
        *ret_ret = ChannelManager_as_Payer(&this_arg_conv);
        return (uint64_t)ret_ret;
@@ -30441,6 +36627,7 @@ jstring  __attribute__((visibility("default"))) TS_Invoice_to_str(uint32_t o) {
        LDKInvoice o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        LDKStr ret_str = Invoice_to_str(&o_conv);
        jstring ret_conv = str_ref_to_ts(ret_str.chars, ret_str.len);
        Str_free(ret_str);
@@ -30451,6 +36638,7 @@ jstring  __attribute__((visibility("default"))) TS_SignedRawInvoice_to_str(uint3
        LDKSignedRawInvoice o_conv;
        o_conv.inner = (void*)(o & (~1));
        o_conv.is_owned = false;
+       CHECK_INNER_FIELD_ACCESS_OR_NULL(o_conv);
        LDKStr ret_str = SignedRawInvoice_to_str(&o_conv);
        jstring ret_conv = str_ref_to_ts(ret_str.chars, ret_str.len);
        Str_free(ret_str);
index 1257092210a1eeebf8e956a4b0225e1414e22c54..045a1f3513866d3c947b4e3485fc6172ddcdd40d 100644 (file)
@@ -151,7 +151,6 @@ public static native long vec_slice_len(long vec);
 public static native long new_empty_slice_vec();
 */
 
-       public static native long LDKCVec_u8Z_new(number[] elems);
        // struct LDKCVec_u8Z TxOut_get_script_pubkey (struct LDKTxOut* thing)
        export function TxOut_get_script_pubkey(thing: number): Uint8Array {
                if(!isWasmInitialized) {
@@ -168,19 +167,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.TxOut_get_value(thing);
                return nativeResponseValue;
        }
-       public static native boolean LDKCResult_SecretKeyErrorZ_result_ok(long arg);
        public static native Uint8Array LDKCResult_SecretKeyErrorZ_get_ok(long arg);
        public static native Secp256k1Error LDKCResult_SecretKeyErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_PublicKeyErrorZ_result_ok(long arg);
        public static native Uint8Array LDKCResult_PublicKeyErrorZ_get_ok(long arg);
        public static native Secp256k1Error LDKCResult_PublicKeyErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_TxCreationKeysDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_TxCreationKeysDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_TxCreationKeysDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_ChannelPublicKeysDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_ChannelPublicKeysDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_ChannelPublicKeysDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_TxCreationKeysErrorZ_result_ok(long arg);
        public static native number LDKCResult_TxCreationKeysErrorZ_get_ok(long arg);
        public static native Secp256k1Error LDKCResult_TxCreationKeysErrorZ_get_err(long arg);
        public static class LDKCOption_u32Z {
@@ -196,53 +190,36 @@ public static native long new_empty_slice_vec();
        }
        static { LDKCOption_u32Z.init(); }
        public static native LDKCOption_u32Z LDKCOption_u32Z_ref_from_ptr(long ptr);
-       public static native boolean LDKCResult_HTLCOutputInCommitmentDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_HTLCOutputInCommitmentDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_HTLCOutputInCommitmentDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_ChannelTransactionParametersDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_ChannelTransactionParametersDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_ChannelTransactionParametersDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_HolderCommitmentTransactionDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_HolderCommitmentTransactionDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_HolderCommitmentTransactionDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_BuiltCommitmentTransactionDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_BuiltCommitmentTransactionDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_BuiltCommitmentTransactionDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_TrustedClosingTransactionNoneZ_result_ok(long arg);
        public static native number LDKCResult_TrustedClosingTransactionNoneZ_get_ok(long arg);
        public static native void LDKCResult_TrustedClosingTransactionNoneZ_get_err(long arg);
-       public static native boolean LDKCResult_CommitmentTransactionDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_CommitmentTransactionDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_CommitmentTransactionDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_TrustedCommitmentTransactionNoneZ_result_ok(long arg);
        public static native number LDKCResult_TrustedCommitmentTransactionNoneZ_get_ok(long arg);
        public static native void LDKCResult_TrustedCommitmentTransactionNoneZ_get_err(long arg);
-       public static native boolean LDKCResult_CVec_SignatureZNoneZ_result_ok(long arg);
        public static native Uint8Array[] LDKCResult_CVec_SignatureZNoneZ_get_ok(long arg);
        public static native void LDKCResult_CVec_SignatureZNoneZ_get_err(long arg);
-       public static native boolean LDKCResult_ShutdownScriptDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_ShutdownScriptDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_ShutdownScriptDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_ShutdownScriptInvalidShutdownScriptZ_result_ok(long arg);
        public static native number LDKCResult_ShutdownScriptInvalidShutdownScriptZ_get_ok(long arg);
        public static native number LDKCResult_ShutdownScriptInvalidShutdownScriptZ_get_err(long arg);
-       public static native boolean LDKCResult_NoneErrorZ_result_ok(long arg);
        public static native void LDKCResult_NoneErrorZ_get_ok(long arg);
        public static native IOError LDKCResult_NoneErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_RouteHopDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_RouteHopDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_RouteHopDecodeErrorZ_get_err(long arg);
-       public static native long LDKCVec_RouteHopZ_new(number[] elems);
-       public static native boolean LDKCResult_RouteDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_RouteDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_RouteDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_RouteParametersDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_RouteParametersDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_RouteParametersDecodeErrorZ_get_err(long arg);
-       public static native long LDKCVec_RouteHintZ_new(number[] elems);
        public static class LDKCOption_u64Z {
                private LDKCOption_u64Z() {}
                export class Some extends LDKCOption_u64Z {
@@ -256,21 +233,14 @@ public static native long new_empty_slice_vec();
        }
        static { LDKCOption_u64Z.init(); }
        public static native LDKCOption_u64Z LDKCOption_u64Z_ref_from_ptr(long ptr);
-       public static native boolean LDKCResult_PayeeDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_PayeeDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_PayeeDecodeErrorZ_get_err(long arg);
-       public static native long LDKCVec_RouteHintHopZ_new(number[] elems);
-       public static native boolean LDKCResult_RouteHintDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_RouteHintDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_RouteHintDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_RouteHintHopDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_RouteHintHopDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_RouteHintHopDecodeErrorZ_get_err(long arg);
-       public static native long LDKCVec_ChannelDetailsZ_new(number[] elems);
-       public static native boolean LDKCResult_RouteLightningErrorZ_result_ok(long arg);
        public static native number LDKCResult_RouteLightningErrorZ_get_ok(long arg);
        public static native number LDKCResult_RouteLightningErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_TxOutAccessErrorZ_result_ok(long arg);
        public static native number LDKCResult_TxOutAccessErrorZ_get_ok(long arg);
        public static native AccessError LDKCResult_TxOutAccessErrorZ_get_err(long arg);
        // uintptr_t C2Tuple_usizeTransactionZ_get_a(LDKC2Tuple_usizeTransactionZ *NONNULL_PTR tuple);
@@ -289,8 +259,6 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.C2Tuple_usizeTransactionZ_get_b(tuple);
                return decodeArray(nativeResponseValue);
        }
-       public static native long LDKCVec_C2Tuple_usizeTransactionZZ_new(number[] elems);
-       public static native boolean LDKCResult_NoneChannelMonitorUpdateErrZ_result_ok(long arg);
        public static native void LDKCResult_NoneChannelMonitorUpdateErrZ_get_ok(long arg);
        public static native ChannelMonitorUpdateErr LDKCResult_NoneChannelMonitorUpdateErrZ_get_err(long arg);
        public static class LDKMonitorEvent {
@@ -316,7 +284,6 @@ public static native long new_empty_slice_vec();
        }
        static { LDKMonitorEvent.init(); }
        public static native LDKMonitorEvent LDKMonitorEvent_ref_from_ptr(long ptr);
-       public static native long LDKCVec_MonitorEventZ_new(number[] elems);
        public static class LDKCOption_C2Tuple_usizeTransactionZZ {
                private LDKCOption_C2Tuple_usizeTransactionZZ() {}
                export class Some extends LDKCOption_C2Tuple_usizeTransactionZZ {
@@ -330,6 +297,50 @@ public static native long new_empty_slice_vec();
        }
        static { LDKCOption_C2Tuple_usizeTransactionZZ.init(); }
        public static native LDKCOption_C2Tuple_usizeTransactionZZ LDKCOption_C2Tuple_usizeTransactionZZ_ref_from_ptr(long ptr);
+       public static class LDKClosureReason {
+               private LDKClosureReason() {}
+               export class CounterpartyForceClosed extends LDKClosureReason {
+                       public String peer_msg;
+                       CounterpartyForceClosed(String peer_msg) { this.peer_msg = peer_msg; }
+               }
+               export class HolderForceClosed extends LDKClosureReason {
+                       HolderForceClosed() { }
+               }
+               export class CooperativeClosure extends LDKClosureReason {
+                       CooperativeClosure() { }
+               }
+               export class CommitmentTxConfirmed extends LDKClosureReason {
+                       CommitmentTxConfirmed() { }
+               }
+               export class ProcessingError extends LDKClosureReason {
+                       public String err;
+                       ProcessingError(String err) { this.err = err; }
+               }
+               export class DisconnectedPeer extends LDKClosureReason {
+                       DisconnectedPeer() { }
+               }
+               export class OutdatedChannelManager extends LDKClosureReason {
+                       OutdatedChannelManager() { }
+               }
+               static native void init();
+       }
+       static { LDKClosureReason.init(); }
+       public static native LDKClosureReason LDKClosureReason_ref_from_ptr(long ptr);
+       public static class LDKCOption_ClosureReasonZ {
+               private LDKCOption_ClosureReasonZ() {}
+               export class Some extends LDKCOption_ClosureReasonZ {
+                       public number some;
+                       Some(number some) { this.some = some; }
+               }
+               export class None extends LDKCOption_ClosureReasonZ {
+                       None() { }
+               }
+               static native void init();
+       }
+       static { LDKCOption_ClosureReasonZ.init(); }
+       public static native LDKCOption_ClosureReasonZ LDKCOption_ClosureReasonZ_ref_from_ptr(long ptr);
+       public static native number LDKCResult_COption_ClosureReasonZDecodeErrorZ_get_ok(long arg);
+       public static native number LDKCResult_COption_ClosureReasonZDecodeErrorZ_get_err(long arg);
        public static class LDKNetworkUpdate {
                private LDKNetworkUpdate() {}
                export class ChannelUpdateMessage extends LDKNetworkUpdate {
@@ -382,7 +393,98 @@ public static native long new_empty_slice_vec();
        }
        static { LDKSpendableOutputDescriptor.init(); }
        public static native LDKSpendableOutputDescriptor LDKSpendableOutputDescriptor_ref_from_ptr(long ptr);
-       public static native long LDKCVec_SpendableOutputDescriptorZ_new(number[] elems);
+       public static class LDKPaymentPurpose {
+               private LDKPaymentPurpose() {}
+               export class InvoicePayment extends LDKPaymentPurpose {
+                       public Uint8Array payment_preimage;
+                       public Uint8Array payment_secret;
+                       public number user_payment_id;
+                       InvoicePayment(Uint8Array payment_preimage, Uint8Array payment_secret, number user_payment_id) { this.payment_preimage = payment_preimage; this.payment_secret = payment_secret; this.user_payment_id = user_payment_id; }
+               }
+               export class SpontaneousPayment extends LDKPaymentPurpose {
+                       public Uint8Array spontaneous_payment;
+                       SpontaneousPayment(Uint8Array spontaneous_payment) { this.spontaneous_payment = spontaneous_payment; }
+               }
+               static native void init();
+       }
+       static { LDKPaymentPurpose.init(); }
+       public static native LDKPaymentPurpose LDKPaymentPurpose_ref_from_ptr(long ptr);
+       public static class LDKEvent {
+               private LDKEvent() {}
+               export class FundingGenerationReady extends LDKEvent {
+                       public Uint8Array temporary_channel_id;
+                       public number channel_value_satoshis;
+                       public Uint8Array output_script;
+                       public number user_channel_id;
+                       FundingGenerationReady(Uint8Array temporary_channel_id, number channel_value_satoshis, Uint8Array output_script, number user_channel_id) { this.temporary_channel_id = temporary_channel_id; this.channel_value_satoshis = channel_value_satoshis; this.output_script = output_script; this.user_channel_id = user_channel_id; }
+               }
+               export class PaymentReceived extends LDKEvent {
+                       public Uint8Array payment_hash;
+                       public number amt;
+                       public number purpose;
+                       PaymentReceived(Uint8Array payment_hash, number amt, number purpose) { this.payment_hash = payment_hash; this.amt = amt; this.purpose = purpose; }
+               }
+               export class PaymentSent extends LDKEvent {
+                       public Uint8Array payment_id;
+                       public Uint8Array payment_preimage;
+                       public Uint8Array payment_hash;
+                       public number fee_paid_msat;
+                       PaymentSent(Uint8Array payment_id, Uint8Array payment_preimage, Uint8Array payment_hash, number fee_paid_msat) { this.payment_id = payment_id; this.payment_preimage = payment_preimage; this.payment_hash = payment_hash; this.fee_paid_msat = fee_paid_msat; }
+               }
+               export class PaymentPathFailed extends LDKEvent {
+                       public Uint8Array payment_id;
+                       public Uint8Array payment_hash;
+                       public boolean rejected_by_dest;
+                       public number network_update;
+                       public boolean all_paths_failed;
+                       public number[] path;
+                       public number short_channel_id;
+                       public number retry;
+                       PaymentPathFailed(Uint8Array payment_id, Uint8Array payment_hash, boolean rejected_by_dest, number network_update, boolean all_paths_failed, number[] path, number short_channel_id, number retry) { this.payment_id = payment_id; this.payment_hash = payment_hash; this.rejected_by_dest = rejected_by_dest; this.network_update = network_update; this.all_paths_failed = all_paths_failed; this.path = path; this.short_channel_id = short_channel_id; this.retry = retry; }
+               }
+               export class PendingHTLCsForwardable extends LDKEvent {
+                       public number time_forwardable;
+                       PendingHTLCsForwardable(number time_forwardable) { this.time_forwardable = time_forwardable; }
+               }
+               export class SpendableOutputs extends LDKEvent {
+                       public number[] outputs;
+                       SpendableOutputs(number[] outputs) { this.outputs = outputs; }
+               }
+               export class PaymentForwarded extends LDKEvent {
+                       public number fee_earned_msat;
+                       public boolean claim_from_onchain_tx;
+                       PaymentForwarded(number fee_earned_msat, boolean claim_from_onchain_tx) { this.fee_earned_msat = fee_earned_msat; this.claim_from_onchain_tx = claim_from_onchain_tx; }
+               }
+               export class ChannelClosed extends LDKEvent {
+                       public Uint8Array channel_id;
+                       public number user_channel_id;
+                       public number reason;
+                       ChannelClosed(Uint8Array channel_id, number user_channel_id, number reason) { this.channel_id = channel_id; this.user_channel_id = user_channel_id; this.reason = reason; }
+               }
+               export class DiscardFunding extends LDKEvent {
+                       public Uint8Array channel_id;
+                       public Uint8Array transaction;
+                       DiscardFunding(Uint8Array channel_id, Uint8Array transaction) { this.channel_id = channel_id; this.transaction = transaction; }
+               }
+               static native void init();
+       }
+       static { LDKEvent.init(); }
+       public static native LDKEvent LDKEvent_ref_from_ptr(long ptr);
+       public static class LDKCOption_EventZ {
+               private LDKCOption_EventZ() {}
+               export class Some extends LDKCOption_EventZ {
+                       public number some;
+                       Some(number some) { this.some = some; }
+               }
+               export class None extends LDKCOption_EventZ {
+                       None() { }
+               }
+               static native void init();
+       }
+       static { LDKCOption_EventZ.init(); }
+       public static native LDKCOption_EventZ LDKCOption_EventZ_ref_from_ptr(long ptr);
+       public static native number LDKCResult_COption_EventZDecodeErrorZ_get_ok(long arg);
+       public static native number LDKCResult_COption_EventZDecodeErrorZ_get_err(long arg);
        public static class LDKErrorAction {
                private LDKErrorAction() {}
                export class DisconnectPeer extends LDKErrorAction {
@@ -503,35 +605,24 @@ public static native long new_empty_slice_vec();
        }
        static { LDKMessageSendEvent.init(); }
        public static native LDKMessageSendEvent LDKMessageSendEvent_ref_from_ptr(long ptr);
-       public static native long LDKCVec_MessageSendEventZ_new(number[] elems);
-       public static native boolean LDKCResult_InitFeaturesDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_InitFeaturesDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_InitFeaturesDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_NodeFeaturesDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_NodeFeaturesDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_NodeFeaturesDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_ChannelFeaturesDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_ChannelFeaturesDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_ChannelFeaturesDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_InvoiceFeaturesDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_InvoiceFeaturesDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_InvoiceFeaturesDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_ScoringParametersDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_ScoringParametersDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_ScoringParametersDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_ScorerDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_ScorerDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_ScorerDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_SpendableOutputDescriptorDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_SpendableOutputDescriptorDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_SpendableOutputDescriptorDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_NoneNoneZ_result_ok(long arg);
        public static native void LDKCResult_NoneNoneZ_get_ok(long arg);
        public static native void LDKCResult_NoneNoneZ_get_err(long arg);
        // struct LDKSignature C2Tuple_SignatureCVec_SignatureZZ_get_a(LDKC2Tuple_SignatureCVec_SignatureZZ *NONNULL_PTR tuple);
@@ -550,10 +641,8 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.C2Tuple_SignatureCVec_SignatureZZ_get_b(tuple);
                return nativeResponseValue;
        }
-       public static native boolean LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_result_ok(long arg);
        public static native number LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_get_ok(long arg);
        public static native void LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_get_err(long arg);
-       public static native boolean LDKCResult_SignatureNoneZ_result_ok(long arg);
        public static native Uint8Array LDKCResult_SignatureNoneZ_get_ok(long arg);
        public static native void LDKCResult_SignatureNoneZ_get_err(long arg);
 
@@ -720,20 +809,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.Sign_write(this_arg);
                return decodeArray(nativeResponseValue);
        }
-       public static native boolean LDKCResult_SignDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_SignDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_SignDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_RecoverableSignatureNoneZ_result_ok(long arg);
        public static native Uint8Array LDKCResult_RecoverableSignatureNoneZ_get_ok(long arg);
        public static native void LDKCResult_RecoverableSignatureNoneZ_get_err(long arg);
-       public static native boolean LDKCResult_CVec_CVec_u8ZZNoneZ_result_ok(long arg);
        public static native Uint8Array[] LDKCResult_CVec_CVec_u8ZZNoneZ_get_ok(long arg);
        public static native void LDKCResult_CVec_CVec_u8ZZNoneZ_get_err(long arg);
-       public static native boolean LDKCResult_InMemorySignerDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_InMemorySignerDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_InMemorySignerDecodeErrorZ_get_err(long arg);
-       public static native long LDKCVec_TxOutZ_new(number[] elems);
-       public static native boolean LDKCResult_TransactionNoneZ_result_ok(long arg);
        public static native Uint8Array LDKCResult_TransactionNoneZ_get_ok(long arg);
        public static native void LDKCResult_TransactionNoneZ_get_err(long arg);
        // struct LDKThirtyTwoBytes C2Tuple_BlockHashChannelMonitorZ_get_a(LDKC2Tuple_BlockHashChannelMonitorZ *NONNULL_PTR tuple);
@@ -752,8 +835,6 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.C2Tuple_BlockHashChannelMonitorZ_get_b(tuple);
                return nativeResponseValue;
        }
-       public static native long LDKCVec_C2Tuple_BlockHashChannelMonitorZZ_new(number[] elems);
-       public static native boolean LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_result_ok(long arg);
        public static native number[] LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_get_ok(long arg);
        public static native IOError LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_get_err(long arg);
        public static class LDKCOption_u16Z {
@@ -799,12 +880,8 @@ public static native long new_empty_slice_vec();
        }
        static { LDKAPIError.init(); }
        public static native LDKAPIError LDKAPIError_ref_from_ptr(long ptr);
-       public static native boolean LDKCResult_NoneAPIErrorZ_result_ok(long arg);
        public static native void LDKCResult_NoneAPIErrorZ_get_ok(long arg);
        public static native number LDKCResult_NoneAPIErrorZ_get_err(long arg);
-       public static native long LDKCVec_CResult_NoneAPIErrorZZ_new(number[] elems);
-       public static native long LDKCVec_APIErrorZ_new(number[] elems);
-       public static native boolean LDKCResult__u832APIErrorZ_result_ok(long arg);
        public static native Uint8Array LDKCResult__u832APIErrorZ_get_ok(long arg);
        public static native number LDKCResult__u832APIErrorZ_get_err(long arg);
        public static class LDKPaymentSendFailure {
@@ -831,10 +908,8 @@ public static native long new_empty_slice_vec();
        }
        static { LDKPaymentSendFailure.init(); }
        public static native LDKPaymentSendFailure LDKPaymentSendFailure_ref_from_ptr(long ptr);
-       public static native boolean LDKCResult_PaymentIdPaymentSendFailureZ_result_ok(long arg);
        public static native Uint8Array LDKCResult_PaymentIdPaymentSendFailureZ_get_ok(long arg);
        public static native number LDKCResult_PaymentIdPaymentSendFailureZ_get_err(long arg);
-       public static native boolean LDKCResult_NonePaymentSendFailureZ_result_ok(long arg);
        public static native void LDKCResult_NonePaymentSendFailureZ_get_ok(long arg);
        public static native number LDKCResult_NonePaymentSendFailureZ_get_err(long arg);
        // struct LDKThirtyTwoBytes C2Tuple_PaymentHashPaymentIdZ_get_a(LDKC2Tuple_PaymentHashPaymentIdZ *NONNULL_PTR tuple);
@@ -853,7 +928,6 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.C2Tuple_PaymentHashPaymentIdZ_get_b(tuple);
                return decodeArray(nativeResponseValue);
        }
-       public static native boolean LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_result_ok(long arg);
        public static native number LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_get_ok(long arg);
        public static native number LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_get_err(long arg);
        public static class LDKNetAddress {
@@ -884,7 +958,6 @@ public static native long new_empty_slice_vec();
        }
        static { LDKNetAddress.init(); }
        public static native LDKNetAddress LDKNetAddress_ref_from_ptr(long ptr);
-       public static native long LDKCVec_NetAddressZ_new(number[] elems);
        // struct LDKThirtyTwoBytes C2Tuple_PaymentHashPaymentSecretZ_get_a(LDKC2Tuple_PaymentHashPaymentSecretZ *NONNULL_PTR tuple);
        export function C2Tuple_PaymentHashPaymentSecretZ_get_a(tuple: number): Uint8Array {
                if(!isWasmInitialized) {
@@ -901,10 +974,8 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.C2Tuple_PaymentHashPaymentSecretZ_get_b(tuple);
                return decodeArray(nativeResponseValue);
        }
-       public static native boolean LDKCResult_PaymentSecretAPIErrorZ_result_ok(long arg);
        public static native Uint8Array LDKCResult_PaymentSecretAPIErrorZ_get_ok(long arg);
        public static native number LDKCResult_PaymentSecretAPIErrorZ_get_err(long arg);
-       public static native long LDKCVec_ChannelMonitorZ_new(number[] elems);
 
 
 
@@ -1079,7 +1150,7 @@ public static native long new_empty_slice_vec();
 // OUT_TYPESCRIPT_BINDINGS :: MAP_TRAIT :: START
 
                export interface LDKLogger {
-                       log (record: String): void;
+                       log (record: number): void;
                }
 
                export function LDKLogger_new(impl: LDKLogger): number {
@@ -1105,13 +1176,10 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.C2Tuple_BlockHashChannelManagerZ_get_b(tuple);
                return nativeResponseValue;
        }
-       public static native boolean LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_ChannelConfigDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_ChannelConfigDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_ChannelConfigDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_OutPointDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_OutPointDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_OutPointDecodeErrorZ_get_err(long arg);
 
@@ -1169,7 +1237,6 @@ public static native long new_empty_slice_vec();
        }
        static { LDKCOption_TypeZ.init(); }
        public static native LDKCOption_TypeZ LDKCOption_TypeZ_ref_from_ptr(long ptr);
-       public static native boolean LDKCResult_COption_TypeZDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_COption_TypeZDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_COption_TypeZDecodeErrorZ_get_err(long arg);
        public static class LDKPaymentError {
@@ -1190,16 +1257,12 @@ public static native long new_empty_slice_vec();
        }
        static { LDKPaymentError.init(); }
        public static native LDKPaymentError LDKPaymentError_ref_from_ptr(long ptr);
-       public static native boolean LDKCResult_PaymentIdPaymentErrorZ_result_ok(long arg);
        public static native Uint8Array LDKCResult_PaymentIdPaymentErrorZ_get_ok(long arg);
        public static native number LDKCResult_PaymentIdPaymentErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_SiPrefixNoneZ_result_ok(long arg);
        public static native SiPrefix LDKCResult_SiPrefixNoneZ_get_ok(long arg);
        public static native void LDKCResult_SiPrefixNoneZ_get_err(long arg);
-       public static native boolean LDKCResult_InvoiceNoneZ_result_ok(long arg);
        public static native number LDKCResult_InvoiceNoneZ_get_ok(long arg);
        public static native void LDKCResult_InvoiceNoneZ_get_err(long arg);
-       public static native boolean LDKCResult_SignedRawInvoiceNoneZ_result_ok(long arg);
        public static native number LDKCResult_SignedRawInvoiceNoneZ_get_ok(long arg);
        public static native void LDKCResult_SignedRawInvoiceNoneZ_get_err(long arg);
        // struct LDKRawInvoice C3Tuple_RawInvoice_u832InvoiceSignatureZ_get_a(LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ *NONNULL_PTR tuple);
@@ -1226,38 +1289,41 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.C3Tuple_RawInvoice_u832InvoiceSignatureZ_get_c(tuple);
                return nativeResponseValue;
        }
-       public static native boolean LDKCResult_PayeePubKeyErrorZ_result_ok(long arg);
        public static native number LDKCResult_PayeePubKeyErrorZ_get_ok(long arg);
        public static native Secp256k1Error LDKCResult_PayeePubKeyErrorZ_get_err(long arg);
-       public static native long LDKCVec_PrivateRouteZ_new(number[] elems);
-       public static native boolean LDKCResult_PositiveTimestampCreationErrorZ_result_ok(long arg);
        public static native number LDKCResult_PositiveTimestampCreationErrorZ_get_ok(long arg);
        public static native CreationError LDKCResult_PositiveTimestampCreationErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_NoneSemanticErrorZ_result_ok(long arg);
        public static native void LDKCResult_NoneSemanticErrorZ_get_ok(long arg);
        public static native SemanticError LDKCResult_NoneSemanticErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_InvoiceSemanticErrorZ_result_ok(long arg);
        public static native number LDKCResult_InvoiceSemanticErrorZ_get_ok(long arg);
        public static native SemanticError LDKCResult_InvoiceSemanticErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_DescriptionCreationErrorZ_result_ok(long arg);
        public static native number LDKCResult_DescriptionCreationErrorZ_get_ok(long arg);
        public static native CreationError LDKCResult_DescriptionCreationErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_ExpiryTimeCreationErrorZ_result_ok(long arg);
        public static native number LDKCResult_ExpiryTimeCreationErrorZ_get_ok(long arg);
        public static native CreationError LDKCResult_ExpiryTimeCreationErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_PrivateRouteCreationErrorZ_result_ok(long arg);
        public static native number LDKCResult_PrivateRouteCreationErrorZ_get_ok(long arg);
        public static native CreationError LDKCResult_PrivateRouteCreationErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_StringErrorZ_result_ok(long arg);
        public static native String LDKCResult_StringErrorZ_get_ok(long arg);
        public static native Secp256k1Error LDKCResult_StringErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_ChannelMonitorUpdateDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_ChannelMonitorUpdateDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_ChannelMonitorUpdateDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_HTLCUpdateDecodeErrorZ_result_ok(long arg);
+       public static class LDKCOption_MonitorEventZ {
+               private LDKCOption_MonitorEventZ() {}
+               export class Some extends LDKCOption_MonitorEventZ {
+                       public number some;
+                       Some(number some) { this.some = some; }
+               }
+               export class None extends LDKCOption_MonitorEventZ {
+                       None() { }
+               }
+               static native void init();
+       }
+       static { LDKCOption_MonitorEventZ.init(); }
+       public static native LDKCOption_MonitorEventZ LDKCOption_MonitorEventZ_ref_from_ptr(long ptr);
+       public static native number LDKCResult_COption_MonitorEventZDecodeErrorZ_get_ok(long arg);
+       public static native number LDKCResult_COption_MonitorEventZDecodeErrorZ_get_err(long arg);
        public static native number LDKCResult_HTLCUpdateDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_HTLCUpdateDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_NoneMonitorUpdateErrorZ_result_ok(long arg);
        public static native void LDKCResult_NoneMonitorUpdateErrorZ_get_ok(long arg);
        public static native number LDKCResult_NoneMonitorUpdateErrorZ_get_err(long arg);
        // struct LDKOutPoint C2Tuple_OutPointScriptZ_get_a(LDKC2Tuple_OutPointScriptZ *NONNULL_PTR tuple);
@@ -1292,7 +1358,6 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.C2Tuple_u32ScriptZ_get_b(tuple);
                return decodeArray(nativeResponseValue);
        }
-       public static native long LDKCVec_C2Tuple_u32ScriptZZ_new(number[] elems);
        // struct LDKThirtyTwoBytes C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_get_a(LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ *NONNULL_PTR tuple);
        export function C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_get_a(tuple: number): Uint8Array {
                if(!isWasmInitialized) {
@@ -1309,114 +1374,6 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_get_b(tuple);
                return nativeResponseValue;
        }
-       public static native long LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZZ_new(number[] elems);
-       public static class LDKPaymentPurpose {
-               private LDKPaymentPurpose() {}
-               export class InvoicePayment extends LDKPaymentPurpose {
-                       public Uint8Array payment_preimage;
-                       public Uint8Array payment_secret;
-                       public number user_payment_id;
-                       InvoicePayment(Uint8Array payment_preimage, Uint8Array payment_secret, number user_payment_id) { this.payment_preimage = payment_preimage; this.payment_secret = payment_secret; this.user_payment_id = user_payment_id; }
-               }
-               export class SpontaneousPayment extends LDKPaymentPurpose {
-                       public Uint8Array spontaneous_payment;
-                       SpontaneousPayment(Uint8Array spontaneous_payment) { this.spontaneous_payment = spontaneous_payment; }
-               }
-               static native void init();
-       }
-       static { LDKPaymentPurpose.init(); }
-       public static native LDKPaymentPurpose LDKPaymentPurpose_ref_from_ptr(long ptr);
-       public static class LDKClosureReason {
-               private LDKClosureReason() {}
-               export class CounterpartyForceClosed extends LDKClosureReason {
-                       public String peer_msg;
-                       CounterpartyForceClosed(String peer_msg) { this.peer_msg = peer_msg; }
-               }
-               export class HolderForceClosed extends LDKClosureReason {
-                       HolderForceClosed() { }
-               }
-               export class CooperativeClosure extends LDKClosureReason {
-                       CooperativeClosure() { }
-               }
-               export class CommitmentTxConfirmed extends LDKClosureReason {
-                       CommitmentTxConfirmed() { }
-               }
-               export class ProcessingError extends LDKClosureReason {
-                       public String err;
-                       ProcessingError(String err) { this.err = err; }
-               }
-               export class DisconnectedPeer extends LDKClosureReason {
-                       DisconnectedPeer() { }
-               }
-               export class OutdatedChannelManager extends LDKClosureReason {
-                       OutdatedChannelManager() { }
-               }
-               static native void init();
-       }
-       static { LDKClosureReason.init(); }
-       public static native LDKClosureReason LDKClosureReason_ref_from_ptr(long ptr);
-       public static class LDKEvent {
-               private LDKEvent() {}
-               export class FundingGenerationReady extends LDKEvent {
-                       public Uint8Array temporary_channel_id;
-                       public number channel_value_satoshis;
-                       public Uint8Array output_script;
-                       public number user_channel_id;
-                       FundingGenerationReady(Uint8Array temporary_channel_id, number channel_value_satoshis, Uint8Array output_script, number user_channel_id) { this.temporary_channel_id = temporary_channel_id; this.channel_value_satoshis = channel_value_satoshis; this.output_script = output_script; this.user_channel_id = user_channel_id; }
-               }
-               export class PaymentReceived extends LDKEvent {
-                       public Uint8Array payment_hash;
-                       public number amt;
-                       public number purpose;
-                       PaymentReceived(Uint8Array payment_hash, number amt, number purpose) { this.payment_hash = payment_hash; this.amt = amt; this.purpose = purpose; }
-               }
-               export class PaymentSent extends LDKEvent {
-                       public Uint8Array payment_id;
-                       public Uint8Array payment_preimage;
-                       public Uint8Array payment_hash;
-                       public number fee_paid_msat;
-                       PaymentSent(Uint8Array payment_id, Uint8Array payment_preimage, Uint8Array payment_hash, number fee_paid_msat) { this.payment_id = payment_id; this.payment_preimage = payment_preimage; this.payment_hash = payment_hash; this.fee_paid_msat = fee_paid_msat; }
-               }
-               export class PaymentPathFailed extends LDKEvent {
-                       public Uint8Array payment_id;
-                       public Uint8Array payment_hash;
-                       public boolean rejected_by_dest;
-                       public number network_update;
-                       public boolean all_paths_failed;
-                       public number[] path;
-                       public number short_channel_id;
-                       public number retry;
-                       PaymentPathFailed(Uint8Array payment_id, Uint8Array payment_hash, boolean rejected_by_dest, number network_update, boolean all_paths_failed, number[] path, number short_channel_id, number retry) { this.payment_id = payment_id; this.payment_hash = payment_hash; this.rejected_by_dest = rejected_by_dest; this.network_update = network_update; this.all_paths_failed = all_paths_failed; this.path = path; this.short_channel_id = short_channel_id; this.retry = retry; }
-               }
-               export class PendingHTLCsForwardable extends LDKEvent {
-                       public number time_forwardable;
-                       PendingHTLCsForwardable(number time_forwardable) { this.time_forwardable = time_forwardable; }
-               }
-               export class SpendableOutputs extends LDKEvent {
-                       public number[] outputs;
-                       SpendableOutputs(number[] outputs) { this.outputs = outputs; }
-               }
-               export class PaymentForwarded extends LDKEvent {
-                       public number fee_earned_msat;
-                       public boolean claim_from_onchain_tx;
-                       PaymentForwarded(number fee_earned_msat, boolean claim_from_onchain_tx) { this.fee_earned_msat = fee_earned_msat; this.claim_from_onchain_tx = claim_from_onchain_tx; }
-               }
-               export class ChannelClosed extends LDKEvent {
-                       public Uint8Array channel_id;
-                       public number user_channel_id;
-                       public number reason;
-                       ChannelClosed(Uint8Array channel_id, number user_channel_id, number reason) { this.channel_id = channel_id; this.user_channel_id = user_channel_id; this.reason = reason; }
-               }
-               export class DiscardFunding extends LDKEvent {
-                       public Uint8Array channel_id;
-                       public Uint8Array transaction;
-                       DiscardFunding(Uint8Array channel_id, Uint8Array transaction) { this.channel_id = channel_id; this.transaction = transaction; }
-               }
-               static native void init();
-       }
-       static { LDKEvent.init(); }
-       public static native LDKEvent LDKEvent_ref_from_ptr(long ptr);
-       public static native long LDKCVec_EventZ_new(number[] elems);
        // uint32_t C2Tuple_u32TxOutZ_get_a(LDKC2Tuple_u32TxOutZ *NONNULL_PTR tuple);
        export function C2Tuple_u32TxOutZ_get_a(tuple: number): number {
                if(!isWasmInitialized) {
@@ -1433,7 +1390,6 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.C2Tuple_u32TxOutZ_get_b(tuple);
                return nativeResponseValue;
        }
-       public static native long LDKCVec_C2Tuple_u32TxOutZZ_new(number[] elems);
        // struct LDKThirtyTwoBytes C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_get_a(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ *NONNULL_PTR tuple);
        export function C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_get_a(tuple: number): Uint8Array {
                if(!isWasmInitialized) {
@@ -1450,7 +1406,6 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_get_b(tuple);
                return nativeResponseValue;
        }
-       public static native long LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ_new(number[] elems);
        public static class LDKBalance {
                private LDKBalance() {}
                export class ClaimableOnChannelClose extends LDKBalance {
@@ -1476,11 +1431,8 @@ public static native long new_empty_slice_vec();
        }
        static { LDKBalance.init(); }
        public static native LDKBalance LDKBalance_ref_from_ptr(long ptr);
-       public static native long LDKCVec_BalanceZ_new(number[] elems);
-       public static native boolean LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_NoneLightningErrorZ_result_ok(long arg);
        public static native void LDKCResult_NoneLightningErrorZ_get_ok(long arg);
        public static native number LDKCResult_NoneLightningErrorZ_get_err(long arg);
        // struct LDKPublicKey C2Tuple_PublicKeyTypeZ_get_a(LDKC2Tuple_PublicKeyTypeZ *NONNULL_PTR tuple);
@@ -1499,8 +1451,6 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.C2Tuple_PublicKeyTypeZ_get_b(tuple);
                return nativeResponseValue;
        }
-       public static native long LDKCVec_C2Tuple_PublicKeyTypeZZ_new(number[] elems);
-       public static native boolean LDKCResult_boolLightningErrorZ_result_ok(long arg);
        public static native boolean LDKCResult_boolLightningErrorZ_get_ok(long arg);
        public static native number LDKCResult_boolLightningErrorZ_get_err(long arg);
        // struct LDKChannelAnnouncement C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_get_a(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ *NONNULL_PTR tuple);
@@ -1527,20 +1477,16 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_get_c(tuple);
                return nativeResponseValue;
        }
-       public static native long LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ_new(number[] elems);
-       public static native long LDKCVec_NodeAnnouncementZ_new(number[] elems);
-       public static native boolean LDKCResult_CVec_u8ZPeerHandleErrorZ_result_ok(long arg);
        public static native Uint8Array LDKCResult_CVec_u8ZPeerHandleErrorZ_get_ok(long arg);
        public static native number LDKCResult_CVec_u8ZPeerHandleErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_NonePeerHandleErrorZ_result_ok(long arg);
        public static native void LDKCResult_NonePeerHandleErrorZ_get_ok(long arg);
        public static native number LDKCResult_NonePeerHandleErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_boolPeerHandleErrorZ_result_ok(long arg);
        public static native boolean LDKCResult_boolPeerHandleErrorZ_get_ok(long arg);
        public static native number LDKCResult_boolPeerHandleErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_NodeIdDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_NodeIdDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_NodeIdDecodeErrorZ_get_err(long arg);
+       public static native number LDKCResult_COption_NetworkUpdateZDecodeErrorZ_get_ok(long arg);
+       public static native number LDKCResult_COption_NetworkUpdateZDecodeErrorZ_get_err(long arg);
 
 
 
@@ -1578,23 +1524,16 @@ public static native long new_empty_slice_vec();
        }
        static { LDKCOption_AccessZ.init(); }
        public static native LDKCOption_AccessZ LDKCOption_AccessZ_ref_from_ptr(long ptr);
-       public static native boolean LDKCResult_DirectionalChannelInfoDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_DirectionalChannelInfoDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_DirectionalChannelInfoDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_ChannelInfoDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_ChannelInfoDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_ChannelInfoDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_RoutingFeesDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_RoutingFeesDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_RoutingFeesDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_NodeAnnouncementInfoDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_NodeAnnouncementInfoDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_NodeAnnouncementInfoDecodeErrorZ_get_err(long arg);
-       public static native long LDKCVec_u64Z_new(number[] elems);
-       public static native boolean LDKCResult_NodeInfoDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_NodeInfoDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_NodeInfoDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_NetworkGraphDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_NetworkGraphDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_NetworkGraphDecodeErrorZ_get_err(long arg);
        public static class LDKCOption_CVec_NetAddressZZ {
@@ -1610,107 +1549,70 @@ public static native long new_empty_slice_vec();
        }
        static { LDKCOption_CVec_NetAddressZZ.init(); }
        public static native LDKCOption_CVec_NetAddressZZ LDKCOption_CVec_NetAddressZZ_ref_from_ptr(long ptr);
-       public static native boolean LDKCResult_NetAddressDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_NetAddressDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_NetAddressDecodeErrorZ_get_err(long arg);
-       public static native long LDKCVec_UpdateAddHTLCZ_new(number[] elems);
-       public static native long LDKCVec_UpdateFulfillHTLCZ_new(number[] elems);
-       public static native long LDKCVec_UpdateFailHTLCZ_new(number[] elems);
-       public static native long LDKCVec_UpdateFailMalformedHTLCZ_new(number[] elems);
-       public static native boolean LDKCResult_AcceptChannelDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_AcceptChannelDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_AcceptChannelDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_AnnouncementSignaturesDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_AnnouncementSignaturesDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_AnnouncementSignaturesDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_ChannelReestablishDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_ChannelReestablishDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_ChannelReestablishDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_ClosingSignedDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_ClosingSignedDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_ClosingSignedDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_ClosingSignedFeeRangeDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_ClosingSignedFeeRangeDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_ClosingSignedFeeRangeDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_CommitmentSignedDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_CommitmentSignedDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_CommitmentSignedDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_FundingCreatedDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_FundingCreatedDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_FundingCreatedDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_FundingSignedDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_FundingSignedDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_FundingSignedDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_FundingLockedDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_FundingLockedDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_FundingLockedDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_InitDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_InitDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_InitDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_OpenChannelDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_OpenChannelDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_OpenChannelDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_RevokeAndACKDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_RevokeAndACKDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_RevokeAndACKDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_ShutdownDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_ShutdownDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_ShutdownDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_UpdateFailHTLCDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_UpdateFailHTLCDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_UpdateFailHTLCDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_UpdateFeeDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_UpdateFeeDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_UpdateFeeDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_UpdateFulfillHTLCDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_UpdateFulfillHTLCDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_UpdateFulfillHTLCDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_UpdateAddHTLCDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_UpdateAddHTLCDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_UpdateAddHTLCDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_PingDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_PingDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_PingDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_PongDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_PongDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_PongDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_ChannelAnnouncementDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_ChannelAnnouncementDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_ChannelAnnouncementDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_UnsignedChannelUpdateDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_UnsignedChannelUpdateDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_UnsignedChannelUpdateDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_ChannelUpdateDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_ChannelUpdateDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_ChannelUpdateDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_ErrorMessageDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_ErrorMessageDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_ErrorMessageDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_NodeAnnouncementDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_NodeAnnouncementDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_NodeAnnouncementDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_QueryShortChannelIdsDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_QueryShortChannelIdsDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_QueryShortChannelIdsDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_QueryChannelRangeDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_QueryChannelRangeDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_QueryChannelRangeDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_ReplyChannelRangeDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_ReplyChannelRangeDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_ReplyChannelRangeDecodeErrorZ_get_err(long arg);
-       public static native boolean LDKCResult_GossipTimestampFilterDecodeErrorZ_result_ok(long arg);
        public static native number LDKCResult_GossipTimestampFilterDecodeErrorZ_get_ok(long arg);
        public static native number LDKCResult_GossipTimestampFilterDecodeErrorZ_get_err(long arg);
        public static class LDKSignOrCreationError {
@@ -1726,7 +1628,6 @@ public static native long new_empty_slice_vec();
        }
        static { LDKSignOrCreationError.init(); }
        public static native LDKSignOrCreationError LDKSignOrCreationError_ref_from_ptr(long ptr);
-       public static native boolean LDKCResult_InvoiceSignOrCreationErrorZ_result_ok(long arg);
        public static native number LDKCResult_InvoiceSignOrCreationErrorZ_get_ok(long arg);
        public static native number LDKCResult_InvoiceSignOrCreationErrorZ_get_err(long arg);
 
@@ -1775,10 +1676,8 @@ public static native long new_empty_slice_vec();
        }
        static { LDKCOption_FilterZ.init(); }
        public static native LDKCOption_FilterZ LDKCOption_FilterZ_ref_from_ptr(long ptr);
-       public static native boolean LDKCResult_LockedChannelMonitorNoneZ_result_ok(long arg);
        public static native number LDKCResult_LockedChannelMonitorNoneZ_get_ok(long arg);
        public static native void LDKCResult_LockedChannelMonitorNoneZ_get_err(long arg);
-       public static native long LDKCVec_OutPointZ_new(number[] elems);
 
 
 
@@ -2568,6 +2467,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.TxOut_free(_res);
                // debug statements here
        }
+       // uint64_t TxOut_clone_ptr(LDKTxOut *NONNULL_PTR arg);
+       export function TxOut_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.TxOut_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKTxOut TxOut_clone(const struct LDKTxOut *NONNULL_PTR orig);
        export function TxOut_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -2600,6 +2507,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_SecretKeyErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_SecretKeyErrorZ_is_ok(const struct LDKCResult_SecretKeyErrorZ *NONNULL_PTR o);
+       export function CResult_SecretKeyErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_SecretKeyErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_SecretKeyErrorZ_free(struct LDKCResult_SecretKeyErrorZ _res);
        export function CResult_SecretKeyErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -2624,6 +2539,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_PublicKeyErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_PublicKeyErrorZ_is_ok(const struct LDKCResult_PublicKeyErrorZ *NONNULL_PTR o);
+       export function CResult_PublicKeyErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_PublicKeyErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_PublicKeyErrorZ_free(struct LDKCResult_PublicKeyErrorZ _res);
        export function CResult_PublicKeyErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -2632,6 +2555,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_PublicKeyErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_PublicKeyErrorZ_clone_ptr(LDKCResult_PublicKeyErrorZ *NONNULL_PTR arg);
+       export function CResult_PublicKeyErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_PublicKeyErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_PublicKeyErrorZ CResult_PublicKeyErrorZ_clone(const struct LDKCResult_PublicKeyErrorZ *NONNULL_PTR orig);
        export function CResult_PublicKeyErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -2656,14 +2587,30 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_TxCreationKeysDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
-       // void CResult_TxCreationKeysDecodeErrorZ_free(struct LDKCResult_TxCreationKeysDecodeErrorZ _res);
-       export function CResult_TxCreationKeysDecodeErrorZ_free(_res: number): void {
+       // bool CResult_TxCreationKeysDecodeErrorZ_is_ok(const struct LDKCResult_TxCreationKeysDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_TxCreationKeysDecodeErrorZ_is_ok(o: number): boolean {
                if(!isWasmInitialized) {
                        throw new Error("initializeWasm() must be awaited first!");
                }
-               const nativeResponseValue = wasm.CResult_TxCreationKeysDecodeErrorZ_free(_res);
+               const nativeResponseValue = wasm.CResult_TxCreationKeysDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
+       // void CResult_TxCreationKeysDecodeErrorZ_free(struct LDKCResult_TxCreationKeysDecodeErrorZ _res);
+       export function CResult_TxCreationKeysDecodeErrorZ_free(_res: number): void {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_TxCreationKeysDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_TxCreationKeysDecodeErrorZ_clone_ptr(LDKCResult_TxCreationKeysDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_TxCreationKeysDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_TxCreationKeysDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_TxCreationKeysDecodeErrorZ CResult_TxCreationKeysDecodeErrorZ_clone(const struct LDKCResult_TxCreationKeysDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_TxCreationKeysDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -2688,6 +2635,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_ChannelPublicKeysDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_ChannelPublicKeysDecodeErrorZ_is_ok(const struct LDKCResult_ChannelPublicKeysDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_ChannelPublicKeysDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_ChannelPublicKeysDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_ChannelPublicKeysDecodeErrorZ_free(struct LDKCResult_ChannelPublicKeysDecodeErrorZ _res);
        export function CResult_ChannelPublicKeysDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -2696,6 +2651,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_ChannelPublicKeysDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_ChannelPublicKeysDecodeErrorZ_clone_ptr(LDKCResult_ChannelPublicKeysDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_ChannelPublicKeysDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_ChannelPublicKeysDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_ChannelPublicKeysDecodeErrorZ CResult_ChannelPublicKeysDecodeErrorZ_clone(const struct LDKCResult_ChannelPublicKeysDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_ChannelPublicKeysDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -2720,6 +2683,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_TxCreationKeysErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_TxCreationKeysErrorZ_is_ok(const struct LDKCResult_TxCreationKeysErrorZ *NONNULL_PTR o);
+       export function CResult_TxCreationKeysErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_TxCreationKeysErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_TxCreationKeysErrorZ_free(struct LDKCResult_TxCreationKeysErrorZ _res);
        export function CResult_TxCreationKeysErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -2728,6 +2699,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_TxCreationKeysErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_TxCreationKeysErrorZ_clone_ptr(LDKCResult_TxCreationKeysErrorZ *NONNULL_PTR arg);
+       export function CResult_TxCreationKeysErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_TxCreationKeysErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_TxCreationKeysErrorZ CResult_TxCreationKeysErrorZ_clone(const struct LDKCResult_TxCreationKeysErrorZ *NONNULL_PTR orig);
        export function CResult_TxCreationKeysErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -2760,6 +2739,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.COption_u32Z_free(_res);
                // debug statements here
        }
+       // uint64_t COption_u32Z_clone_ptr(LDKCOption_u32Z *NONNULL_PTR arg);
+       export function COption_u32Z_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.COption_u32Z_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCOption_u32Z COption_u32Z_clone(const struct LDKCOption_u32Z *NONNULL_PTR orig);
        export function COption_u32Z_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -2784,6 +2771,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_HTLCOutputInCommitmentDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_HTLCOutputInCommitmentDecodeErrorZ_is_ok(const struct LDKCResult_HTLCOutputInCommitmentDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_HTLCOutputInCommitmentDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_HTLCOutputInCommitmentDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_HTLCOutputInCommitmentDecodeErrorZ_free(struct LDKCResult_HTLCOutputInCommitmentDecodeErrorZ _res);
        export function CResult_HTLCOutputInCommitmentDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -2792,6 +2787,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_HTLCOutputInCommitmentDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_HTLCOutputInCommitmentDecodeErrorZ_clone_ptr(LDKCResult_HTLCOutputInCommitmentDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_HTLCOutputInCommitmentDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_HTLCOutputInCommitmentDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_HTLCOutputInCommitmentDecodeErrorZ CResult_HTLCOutputInCommitmentDecodeErrorZ_clone(const struct LDKCResult_HTLCOutputInCommitmentDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_HTLCOutputInCommitmentDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -2816,6 +2819,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_is_ok(const struct LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_free(struct LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ _res);
        export function CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -2824,6 +2835,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_clone_ptr(LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_clone(const struct LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -2848,6 +2867,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_ChannelTransactionParametersDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_ChannelTransactionParametersDecodeErrorZ_is_ok(const struct LDKCResult_ChannelTransactionParametersDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_ChannelTransactionParametersDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_ChannelTransactionParametersDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_ChannelTransactionParametersDecodeErrorZ_free(struct LDKCResult_ChannelTransactionParametersDecodeErrorZ _res);
        export function CResult_ChannelTransactionParametersDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -2856,6 +2883,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_ChannelTransactionParametersDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_ChannelTransactionParametersDecodeErrorZ_clone_ptr(LDKCResult_ChannelTransactionParametersDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_ChannelTransactionParametersDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_ChannelTransactionParametersDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_ChannelTransactionParametersDecodeErrorZ CResult_ChannelTransactionParametersDecodeErrorZ_clone(const struct LDKCResult_ChannelTransactionParametersDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_ChannelTransactionParametersDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -2888,6 +2923,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_HolderCommitmentTransactionDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_HolderCommitmentTransactionDecodeErrorZ_is_ok(const struct LDKCResult_HolderCommitmentTransactionDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_HolderCommitmentTransactionDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_HolderCommitmentTransactionDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_HolderCommitmentTransactionDecodeErrorZ_free(struct LDKCResult_HolderCommitmentTransactionDecodeErrorZ _res);
        export function CResult_HolderCommitmentTransactionDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -2896,6 +2939,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_HolderCommitmentTransactionDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_HolderCommitmentTransactionDecodeErrorZ_clone_ptr(LDKCResult_HolderCommitmentTransactionDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_HolderCommitmentTransactionDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_HolderCommitmentTransactionDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_HolderCommitmentTransactionDecodeErrorZ CResult_HolderCommitmentTransactionDecodeErrorZ_clone(const struct LDKCResult_HolderCommitmentTransactionDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_HolderCommitmentTransactionDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -2920,6 +2971,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_BuiltCommitmentTransactionDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_BuiltCommitmentTransactionDecodeErrorZ_is_ok(const struct LDKCResult_BuiltCommitmentTransactionDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_BuiltCommitmentTransactionDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_BuiltCommitmentTransactionDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_BuiltCommitmentTransactionDecodeErrorZ_free(struct LDKCResult_BuiltCommitmentTransactionDecodeErrorZ _res);
        export function CResult_BuiltCommitmentTransactionDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -2928,6 +2987,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_BuiltCommitmentTransactionDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_BuiltCommitmentTransactionDecodeErrorZ_clone_ptr(LDKCResult_BuiltCommitmentTransactionDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_BuiltCommitmentTransactionDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_BuiltCommitmentTransactionDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_BuiltCommitmentTransactionDecodeErrorZ CResult_BuiltCommitmentTransactionDecodeErrorZ_clone(const struct LDKCResult_BuiltCommitmentTransactionDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_BuiltCommitmentTransactionDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -2952,6 +3019,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_TrustedClosingTransactionNoneZ_err();
                return nativeResponseValue;
        }
+       // bool CResult_TrustedClosingTransactionNoneZ_is_ok(const struct LDKCResult_TrustedClosingTransactionNoneZ *NONNULL_PTR o);
+       export function CResult_TrustedClosingTransactionNoneZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_TrustedClosingTransactionNoneZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_TrustedClosingTransactionNoneZ_free(struct LDKCResult_TrustedClosingTransactionNoneZ _res);
        export function CResult_TrustedClosingTransactionNoneZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -2976,6 +3051,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_CommitmentTransactionDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_CommitmentTransactionDecodeErrorZ_is_ok(const struct LDKCResult_CommitmentTransactionDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_CommitmentTransactionDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_CommitmentTransactionDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_CommitmentTransactionDecodeErrorZ_free(struct LDKCResult_CommitmentTransactionDecodeErrorZ _res);
        export function CResult_CommitmentTransactionDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -2984,6 +3067,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_CommitmentTransactionDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_CommitmentTransactionDecodeErrorZ_clone_ptr(LDKCResult_CommitmentTransactionDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_CommitmentTransactionDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_CommitmentTransactionDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_CommitmentTransactionDecodeErrorZ CResult_CommitmentTransactionDecodeErrorZ_clone(const struct LDKCResult_CommitmentTransactionDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_CommitmentTransactionDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -3008,6 +3099,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_TrustedCommitmentTransactionNoneZ_err();
                return nativeResponseValue;
        }
+       // bool CResult_TrustedCommitmentTransactionNoneZ_is_ok(const struct LDKCResult_TrustedCommitmentTransactionNoneZ *NONNULL_PTR o);
+       export function CResult_TrustedCommitmentTransactionNoneZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_TrustedCommitmentTransactionNoneZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_TrustedCommitmentTransactionNoneZ_free(struct LDKCResult_TrustedCommitmentTransactionNoneZ _res);
        export function CResult_TrustedCommitmentTransactionNoneZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -3032,6 +3131,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_CVec_SignatureZNoneZ_err();
                return nativeResponseValue;
        }
+       // bool CResult_CVec_SignatureZNoneZ_is_ok(const struct LDKCResult_CVec_SignatureZNoneZ *NONNULL_PTR o);
+       export function CResult_CVec_SignatureZNoneZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_CVec_SignatureZNoneZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_CVec_SignatureZNoneZ_free(struct LDKCResult_CVec_SignatureZNoneZ _res);
        export function CResult_CVec_SignatureZNoneZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -3040,6 +3147,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_CVec_SignatureZNoneZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_CVec_SignatureZNoneZ_clone_ptr(LDKCResult_CVec_SignatureZNoneZ *NONNULL_PTR arg);
+       export function CResult_CVec_SignatureZNoneZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_CVec_SignatureZNoneZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_CVec_SignatureZNoneZ CResult_CVec_SignatureZNoneZ_clone(const struct LDKCResult_CVec_SignatureZNoneZ *NONNULL_PTR orig);
        export function CResult_CVec_SignatureZNoneZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -3064,6 +3179,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_ShutdownScriptDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_ShutdownScriptDecodeErrorZ_is_ok(const struct LDKCResult_ShutdownScriptDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_ShutdownScriptDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_ShutdownScriptDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_ShutdownScriptDecodeErrorZ_free(struct LDKCResult_ShutdownScriptDecodeErrorZ _res);
        export function CResult_ShutdownScriptDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -3072,6 +3195,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_ShutdownScriptDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_ShutdownScriptDecodeErrorZ_clone_ptr(LDKCResult_ShutdownScriptDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_ShutdownScriptDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_ShutdownScriptDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_ShutdownScriptDecodeErrorZ CResult_ShutdownScriptDecodeErrorZ_clone(const struct LDKCResult_ShutdownScriptDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_ShutdownScriptDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -3096,6 +3227,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_ShutdownScriptInvalidShutdownScriptZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_ShutdownScriptInvalidShutdownScriptZ_is_ok(const struct LDKCResult_ShutdownScriptInvalidShutdownScriptZ *NONNULL_PTR o);
+       export function CResult_ShutdownScriptInvalidShutdownScriptZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_ShutdownScriptInvalidShutdownScriptZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_ShutdownScriptInvalidShutdownScriptZ_free(struct LDKCResult_ShutdownScriptInvalidShutdownScriptZ _res);
        export function CResult_ShutdownScriptInvalidShutdownScriptZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -3104,6 +3243,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_ShutdownScriptInvalidShutdownScriptZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_ShutdownScriptInvalidShutdownScriptZ_clone_ptr(LDKCResult_ShutdownScriptInvalidShutdownScriptZ *NONNULL_PTR arg);
+       export function CResult_ShutdownScriptInvalidShutdownScriptZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_ShutdownScriptInvalidShutdownScriptZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_ShutdownScriptInvalidShutdownScriptZ CResult_ShutdownScriptInvalidShutdownScriptZ_clone(const struct LDKCResult_ShutdownScriptInvalidShutdownScriptZ *NONNULL_PTR orig);
        export function CResult_ShutdownScriptInvalidShutdownScriptZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -3128,6 +3275,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_NoneErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_NoneErrorZ_is_ok(const struct LDKCResult_NoneErrorZ *NONNULL_PTR o);
+       export function CResult_NoneErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_NoneErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_NoneErrorZ_free(struct LDKCResult_NoneErrorZ _res);
        export function CResult_NoneErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -3136,6 +3291,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_NoneErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_NoneErrorZ_clone_ptr(LDKCResult_NoneErrorZ *NONNULL_PTR arg);
+       export function CResult_NoneErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_NoneErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_NoneErrorZ CResult_NoneErrorZ_clone(const struct LDKCResult_NoneErrorZ *NONNULL_PTR orig);
        export function CResult_NoneErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -3160,6 +3323,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_RouteHopDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_RouteHopDecodeErrorZ_is_ok(const struct LDKCResult_RouteHopDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_RouteHopDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_RouteHopDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_RouteHopDecodeErrorZ_free(struct LDKCResult_RouteHopDecodeErrorZ _res);
        export function CResult_RouteHopDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -3168,6 +3339,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_RouteHopDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_RouteHopDecodeErrorZ_clone_ptr(LDKCResult_RouteHopDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_RouteHopDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_RouteHopDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_RouteHopDecodeErrorZ CResult_RouteHopDecodeErrorZ_clone(const struct LDKCResult_RouteHopDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_RouteHopDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -3208,6 +3387,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_RouteDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_RouteDecodeErrorZ_is_ok(const struct LDKCResult_RouteDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_RouteDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_RouteDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_RouteDecodeErrorZ_free(struct LDKCResult_RouteDecodeErrorZ _res);
        export function CResult_RouteDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -3216,6 +3403,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_RouteDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_RouteDecodeErrorZ_clone_ptr(LDKCResult_RouteDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_RouteDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_RouteDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_RouteDecodeErrorZ CResult_RouteDecodeErrorZ_clone(const struct LDKCResult_RouteDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_RouteDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -3240,6 +3435,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_RouteParametersDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_RouteParametersDecodeErrorZ_is_ok(const struct LDKCResult_RouteParametersDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_RouteParametersDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_RouteParametersDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_RouteParametersDecodeErrorZ_free(struct LDKCResult_RouteParametersDecodeErrorZ _res);
        export function CResult_RouteParametersDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -3248,6 +3451,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_RouteParametersDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_RouteParametersDecodeErrorZ_clone_ptr(LDKCResult_RouteParametersDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_RouteParametersDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_RouteParametersDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_RouteParametersDecodeErrorZ CResult_RouteParametersDecodeErrorZ_clone(const struct LDKCResult_RouteParametersDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_RouteParametersDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -3288,6 +3499,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.COption_u64Z_free(_res);
                // debug statements here
        }
+       // uint64_t COption_u64Z_clone_ptr(LDKCOption_u64Z *NONNULL_PTR arg);
+       export function COption_u64Z_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.COption_u64Z_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCOption_u64Z COption_u64Z_clone(const struct LDKCOption_u64Z *NONNULL_PTR orig);
        export function COption_u64Z_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -3312,6 +3531,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_PayeeDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_PayeeDecodeErrorZ_is_ok(const struct LDKCResult_PayeeDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_PayeeDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_PayeeDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_PayeeDecodeErrorZ_free(struct LDKCResult_PayeeDecodeErrorZ _res);
        export function CResult_PayeeDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -3320,6 +3547,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_PayeeDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_PayeeDecodeErrorZ_clone_ptr(LDKCResult_PayeeDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_PayeeDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_PayeeDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_PayeeDecodeErrorZ CResult_PayeeDecodeErrorZ_clone(const struct LDKCResult_PayeeDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_PayeeDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -3352,6 +3587,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_RouteHintDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_RouteHintDecodeErrorZ_is_ok(const struct LDKCResult_RouteHintDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_RouteHintDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_RouteHintDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_RouteHintDecodeErrorZ_free(struct LDKCResult_RouteHintDecodeErrorZ _res);
        export function CResult_RouteHintDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -3360,6 +3603,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_RouteHintDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_RouteHintDecodeErrorZ_clone_ptr(LDKCResult_RouteHintDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_RouteHintDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_RouteHintDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_RouteHintDecodeErrorZ CResult_RouteHintDecodeErrorZ_clone(const struct LDKCResult_RouteHintDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_RouteHintDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -3384,6 +3635,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_RouteHintHopDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_RouteHintHopDecodeErrorZ_is_ok(const struct LDKCResult_RouteHintHopDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_RouteHintHopDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_RouteHintHopDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_RouteHintHopDecodeErrorZ_free(struct LDKCResult_RouteHintHopDecodeErrorZ _res);
        export function CResult_RouteHintHopDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -3392,6 +3651,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_RouteHintHopDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_RouteHintHopDecodeErrorZ_clone_ptr(LDKCResult_RouteHintHopDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_RouteHintHopDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_RouteHintHopDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_RouteHintHopDecodeErrorZ CResult_RouteHintHopDecodeErrorZ_clone(const struct LDKCResult_RouteHintHopDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_RouteHintHopDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -3424,6 +3691,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_RouteLightningErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_RouteLightningErrorZ_is_ok(const struct LDKCResult_RouteLightningErrorZ *NONNULL_PTR o);
+       export function CResult_RouteLightningErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_RouteLightningErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_RouteLightningErrorZ_free(struct LDKCResult_RouteLightningErrorZ _res);
        export function CResult_RouteLightningErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -3432,6 +3707,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_RouteLightningErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_RouteLightningErrorZ_clone_ptr(LDKCResult_RouteLightningErrorZ *NONNULL_PTR arg);
+       export function CResult_RouteLightningErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_RouteLightningErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_RouteLightningErrorZ CResult_RouteLightningErrorZ_clone(const struct LDKCResult_RouteLightningErrorZ *NONNULL_PTR orig);
        export function CResult_RouteLightningErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -3456,6 +3739,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_TxOutAccessErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_TxOutAccessErrorZ_is_ok(const struct LDKCResult_TxOutAccessErrorZ *NONNULL_PTR o);
+       export function CResult_TxOutAccessErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_TxOutAccessErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_TxOutAccessErrorZ_free(struct LDKCResult_TxOutAccessErrorZ _res);
        export function CResult_TxOutAccessErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -3464,6 +3755,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_TxOutAccessErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_TxOutAccessErrorZ_clone_ptr(LDKCResult_TxOutAccessErrorZ *NONNULL_PTR arg);
+       export function CResult_TxOutAccessErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_TxOutAccessErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_TxOutAccessErrorZ CResult_TxOutAccessErrorZ_clone(const struct LDKCResult_TxOutAccessErrorZ *NONNULL_PTR orig);
        export function CResult_TxOutAccessErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -3472,6 +3771,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_TxOutAccessErrorZ_clone(orig);
                return nativeResponseValue;
        }
+       // uint64_t C2Tuple_usizeTransactionZ_clone_ptr(LDKC2Tuple_usizeTransactionZ *NONNULL_PTR arg);
+       export function C2Tuple_usizeTransactionZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.C2Tuple_usizeTransactionZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKC2Tuple_usizeTransactionZ C2Tuple_usizeTransactionZ_clone(const struct LDKC2Tuple_usizeTransactionZ *NONNULL_PTR orig);
        export function C2Tuple_usizeTransactionZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -3528,6 +3835,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_NoneChannelMonitorUpdateErrZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_NoneChannelMonitorUpdateErrZ_is_ok(const struct LDKCResult_NoneChannelMonitorUpdateErrZ *NONNULL_PTR o);
+       export function CResult_NoneChannelMonitorUpdateErrZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_NoneChannelMonitorUpdateErrZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_NoneChannelMonitorUpdateErrZ_free(struct LDKCResult_NoneChannelMonitorUpdateErrZ _res);
        export function CResult_NoneChannelMonitorUpdateErrZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -3536,6 +3851,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_NoneChannelMonitorUpdateErrZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_NoneChannelMonitorUpdateErrZ_clone_ptr(LDKCResult_NoneChannelMonitorUpdateErrZ *NONNULL_PTR arg);
+       export function CResult_NoneChannelMonitorUpdateErrZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_NoneChannelMonitorUpdateErrZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_NoneChannelMonitorUpdateErrZ CResult_NoneChannelMonitorUpdateErrZ_clone(const struct LDKCResult_NoneChannelMonitorUpdateErrZ *NONNULL_PTR orig);
        export function CResult_NoneChannelMonitorUpdateErrZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -3576,6 +3899,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.COption_C2Tuple_usizeTransactionZZ_free(_res);
                // debug statements here
        }
+       // uint64_t COption_C2Tuple_usizeTransactionZZ_clone_ptr(LDKCOption_C2Tuple_usizeTransactionZZ *NONNULL_PTR arg);
+       export function COption_C2Tuple_usizeTransactionZZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.COption_C2Tuple_usizeTransactionZZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCOption_C2Tuple_usizeTransactionZZ COption_C2Tuple_usizeTransactionZZ_clone(const struct LDKCOption_C2Tuple_usizeTransactionZZ *NONNULL_PTR orig);
        export function COption_C2Tuple_usizeTransactionZZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -3584,12 +3915,100 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.COption_C2Tuple_usizeTransactionZZ_clone(orig);
                return nativeResponseValue;
        }
-       // struct LDKCOption_NetworkUpdateZ COption_NetworkUpdateZ_some(struct LDKNetworkUpdate o);
-       export function COption_NetworkUpdateZ_some(o: number): number {
+       // struct LDKCOption_ClosureReasonZ COption_ClosureReasonZ_some(struct LDKClosureReason o);
+       export function COption_ClosureReasonZ_some(o: number): number {
                if(!isWasmInitialized) {
                        throw new Error("initializeWasm() must be awaited first!");
                }
-               const nativeResponseValue = wasm.COption_NetworkUpdateZ_some(o);
+               const nativeResponseValue = wasm.COption_ClosureReasonZ_some(o);
+               return nativeResponseValue;
+       }
+       // struct LDKCOption_ClosureReasonZ COption_ClosureReasonZ_none(void);
+       export function COption_ClosureReasonZ_none(): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.COption_ClosureReasonZ_none();
+               return nativeResponseValue;
+       }
+       // void COption_ClosureReasonZ_free(struct LDKCOption_ClosureReasonZ _res);
+       export function COption_ClosureReasonZ_free(_res: number): void {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.COption_ClosureReasonZ_free(_res);
+               // debug statements here
+       }
+       // uint64_t COption_ClosureReasonZ_clone_ptr(LDKCOption_ClosureReasonZ *NONNULL_PTR arg);
+       export function COption_ClosureReasonZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.COption_ClosureReasonZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
+       // struct LDKCOption_ClosureReasonZ COption_ClosureReasonZ_clone(const struct LDKCOption_ClosureReasonZ *NONNULL_PTR orig);
+       export function COption_ClosureReasonZ_clone(orig: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.COption_ClosureReasonZ_clone(orig);
+               return nativeResponseValue;
+       }
+       // struct LDKCResult_COption_ClosureReasonZDecodeErrorZ CResult_COption_ClosureReasonZDecodeErrorZ_ok(struct LDKCOption_ClosureReasonZ o);
+       export function CResult_COption_ClosureReasonZDecodeErrorZ_ok(o: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_COption_ClosureReasonZDecodeErrorZ_ok(o);
+               return nativeResponseValue;
+       }
+       // struct LDKCResult_COption_ClosureReasonZDecodeErrorZ CResult_COption_ClosureReasonZDecodeErrorZ_err(struct LDKDecodeError e);
+       export function CResult_COption_ClosureReasonZDecodeErrorZ_err(e: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_COption_ClosureReasonZDecodeErrorZ_err(e);
+               return nativeResponseValue;
+       }
+       // bool CResult_COption_ClosureReasonZDecodeErrorZ_is_ok(const struct LDKCResult_COption_ClosureReasonZDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_COption_ClosureReasonZDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_COption_ClosureReasonZDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
+       // void CResult_COption_ClosureReasonZDecodeErrorZ_free(struct LDKCResult_COption_ClosureReasonZDecodeErrorZ _res);
+       export function CResult_COption_ClosureReasonZDecodeErrorZ_free(_res: number): void {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_COption_ClosureReasonZDecodeErrorZ_free(_res);
+               // debug statements here
+       }
+       // uint64_t CResult_COption_ClosureReasonZDecodeErrorZ_clone_ptr(LDKCResult_COption_ClosureReasonZDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_COption_ClosureReasonZDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_COption_ClosureReasonZDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
+       // struct LDKCResult_COption_ClosureReasonZDecodeErrorZ CResult_COption_ClosureReasonZDecodeErrorZ_clone(const struct LDKCResult_COption_ClosureReasonZDecodeErrorZ *NONNULL_PTR orig);
+       export function CResult_COption_ClosureReasonZDecodeErrorZ_clone(orig: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_COption_ClosureReasonZDecodeErrorZ_clone(orig);
+               return nativeResponseValue;
+       }
+       // struct LDKCOption_NetworkUpdateZ COption_NetworkUpdateZ_some(struct LDKNetworkUpdate o);
+       export function COption_NetworkUpdateZ_some(o: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.COption_NetworkUpdateZ_some(o);
                return nativeResponseValue;
        }
        // struct LDKCOption_NetworkUpdateZ COption_NetworkUpdateZ_none(void);
@@ -3608,6 +4027,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.COption_NetworkUpdateZ_free(_res);
                // debug statements here
        }
+       // uint64_t COption_NetworkUpdateZ_clone_ptr(LDKCOption_NetworkUpdateZ *NONNULL_PTR arg);
+       export function COption_NetworkUpdateZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.COption_NetworkUpdateZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCOption_NetworkUpdateZ COption_NetworkUpdateZ_clone(const struct LDKCOption_NetworkUpdateZ *NONNULL_PTR orig);
        export function COption_NetworkUpdateZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -3624,6 +4051,94 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CVec_SpendableOutputDescriptorZ_free(_res);
                // debug statements here
        }
+       // struct LDKCOption_EventZ COption_EventZ_some(struct LDKEvent o);
+       export function COption_EventZ_some(o: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.COption_EventZ_some(o);
+               return nativeResponseValue;
+       }
+       // struct LDKCOption_EventZ COption_EventZ_none(void);
+       export function COption_EventZ_none(): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.COption_EventZ_none();
+               return nativeResponseValue;
+       }
+       // void COption_EventZ_free(struct LDKCOption_EventZ _res);
+       export function COption_EventZ_free(_res: number): void {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.COption_EventZ_free(_res);
+               // debug statements here
+       }
+       // uint64_t COption_EventZ_clone_ptr(LDKCOption_EventZ *NONNULL_PTR arg);
+       export function COption_EventZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.COption_EventZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
+       // struct LDKCOption_EventZ COption_EventZ_clone(const struct LDKCOption_EventZ *NONNULL_PTR orig);
+       export function COption_EventZ_clone(orig: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.COption_EventZ_clone(orig);
+               return nativeResponseValue;
+       }
+       // struct LDKCResult_COption_EventZDecodeErrorZ CResult_COption_EventZDecodeErrorZ_ok(struct LDKCOption_EventZ o);
+       export function CResult_COption_EventZDecodeErrorZ_ok(o: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_COption_EventZDecodeErrorZ_ok(o);
+               return nativeResponseValue;
+       }
+       // struct LDKCResult_COption_EventZDecodeErrorZ CResult_COption_EventZDecodeErrorZ_err(struct LDKDecodeError e);
+       export function CResult_COption_EventZDecodeErrorZ_err(e: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_COption_EventZDecodeErrorZ_err(e);
+               return nativeResponseValue;
+       }
+       // bool CResult_COption_EventZDecodeErrorZ_is_ok(const struct LDKCResult_COption_EventZDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_COption_EventZDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_COption_EventZDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
+       // void CResult_COption_EventZDecodeErrorZ_free(struct LDKCResult_COption_EventZDecodeErrorZ _res);
+       export function CResult_COption_EventZDecodeErrorZ_free(_res: number): void {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_COption_EventZDecodeErrorZ_free(_res);
+               // debug statements here
+       }
+       // uint64_t CResult_COption_EventZDecodeErrorZ_clone_ptr(LDKCResult_COption_EventZDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_COption_EventZDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_COption_EventZDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
+       // struct LDKCResult_COption_EventZDecodeErrorZ CResult_COption_EventZDecodeErrorZ_clone(const struct LDKCResult_COption_EventZDecodeErrorZ *NONNULL_PTR orig);
+       export function CResult_COption_EventZDecodeErrorZ_clone(orig: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_COption_EventZDecodeErrorZ_clone(orig);
+               return nativeResponseValue;
+       }
        // void CVec_MessageSendEventZ_free(struct LDKCVec_MessageSendEventZ _res);
        export function CVec_MessageSendEventZ_free(_res: number[]): void {
                if(!isWasmInitialized) {
@@ -3648,6 +4163,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_InitFeaturesDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_InitFeaturesDecodeErrorZ_is_ok(const struct LDKCResult_InitFeaturesDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_InitFeaturesDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_InitFeaturesDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_InitFeaturesDecodeErrorZ_free(struct LDKCResult_InitFeaturesDecodeErrorZ _res);
        export function CResult_InitFeaturesDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -3672,6 +4195,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_NodeFeaturesDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_NodeFeaturesDecodeErrorZ_is_ok(const struct LDKCResult_NodeFeaturesDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_NodeFeaturesDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_NodeFeaturesDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_NodeFeaturesDecodeErrorZ_free(struct LDKCResult_NodeFeaturesDecodeErrorZ _res);
        export function CResult_NodeFeaturesDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -3696,6 +4227,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_ChannelFeaturesDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_ChannelFeaturesDecodeErrorZ_is_ok(const struct LDKCResult_ChannelFeaturesDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_ChannelFeaturesDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_ChannelFeaturesDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_ChannelFeaturesDecodeErrorZ_free(struct LDKCResult_ChannelFeaturesDecodeErrorZ _res);
        export function CResult_ChannelFeaturesDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -3720,6 +4259,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_InvoiceFeaturesDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_InvoiceFeaturesDecodeErrorZ_is_ok(const struct LDKCResult_InvoiceFeaturesDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_InvoiceFeaturesDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_InvoiceFeaturesDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_InvoiceFeaturesDecodeErrorZ_free(struct LDKCResult_InvoiceFeaturesDecodeErrorZ _res);
        export function CResult_InvoiceFeaturesDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -3744,6 +4291,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_ScoringParametersDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_ScoringParametersDecodeErrorZ_is_ok(const struct LDKCResult_ScoringParametersDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_ScoringParametersDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_ScoringParametersDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_ScoringParametersDecodeErrorZ_free(struct LDKCResult_ScoringParametersDecodeErrorZ _res);
        export function CResult_ScoringParametersDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -3768,6 +4323,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_ScorerDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_ScorerDecodeErrorZ_is_ok(const struct LDKCResult_ScorerDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_ScorerDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_ScorerDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_ScorerDecodeErrorZ_free(struct LDKCResult_ScorerDecodeErrorZ _res);
        export function CResult_ScorerDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -3792,6 +4355,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_is_ok(const struct LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_free(struct LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ _res);
        export function CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -3800,6 +4371,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_clone_ptr(LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_clone(const struct LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -3824,6 +4403,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_StaticPaymentOutputDescriptorDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_StaticPaymentOutputDescriptorDecodeErrorZ_is_ok(const struct LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_StaticPaymentOutputDescriptorDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_StaticPaymentOutputDescriptorDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_StaticPaymentOutputDescriptorDecodeErrorZ_free(struct LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ _res);
        export function CResult_StaticPaymentOutputDescriptorDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -3832,6 +4419,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_StaticPaymentOutputDescriptorDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_StaticPaymentOutputDescriptorDecodeErrorZ_clone_ptr(LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_StaticPaymentOutputDescriptorDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_StaticPaymentOutputDescriptorDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ CResult_StaticPaymentOutputDescriptorDecodeErrorZ_clone(const struct LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_StaticPaymentOutputDescriptorDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -3856,6 +4451,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_SpendableOutputDescriptorDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_SpendableOutputDescriptorDecodeErrorZ_is_ok(const struct LDKCResult_SpendableOutputDescriptorDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_SpendableOutputDescriptorDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_SpendableOutputDescriptorDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_SpendableOutputDescriptorDecodeErrorZ_free(struct LDKCResult_SpendableOutputDescriptorDecodeErrorZ _res);
        export function CResult_SpendableOutputDescriptorDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -3864,6 +4467,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_SpendableOutputDescriptorDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_SpendableOutputDescriptorDecodeErrorZ_clone_ptr(LDKCResult_SpendableOutputDescriptorDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_SpendableOutputDescriptorDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_SpendableOutputDescriptorDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_SpendableOutputDescriptorDecodeErrorZ CResult_SpendableOutputDescriptorDecodeErrorZ_clone(const struct LDKCResult_SpendableOutputDescriptorDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_SpendableOutputDescriptorDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -3888,6 +4499,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_NoneNoneZ_err();
                return nativeResponseValue;
        }
+       // bool CResult_NoneNoneZ_is_ok(const struct LDKCResult_NoneNoneZ *NONNULL_PTR o);
+       export function CResult_NoneNoneZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_NoneNoneZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_NoneNoneZ_free(struct LDKCResult_NoneNoneZ _res);
        export function CResult_NoneNoneZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -3896,6 +4515,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_NoneNoneZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_NoneNoneZ_clone_ptr(LDKCResult_NoneNoneZ *NONNULL_PTR arg);
+       export function CResult_NoneNoneZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_NoneNoneZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_NoneNoneZ CResult_NoneNoneZ_clone(const struct LDKCResult_NoneNoneZ *NONNULL_PTR orig);
        export function CResult_NoneNoneZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -3904,6 +4531,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_NoneNoneZ_clone(orig);
                return nativeResponseValue;
        }
+       // uint64_t C2Tuple_SignatureCVec_SignatureZZ_clone_ptr(LDKC2Tuple_SignatureCVec_SignatureZZ *NONNULL_PTR arg);
+       export function C2Tuple_SignatureCVec_SignatureZZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.C2Tuple_SignatureCVec_SignatureZZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKC2Tuple_SignatureCVec_SignatureZZ C2Tuple_SignatureCVec_SignatureZZ_clone(const struct LDKC2Tuple_SignatureCVec_SignatureZZ *NONNULL_PTR orig);
        export function C2Tuple_SignatureCVec_SignatureZZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -3944,6 +4579,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_err();
                return nativeResponseValue;
        }
+       // bool CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_is_ok(const struct LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ *NONNULL_PTR o);
+       export function CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_free(struct LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ _res);
        export function CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -3952,6 +4595,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone_ptr(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ *NONNULL_PTR arg);
+       export function CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone(const struct LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ *NONNULL_PTR orig);
        export function CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -3976,6 +4627,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_SignatureNoneZ_err();
                return nativeResponseValue;
        }
+       // bool CResult_SignatureNoneZ_is_ok(const struct LDKCResult_SignatureNoneZ *NONNULL_PTR o);
+       export function CResult_SignatureNoneZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_SignatureNoneZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_SignatureNoneZ_free(struct LDKCResult_SignatureNoneZ _res);
        export function CResult_SignatureNoneZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -3984,6 +4643,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_SignatureNoneZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_SignatureNoneZ_clone_ptr(LDKCResult_SignatureNoneZ *NONNULL_PTR arg);
+       export function CResult_SignatureNoneZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_SignatureNoneZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_SignatureNoneZ CResult_SignatureNoneZ_clone(const struct LDKCResult_SignatureNoneZ *NONNULL_PTR orig);
        export function CResult_SignatureNoneZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -4008,6 +4675,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_SignDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_SignDecodeErrorZ_is_ok(const struct LDKCResult_SignDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_SignDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_SignDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_SignDecodeErrorZ_free(struct LDKCResult_SignDecodeErrorZ _res);
        export function CResult_SignDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -4016,6 +4691,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_SignDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_SignDecodeErrorZ_clone_ptr(LDKCResult_SignDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_SignDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_SignDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_SignDecodeErrorZ CResult_SignDecodeErrorZ_clone(const struct LDKCResult_SignDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_SignDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -4048,6 +4731,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_RecoverableSignatureNoneZ_err();
                return nativeResponseValue;
        }
+       // bool CResult_RecoverableSignatureNoneZ_is_ok(const struct LDKCResult_RecoverableSignatureNoneZ *NONNULL_PTR o);
+       export function CResult_RecoverableSignatureNoneZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_RecoverableSignatureNoneZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_RecoverableSignatureNoneZ_free(struct LDKCResult_RecoverableSignatureNoneZ _res);
        export function CResult_RecoverableSignatureNoneZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -4056,6 +4747,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_RecoverableSignatureNoneZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_RecoverableSignatureNoneZ_clone_ptr(LDKCResult_RecoverableSignatureNoneZ *NONNULL_PTR arg);
+       export function CResult_RecoverableSignatureNoneZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_RecoverableSignatureNoneZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_RecoverableSignatureNoneZ CResult_RecoverableSignatureNoneZ_clone(const struct LDKCResult_RecoverableSignatureNoneZ *NONNULL_PTR orig);
        export function CResult_RecoverableSignatureNoneZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -4088,6 +4787,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_CVec_CVec_u8ZZNoneZ_err();
                return nativeResponseValue;
        }
+       // bool CResult_CVec_CVec_u8ZZNoneZ_is_ok(const struct LDKCResult_CVec_CVec_u8ZZNoneZ *NONNULL_PTR o);
+       export function CResult_CVec_CVec_u8ZZNoneZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_CVec_CVec_u8ZZNoneZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_CVec_CVec_u8ZZNoneZ_free(struct LDKCResult_CVec_CVec_u8ZZNoneZ _res);
        export function CResult_CVec_CVec_u8ZZNoneZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -4096,6 +4803,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_CVec_CVec_u8ZZNoneZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_CVec_CVec_u8ZZNoneZ_clone_ptr(LDKCResult_CVec_CVec_u8ZZNoneZ *NONNULL_PTR arg);
+       export function CResult_CVec_CVec_u8ZZNoneZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_CVec_CVec_u8ZZNoneZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_CVec_CVec_u8ZZNoneZ CResult_CVec_CVec_u8ZZNoneZ_clone(const struct LDKCResult_CVec_CVec_u8ZZNoneZ *NONNULL_PTR orig);
        export function CResult_CVec_CVec_u8ZZNoneZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -4120,6 +4835,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_InMemorySignerDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_InMemorySignerDecodeErrorZ_is_ok(const struct LDKCResult_InMemorySignerDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_InMemorySignerDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_InMemorySignerDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_InMemorySignerDecodeErrorZ_free(struct LDKCResult_InMemorySignerDecodeErrorZ _res);
        export function CResult_InMemorySignerDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -4128,6 +4851,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_InMemorySignerDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_InMemorySignerDecodeErrorZ_clone_ptr(LDKCResult_InMemorySignerDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_InMemorySignerDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_InMemorySignerDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_InMemorySignerDecodeErrorZ CResult_InMemorySignerDecodeErrorZ_clone(const struct LDKCResult_InMemorySignerDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_InMemorySignerDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -4160,14 +4891,30 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_TransactionNoneZ_err();
                return nativeResponseValue;
        }
-       // void CResult_TransactionNoneZ_free(struct LDKCResult_TransactionNoneZ _res);
-       export function CResult_TransactionNoneZ_free(_res: number): void {
+       // bool CResult_TransactionNoneZ_is_ok(const struct LDKCResult_TransactionNoneZ *NONNULL_PTR o);
+       export function CResult_TransactionNoneZ_is_ok(o: number): boolean {
                if(!isWasmInitialized) {
                        throw new Error("initializeWasm() must be awaited first!");
                }
-               const nativeResponseValue = wasm.CResult_TransactionNoneZ_free(_res);
+               const nativeResponseValue = wasm.CResult_TransactionNoneZ_is_ok(o);
+               return nativeResponseValue;
+       }
+       // void CResult_TransactionNoneZ_free(struct LDKCResult_TransactionNoneZ _res);
+       export function CResult_TransactionNoneZ_free(_res: number): void {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_TransactionNoneZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_TransactionNoneZ_clone_ptr(LDKCResult_TransactionNoneZ *NONNULL_PTR arg);
+       export function CResult_TransactionNoneZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_TransactionNoneZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_TransactionNoneZ CResult_TransactionNoneZ_clone(const struct LDKCResult_TransactionNoneZ *NONNULL_PTR orig);
        export function CResult_TransactionNoneZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -4176,6 +4923,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_TransactionNoneZ_clone(orig);
                return nativeResponseValue;
        }
+       // uint64_t C2Tuple_BlockHashChannelMonitorZ_clone_ptr(LDKC2Tuple_BlockHashChannelMonitorZ *NONNULL_PTR arg);
+       export function C2Tuple_BlockHashChannelMonitorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.C2Tuple_BlockHashChannelMonitorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKC2Tuple_BlockHashChannelMonitorZ C2Tuple_BlockHashChannelMonitorZ_clone(const struct LDKC2Tuple_BlockHashChannelMonitorZ *NONNULL_PTR orig);
        export function C2Tuple_BlockHashChannelMonitorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -4224,6 +4979,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_is_ok(const struct LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ *NONNULL_PTR o);
+       export function CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_free(struct LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ _res);
        export function CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -4232,6 +4995,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_clone_ptr(LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ *NONNULL_PTR arg);
+       export function CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_clone(const struct LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ *NONNULL_PTR orig);
        export function CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -4264,6 +5035,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.COption_u16Z_free(_res);
                // debug statements here
        }
+       // uint64_t COption_u16Z_clone_ptr(LDKCOption_u16Z *NONNULL_PTR arg);
+       export function COption_u16Z_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.COption_u16Z_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCOption_u16Z COption_u16Z_clone(const struct LDKCOption_u16Z *NONNULL_PTR orig);
        export function COption_u16Z_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -4288,6 +5067,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_NoneAPIErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_NoneAPIErrorZ_is_ok(const struct LDKCResult_NoneAPIErrorZ *NONNULL_PTR o);
+       export function CResult_NoneAPIErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_NoneAPIErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_NoneAPIErrorZ_free(struct LDKCResult_NoneAPIErrorZ _res);
        export function CResult_NoneAPIErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -4296,6 +5083,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_NoneAPIErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_NoneAPIErrorZ_clone_ptr(LDKCResult_NoneAPIErrorZ *NONNULL_PTR arg);
+       export function CResult_NoneAPIErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_NoneAPIErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_NoneAPIErrorZ CResult_NoneAPIErrorZ_clone(const struct LDKCResult_NoneAPIErrorZ *NONNULL_PTR orig);
        export function CResult_NoneAPIErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -4336,6 +5131,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult__u832APIErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult__u832APIErrorZ_is_ok(const struct LDKCResult__u832APIErrorZ *NONNULL_PTR o);
+       export function CResult__u832APIErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult__u832APIErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult__u832APIErrorZ_free(struct LDKCResult__u832APIErrorZ _res);
        export function CResult__u832APIErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -4344,6 +5147,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult__u832APIErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult__u832APIErrorZ_clone_ptr(LDKCResult__u832APIErrorZ *NONNULL_PTR arg);
+       export function CResult__u832APIErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult__u832APIErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult__u832APIErrorZ CResult__u832APIErrorZ_clone(const struct LDKCResult__u832APIErrorZ *NONNULL_PTR orig);
        export function CResult__u832APIErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -4368,6 +5179,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_PaymentIdPaymentSendFailureZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_PaymentIdPaymentSendFailureZ_is_ok(const struct LDKCResult_PaymentIdPaymentSendFailureZ *NONNULL_PTR o);
+       export function CResult_PaymentIdPaymentSendFailureZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_PaymentIdPaymentSendFailureZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_PaymentIdPaymentSendFailureZ_free(struct LDKCResult_PaymentIdPaymentSendFailureZ _res);
        export function CResult_PaymentIdPaymentSendFailureZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -4376,6 +5195,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_PaymentIdPaymentSendFailureZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_PaymentIdPaymentSendFailureZ_clone_ptr(LDKCResult_PaymentIdPaymentSendFailureZ *NONNULL_PTR arg);
+       export function CResult_PaymentIdPaymentSendFailureZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_PaymentIdPaymentSendFailureZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_PaymentIdPaymentSendFailureZ CResult_PaymentIdPaymentSendFailureZ_clone(const struct LDKCResult_PaymentIdPaymentSendFailureZ *NONNULL_PTR orig);
        export function CResult_PaymentIdPaymentSendFailureZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -4400,6 +5227,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_NonePaymentSendFailureZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_NonePaymentSendFailureZ_is_ok(const struct LDKCResult_NonePaymentSendFailureZ *NONNULL_PTR o);
+       export function CResult_NonePaymentSendFailureZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_NonePaymentSendFailureZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_NonePaymentSendFailureZ_free(struct LDKCResult_NonePaymentSendFailureZ _res);
        export function CResult_NonePaymentSendFailureZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -4408,6 +5243,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_NonePaymentSendFailureZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_NonePaymentSendFailureZ_clone_ptr(LDKCResult_NonePaymentSendFailureZ *NONNULL_PTR arg);
+       export function CResult_NonePaymentSendFailureZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_NonePaymentSendFailureZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_NonePaymentSendFailureZ CResult_NonePaymentSendFailureZ_clone(const struct LDKCResult_NonePaymentSendFailureZ *NONNULL_PTR orig);
        export function CResult_NonePaymentSendFailureZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -4416,6 +5259,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_NonePaymentSendFailureZ_clone(orig);
                return nativeResponseValue;
        }
+       // uint64_t C2Tuple_PaymentHashPaymentIdZ_clone_ptr(LDKC2Tuple_PaymentHashPaymentIdZ *NONNULL_PTR arg);
+       export function C2Tuple_PaymentHashPaymentIdZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.C2Tuple_PaymentHashPaymentIdZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKC2Tuple_PaymentHashPaymentIdZ C2Tuple_PaymentHashPaymentIdZ_clone(const struct LDKC2Tuple_PaymentHashPaymentIdZ *NONNULL_PTR orig);
        export function C2Tuple_PaymentHashPaymentIdZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -4456,6 +5307,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_is_ok(const struct LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ *NONNULL_PTR o);
+       export function CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_free(struct LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ _res);
        export function CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -4464,6 +5323,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_clone_ptr(LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ *NONNULL_PTR arg);
+       export function CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_clone(const struct LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ *NONNULL_PTR orig);
        export function CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -4480,6 +5347,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CVec_NetAddressZ_free(_res);
                // debug statements here
        }
+       // uint64_t C2Tuple_PaymentHashPaymentSecretZ_clone_ptr(LDKC2Tuple_PaymentHashPaymentSecretZ *NONNULL_PTR arg);
+       export function C2Tuple_PaymentHashPaymentSecretZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.C2Tuple_PaymentHashPaymentSecretZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKC2Tuple_PaymentHashPaymentSecretZ C2Tuple_PaymentHashPaymentSecretZ_clone(const struct LDKC2Tuple_PaymentHashPaymentSecretZ *NONNULL_PTR orig);
        export function C2Tuple_PaymentHashPaymentSecretZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -4520,6 +5395,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_PaymentSecretAPIErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_PaymentSecretAPIErrorZ_is_ok(const struct LDKCResult_PaymentSecretAPIErrorZ *NONNULL_PTR o);
+       export function CResult_PaymentSecretAPIErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_PaymentSecretAPIErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_PaymentSecretAPIErrorZ_free(struct LDKCResult_PaymentSecretAPIErrorZ _res);
        export function CResult_PaymentSecretAPIErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -4528,6 +5411,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_PaymentSecretAPIErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_PaymentSecretAPIErrorZ_clone_ptr(LDKCResult_PaymentSecretAPIErrorZ *NONNULL_PTR arg);
+       export function CResult_PaymentSecretAPIErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_PaymentSecretAPIErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_PaymentSecretAPIErrorZ CResult_PaymentSecretAPIErrorZ_clone(const struct LDKCResult_PaymentSecretAPIErrorZ *NONNULL_PTR orig);
        export function CResult_PaymentSecretAPIErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -4576,6 +5467,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_is_ok(const struct LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_free(struct LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ _res);
        export function CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -4600,6 +5499,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_ChannelConfigDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_ChannelConfigDecodeErrorZ_is_ok(const struct LDKCResult_ChannelConfigDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_ChannelConfigDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_ChannelConfigDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_ChannelConfigDecodeErrorZ_free(struct LDKCResult_ChannelConfigDecodeErrorZ _res);
        export function CResult_ChannelConfigDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -4608,6 +5515,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_ChannelConfigDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_ChannelConfigDecodeErrorZ_clone_ptr(LDKCResult_ChannelConfigDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_ChannelConfigDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_ChannelConfigDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_ChannelConfigDecodeErrorZ CResult_ChannelConfigDecodeErrorZ_clone(const struct LDKCResult_ChannelConfigDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_ChannelConfigDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -4632,6 +5547,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_OutPointDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_OutPointDecodeErrorZ_is_ok(const struct LDKCResult_OutPointDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_OutPointDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_OutPointDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_OutPointDecodeErrorZ_free(struct LDKCResult_OutPointDecodeErrorZ _res);
        export function CResult_OutPointDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -4640,6 +5563,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_OutPointDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_OutPointDecodeErrorZ_clone_ptr(LDKCResult_OutPointDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_OutPointDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_OutPointDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_OutPointDecodeErrorZ CResult_OutPointDecodeErrorZ_clone(const struct LDKCResult_OutPointDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_OutPointDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -4672,6 +5603,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.COption_TypeZ_free(_res);
                // debug statements here
        }
+       // uint64_t COption_TypeZ_clone_ptr(LDKCOption_TypeZ *NONNULL_PTR arg);
+       export function COption_TypeZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.COption_TypeZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCOption_TypeZ COption_TypeZ_clone(const struct LDKCOption_TypeZ *NONNULL_PTR orig);
        export function COption_TypeZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -4696,6 +5635,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_COption_TypeZDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_COption_TypeZDecodeErrorZ_is_ok(const struct LDKCResult_COption_TypeZDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_COption_TypeZDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_COption_TypeZDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_COption_TypeZDecodeErrorZ_free(struct LDKCResult_COption_TypeZDecodeErrorZ _res);
        export function CResult_COption_TypeZDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -4704,6 +5651,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_COption_TypeZDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_COption_TypeZDecodeErrorZ_clone_ptr(LDKCResult_COption_TypeZDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_COption_TypeZDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_COption_TypeZDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_COption_TypeZDecodeErrorZ CResult_COption_TypeZDecodeErrorZ_clone(const struct LDKCResult_COption_TypeZDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_COption_TypeZDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -4728,6 +5683,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_PaymentIdPaymentErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_PaymentIdPaymentErrorZ_is_ok(const struct LDKCResult_PaymentIdPaymentErrorZ *NONNULL_PTR o);
+       export function CResult_PaymentIdPaymentErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_PaymentIdPaymentErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_PaymentIdPaymentErrorZ_free(struct LDKCResult_PaymentIdPaymentErrorZ _res);
        export function CResult_PaymentIdPaymentErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -4736,6 +5699,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_PaymentIdPaymentErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_PaymentIdPaymentErrorZ_clone_ptr(LDKCResult_PaymentIdPaymentErrorZ *NONNULL_PTR arg);
+       export function CResult_PaymentIdPaymentErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_PaymentIdPaymentErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_PaymentIdPaymentErrorZ CResult_PaymentIdPaymentErrorZ_clone(const struct LDKCResult_PaymentIdPaymentErrorZ *NONNULL_PTR orig);
        export function CResult_PaymentIdPaymentErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -4760,6 +5731,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_SiPrefixNoneZ_err();
                return nativeResponseValue;
        }
+       // bool CResult_SiPrefixNoneZ_is_ok(const struct LDKCResult_SiPrefixNoneZ *NONNULL_PTR o);
+       export function CResult_SiPrefixNoneZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_SiPrefixNoneZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_SiPrefixNoneZ_free(struct LDKCResult_SiPrefixNoneZ _res);
        export function CResult_SiPrefixNoneZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -4768,6 +5747,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_SiPrefixNoneZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_SiPrefixNoneZ_clone_ptr(LDKCResult_SiPrefixNoneZ *NONNULL_PTR arg);
+       export function CResult_SiPrefixNoneZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_SiPrefixNoneZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_SiPrefixNoneZ CResult_SiPrefixNoneZ_clone(const struct LDKCResult_SiPrefixNoneZ *NONNULL_PTR orig);
        export function CResult_SiPrefixNoneZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -4792,6 +5779,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_InvoiceNoneZ_err();
                return nativeResponseValue;
        }
+       // bool CResult_InvoiceNoneZ_is_ok(const struct LDKCResult_InvoiceNoneZ *NONNULL_PTR o);
+       export function CResult_InvoiceNoneZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_InvoiceNoneZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_InvoiceNoneZ_free(struct LDKCResult_InvoiceNoneZ _res);
        export function CResult_InvoiceNoneZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -4800,6 +5795,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_InvoiceNoneZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_InvoiceNoneZ_clone_ptr(LDKCResult_InvoiceNoneZ *NONNULL_PTR arg);
+       export function CResult_InvoiceNoneZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_InvoiceNoneZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_InvoiceNoneZ CResult_InvoiceNoneZ_clone(const struct LDKCResult_InvoiceNoneZ *NONNULL_PTR orig);
        export function CResult_InvoiceNoneZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -4824,6 +5827,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_SignedRawInvoiceNoneZ_err();
                return nativeResponseValue;
        }
+       // bool CResult_SignedRawInvoiceNoneZ_is_ok(const struct LDKCResult_SignedRawInvoiceNoneZ *NONNULL_PTR o);
+       export function CResult_SignedRawInvoiceNoneZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_SignedRawInvoiceNoneZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_SignedRawInvoiceNoneZ_free(struct LDKCResult_SignedRawInvoiceNoneZ _res);
        export function CResult_SignedRawInvoiceNoneZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -4832,6 +5843,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_SignedRawInvoiceNoneZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_SignedRawInvoiceNoneZ_clone_ptr(LDKCResult_SignedRawInvoiceNoneZ *NONNULL_PTR arg);
+       export function CResult_SignedRawInvoiceNoneZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_SignedRawInvoiceNoneZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_SignedRawInvoiceNoneZ CResult_SignedRawInvoiceNoneZ_clone(const struct LDKCResult_SignedRawInvoiceNoneZ *NONNULL_PTR orig);
        export function CResult_SignedRawInvoiceNoneZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -4840,6 +5859,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_SignedRawInvoiceNoneZ_clone(orig);
                return nativeResponseValue;
        }
+       // uint64_t C3Tuple_RawInvoice_u832InvoiceSignatureZ_clone_ptr(LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ *NONNULL_PTR arg);
+       export function C3Tuple_RawInvoice_u832InvoiceSignatureZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.C3Tuple_RawInvoice_u832InvoiceSignatureZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ C3Tuple_RawInvoice_u832InvoiceSignatureZ_clone(const struct LDKC3Tuple_RawInvoice_u832InvoiceSignatureZ *NONNULL_PTR orig);
        export function C3Tuple_RawInvoice_u832InvoiceSignatureZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -4880,6 +5907,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_PayeePubKeyErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_PayeePubKeyErrorZ_is_ok(const struct LDKCResult_PayeePubKeyErrorZ *NONNULL_PTR o);
+       export function CResult_PayeePubKeyErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_PayeePubKeyErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_PayeePubKeyErrorZ_free(struct LDKCResult_PayeePubKeyErrorZ _res);
        export function CResult_PayeePubKeyErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -4888,6 +5923,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_PayeePubKeyErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_PayeePubKeyErrorZ_clone_ptr(LDKCResult_PayeePubKeyErrorZ *NONNULL_PTR arg);
+       export function CResult_PayeePubKeyErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_PayeePubKeyErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_PayeePubKeyErrorZ CResult_PayeePubKeyErrorZ_clone(const struct LDKCResult_PayeePubKeyErrorZ *NONNULL_PTR orig);
        export function CResult_PayeePubKeyErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -4920,6 +5963,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_PositiveTimestampCreationErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_PositiveTimestampCreationErrorZ_is_ok(const struct LDKCResult_PositiveTimestampCreationErrorZ *NONNULL_PTR o);
+       export function CResult_PositiveTimestampCreationErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_PositiveTimestampCreationErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_PositiveTimestampCreationErrorZ_free(struct LDKCResult_PositiveTimestampCreationErrorZ _res);
        export function CResult_PositiveTimestampCreationErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -4928,6 +5979,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_PositiveTimestampCreationErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_PositiveTimestampCreationErrorZ_clone_ptr(LDKCResult_PositiveTimestampCreationErrorZ *NONNULL_PTR arg);
+       export function CResult_PositiveTimestampCreationErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_PositiveTimestampCreationErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_PositiveTimestampCreationErrorZ CResult_PositiveTimestampCreationErrorZ_clone(const struct LDKCResult_PositiveTimestampCreationErrorZ *NONNULL_PTR orig);
        export function CResult_PositiveTimestampCreationErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -4952,6 +6011,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_NoneSemanticErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_NoneSemanticErrorZ_is_ok(const struct LDKCResult_NoneSemanticErrorZ *NONNULL_PTR o);
+       export function CResult_NoneSemanticErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_NoneSemanticErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_NoneSemanticErrorZ_free(struct LDKCResult_NoneSemanticErrorZ _res);
        export function CResult_NoneSemanticErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -4960,6 +6027,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_NoneSemanticErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_NoneSemanticErrorZ_clone_ptr(LDKCResult_NoneSemanticErrorZ *NONNULL_PTR arg);
+       export function CResult_NoneSemanticErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_NoneSemanticErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_NoneSemanticErrorZ CResult_NoneSemanticErrorZ_clone(const struct LDKCResult_NoneSemanticErrorZ *NONNULL_PTR orig);
        export function CResult_NoneSemanticErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -4984,6 +6059,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_InvoiceSemanticErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_InvoiceSemanticErrorZ_is_ok(const struct LDKCResult_InvoiceSemanticErrorZ *NONNULL_PTR o);
+       export function CResult_InvoiceSemanticErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_InvoiceSemanticErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_InvoiceSemanticErrorZ_free(struct LDKCResult_InvoiceSemanticErrorZ _res);
        export function CResult_InvoiceSemanticErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -4992,6 +6075,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_InvoiceSemanticErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_InvoiceSemanticErrorZ_clone_ptr(LDKCResult_InvoiceSemanticErrorZ *NONNULL_PTR arg);
+       export function CResult_InvoiceSemanticErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_InvoiceSemanticErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_InvoiceSemanticErrorZ CResult_InvoiceSemanticErrorZ_clone(const struct LDKCResult_InvoiceSemanticErrorZ *NONNULL_PTR orig);
        export function CResult_InvoiceSemanticErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -5016,6 +6107,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_DescriptionCreationErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_DescriptionCreationErrorZ_is_ok(const struct LDKCResult_DescriptionCreationErrorZ *NONNULL_PTR o);
+       export function CResult_DescriptionCreationErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_DescriptionCreationErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_DescriptionCreationErrorZ_free(struct LDKCResult_DescriptionCreationErrorZ _res);
        export function CResult_DescriptionCreationErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -5024,6 +6123,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_DescriptionCreationErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_DescriptionCreationErrorZ_clone_ptr(LDKCResult_DescriptionCreationErrorZ *NONNULL_PTR arg);
+       export function CResult_DescriptionCreationErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_DescriptionCreationErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_DescriptionCreationErrorZ CResult_DescriptionCreationErrorZ_clone(const struct LDKCResult_DescriptionCreationErrorZ *NONNULL_PTR orig);
        export function CResult_DescriptionCreationErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -5048,108 +6155,252 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_ExpiryTimeCreationErrorZ_err(e);
                return nativeResponseValue;
        }
-       // void CResult_ExpiryTimeCreationErrorZ_free(struct LDKCResult_ExpiryTimeCreationErrorZ _res);
-       export function CResult_ExpiryTimeCreationErrorZ_free(_res: number): void {
+       // bool CResult_ExpiryTimeCreationErrorZ_is_ok(const struct LDKCResult_ExpiryTimeCreationErrorZ *NONNULL_PTR o);
+       export function CResult_ExpiryTimeCreationErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_ExpiryTimeCreationErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
+       // void CResult_ExpiryTimeCreationErrorZ_free(struct LDKCResult_ExpiryTimeCreationErrorZ _res);
+       export function CResult_ExpiryTimeCreationErrorZ_free(_res: number): void {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_ExpiryTimeCreationErrorZ_free(_res);
+               // debug statements here
+       }
+       // uint64_t CResult_ExpiryTimeCreationErrorZ_clone_ptr(LDKCResult_ExpiryTimeCreationErrorZ *NONNULL_PTR arg);
+       export function CResult_ExpiryTimeCreationErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_ExpiryTimeCreationErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
+       // struct LDKCResult_ExpiryTimeCreationErrorZ CResult_ExpiryTimeCreationErrorZ_clone(const struct LDKCResult_ExpiryTimeCreationErrorZ *NONNULL_PTR orig);
+       export function CResult_ExpiryTimeCreationErrorZ_clone(orig: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_ExpiryTimeCreationErrorZ_clone(orig);
+               return nativeResponseValue;
+       }
+       // struct LDKCResult_PrivateRouteCreationErrorZ CResult_PrivateRouteCreationErrorZ_ok(struct LDKPrivateRoute o);
+       export function CResult_PrivateRouteCreationErrorZ_ok(o: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_PrivateRouteCreationErrorZ_ok(o);
+               return nativeResponseValue;
+       }
+       // struct LDKCResult_PrivateRouteCreationErrorZ CResult_PrivateRouteCreationErrorZ_err(enum LDKCreationError e);
+       export function CResult_PrivateRouteCreationErrorZ_err(e: CreationError): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_PrivateRouteCreationErrorZ_err(e);
+               return nativeResponseValue;
+       }
+       // bool CResult_PrivateRouteCreationErrorZ_is_ok(const struct LDKCResult_PrivateRouteCreationErrorZ *NONNULL_PTR o);
+       export function CResult_PrivateRouteCreationErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_PrivateRouteCreationErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
+       // void CResult_PrivateRouteCreationErrorZ_free(struct LDKCResult_PrivateRouteCreationErrorZ _res);
+       export function CResult_PrivateRouteCreationErrorZ_free(_res: number): void {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_PrivateRouteCreationErrorZ_free(_res);
+               // debug statements here
+       }
+       // uint64_t CResult_PrivateRouteCreationErrorZ_clone_ptr(LDKCResult_PrivateRouteCreationErrorZ *NONNULL_PTR arg);
+       export function CResult_PrivateRouteCreationErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_PrivateRouteCreationErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
+       // struct LDKCResult_PrivateRouteCreationErrorZ CResult_PrivateRouteCreationErrorZ_clone(const struct LDKCResult_PrivateRouteCreationErrorZ *NONNULL_PTR orig);
+       export function CResult_PrivateRouteCreationErrorZ_clone(orig: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_PrivateRouteCreationErrorZ_clone(orig);
+               return nativeResponseValue;
+       }
+       // struct LDKCResult_StringErrorZ CResult_StringErrorZ_ok(struct LDKStr o);
+       export function CResult_StringErrorZ_ok(o: String): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_StringErrorZ_ok(o);
+               return nativeResponseValue;
+       }
+       // struct LDKCResult_StringErrorZ CResult_StringErrorZ_err(enum LDKSecp256k1Error e);
+       export function CResult_StringErrorZ_err(e: Secp256k1Error): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_StringErrorZ_err(e);
+               return nativeResponseValue;
+       }
+       // bool CResult_StringErrorZ_is_ok(const struct LDKCResult_StringErrorZ *NONNULL_PTR o);
+       export function CResult_StringErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_StringErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
+       // void CResult_StringErrorZ_free(struct LDKCResult_StringErrorZ _res);
+       export function CResult_StringErrorZ_free(_res: number): void {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_StringErrorZ_free(_res);
+               // debug statements here
+       }
+       // struct LDKCResult_ChannelMonitorUpdateDecodeErrorZ CResult_ChannelMonitorUpdateDecodeErrorZ_ok(struct LDKChannelMonitorUpdate o);
+       export function CResult_ChannelMonitorUpdateDecodeErrorZ_ok(o: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_ChannelMonitorUpdateDecodeErrorZ_ok(o);
+               return nativeResponseValue;
+       }
+       // struct LDKCResult_ChannelMonitorUpdateDecodeErrorZ CResult_ChannelMonitorUpdateDecodeErrorZ_err(struct LDKDecodeError e);
+       export function CResult_ChannelMonitorUpdateDecodeErrorZ_err(e: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_ChannelMonitorUpdateDecodeErrorZ_err(e);
+               return nativeResponseValue;
+       }
+       // bool CResult_ChannelMonitorUpdateDecodeErrorZ_is_ok(const struct LDKCResult_ChannelMonitorUpdateDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_ChannelMonitorUpdateDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_ChannelMonitorUpdateDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
+       // void CResult_ChannelMonitorUpdateDecodeErrorZ_free(struct LDKCResult_ChannelMonitorUpdateDecodeErrorZ _res);
+       export function CResult_ChannelMonitorUpdateDecodeErrorZ_free(_res: number): void {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_ChannelMonitorUpdateDecodeErrorZ_free(_res);
+               // debug statements here
+       }
+       // uint64_t CResult_ChannelMonitorUpdateDecodeErrorZ_clone_ptr(LDKCResult_ChannelMonitorUpdateDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_ChannelMonitorUpdateDecodeErrorZ_clone_ptr(arg: number): number {
                if(!isWasmInitialized) {
                        throw new Error("initializeWasm() must be awaited first!");
                }
-               const nativeResponseValue = wasm.CResult_ExpiryTimeCreationErrorZ_free(_res);
-               // debug statements here
+               const nativeResponseValue = wasm.CResult_ChannelMonitorUpdateDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
        }
-       // struct LDKCResult_ExpiryTimeCreationErrorZ CResult_ExpiryTimeCreationErrorZ_clone(const struct LDKCResult_ExpiryTimeCreationErrorZ *NONNULL_PTR orig);
-       export function CResult_ExpiryTimeCreationErrorZ_clone(orig: number): number {
+       // struct LDKCResult_ChannelMonitorUpdateDecodeErrorZ CResult_ChannelMonitorUpdateDecodeErrorZ_clone(const struct LDKCResult_ChannelMonitorUpdateDecodeErrorZ *NONNULL_PTR orig);
+       export function CResult_ChannelMonitorUpdateDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
                        throw new Error("initializeWasm() must be awaited first!");
                }
-               const nativeResponseValue = wasm.CResult_ExpiryTimeCreationErrorZ_clone(orig);
+               const nativeResponseValue = wasm.CResult_ChannelMonitorUpdateDecodeErrorZ_clone(orig);
                return nativeResponseValue;
        }
-       // struct LDKCResult_PrivateRouteCreationErrorZ CResult_PrivateRouteCreationErrorZ_ok(struct LDKPrivateRoute o);
-       export function CResult_PrivateRouteCreationErrorZ_ok(o: number): number {
+       // struct LDKCOption_MonitorEventZ COption_MonitorEventZ_some(struct LDKMonitorEvent o);
+       export function COption_MonitorEventZ_some(o: number): number {
                if(!isWasmInitialized) {
                        throw new Error("initializeWasm() must be awaited first!");
                }
-               const nativeResponseValue = wasm.CResult_PrivateRouteCreationErrorZ_ok(o);
+               const nativeResponseValue = wasm.COption_MonitorEventZ_some(o);
                return nativeResponseValue;
        }
-       // struct LDKCResult_PrivateRouteCreationErrorZ CResult_PrivateRouteCreationErrorZ_err(enum LDKCreationError e);
-       export function CResult_PrivateRouteCreationErrorZ_err(e: CreationError): number {
+       // struct LDKCOption_MonitorEventZ COption_MonitorEventZ_none(void);
+       export function COption_MonitorEventZ_none(): number {
                if(!isWasmInitialized) {
                        throw new Error("initializeWasm() must be awaited first!");
                }
-               const nativeResponseValue = wasm.CResult_PrivateRouteCreationErrorZ_err(e);
+               const nativeResponseValue = wasm.COption_MonitorEventZ_none();
                return nativeResponseValue;
        }
-       // void CResult_PrivateRouteCreationErrorZ_free(struct LDKCResult_PrivateRouteCreationErrorZ _res);
-       export function CResult_PrivateRouteCreationErrorZ_free(_res: number): void {
+       // void COption_MonitorEventZ_free(struct LDKCOption_MonitorEventZ _res);
+       export function COption_MonitorEventZ_free(_res: number): void {
                if(!isWasmInitialized) {
                        throw new Error("initializeWasm() must be awaited first!");
                }
-               const nativeResponseValue = wasm.CResult_PrivateRouteCreationErrorZ_free(_res);
+               const nativeResponseValue = wasm.COption_MonitorEventZ_free(_res);
                // debug statements here
        }
-       // struct LDKCResult_PrivateRouteCreationErrorZ CResult_PrivateRouteCreationErrorZ_clone(const struct LDKCResult_PrivateRouteCreationErrorZ *NONNULL_PTR orig);
-       export function CResult_PrivateRouteCreationErrorZ_clone(orig: number): number {
+       // uint64_t COption_MonitorEventZ_clone_ptr(LDKCOption_MonitorEventZ *NONNULL_PTR arg);
+       export function COption_MonitorEventZ_clone_ptr(arg: number): number {
                if(!isWasmInitialized) {
                        throw new Error("initializeWasm() must be awaited first!");
                }
-               const nativeResponseValue = wasm.CResult_PrivateRouteCreationErrorZ_clone(orig);
+               const nativeResponseValue = wasm.COption_MonitorEventZ_clone_ptr(arg);
                return nativeResponseValue;
        }
-       // struct LDKCResult_StringErrorZ CResult_StringErrorZ_ok(struct LDKStr o);
-       export function CResult_StringErrorZ_ok(o: String): number {
+       // struct LDKCOption_MonitorEventZ COption_MonitorEventZ_clone(const struct LDKCOption_MonitorEventZ *NONNULL_PTR orig);
+       export function COption_MonitorEventZ_clone(orig: number): number {
                if(!isWasmInitialized) {
                        throw new Error("initializeWasm() must be awaited first!");
                }
-               const nativeResponseValue = wasm.CResult_StringErrorZ_ok(o);
+               const nativeResponseValue = wasm.COption_MonitorEventZ_clone(orig);
                return nativeResponseValue;
        }
-       // struct LDKCResult_StringErrorZ CResult_StringErrorZ_err(enum LDKSecp256k1Error e);
-       export function CResult_StringErrorZ_err(e: Secp256k1Error): number {
+       // struct LDKCResult_COption_MonitorEventZDecodeErrorZ CResult_COption_MonitorEventZDecodeErrorZ_ok(struct LDKCOption_MonitorEventZ o);
+       export function CResult_COption_MonitorEventZDecodeErrorZ_ok(o: number): number {
                if(!isWasmInitialized) {
                        throw new Error("initializeWasm() must be awaited first!");
                }
-               const nativeResponseValue = wasm.CResult_StringErrorZ_err(e);
+               const nativeResponseValue = wasm.CResult_COption_MonitorEventZDecodeErrorZ_ok(o);
                return nativeResponseValue;
        }
-       // void CResult_StringErrorZ_free(struct LDKCResult_StringErrorZ _res);
-       export function CResult_StringErrorZ_free(_res: number): void {
+       // struct LDKCResult_COption_MonitorEventZDecodeErrorZ CResult_COption_MonitorEventZDecodeErrorZ_err(struct LDKDecodeError e);
+       export function CResult_COption_MonitorEventZDecodeErrorZ_err(e: number): number {
                if(!isWasmInitialized) {
                        throw new Error("initializeWasm() must be awaited first!");
                }
-               const nativeResponseValue = wasm.CResult_StringErrorZ_free(_res);
-               // debug statements here
+               const nativeResponseValue = wasm.CResult_COption_MonitorEventZDecodeErrorZ_err(e);
+               return nativeResponseValue;
        }
-       // struct LDKCResult_ChannelMonitorUpdateDecodeErrorZ CResult_ChannelMonitorUpdateDecodeErrorZ_ok(struct LDKChannelMonitorUpdate o);
-       export function CResult_ChannelMonitorUpdateDecodeErrorZ_ok(o: number): number {
+       // bool CResult_COption_MonitorEventZDecodeErrorZ_is_ok(const struct LDKCResult_COption_MonitorEventZDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_COption_MonitorEventZDecodeErrorZ_is_ok(o: number): boolean {
                if(!isWasmInitialized) {
                        throw new Error("initializeWasm() must be awaited first!");
                }
-               const nativeResponseValue = wasm.CResult_ChannelMonitorUpdateDecodeErrorZ_ok(o);
+               const nativeResponseValue = wasm.CResult_COption_MonitorEventZDecodeErrorZ_is_ok(o);
                return nativeResponseValue;
        }
-       // struct LDKCResult_ChannelMonitorUpdateDecodeErrorZ CResult_ChannelMonitorUpdateDecodeErrorZ_err(struct LDKDecodeError e);
-       export function CResult_ChannelMonitorUpdateDecodeErrorZ_err(e: number): number {
+       // void CResult_COption_MonitorEventZDecodeErrorZ_free(struct LDKCResult_COption_MonitorEventZDecodeErrorZ _res);
+       export function CResult_COption_MonitorEventZDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
                        throw new Error("initializeWasm() must be awaited first!");
                }
-               const nativeResponseValue = wasm.CResult_ChannelMonitorUpdateDecodeErrorZ_err(e);
-               return nativeResponseValue;
+               const nativeResponseValue = wasm.CResult_COption_MonitorEventZDecodeErrorZ_free(_res);
+               // debug statements here
        }
-       // void CResult_ChannelMonitorUpdateDecodeErrorZ_free(struct LDKCResult_ChannelMonitorUpdateDecodeErrorZ _res);
-       export function CResult_ChannelMonitorUpdateDecodeErrorZ_free(_res: number): void {
+       // uint64_t CResult_COption_MonitorEventZDecodeErrorZ_clone_ptr(LDKCResult_COption_MonitorEventZDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_COption_MonitorEventZDecodeErrorZ_clone_ptr(arg: number): number {
                if(!isWasmInitialized) {
                        throw new Error("initializeWasm() must be awaited first!");
                }
-               const nativeResponseValue = wasm.CResult_ChannelMonitorUpdateDecodeErrorZ_free(_res);
-               // debug statements here
+               const nativeResponseValue = wasm.CResult_COption_MonitorEventZDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
        }
-       // struct LDKCResult_ChannelMonitorUpdateDecodeErrorZ CResult_ChannelMonitorUpdateDecodeErrorZ_clone(const struct LDKCResult_ChannelMonitorUpdateDecodeErrorZ *NONNULL_PTR orig);
-       export function CResult_ChannelMonitorUpdateDecodeErrorZ_clone(orig: number): number {
+       // struct LDKCResult_COption_MonitorEventZDecodeErrorZ CResult_COption_MonitorEventZDecodeErrorZ_clone(const struct LDKCResult_COption_MonitorEventZDecodeErrorZ *NONNULL_PTR orig);
+       export function CResult_COption_MonitorEventZDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
                        throw new Error("initializeWasm() must be awaited first!");
                }
-               const nativeResponseValue = wasm.CResult_ChannelMonitorUpdateDecodeErrorZ_clone(orig);
+               const nativeResponseValue = wasm.CResult_COption_MonitorEventZDecodeErrorZ_clone(orig);
                return nativeResponseValue;
        }
        // struct LDKCResult_HTLCUpdateDecodeErrorZ CResult_HTLCUpdateDecodeErrorZ_ok(struct LDKHTLCUpdate o);
@@ -5168,6 +6419,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_HTLCUpdateDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_HTLCUpdateDecodeErrorZ_is_ok(const struct LDKCResult_HTLCUpdateDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_HTLCUpdateDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_HTLCUpdateDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_HTLCUpdateDecodeErrorZ_free(struct LDKCResult_HTLCUpdateDecodeErrorZ _res);
        export function CResult_HTLCUpdateDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -5176,6 +6435,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_HTLCUpdateDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_HTLCUpdateDecodeErrorZ_clone_ptr(LDKCResult_HTLCUpdateDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_HTLCUpdateDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_HTLCUpdateDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_HTLCUpdateDecodeErrorZ CResult_HTLCUpdateDecodeErrorZ_clone(const struct LDKCResult_HTLCUpdateDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_HTLCUpdateDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -5200,6 +6467,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_NoneMonitorUpdateErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_NoneMonitorUpdateErrorZ_is_ok(const struct LDKCResult_NoneMonitorUpdateErrorZ *NONNULL_PTR o);
+       export function CResult_NoneMonitorUpdateErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_NoneMonitorUpdateErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_NoneMonitorUpdateErrorZ_free(struct LDKCResult_NoneMonitorUpdateErrorZ _res);
        export function CResult_NoneMonitorUpdateErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -5208,6 +6483,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_NoneMonitorUpdateErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_NoneMonitorUpdateErrorZ_clone_ptr(LDKCResult_NoneMonitorUpdateErrorZ *NONNULL_PTR arg);
+       export function CResult_NoneMonitorUpdateErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_NoneMonitorUpdateErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_NoneMonitorUpdateErrorZ CResult_NoneMonitorUpdateErrorZ_clone(const struct LDKCResult_NoneMonitorUpdateErrorZ *NONNULL_PTR orig);
        export function CResult_NoneMonitorUpdateErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -5216,6 +6499,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_NoneMonitorUpdateErrorZ_clone(orig);
                return nativeResponseValue;
        }
+       // uint64_t C2Tuple_OutPointScriptZ_clone_ptr(LDKC2Tuple_OutPointScriptZ *NONNULL_PTR arg);
+       export function C2Tuple_OutPointScriptZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.C2Tuple_OutPointScriptZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKC2Tuple_OutPointScriptZ C2Tuple_OutPointScriptZ_clone(const struct LDKC2Tuple_OutPointScriptZ *NONNULL_PTR orig);
        export function C2Tuple_OutPointScriptZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -5240,6 +6531,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.C2Tuple_OutPointScriptZ_free(_res);
                // debug statements here
        }
+       // uint64_t C2Tuple_u32ScriptZ_clone_ptr(LDKC2Tuple_u32ScriptZ *NONNULL_PTR arg);
+       export function C2Tuple_u32ScriptZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.C2Tuple_u32ScriptZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKC2Tuple_u32ScriptZ C2Tuple_u32ScriptZ_clone(const struct LDKC2Tuple_u32ScriptZ *NONNULL_PTR orig);
        export function C2Tuple_u32ScriptZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -5272,6 +6571,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CVec_C2Tuple_u32ScriptZZ_free(_res);
                // debug statements here
        }
+       // uint64_t C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_clone_ptr(LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ *NONNULL_PTR arg);
+       export function C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_clone(const struct LDKC2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ *NONNULL_PTR orig);
        export function C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -5320,6 +6627,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CVec_TransactionZ_free(_res);
                // debug statements here
        }
+       // uint64_t C2Tuple_u32TxOutZ_clone_ptr(LDKC2Tuple_u32TxOutZ *NONNULL_PTR arg);
+       export function C2Tuple_u32TxOutZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.C2Tuple_u32TxOutZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKC2Tuple_u32TxOutZ C2Tuple_u32TxOutZ_clone(const struct LDKC2Tuple_u32TxOutZ *NONNULL_PTR orig);
        export function C2Tuple_u32TxOutZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -5352,6 +6667,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CVec_C2Tuple_u32TxOutZZ_free(_res);
                // debug statements here
        }
+       // uint64_t C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_clone_ptr(LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ *NONNULL_PTR arg);
+       export function C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_clone(const struct LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ *NONNULL_PTR orig);
        export function C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -5408,6 +6731,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_is_ok(const struct LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_free(struct LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ _res);
        export function CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -5416,6 +6747,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_clone_ptr(LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_clone(const struct LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -5440,6 +6779,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_NoneLightningErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_NoneLightningErrorZ_is_ok(const struct LDKCResult_NoneLightningErrorZ *NONNULL_PTR o);
+       export function CResult_NoneLightningErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_NoneLightningErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_NoneLightningErrorZ_free(struct LDKCResult_NoneLightningErrorZ _res);
        export function CResult_NoneLightningErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -5448,6 +6795,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_NoneLightningErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_NoneLightningErrorZ_clone_ptr(LDKCResult_NoneLightningErrorZ *NONNULL_PTR arg);
+       export function CResult_NoneLightningErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_NoneLightningErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_NoneLightningErrorZ CResult_NoneLightningErrorZ_clone(const struct LDKCResult_NoneLightningErrorZ *NONNULL_PTR orig);
        export function CResult_NoneLightningErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -5456,6 +6811,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_NoneLightningErrorZ_clone(orig);
                return nativeResponseValue;
        }
+       // uint64_t C2Tuple_PublicKeyTypeZ_clone_ptr(LDKC2Tuple_PublicKeyTypeZ *NONNULL_PTR arg);
+       export function C2Tuple_PublicKeyTypeZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.C2Tuple_PublicKeyTypeZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKC2Tuple_PublicKeyTypeZ C2Tuple_PublicKeyTypeZ_clone(const struct LDKC2Tuple_PublicKeyTypeZ *NONNULL_PTR orig);
        export function C2Tuple_PublicKeyTypeZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -5504,6 +6867,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_boolLightningErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_boolLightningErrorZ_is_ok(const struct LDKCResult_boolLightningErrorZ *NONNULL_PTR o);
+       export function CResult_boolLightningErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_boolLightningErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_boolLightningErrorZ_free(struct LDKCResult_boolLightningErrorZ _res);
        export function CResult_boolLightningErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -5512,6 +6883,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_boolLightningErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_boolLightningErrorZ_clone_ptr(LDKCResult_boolLightningErrorZ *NONNULL_PTR arg);
+       export function CResult_boolLightningErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_boolLightningErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_boolLightningErrorZ CResult_boolLightningErrorZ_clone(const struct LDKCResult_boolLightningErrorZ *NONNULL_PTR orig);
        export function CResult_boolLightningErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -5520,6 +6899,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_boolLightningErrorZ_clone(orig);
                return nativeResponseValue;
        }
+       // uint64_t C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_clone_ptr(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ *NONNULL_PTR arg);
+       export function C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_clone(const struct LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ *NONNULL_PTR orig);
        export function C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -5584,6 +6971,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_CVec_u8ZPeerHandleErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_CVec_u8ZPeerHandleErrorZ_is_ok(const struct LDKCResult_CVec_u8ZPeerHandleErrorZ *NONNULL_PTR o);
+       export function CResult_CVec_u8ZPeerHandleErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_CVec_u8ZPeerHandleErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_CVec_u8ZPeerHandleErrorZ_free(struct LDKCResult_CVec_u8ZPeerHandleErrorZ _res);
        export function CResult_CVec_u8ZPeerHandleErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -5592,6 +6987,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_CVec_u8ZPeerHandleErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_CVec_u8ZPeerHandleErrorZ_clone_ptr(LDKCResult_CVec_u8ZPeerHandleErrorZ *NONNULL_PTR arg);
+       export function CResult_CVec_u8ZPeerHandleErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_CVec_u8ZPeerHandleErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_CVec_u8ZPeerHandleErrorZ CResult_CVec_u8ZPeerHandleErrorZ_clone(const struct LDKCResult_CVec_u8ZPeerHandleErrorZ *NONNULL_PTR orig);
        export function CResult_CVec_u8ZPeerHandleErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -5616,6 +7019,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_NonePeerHandleErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_NonePeerHandleErrorZ_is_ok(const struct LDKCResult_NonePeerHandleErrorZ *NONNULL_PTR o);
+       export function CResult_NonePeerHandleErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_NonePeerHandleErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_NonePeerHandleErrorZ_free(struct LDKCResult_NonePeerHandleErrorZ _res);
        export function CResult_NonePeerHandleErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -5624,6 +7035,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_NonePeerHandleErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_NonePeerHandleErrorZ_clone_ptr(LDKCResult_NonePeerHandleErrorZ *NONNULL_PTR arg);
+       export function CResult_NonePeerHandleErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_NonePeerHandleErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_NonePeerHandleErrorZ CResult_NonePeerHandleErrorZ_clone(const struct LDKCResult_NonePeerHandleErrorZ *NONNULL_PTR orig);
        export function CResult_NonePeerHandleErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -5648,6 +7067,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_boolPeerHandleErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_boolPeerHandleErrorZ_is_ok(const struct LDKCResult_boolPeerHandleErrorZ *NONNULL_PTR o);
+       export function CResult_boolPeerHandleErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_boolPeerHandleErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_boolPeerHandleErrorZ_free(struct LDKCResult_boolPeerHandleErrorZ _res);
        export function CResult_boolPeerHandleErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -5656,6 +7083,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_boolPeerHandleErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_boolPeerHandleErrorZ_clone_ptr(LDKCResult_boolPeerHandleErrorZ *NONNULL_PTR arg);
+       export function CResult_boolPeerHandleErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_boolPeerHandleErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_boolPeerHandleErrorZ CResult_boolPeerHandleErrorZ_clone(const struct LDKCResult_boolPeerHandleErrorZ *NONNULL_PTR orig);
        export function CResult_boolPeerHandleErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -5680,6 +7115,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_NodeIdDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_NodeIdDecodeErrorZ_is_ok(const struct LDKCResult_NodeIdDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_NodeIdDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_NodeIdDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_NodeIdDecodeErrorZ_free(struct LDKCResult_NodeIdDecodeErrorZ _res);
        export function CResult_NodeIdDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -5688,6 +7131,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_NodeIdDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_NodeIdDecodeErrorZ_clone_ptr(LDKCResult_NodeIdDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_NodeIdDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_NodeIdDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_NodeIdDecodeErrorZ CResult_NodeIdDecodeErrorZ_clone(const struct LDKCResult_NodeIdDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_NodeIdDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -5696,6 +7147,54 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_NodeIdDecodeErrorZ_clone(orig);
                return nativeResponseValue;
        }
+       // struct LDKCResult_COption_NetworkUpdateZDecodeErrorZ CResult_COption_NetworkUpdateZDecodeErrorZ_ok(struct LDKCOption_NetworkUpdateZ o);
+       export function CResult_COption_NetworkUpdateZDecodeErrorZ_ok(o: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_COption_NetworkUpdateZDecodeErrorZ_ok(o);
+               return nativeResponseValue;
+       }
+       // struct LDKCResult_COption_NetworkUpdateZDecodeErrorZ CResult_COption_NetworkUpdateZDecodeErrorZ_err(struct LDKDecodeError e);
+       export function CResult_COption_NetworkUpdateZDecodeErrorZ_err(e: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_COption_NetworkUpdateZDecodeErrorZ_err(e);
+               return nativeResponseValue;
+       }
+       // bool CResult_COption_NetworkUpdateZDecodeErrorZ_is_ok(const struct LDKCResult_COption_NetworkUpdateZDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_COption_NetworkUpdateZDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_COption_NetworkUpdateZDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
+       // void CResult_COption_NetworkUpdateZDecodeErrorZ_free(struct LDKCResult_COption_NetworkUpdateZDecodeErrorZ _res);
+       export function CResult_COption_NetworkUpdateZDecodeErrorZ_free(_res: number): void {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_COption_NetworkUpdateZDecodeErrorZ_free(_res);
+               // debug statements here
+       }
+       // uint64_t CResult_COption_NetworkUpdateZDecodeErrorZ_clone_ptr(LDKCResult_COption_NetworkUpdateZDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_COption_NetworkUpdateZDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_COption_NetworkUpdateZDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
+       // struct LDKCResult_COption_NetworkUpdateZDecodeErrorZ CResult_COption_NetworkUpdateZDecodeErrorZ_clone(const struct LDKCResult_COption_NetworkUpdateZDecodeErrorZ *NONNULL_PTR orig);
+       export function CResult_COption_NetworkUpdateZDecodeErrorZ_clone(orig: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_COption_NetworkUpdateZDecodeErrorZ_clone(orig);
+               return nativeResponseValue;
+       }
        // struct LDKCOption_AccessZ COption_AccessZ_some(struct LDKAccess o);
        export function COption_AccessZ_some(o: number): number {
                if(!isWasmInitialized) {
@@ -5736,6 +7235,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_DirectionalChannelInfoDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_DirectionalChannelInfoDecodeErrorZ_is_ok(const struct LDKCResult_DirectionalChannelInfoDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_DirectionalChannelInfoDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_DirectionalChannelInfoDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_DirectionalChannelInfoDecodeErrorZ_free(struct LDKCResult_DirectionalChannelInfoDecodeErrorZ _res);
        export function CResult_DirectionalChannelInfoDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -5744,6 +7251,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_DirectionalChannelInfoDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_DirectionalChannelInfoDecodeErrorZ_clone_ptr(LDKCResult_DirectionalChannelInfoDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_DirectionalChannelInfoDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_DirectionalChannelInfoDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_DirectionalChannelInfoDecodeErrorZ CResult_DirectionalChannelInfoDecodeErrorZ_clone(const struct LDKCResult_DirectionalChannelInfoDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_DirectionalChannelInfoDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -5768,6 +7283,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_ChannelInfoDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_ChannelInfoDecodeErrorZ_is_ok(const struct LDKCResult_ChannelInfoDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_ChannelInfoDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_ChannelInfoDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_ChannelInfoDecodeErrorZ_free(struct LDKCResult_ChannelInfoDecodeErrorZ _res);
        export function CResult_ChannelInfoDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -5776,6 +7299,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_ChannelInfoDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_ChannelInfoDecodeErrorZ_clone_ptr(LDKCResult_ChannelInfoDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_ChannelInfoDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_ChannelInfoDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_ChannelInfoDecodeErrorZ CResult_ChannelInfoDecodeErrorZ_clone(const struct LDKCResult_ChannelInfoDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_ChannelInfoDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -5800,6 +7331,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_RoutingFeesDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_RoutingFeesDecodeErrorZ_is_ok(const struct LDKCResult_RoutingFeesDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_RoutingFeesDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_RoutingFeesDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_RoutingFeesDecodeErrorZ_free(struct LDKCResult_RoutingFeesDecodeErrorZ _res);
        export function CResult_RoutingFeesDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -5808,6 +7347,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_RoutingFeesDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_RoutingFeesDecodeErrorZ_clone_ptr(LDKCResult_RoutingFeesDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_RoutingFeesDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_RoutingFeesDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_RoutingFeesDecodeErrorZ CResult_RoutingFeesDecodeErrorZ_clone(const struct LDKCResult_RoutingFeesDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_RoutingFeesDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -5832,6 +7379,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_NodeAnnouncementInfoDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_NodeAnnouncementInfoDecodeErrorZ_is_ok(const struct LDKCResult_NodeAnnouncementInfoDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_NodeAnnouncementInfoDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_NodeAnnouncementInfoDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_NodeAnnouncementInfoDecodeErrorZ_free(struct LDKCResult_NodeAnnouncementInfoDecodeErrorZ _res);
        export function CResult_NodeAnnouncementInfoDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -5840,6 +7395,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_NodeAnnouncementInfoDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_NodeAnnouncementInfoDecodeErrorZ_clone_ptr(LDKCResult_NodeAnnouncementInfoDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_NodeAnnouncementInfoDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_NodeAnnouncementInfoDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_NodeAnnouncementInfoDecodeErrorZ CResult_NodeAnnouncementInfoDecodeErrorZ_clone(const struct LDKCResult_NodeAnnouncementInfoDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_NodeAnnouncementInfoDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -5872,6 +7435,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_NodeInfoDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_NodeInfoDecodeErrorZ_is_ok(const struct LDKCResult_NodeInfoDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_NodeInfoDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_NodeInfoDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_NodeInfoDecodeErrorZ_free(struct LDKCResult_NodeInfoDecodeErrorZ _res);
        export function CResult_NodeInfoDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -5880,6 +7451,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_NodeInfoDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_NodeInfoDecodeErrorZ_clone_ptr(LDKCResult_NodeInfoDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_NodeInfoDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_NodeInfoDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_NodeInfoDecodeErrorZ CResult_NodeInfoDecodeErrorZ_clone(const struct LDKCResult_NodeInfoDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_NodeInfoDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -5904,6 +7483,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_NetworkGraphDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_NetworkGraphDecodeErrorZ_is_ok(const struct LDKCResult_NetworkGraphDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_NetworkGraphDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_NetworkGraphDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_NetworkGraphDecodeErrorZ_free(struct LDKCResult_NetworkGraphDecodeErrorZ _res);
        export function CResult_NetworkGraphDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -5912,6 +7499,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_NetworkGraphDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_NetworkGraphDecodeErrorZ_clone_ptr(LDKCResult_NetworkGraphDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_NetworkGraphDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_NetworkGraphDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_NetworkGraphDecodeErrorZ CResult_NetworkGraphDecodeErrorZ_clone(const struct LDKCResult_NetworkGraphDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_NetworkGraphDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -5944,6 +7539,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.COption_CVec_NetAddressZZ_free(_res);
                // debug statements here
        }
+       // uint64_t COption_CVec_NetAddressZZ_clone_ptr(LDKCOption_CVec_NetAddressZZ *NONNULL_PTR arg);
+       export function COption_CVec_NetAddressZZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.COption_CVec_NetAddressZZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCOption_CVec_NetAddressZZ COption_CVec_NetAddressZZ_clone(const struct LDKCOption_CVec_NetAddressZZ *NONNULL_PTR orig);
        export function COption_CVec_NetAddressZZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -5968,6 +7571,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_NetAddressDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_NetAddressDecodeErrorZ_is_ok(const struct LDKCResult_NetAddressDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_NetAddressDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_NetAddressDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_NetAddressDecodeErrorZ_free(struct LDKCResult_NetAddressDecodeErrorZ _res);
        export function CResult_NetAddressDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -5976,6 +7587,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_NetAddressDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_NetAddressDecodeErrorZ_clone_ptr(LDKCResult_NetAddressDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_NetAddressDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_NetAddressDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_NetAddressDecodeErrorZ CResult_NetAddressDecodeErrorZ_clone(const struct LDKCResult_NetAddressDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_NetAddressDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -6032,6 +7651,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_AcceptChannelDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_AcceptChannelDecodeErrorZ_is_ok(const struct LDKCResult_AcceptChannelDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_AcceptChannelDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_AcceptChannelDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_AcceptChannelDecodeErrorZ_free(struct LDKCResult_AcceptChannelDecodeErrorZ _res);
        export function CResult_AcceptChannelDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -6040,6 +7667,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_AcceptChannelDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_AcceptChannelDecodeErrorZ_clone_ptr(LDKCResult_AcceptChannelDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_AcceptChannelDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_AcceptChannelDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_AcceptChannelDecodeErrorZ CResult_AcceptChannelDecodeErrorZ_clone(const struct LDKCResult_AcceptChannelDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_AcceptChannelDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -6064,6 +7699,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_AnnouncementSignaturesDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_AnnouncementSignaturesDecodeErrorZ_is_ok(const struct LDKCResult_AnnouncementSignaturesDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_AnnouncementSignaturesDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_AnnouncementSignaturesDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_AnnouncementSignaturesDecodeErrorZ_free(struct LDKCResult_AnnouncementSignaturesDecodeErrorZ _res);
        export function CResult_AnnouncementSignaturesDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -6072,6 +7715,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_AnnouncementSignaturesDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_AnnouncementSignaturesDecodeErrorZ_clone_ptr(LDKCResult_AnnouncementSignaturesDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_AnnouncementSignaturesDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_AnnouncementSignaturesDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_AnnouncementSignaturesDecodeErrorZ CResult_AnnouncementSignaturesDecodeErrorZ_clone(const struct LDKCResult_AnnouncementSignaturesDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_AnnouncementSignaturesDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -6096,6 +7747,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_ChannelReestablishDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_ChannelReestablishDecodeErrorZ_is_ok(const struct LDKCResult_ChannelReestablishDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_ChannelReestablishDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_ChannelReestablishDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_ChannelReestablishDecodeErrorZ_free(struct LDKCResult_ChannelReestablishDecodeErrorZ _res);
        export function CResult_ChannelReestablishDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -6104,6 +7763,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_ChannelReestablishDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_ChannelReestablishDecodeErrorZ_clone_ptr(LDKCResult_ChannelReestablishDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_ChannelReestablishDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_ChannelReestablishDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_ChannelReestablishDecodeErrorZ CResult_ChannelReestablishDecodeErrorZ_clone(const struct LDKCResult_ChannelReestablishDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_ChannelReestablishDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -6128,6 +7795,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_ClosingSignedDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_ClosingSignedDecodeErrorZ_is_ok(const struct LDKCResult_ClosingSignedDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_ClosingSignedDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_ClosingSignedDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_ClosingSignedDecodeErrorZ_free(struct LDKCResult_ClosingSignedDecodeErrorZ _res);
        export function CResult_ClosingSignedDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -6136,6 +7811,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_ClosingSignedDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_ClosingSignedDecodeErrorZ_clone_ptr(LDKCResult_ClosingSignedDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_ClosingSignedDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_ClosingSignedDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_ClosingSignedDecodeErrorZ CResult_ClosingSignedDecodeErrorZ_clone(const struct LDKCResult_ClosingSignedDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_ClosingSignedDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -6160,6 +7843,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_ClosingSignedFeeRangeDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_ClosingSignedFeeRangeDecodeErrorZ_is_ok(const struct LDKCResult_ClosingSignedFeeRangeDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_ClosingSignedFeeRangeDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_ClosingSignedFeeRangeDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_ClosingSignedFeeRangeDecodeErrorZ_free(struct LDKCResult_ClosingSignedFeeRangeDecodeErrorZ _res);
        export function CResult_ClosingSignedFeeRangeDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -6168,6 +7859,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_ClosingSignedFeeRangeDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_ClosingSignedFeeRangeDecodeErrorZ_clone_ptr(LDKCResult_ClosingSignedFeeRangeDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_ClosingSignedFeeRangeDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_ClosingSignedFeeRangeDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_ClosingSignedFeeRangeDecodeErrorZ CResult_ClosingSignedFeeRangeDecodeErrorZ_clone(const struct LDKCResult_ClosingSignedFeeRangeDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_ClosingSignedFeeRangeDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -6192,6 +7891,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_CommitmentSignedDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_CommitmentSignedDecodeErrorZ_is_ok(const struct LDKCResult_CommitmentSignedDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_CommitmentSignedDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_CommitmentSignedDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_CommitmentSignedDecodeErrorZ_free(struct LDKCResult_CommitmentSignedDecodeErrorZ _res);
        export function CResult_CommitmentSignedDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -6200,6 +7907,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_CommitmentSignedDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_CommitmentSignedDecodeErrorZ_clone_ptr(LDKCResult_CommitmentSignedDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_CommitmentSignedDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_CommitmentSignedDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_CommitmentSignedDecodeErrorZ CResult_CommitmentSignedDecodeErrorZ_clone(const struct LDKCResult_CommitmentSignedDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_CommitmentSignedDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -6224,6 +7939,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_FundingCreatedDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_FundingCreatedDecodeErrorZ_is_ok(const struct LDKCResult_FundingCreatedDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_FundingCreatedDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_FundingCreatedDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_FundingCreatedDecodeErrorZ_free(struct LDKCResult_FundingCreatedDecodeErrorZ _res);
        export function CResult_FundingCreatedDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -6232,6 +7955,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_FundingCreatedDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_FundingCreatedDecodeErrorZ_clone_ptr(LDKCResult_FundingCreatedDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_FundingCreatedDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_FundingCreatedDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_FundingCreatedDecodeErrorZ CResult_FundingCreatedDecodeErrorZ_clone(const struct LDKCResult_FundingCreatedDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_FundingCreatedDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -6256,6 +7987,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_FundingSignedDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_FundingSignedDecodeErrorZ_is_ok(const struct LDKCResult_FundingSignedDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_FundingSignedDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_FundingSignedDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_FundingSignedDecodeErrorZ_free(struct LDKCResult_FundingSignedDecodeErrorZ _res);
        export function CResult_FundingSignedDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -6264,6 +8003,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_FundingSignedDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_FundingSignedDecodeErrorZ_clone_ptr(LDKCResult_FundingSignedDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_FundingSignedDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_FundingSignedDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_FundingSignedDecodeErrorZ CResult_FundingSignedDecodeErrorZ_clone(const struct LDKCResult_FundingSignedDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_FundingSignedDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -6288,6 +8035,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_FundingLockedDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_FundingLockedDecodeErrorZ_is_ok(const struct LDKCResult_FundingLockedDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_FundingLockedDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_FundingLockedDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_FundingLockedDecodeErrorZ_free(struct LDKCResult_FundingLockedDecodeErrorZ _res);
        export function CResult_FundingLockedDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -6296,6 +8051,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_FundingLockedDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_FundingLockedDecodeErrorZ_clone_ptr(LDKCResult_FundingLockedDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_FundingLockedDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_FundingLockedDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_FundingLockedDecodeErrorZ CResult_FundingLockedDecodeErrorZ_clone(const struct LDKCResult_FundingLockedDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_FundingLockedDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -6320,6 +8083,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_InitDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_InitDecodeErrorZ_is_ok(const struct LDKCResult_InitDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_InitDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_InitDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_InitDecodeErrorZ_free(struct LDKCResult_InitDecodeErrorZ _res);
        export function CResult_InitDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -6328,6 +8099,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_InitDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_InitDecodeErrorZ_clone_ptr(LDKCResult_InitDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_InitDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_InitDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_InitDecodeErrorZ CResult_InitDecodeErrorZ_clone(const struct LDKCResult_InitDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_InitDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -6352,6 +8131,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_OpenChannelDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_OpenChannelDecodeErrorZ_is_ok(const struct LDKCResult_OpenChannelDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_OpenChannelDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_OpenChannelDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_OpenChannelDecodeErrorZ_free(struct LDKCResult_OpenChannelDecodeErrorZ _res);
        export function CResult_OpenChannelDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -6360,6 +8147,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_OpenChannelDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_OpenChannelDecodeErrorZ_clone_ptr(LDKCResult_OpenChannelDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_OpenChannelDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_OpenChannelDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_OpenChannelDecodeErrorZ CResult_OpenChannelDecodeErrorZ_clone(const struct LDKCResult_OpenChannelDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_OpenChannelDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -6384,6 +8179,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_RevokeAndACKDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_RevokeAndACKDecodeErrorZ_is_ok(const struct LDKCResult_RevokeAndACKDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_RevokeAndACKDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_RevokeAndACKDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_RevokeAndACKDecodeErrorZ_free(struct LDKCResult_RevokeAndACKDecodeErrorZ _res);
        export function CResult_RevokeAndACKDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -6392,6 +8195,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_RevokeAndACKDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_RevokeAndACKDecodeErrorZ_clone_ptr(LDKCResult_RevokeAndACKDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_RevokeAndACKDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_RevokeAndACKDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_RevokeAndACKDecodeErrorZ CResult_RevokeAndACKDecodeErrorZ_clone(const struct LDKCResult_RevokeAndACKDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_RevokeAndACKDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -6416,6 +8227,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_ShutdownDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_ShutdownDecodeErrorZ_is_ok(const struct LDKCResult_ShutdownDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_ShutdownDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_ShutdownDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_ShutdownDecodeErrorZ_free(struct LDKCResult_ShutdownDecodeErrorZ _res);
        export function CResult_ShutdownDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -6424,6 +8243,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_ShutdownDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_ShutdownDecodeErrorZ_clone_ptr(LDKCResult_ShutdownDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_ShutdownDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_ShutdownDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_ShutdownDecodeErrorZ CResult_ShutdownDecodeErrorZ_clone(const struct LDKCResult_ShutdownDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_ShutdownDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -6448,6 +8275,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_UpdateFailHTLCDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_UpdateFailHTLCDecodeErrorZ_is_ok(const struct LDKCResult_UpdateFailHTLCDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_UpdateFailHTLCDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_UpdateFailHTLCDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_UpdateFailHTLCDecodeErrorZ_free(struct LDKCResult_UpdateFailHTLCDecodeErrorZ _res);
        export function CResult_UpdateFailHTLCDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -6456,6 +8291,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_UpdateFailHTLCDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_UpdateFailHTLCDecodeErrorZ_clone_ptr(LDKCResult_UpdateFailHTLCDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_UpdateFailHTLCDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_UpdateFailHTLCDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_UpdateFailHTLCDecodeErrorZ CResult_UpdateFailHTLCDecodeErrorZ_clone(const struct LDKCResult_UpdateFailHTLCDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_UpdateFailHTLCDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -6480,6 +8323,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_UpdateFailMalformedHTLCDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_UpdateFailMalformedHTLCDecodeErrorZ_is_ok(const struct LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_UpdateFailMalformedHTLCDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_UpdateFailMalformedHTLCDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_UpdateFailMalformedHTLCDecodeErrorZ_free(struct LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ _res);
        export function CResult_UpdateFailMalformedHTLCDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -6488,6 +8339,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_UpdateFailMalformedHTLCDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_UpdateFailMalformedHTLCDecodeErrorZ_clone_ptr(LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_UpdateFailMalformedHTLCDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_UpdateFailMalformedHTLCDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ CResult_UpdateFailMalformedHTLCDecodeErrorZ_clone(const struct LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_UpdateFailMalformedHTLCDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -6512,6 +8371,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_UpdateFeeDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_UpdateFeeDecodeErrorZ_is_ok(const struct LDKCResult_UpdateFeeDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_UpdateFeeDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_UpdateFeeDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_UpdateFeeDecodeErrorZ_free(struct LDKCResult_UpdateFeeDecodeErrorZ _res);
        export function CResult_UpdateFeeDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -6520,6 +8387,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_UpdateFeeDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_UpdateFeeDecodeErrorZ_clone_ptr(LDKCResult_UpdateFeeDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_UpdateFeeDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_UpdateFeeDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_UpdateFeeDecodeErrorZ CResult_UpdateFeeDecodeErrorZ_clone(const struct LDKCResult_UpdateFeeDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_UpdateFeeDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -6544,6 +8419,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_UpdateFulfillHTLCDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_UpdateFulfillHTLCDecodeErrorZ_is_ok(const struct LDKCResult_UpdateFulfillHTLCDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_UpdateFulfillHTLCDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_UpdateFulfillHTLCDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_UpdateFulfillHTLCDecodeErrorZ_free(struct LDKCResult_UpdateFulfillHTLCDecodeErrorZ _res);
        export function CResult_UpdateFulfillHTLCDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -6552,6 +8435,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_UpdateFulfillHTLCDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_UpdateFulfillHTLCDecodeErrorZ_clone_ptr(LDKCResult_UpdateFulfillHTLCDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_UpdateFulfillHTLCDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_UpdateFulfillHTLCDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_UpdateFulfillHTLCDecodeErrorZ CResult_UpdateFulfillHTLCDecodeErrorZ_clone(const struct LDKCResult_UpdateFulfillHTLCDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_UpdateFulfillHTLCDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -6576,6 +8467,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_UpdateAddHTLCDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_UpdateAddHTLCDecodeErrorZ_is_ok(const struct LDKCResult_UpdateAddHTLCDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_UpdateAddHTLCDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_UpdateAddHTLCDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_UpdateAddHTLCDecodeErrorZ_free(struct LDKCResult_UpdateAddHTLCDecodeErrorZ _res);
        export function CResult_UpdateAddHTLCDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -6584,6 +8483,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_UpdateAddHTLCDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_UpdateAddHTLCDecodeErrorZ_clone_ptr(LDKCResult_UpdateAddHTLCDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_UpdateAddHTLCDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_UpdateAddHTLCDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_UpdateAddHTLCDecodeErrorZ CResult_UpdateAddHTLCDecodeErrorZ_clone(const struct LDKCResult_UpdateAddHTLCDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_UpdateAddHTLCDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -6608,6 +8515,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_PingDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_PingDecodeErrorZ_is_ok(const struct LDKCResult_PingDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_PingDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_PingDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_PingDecodeErrorZ_free(struct LDKCResult_PingDecodeErrorZ _res);
        export function CResult_PingDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -6616,6 +8531,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_PingDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_PingDecodeErrorZ_clone_ptr(LDKCResult_PingDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_PingDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_PingDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_PingDecodeErrorZ CResult_PingDecodeErrorZ_clone(const struct LDKCResult_PingDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_PingDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -6640,6 +8563,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_PongDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_PongDecodeErrorZ_is_ok(const struct LDKCResult_PongDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_PongDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_PongDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_PongDecodeErrorZ_free(struct LDKCResult_PongDecodeErrorZ _res);
        export function CResult_PongDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -6648,6 +8579,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_PongDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_PongDecodeErrorZ_clone_ptr(LDKCResult_PongDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_PongDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_PongDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_PongDecodeErrorZ CResult_PongDecodeErrorZ_clone(const struct LDKCResult_PongDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_PongDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -6672,6 +8611,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_UnsignedChannelAnnouncementDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_UnsignedChannelAnnouncementDecodeErrorZ_is_ok(const struct LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_UnsignedChannelAnnouncementDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_UnsignedChannelAnnouncementDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_UnsignedChannelAnnouncementDecodeErrorZ_free(struct LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ _res);
        export function CResult_UnsignedChannelAnnouncementDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -6680,6 +8627,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_UnsignedChannelAnnouncementDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_UnsignedChannelAnnouncementDecodeErrorZ_clone_ptr(LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_UnsignedChannelAnnouncementDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_UnsignedChannelAnnouncementDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ CResult_UnsignedChannelAnnouncementDecodeErrorZ_clone(const struct LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_UnsignedChannelAnnouncementDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -6704,6 +8659,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_ChannelAnnouncementDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_ChannelAnnouncementDecodeErrorZ_is_ok(const struct LDKCResult_ChannelAnnouncementDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_ChannelAnnouncementDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_ChannelAnnouncementDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_ChannelAnnouncementDecodeErrorZ_free(struct LDKCResult_ChannelAnnouncementDecodeErrorZ _res);
        export function CResult_ChannelAnnouncementDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -6712,6 +8675,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_ChannelAnnouncementDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_ChannelAnnouncementDecodeErrorZ_clone_ptr(LDKCResult_ChannelAnnouncementDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_ChannelAnnouncementDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_ChannelAnnouncementDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_ChannelAnnouncementDecodeErrorZ CResult_ChannelAnnouncementDecodeErrorZ_clone(const struct LDKCResult_ChannelAnnouncementDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_ChannelAnnouncementDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -6736,13 +8707,29 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_UnsignedChannelUpdateDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_UnsignedChannelUpdateDecodeErrorZ_is_ok(const struct LDKCResult_UnsignedChannelUpdateDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_UnsignedChannelUpdateDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_UnsignedChannelUpdateDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_UnsignedChannelUpdateDecodeErrorZ_free(struct LDKCResult_UnsignedChannelUpdateDecodeErrorZ _res);
        export function CResult_UnsignedChannelUpdateDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
                        throw new Error("initializeWasm() must be awaited first!");
                }
-               const nativeResponseValue = wasm.CResult_UnsignedChannelUpdateDecodeErrorZ_free(_res);
-               // debug statements here
+               const nativeResponseValue = wasm.CResult_UnsignedChannelUpdateDecodeErrorZ_free(_res);
+               // debug statements here
+       }
+       // uint64_t CResult_UnsignedChannelUpdateDecodeErrorZ_clone_ptr(LDKCResult_UnsignedChannelUpdateDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_UnsignedChannelUpdateDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_UnsignedChannelUpdateDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
        }
        // struct LDKCResult_UnsignedChannelUpdateDecodeErrorZ CResult_UnsignedChannelUpdateDecodeErrorZ_clone(const struct LDKCResult_UnsignedChannelUpdateDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_UnsignedChannelUpdateDecodeErrorZ_clone(orig: number): number {
@@ -6768,6 +8755,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_ChannelUpdateDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_ChannelUpdateDecodeErrorZ_is_ok(const struct LDKCResult_ChannelUpdateDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_ChannelUpdateDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_ChannelUpdateDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_ChannelUpdateDecodeErrorZ_free(struct LDKCResult_ChannelUpdateDecodeErrorZ _res);
        export function CResult_ChannelUpdateDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -6776,6 +8771,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_ChannelUpdateDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_ChannelUpdateDecodeErrorZ_clone_ptr(LDKCResult_ChannelUpdateDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_ChannelUpdateDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_ChannelUpdateDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_ChannelUpdateDecodeErrorZ CResult_ChannelUpdateDecodeErrorZ_clone(const struct LDKCResult_ChannelUpdateDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_ChannelUpdateDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -6800,6 +8803,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_ErrorMessageDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_ErrorMessageDecodeErrorZ_is_ok(const struct LDKCResult_ErrorMessageDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_ErrorMessageDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_ErrorMessageDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_ErrorMessageDecodeErrorZ_free(struct LDKCResult_ErrorMessageDecodeErrorZ _res);
        export function CResult_ErrorMessageDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -6808,6 +8819,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_ErrorMessageDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_ErrorMessageDecodeErrorZ_clone_ptr(LDKCResult_ErrorMessageDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_ErrorMessageDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_ErrorMessageDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_ErrorMessageDecodeErrorZ CResult_ErrorMessageDecodeErrorZ_clone(const struct LDKCResult_ErrorMessageDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_ErrorMessageDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -6832,6 +8851,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_UnsignedNodeAnnouncementDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_UnsignedNodeAnnouncementDecodeErrorZ_is_ok(const struct LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_UnsignedNodeAnnouncementDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_UnsignedNodeAnnouncementDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_UnsignedNodeAnnouncementDecodeErrorZ_free(struct LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ _res);
        export function CResult_UnsignedNodeAnnouncementDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -6840,6 +8867,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_UnsignedNodeAnnouncementDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_UnsignedNodeAnnouncementDecodeErrorZ_clone_ptr(LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_UnsignedNodeAnnouncementDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_UnsignedNodeAnnouncementDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ CResult_UnsignedNodeAnnouncementDecodeErrorZ_clone(const struct LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_UnsignedNodeAnnouncementDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -6864,6 +8899,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_NodeAnnouncementDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_NodeAnnouncementDecodeErrorZ_is_ok(const struct LDKCResult_NodeAnnouncementDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_NodeAnnouncementDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_NodeAnnouncementDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_NodeAnnouncementDecodeErrorZ_free(struct LDKCResult_NodeAnnouncementDecodeErrorZ _res);
        export function CResult_NodeAnnouncementDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -6872,6 +8915,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_NodeAnnouncementDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_NodeAnnouncementDecodeErrorZ_clone_ptr(LDKCResult_NodeAnnouncementDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_NodeAnnouncementDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_NodeAnnouncementDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_NodeAnnouncementDecodeErrorZ CResult_NodeAnnouncementDecodeErrorZ_clone(const struct LDKCResult_NodeAnnouncementDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_NodeAnnouncementDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -6896,6 +8947,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_QueryShortChannelIdsDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_QueryShortChannelIdsDecodeErrorZ_is_ok(const struct LDKCResult_QueryShortChannelIdsDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_QueryShortChannelIdsDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_QueryShortChannelIdsDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_QueryShortChannelIdsDecodeErrorZ_free(struct LDKCResult_QueryShortChannelIdsDecodeErrorZ _res);
        export function CResult_QueryShortChannelIdsDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -6904,6 +8963,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_QueryShortChannelIdsDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_QueryShortChannelIdsDecodeErrorZ_clone_ptr(LDKCResult_QueryShortChannelIdsDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_QueryShortChannelIdsDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_QueryShortChannelIdsDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_QueryShortChannelIdsDecodeErrorZ CResult_QueryShortChannelIdsDecodeErrorZ_clone(const struct LDKCResult_QueryShortChannelIdsDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_QueryShortChannelIdsDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -6928,6 +8995,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_ReplyShortChannelIdsEndDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_ReplyShortChannelIdsEndDecodeErrorZ_is_ok(const struct LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_ReplyShortChannelIdsEndDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_ReplyShortChannelIdsEndDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_ReplyShortChannelIdsEndDecodeErrorZ_free(struct LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ _res);
        export function CResult_ReplyShortChannelIdsEndDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -6936,6 +9011,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_ReplyShortChannelIdsEndDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_ReplyShortChannelIdsEndDecodeErrorZ_clone_ptr(LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_ReplyShortChannelIdsEndDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_ReplyShortChannelIdsEndDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ CResult_ReplyShortChannelIdsEndDecodeErrorZ_clone(const struct LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_ReplyShortChannelIdsEndDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -6960,6 +9043,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_QueryChannelRangeDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_QueryChannelRangeDecodeErrorZ_is_ok(const struct LDKCResult_QueryChannelRangeDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_QueryChannelRangeDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_QueryChannelRangeDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_QueryChannelRangeDecodeErrorZ_free(struct LDKCResult_QueryChannelRangeDecodeErrorZ _res);
        export function CResult_QueryChannelRangeDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -6968,6 +9059,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_QueryChannelRangeDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_QueryChannelRangeDecodeErrorZ_clone_ptr(LDKCResult_QueryChannelRangeDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_QueryChannelRangeDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_QueryChannelRangeDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_QueryChannelRangeDecodeErrorZ CResult_QueryChannelRangeDecodeErrorZ_clone(const struct LDKCResult_QueryChannelRangeDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_QueryChannelRangeDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -6992,6 +9091,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_ReplyChannelRangeDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_ReplyChannelRangeDecodeErrorZ_is_ok(const struct LDKCResult_ReplyChannelRangeDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_ReplyChannelRangeDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_ReplyChannelRangeDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_ReplyChannelRangeDecodeErrorZ_free(struct LDKCResult_ReplyChannelRangeDecodeErrorZ _res);
        export function CResult_ReplyChannelRangeDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -7000,6 +9107,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_ReplyChannelRangeDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_ReplyChannelRangeDecodeErrorZ_clone_ptr(LDKCResult_ReplyChannelRangeDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_ReplyChannelRangeDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_ReplyChannelRangeDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_ReplyChannelRangeDecodeErrorZ CResult_ReplyChannelRangeDecodeErrorZ_clone(const struct LDKCResult_ReplyChannelRangeDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_ReplyChannelRangeDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -7024,6 +9139,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_GossipTimestampFilterDecodeErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_GossipTimestampFilterDecodeErrorZ_is_ok(const struct LDKCResult_GossipTimestampFilterDecodeErrorZ *NONNULL_PTR o);
+       export function CResult_GossipTimestampFilterDecodeErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_GossipTimestampFilterDecodeErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_GossipTimestampFilterDecodeErrorZ_free(struct LDKCResult_GossipTimestampFilterDecodeErrorZ _res);
        export function CResult_GossipTimestampFilterDecodeErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -7032,6 +9155,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_GossipTimestampFilterDecodeErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_GossipTimestampFilterDecodeErrorZ_clone_ptr(LDKCResult_GossipTimestampFilterDecodeErrorZ *NONNULL_PTR arg);
+       export function CResult_GossipTimestampFilterDecodeErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_GossipTimestampFilterDecodeErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_GossipTimestampFilterDecodeErrorZ CResult_GossipTimestampFilterDecodeErrorZ_clone(const struct LDKCResult_GossipTimestampFilterDecodeErrorZ *NONNULL_PTR orig);
        export function CResult_GossipTimestampFilterDecodeErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -7056,6 +9187,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_InvoiceSignOrCreationErrorZ_err(e);
                return nativeResponseValue;
        }
+       // bool CResult_InvoiceSignOrCreationErrorZ_is_ok(const struct LDKCResult_InvoiceSignOrCreationErrorZ *NONNULL_PTR o);
+       export function CResult_InvoiceSignOrCreationErrorZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_InvoiceSignOrCreationErrorZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_InvoiceSignOrCreationErrorZ_free(struct LDKCResult_InvoiceSignOrCreationErrorZ _res);
        export function CResult_InvoiceSignOrCreationErrorZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -7064,6 +9203,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_InvoiceSignOrCreationErrorZ_free(_res);
                // debug statements here
        }
+       // uint64_t CResult_InvoiceSignOrCreationErrorZ_clone_ptr(LDKCResult_InvoiceSignOrCreationErrorZ *NONNULL_PTR arg);
+       export function CResult_InvoiceSignOrCreationErrorZ_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_InvoiceSignOrCreationErrorZ_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCResult_InvoiceSignOrCreationErrorZ CResult_InvoiceSignOrCreationErrorZ_clone(const struct LDKCResult_InvoiceSignOrCreationErrorZ *NONNULL_PTR orig);
        export function CResult_InvoiceSignOrCreationErrorZ_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -7112,6 +9259,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CResult_LockedChannelMonitorNoneZ_err();
                return nativeResponseValue;
        }
+       // bool CResult_LockedChannelMonitorNoneZ_is_ok(const struct LDKCResult_LockedChannelMonitorNoneZ *NONNULL_PTR o);
+       export function CResult_LockedChannelMonitorNoneZ_is_ok(o: number): boolean {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CResult_LockedChannelMonitorNoneZ_is_ok(o);
+               return nativeResponseValue;
+       }
        // void CResult_LockedChannelMonitorNoneZ_free(struct LDKCResult_LockedChannelMonitorNoneZ _res);
        export function CResult_LockedChannelMonitorNoneZ_free(_res: number): void {
                if(!isWasmInitialized) {
@@ -7136,6 +9291,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.PaymentPurpose_free(this_ptr);
                // debug statements here
        }
+       // uint64_t PaymentPurpose_clone_ptr(LDKPaymentPurpose *NONNULL_PTR arg);
+       export function PaymentPurpose_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.PaymentPurpose_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKPaymentPurpose PaymentPurpose_clone(const struct LDKPaymentPurpose *NONNULL_PTR orig);
        export function PaymentPurpose_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -7168,6 +9331,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.ClosureReason_free(this_ptr);
                // debug statements here
        }
+       // uint64_t ClosureReason_clone_ptr(LDKClosureReason *NONNULL_PTR arg);
+       export function ClosureReason_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.ClosureReason_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKClosureReason ClosureReason_clone(const struct LDKClosureReason *NONNULL_PTR orig);
        export function ClosureReason_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -7240,6 +9411,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.ClosureReason_write(obj);
                return decodeArray(nativeResponseValue);
        }
+       // struct LDKCResult_COption_ClosureReasonZDecodeErrorZ ClosureReason_read(struct LDKu8slice ser);
+       export function ClosureReason_read(ser: Uint8Array): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.ClosureReason_read(encodeArray(ser));
+               return nativeResponseValue;
+       }
        // void Event_free(struct LDKEvent this_ptr);
        export function Event_free(this_ptr: number): void {
                if(!isWasmInitialized) {
@@ -7248,6 +9427,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.Event_free(this_ptr);
                // debug statements here
        }
+       // uint64_t Event_clone_ptr(LDKEvent *NONNULL_PTR arg);
+       export function Event_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.Event_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKEvent Event_clone(const struct LDKEvent *NONNULL_PTR orig);
        export function Event_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -7336,6 +9523,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.Event_write(obj);
                return decodeArray(nativeResponseValue);
        }
+       // struct LDKCResult_COption_EventZDecodeErrorZ Event_read(struct LDKu8slice ser);
+       export function Event_read(ser: Uint8Array): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.Event_read(encodeArray(ser));
+               return nativeResponseValue;
+       }
        // void MessageSendEvent_free(struct LDKMessageSendEvent this_ptr);
        export function MessageSendEvent_free(this_ptr: number): void {
                if(!isWasmInitialized) {
@@ -7344,6 +9539,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.MessageSendEvent_free(this_ptr);
                // debug statements here
        }
+       // uint64_t MessageSendEvent_clone_ptr(LDKMessageSendEvent *NONNULL_PTR arg);
+       export function MessageSendEvent_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.MessageSendEvent_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKMessageSendEvent MessageSendEvent_clone(const struct LDKMessageSendEvent *NONNULL_PTR orig);
        export function MessageSendEvent_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -7536,6 +9739,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.APIError_free(this_ptr);
                // debug statements here
        }
+       // uint64_t APIError_clone_ptr(LDKAPIError *NONNULL_PTR arg);
+       export function APIError_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.APIError_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKAPIError APIError_clone(const struct LDKAPIError *NONNULL_PTR orig);
        export function APIError_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -7688,6 +9899,110 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.Level_max();
                return nativeResponseValue;
        }
+       // void Record_free(struct LDKRecord this_obj);
+       export function Record_free(this_obj: number): void {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.Record_free(this_obj);
+               // debug statements here
+       }
+       // enum LDKLevel Record_get_level(const struct LDKRecord *NONNULL_PTR this_ptr);
+       export function Record_get_level(this_ptr: number): Level {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.Record_get_level(this_ptr);
+               return nativeResponseValue;
+       }
+       // void Record_set_level(struct LDKRecord *NONNULL_PTR this_ptr, enum LDKLevel val);
+       export function Record_set_level(this_ptr: number, val: Level): void {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.Record_set_level(this_ptr, val);
+               // debug statements here
+       }
+       // struct LDKStr Record_get_args(const struct LDKRecord *NONNULL_PTR this_ptr);
+       export function Record_get_args(this_ptr: number): String {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.Record_get_args(this_ptr);
+               return nativeResponseValue;
+       }
+       // void Record_set_args(struct LDKRecord *NONNULL_PTR this_ptr, struct LDKStr val);
+       export function Record_set_args(this_ptr: number, val: String): void {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.Record_set_args(this_ptr, val);
+               // debug statements here
+       }
+       // struct LDKStr Record_get_module_path(const struct LDKRecord *NONNULL_PTR this_ptr);
+       export function Record_get_module_path(this_ptr: number): String {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.Record_get_module_path(this_ptr);
+               return nativeResponseValue;
+       }
+       // void Record_set_module_path(struct LDKRecord *NONNULL_PTR this_ptr, struct LDKStr val);
+       export function Record_set_module_path(this_ptr: number, val: String): void {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.Record_set_module_path(this_ptr, val);
+               // debug statements here
+       }
+       // struct LDKStr Record_get_file(const struct LDKRecord *NONNULL_PTR this_ptr);
+       export function Record_get_file(this_ptr: number): String {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.Record_get_file(this_ptr);
+               return nativeResponseValue;
+       }
+       // void Record_set_file(struct LDKRecord *NONNULL_PTR this_ptr, struct LDKStr val);
+       export function Record_set_file(this_ptr: number, val: String): void {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.Record_set_file(this_ptr, val);
+               // debug statements here
+       }
+       // uint32_t Record_get_line(const struct LDKRecord *NONNULL_PTR this_ptr);
+       export function Record_get_line(this_ptr: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.Record_get_line(this_ptr);
+               return nativeResponseValue;
+       }
+       // void Record_set_line(struct LDKRecord *NONNULL_PTR this_ptr, uint32_t val);
+       export function Record_set_line(this_ptr: number, val: number): void {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.Record_set_line(this_ptr, val);
+               // debug statements here
+       }
+       // uint64_t Record_clone_ptr(LDKRecord *NONNULL_PTR arg);
+       export function Record_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.Record_clone_ptr(arg);
+               return nativeResponseValue;
+       }
+       // struct LDKRecord Record_clone(const struct LDKRecord *NONNULL_PTR orig);
+       export function Record_clone(orig: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.Record_clone(orig);
+               return nativeResponseValue;
+       }
        // void Logger_free(struct LDKLogger this_ptr);
        export function Logger_free(this_ptr: number): void {
                if(!isWasmInitialized) {
@@ -7760,6 +10075,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.ChannelHandshakeConfig_new(minimum_depth_arg, our_to_self_delay_arg, our_htlc_minimum_msat_arg);
                return nativeResponseValue;
        }
+       // uint64_t ChannelHandshakeConfig_clone_ptr(LDKChannelHandshakeConfig *NONNULL_PTR arg);
+       export function ChannelHandshakeConfig_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.ChannelHandshakeConfig_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKChannelHandshakeConfig ChannelHandshakeConfig_clone(const struct LDKChannelHandshakeConfig *NONNULL_PTR orig);
        export function ChannelHandshakeConfig_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -7920,6 +10243,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.ChannelHandshakeLimits_new(min_funding_satoshis_arg, max_htlc_minimum_msat_arg, min_max_htlc_value_in_flight_msat_arg, max_channel_reserve_satoshis_arg, min_max_accepted_htlcs_arg, max_minimum_depth_arg, force_announced_channel_preference_arg, their_to_self_delay_arg);
                return nativeResponseValue;
        }
+       // uint64_t ChannelHandshakeLimits_clone_ptr(LDKChannelHandshakeLimits *NONNULL_PTR arg);
+       export function ChannelHandshakeLimits_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.ChannelHandshakeLimits_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKChannelHandshakeLimits ChannelHandshakeLimits_clone(const struct LDKChannelHandshakeLimits *NONNULL_PTR orig);
        export function ChannelHandshakeLimits_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -8064,6 +10395,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.ChannelConfig_new(forwarding_fee_proportional_millionths_arg, forwarding_fee_base_msat_arg, cltv_expiry_delta_arg, announced_channel_arg, commit_upfront_shutdown_pubkey_arg, max_dust_htlc_exposure_msat_arg, force_close_avoidance_max_fee_satoshis_arg);
                return nativeResponseValue;
        }
+       // uint64_t ChannelConfig_clone_ptr(LDKChannelConfig *NONNULL_PTR arg);
+       export function ChannelConfig_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.ChannelConfig_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKChannelConfig ChannelConfig_clone(const struct LDKChannelConfig *NONNULL_PTR orig);
        export function ChannelConfig_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -8176,6 +10515,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.UserConfig_new(own_channel_config_arg, peer_channel_config_limits_arg, channel_options_arg, accept_forwards_to_priv_channels_arg);
                return nativeResponseValue;
        }
+       // uint64_t UserConfig_clone_ptr(LDKUserConfig *NONNULL_PTR arg);
+       export function UserConfig_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.UserConfig_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKUserConfig UserConfig_clone(const struct LDKUserConfig *NONNULL_PTR orig);
        export function UserConfig_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -8200,6 +10547,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.BestBlock_free(this_obj);
                // debug statements here
        }
+       // uint64_t BestBlock_clone_ptr(LDKBestBlock *NONNULL_PTR arg);
+       export function BestBlock_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.BestBlock_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKBestBlock BestBlock_clone(const struct LDKBestBlock *NONNULL_PTR orig);
        export function BestBlock_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -8392,6 +10747,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.WatchedOutput_new(encodeArray(block_hash_arg), outpoint_arg, encodeArray(script_pubkey_arg));
                return nativeResponseValue;
        }
+       // uint64_t WatchedOutput_clone_ptr(LDKWatchedOutput *NONNULL_PTR arg);
+       export function WatchedOutput_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.WatchedOutput_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKWatchedOutput WatchedOutput_clone(const struct LDKWatchedOutput *NONNULL_PTR orig);
        export function WatchedOutput_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -8472,6 +10835,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.MonitorUpdateId_free(this_obj);
                // debug statements here
        }
+       // uint64_t MonitorUpdateId_clone_ptr(LDKMonitorUpdateId *NONNULL_PTR arg);
+       export function MonitorUpdateId_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.MonitorUpdateId_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKMonitorUpdateId MonitorUpdateId_clone(const struct LDKMonitorUpdateId *NONNULL_PTR orig);
        export function MonitorUpdateId_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -8616,6 +10987,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.ChannelMonitorUpdate_set_update_id(this_ptr, val);
                // debug statements here
        }
+       // uint64_t ChannelMonitorUpdate_clone_ptr(LDKChannelMonitorUpdate *NONNULL_PTR arg);
+       export function ChannelMonitorUpdate_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.ChannelMonitorUpdate_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKChannelMonitorUpdate ChannelMonitorUpdate_clone(const struct LDKChannelMonitorUpdate *NONNULL_PTR orig);
        export function ChannelMonitorUpdate_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -8672,6 +11051,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.MonitorUpdateError_new(a_arg);
                return nativeResponseValue;
        }
+       // uint64_t MonitorUpdateError_clone_ptr(LDKMonitorUpdateError *NONNULL_PTR arg);
+       export function MonitorUpdateError_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.MonitorUpdateError_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKMonitorUpdateError MonitorUpdateError_clone(const struct LDKMonitorUpdateError *NONNULL_PTR orig);
        export function MonitorUpdateError_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -8688,6 +11075,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.MonitorEvent_free(this_ptr);
                // debug statements here
        }
+       // uint64_t MonitorEvent_clone_ptr(LDKMonitorEvent *NONNULL_PTR arg);
+       export function MonitorEvent_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.MonitorEvent_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKMonitorEvent MonitorEvent_clone(const struct LDKMonitorEvent *NONNULL_PTR orig);
        export function MonitorEvent_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -8736,6 +11131,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.MonitorEvent_write(obj);
                return decodeArray(nativeResponseValue);
        }
+       // struct LDKCResult_COption_MonitorEventZDecodeErrorZ MonitorEvent_read(struct LDKu8slice ser);
+       export function MonitorEvent_read(ser: Uint8Array): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.MonitorEvent_read(encodeArray(ser));
+               return nativeResponseValue;
+       }
        // void HTLCUpdate_free(struct LDKHTLCUpdate this_obj);
        export function HTLCUpdate_free(this_obj: number): void {
                if(!isWasmInitialized) {
@@ -8744,6 +11147,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.HTLCUpdate_free(this_obj);
                // debug statements here
        }
+       // uint64_t HTLCUpdate_clone_ptr(LDKHTLCUpdate *NONNULL_PTR arg);
+       export function HTLCUpdate_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.HTLCUpdate_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKHTLCUpdate HTLCUpdate_clone(const struct LDKHTLCUpdate *NONNULL_PTR orig);
        export function HTLCUpdate_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -8776,6 +11187,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.Balance_free(this_ptr);
                // debug statements here
        }
+       // uint64_t Balance_clone_ptr(LDKBalance *NONNULL_PTR arg);
+       export function Balance_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.Balance_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKBalance Balance_clone(const struct LDKBalance *NONNULL_PTR orig);
        export function Balance_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -8832,6 +11251,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.ChannelMonitor_free(this_obj);
                // debug statements here
        }
+       // uint64_t ChannelMonitor_clone_ptr(LDKChannelMonitor *NONNULL_PTR arg);
+       export function ChannelMonitor_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.ChannelMonitor_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKChannelMonitor ChannelMonitor_clone(const struct LDKChannelMonitor *NONNULL_PTR orig);
        export function ChannelMonitor_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -9032,6 +11459,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.OutPoint_new(encodeArray(txid_arg), index_arg);
                return nativeResponseValue;
        }
+       // uint64_t OutPoint_clone_ptr(LDKOutPoint *NONNULL_PTR arg);
+       export function OutPoint_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.OutPoint_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKOutPoint OutPoint_clone(const struct LDKOutPoint *NONNULL_PTR orig);
        export function OutPoint_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -9200,6 +11635,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.DelayedPaymentOutputDescriptor_new(outpoint_arg, encodeArray(per_commitment_point_arg), to_self_delay_arg, output_arg, encodeArray(revocation_pubkey_arg), encodeArray(channel_keys_id_arg), channel_value_satoshis_arg);
                return nativeResponseValue;
        }
+       // uint64_t DelayedPaymentOutputDescriptor_clone_ptr(LDKDelayedPaymentOutputDescriptor *NONNULL_PTR arg);
+       export function DelayedPaymentOutputDescriptor_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.DelayedPaymentOutputDescriptor_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKDelayedPaymentOutputDescriptor DelayedPaymentOutputDescriptor_clone(const struct LDKDelayedPaymentOutputDescriptor *NONNULL_PTR orig);
        export function DelayedPaymentOutputDescriptor_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -9296,6 +11739,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.StaticPaymentOutputDescriptor_new(outpoint_arg, output_arg, encodeArray(channel_keys_id_arg), channel_value_satoshis_arg);
                return nativeResponseValue;
        }
+       // uint64_t StaticPaymentOutputDescriptor_clone_ptr(LDKStaticPaymentOutputDescriptor *NONNULL_PTR arg);
+       export function StaticPaymentOutputDescriptor_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.StaticPaymentOutputDescriptor_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKStaticPaymentOutputDescriptor StaticPaymentOutputDescriptor_clone(const struct LDKStaticPaymentOutputDescriptor *NONNULL_PTR orig);
        export function StaticPaymentOutputDescriptor_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -9328,6 +11779,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.SpendableOutputDescriptor_free(this_ptr);
                // debug statements here
        }
+       // uint64_t SpendableOutputDescriptor_clone_ptr(LDKSpendableOutputDescriptor *NONNULL_PTR arg);
+       export function SpendableOutputDescriptor_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.SpendableOutputDescriptor_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKSpendableOutputDescriptor SpendableOutputDescriptor_clone(const struct LDKSpendableOutputDescriptor *NONNULL_PTR orig);
        export function SpendableOutputDescriptor_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -9384,6 +11843,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.BaseSign_free(this_ptr);
                // debug statements here
        }
+       // uint64_t Sign_clone_ptr(LDKSign *NONNULL_PTR arg);
+       export function Sign_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.Sign_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKSign Sign_clone(const struct LDKSign *NONNULL_PTR orig);
        export function Sign_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -9512,6 +11979,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.InMemorySigner_set_commitment_seed(this_ptr, encodeArray(val));
                // debug statements here
        }
+       // uint64_t InMemorySigner_clone_ptr(LDKInMemorySigner *NONNULL_PTR arg);
+       export function InMemorySigner_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.InMemorySigner_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKInMemorySigner InMemorySigner_clone(const struct LDKInMemorySigner *NONNULL_PTR orig);
        export function InMemorySigner_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -9720,6 +12195,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.ChainParameters_new(network_arg, best_block_arg);
                return nativeResponseValue;
        }
+       // uint64_t ChainParameters_clone_ptr(LDKChainParameters *NONNULL_PTR arg);
+       export function ChainParameters_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.ChainParameters_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKChainParameters ChainParameters_clone(const struct LDKChainParameters *NONNULL_PTR orig);
        export function ChainParameters_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -9792,6 +12275,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CounterpartyForwardingInfo_new(fee_base_msat_arg, fee_proportional_millionths_arg, cltv_expiry_delta_arg);
                return nativeResponseValue;
        }
+       // uint64_t CounterpartyForwardingInfo_clone_ptr(LDKCounterpartyForwardingInfo *NONNULL_PTR arg);
+       export function CounterpartyForwardingInfo_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CounterpartyForwardingInfo_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCounterpartyForwardingInfo CounterpartyForwardingInfo_clone(const struct LDKCounterpartyForwardingInfo *NONNULL_PTR orig);
        export function CounterpartyForwardingInfo_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -9880,6 +12371,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.ChannelCounterparty_new(encodeArray(node_id_arg), features_arg, unspendable_punishment_reserve_arg, forwarding_info_arg);
                return nativeResponseValue;
        }
+       // uint64_t ChannelCounterparty_clone_ptr(LDKChannelCounterparty *NONNULL_PTR arg);
+       export function ChannelCounterparty_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.ChannelCounterparty_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKChannelCounterparty ChannelCounterparty_clone(const struct LDKChannelCounterparty *NONNULL_PTR orig);
        export function ChannelCounterparty_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -10144,6 +12643,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.ChannelDetails_new(encodeArray(channel_id_arg), counterparty_arg, funding_txo_arg, short_channel_id_arg, channel_value_satoshis_arg, unspendable_punishment_reserve_arg, user_channel_id_arg, outbound_capacity_msat_arg, inbound_capacity_msat_arg, confirmations_required_arg, force_close_spend_delay_arg, is_outbound_arg, is_funding_locked_arg, is_usable_arg, is_public_arg);
                return nativeResponseValue;
        }
+       // uint64_t ChannelDetails_clone_ptr(LDKChannelDetails *NONNULL_PTR arg);
+       export function ChannelDetails_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.ChannelDetails_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKChannelDetails ChannelDetails_clone(const struct LDKChannelDetails *NONNULL_PTR orig);
        export function ChannelDetails_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -10160,6 +12667,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.PaymentSendFailure_free(this_ptr);
                // debug statements here
        }
+       // uint64_t PaymentSendFailure_clone_ptr(LDKPaymentSendFailure *NONNULL_PTR arg);
+       export function PaymentSendFailure_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.PaymentSendFailure_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKPaymentSendFailure PaymentSendFailure_clone(const struct LDKPaymentSendFailure *NONNULL_PTR orig);
        export function PaymentSendFailure_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -10568,6 +13083,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.DecodeError_free(this_obj);
                // debug statements here
        }
+       // uint64_t DecodeError_clone_ptr(LDKDecodeError *NONNULL_PTR arg);
+       export function DecodeError_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.DecodeError_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKDecodeError DecodeError_clone(const struct LDKDecodeError *NONNULL_PTR orig);
        export function DecodeError_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -10608,6 +13131,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.Init_new(features_arg);
                return nativeResponseValue;
        }
+       // uint64_t Init_clone_ptr(LDKInit *NONNULL_PTR arg);
+       export function Init_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.Init_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKInit Init_clone(const struct LDKInit *NONNULL_PTR orig);
        export function Init_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -10664,6 +13195,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.ErrorMessage_new(encodeArray(channel_id_arg), data_arg);
                return nativeResponseValue;
        }
+       // uint64_t ErrorMessage_clone_ptr(LDKErrorMessage *NONNULL_PTR arg);
+       export function ErrorMessage_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.ErrorMessage_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKErrorMessage ErrorMessage_clone(const struct LDKErrorMessage *NONNULL_PTR orig);
        export function ErrorMessage_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -10720,6 +13259,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.Ping_new(ponglen_arg, byteslen_arg);
                return nativeResponseValue;
        }
+       // uint64_t Ping_clone_ptr(LDKPing *NONNULL_PTR arg);
+       export function Ping_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.Ping_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKPing Ping_clone(const struct LDKPing *NONNULL_PTR orig);
        export function Ping_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -10760,6 +13307,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.Pong_new(byteslen_arg);
                return nativeResponseValue;
        }
+       // uint64_t Pong_clone_ptr(LDKPong *NONNULL_PTR arg);
+       export function Pong_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.Pong_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKPong Pong_clone(const struct LDKPong *NONNULL_PTR orig);
        export function Pong_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -11064,6 +13619,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.OpenChannel_set_channel_flags(this_ptr, val);
                // debug statements here
        }
+       // uint64_t OpenChannel_clone_ptr(LDKOpenChannel *NONNULL_PTR arg);
+       export function OpenChannel_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.OpenChannel_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKOpenChannel OpenChannel_clone(const struct LDKOpenChannel *NONNULL_PTR orig);
        export function OpenChannel_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -11304,6 +13867,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.AcceptChannel_set_first_per_commitment_point(this_ptr, encodeArray(val));
                // debug statements here
        }
+       // uint64_t AcceptChannel_clone_ptr(LDKAcceptChannel *NONNULL_PTR arg);
+       export function AcceptChannel_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.AcceptChannel_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKAcceptChannel AcceptChannel_clone(const struct LDKAcceptChannel *NONNULL_PTR orig);
        export function AcceptChannel_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -11392,6 +13963,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.FundingCreated_new(encodeArray(temporary_channel_id_arg), encodeArray(funding_txid_arg), funding_output_index_arg, encodeArray(signature_arg));
                return nativeResponseValue;
        }
+       // uint64_t FundingCreated_clone_ptr(LDKFundingCreated *NONNULL_PTR arg);
+       export function FundingCreated_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.FundingCreated_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKFundingCreated FundingCreated_clone(const struct LDKFundingCreated *NONNULL_PTR orig);
        export function FundingCreated_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -11448,6 +14027,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.FundingSigned_new(encodeArray(channel_id_arg), encodeArray(signature_arg));
                return nativeResponseValue;
        }
+       // uint64_t FundingSigned_clone_ptr(LDKFundingSigned *NONNULL_PTR arg);
+       export function FundingSigned_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.FundingSigned_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKFundingSigned FundingSigned_clone(const struct LDKFundingSigned *NONNULL_PTR orig);
        export function FundingSigned_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -11504,6 +14091,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.FundingLocked_new(encodeArray(channel_id_arg), encodeArray(next_per_commitment_point_arg));
                return nativeResponseValue;
        }
+       // uint64_t FundingLocked_clone_ptr(LDKFundingLocked *NONNULL_PTR arg);
+       export function FundingLocked_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.FundingLocked_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKFundingLocked FundingLocked_clone(const struct LDKFundingLocked *NONNULL_PTR orig);
        export function FundingLocked_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -11560,6 +14155,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.Shutdown_new(encodeArray(channel_id_arg), encodeArray(scriptpubkey_arg));
                return nativeResponseValue;
        }
+       // uint64_t Shutdown_clone_ptr(LDKShutdown *NONNULL_PTR arg);
+       export function Shutdown_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.Shutdown_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKShutdown Shutdown_clone(const struct LDKShutdown *NONNULL_PTR orig);
        export function Shutdown_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -11616,6 +14219,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.ClosingSignedFeeRange_new(min_fee_satoshis_arg, max_fee_satoshis_arg);
                return nativeResponseValue;
        }
+       // uint64_t ClosingSignedFeeRange_clone_ptr(LDKClosingSignedFeeRange *NONNULL_PTR arg);
+       export function ClosingSignedFeeRange_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.ClosingSignedFeeRange_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKClosingSignedFeeRange ClosingSignedFeeRange_clone(const struct LDKClosingSignedFeeRange *NONNULL_PTR orig);
        export function ClosingSignedFeeRange_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -11704,6 +14315,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.ClosingSigned_new(encodeArray(channel_id_arg), fee_satoshis_arg, encodeArray(signature_arg), fee_range_arg);
                return nativeResponseValue;
        }
+       // uint64_t ClosingSigned_clone_ptr(LDKClosingSigned *NONNULL_PTR arg);
+       export function ClosingSigned_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.ClosingSigned_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKClosingSigned ClosingSigned_clone(const struct LDKClosingSigned *NONNULL_PTR orig);
        export function ClosingSigned_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -11800,6 +14419,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.UpdateAddHTLC_set_cltv_expiry(this_ptr, val);
                // debug statements here
        }
+       // uint64_t UpdateAddHTLC_clone_ptr(LDKUpdateAddHTLC *NONNULL_PTR arg);
+       export function UpdateAddHTLC_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.UpdateAddHTLC_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKUpdateAddHTLC UpdateAddHTLC_clone(const struct LDKUpdateAddHTLC *NONNULL_PTR orig);
        export function UpdateAddHTLC_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -11872,6 +14499,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.UpdateFulfillHTLC_new(encodeArray(channel_id_arg), htlc_id_arg, encodeArray(payment_preimage_arg));
                return nativeResponseValue;
        }
+       // uint64_t UpdateFulfillHTLC_clone_ptr(LDKUpdateFulfillHTLC *NONNULL_PTR arg);
+       export function UpdateFulfillHTLC_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.UpdateFulfillHTLC_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKUpdateFulfillHTLC UpdateFulfillHTLC_clone(const struct LDKUpdateFulfillHTLC *NONNULL_PTR orig);
        export function UpdateFulfillHTLC_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -11920,6 +14555,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.UpdateFailHTLC_set_htlc_id(this_ptr, val);
                // debug statements here
        }
+       // uint64_t UpdateFailHTLC_clone_ptr(LDKUpdateFailHTLC *NONNULL_PTR arg);
+       export function UpdateFailHTLC_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.UpdateFailHTLC_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKUpdateFailHTLC UpdateFailHTLC_clone(const struct LDKUpdateFailHTLC *NONNULL_PTR orig);
        export function UpdateFailHTLC_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -11984,6 +14627,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.UpdateFailMalformedHTLC_set_failure_code(this_ptr, val);
                // debug statements here
        }
+       // uint64_t UpdateFailMalformedHTLC_clone_ptr(LDKUpdateFailMalformedHTLC *NONNULL_PTR arg);
+       export function UpdateFailMalformedHTLC_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.UpdateFailMalformedHTLC_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKUpdateFailMalformedHTLC UpdateFailMalformedHTLC_clone(const struct LDKUpdateFailMalformedHTLC *NONNULL_PTR orig);
        export function UpdateFailMalformedHTLC_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -12048,6 +14699,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CommitmentSigned_new(encodeArray(channel_id_arg), encodeArray(signature_arg), htlc_signatures_arg);
                return nativeResponseValue;
        }
+       // uint64_t CommitmentSigned_clone_ptr(LDKCommitmentSigned *NONNULL_PTR arg);
+       export function CommitmentSigned_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CommitmentSigned_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCommitmentSigned CommitmentSigned_clone(const struct LDKCommitmentSigned *NONNULL_PTR orig);
        export function CommitmentSigned_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -12120,6 +14779,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.RevokeAndACK_new(encodeArray(channel_id_arg), encodeArray(per_commitment_secret_arg), encodeArray(next_per_commitment_point_arg));
                return nativeResponseValue;
        }
+       // uint64_t RevokeAndACK_clone_ptr(LDKRevokeAndACK *NONNULL_PTR arg);
+       export function RevokeAndACK_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.RevokeAndACK_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKRevokeAndACK RevokeAndACK_clone(const struct LDKRevokeAndACK *NONNULL_PTR orig);
        export function RevokeAndACK_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -12176,6 +14843,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.UpdateFee_new(encodeArray(channel_id_arg), feerate_per_kw_arg);
                return nativeResponseValue;
        }
+       // uint64_t UpdateFee_clone_ptr(LDKUpdateFee *NONNULL_PTR arg);
+       export function UpdateFee_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.UpdateFee_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKUpdateFee UpdateFee_clone(const struct LDKUpdateFee *NONNULL_PTR orig);
        export function UpdateFee_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -12232,6 +14907,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.DataLossProtect_new(encodeArray(your_last_per_commitment_secret_arg), encodeArray(my_current_per_commitment_point_arg));
                return nativeResponseValue;
        }
+       // uint64_t DataLossProtect_clone_ptr(LDKDataLossProtect *NONNULL_PTR arg);
+       export function DataLossProtect_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.DataLossProtect_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKDataLossProtect DataLossProtect_clone(const struct LDKDataLossProtect *NONNULL_PTR orig);
        export function DataLossProtect_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -12296,6 +14979,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.ChannelReestablish_set_next_remote_commitment_number(this_ptr, val);
                // debug statements here
        }
+       // uint64_t ChannelReestablish_clone_ptr(LDKChannelReestablish *NONNULL_PTR arg);
+       export function ChannelReestablish_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.ChannelReestablish_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKChannelReestablish ChannelReestablish_clone(const struct LDKChannelReestablish *NONNULL_PTR orig);
        export function ChannelReestablish_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -12384,6 +15075,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.AnnouncementSignatures_new(encodeArray(channel_id_arg), short_channel_id_arg, encodeArray(node_signature_arg), encodeArray(bitcoin_signature_arg));
                return nativeResponseValue;
        }
+       // uint64_t AnnouncementSignatures_clone_ptr(LDKAnnouncementSignatures *NONNULL_PTR arg);
+       export function AnnouncementSignatures_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.AnnouncementSignatures_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKAnnouncementSignatures AnnouncementSignatures_clone(const struct LDKAnnouncementSignatures *NONNULL_PTR orig);
        export function AnnouncementSignatures_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -12400,6 +15099,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.NetAddress_free(this_ptr);
                // debug statements here
        }
+       // uint64_t NetAddress_clone_ptr(LDKNetAddress *NONNULL_PTR arg);
+       export function NetAddress_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.NetAddress_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKNetAddress NetAddress_clone(const struct LDKNetAddress *NONNULL_PTR orig);
        export function NetAddress_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -12552,6 +15259,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.UnsignedNodeAnnouncement_set_addresses(this_ptr, val);
                // debug statements here
        }
+       // uint64_t UnsignedNodeAnnouncement_clone_ptr(LDKUnsignedNodeAnnouncement *NONNULL_PTR arg);
+       export function UnsignedNodeAnnouncement_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.UnsignedNodeAnnouncement_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKUnsignedNodeAnnouncement UnsignedNodeAnnouncement_clone(const struct LDKUnsignedNodeAnnouncement *NONNULL_PTR orig);
        export function UnsignedNodeAnnouncement_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -12608,6 +15323,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.NodeAnnouncement_new(encodeArray(signature_arg), contents_arg);
                return nativeResponseValue;
        }
+       // uint64_t NodeAnnouncement_clone_ptr(LDKNodeAnnouncement *NONNULL_PTR arg);
+       export function NodeAnnouncement_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.NodeAnnouncement_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKNodeAnnouncement NodeAnnouncement_clone(const struct LDKNodeAnnouncement *NONNULL_PTR orig);
        export function NodeAnnouncement_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -12736,6 +15459,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.UnsignedChannelAnnouncement_set_bitcoin_key_2(this_ptr, encodeArray(val));
                // debug statements here
        }
+       // uint64_t UnsignedChannelAnnouncement_clone_ptr(LDKUnsignedChannelAnnouncement *NONNULL_PTR arg);
+       export function UnsignedChannelAnnouncement_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.UnsignedChannelAnnouncement_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKUnsignedChannelAnnouncement UnsignedChannelAnnouncement_clone(const struct LDKUnsignedChannelAnnouncement *NONNULL_PTR orig);
        export function UnsignedChannelAnnouncement_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -12840,6 +15571,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.ChannelAnnouncement_new(encodeArray(node_signature_1_arg), encodeArray(node_signature_2_arg), encodeArray(bitcoin_signature_1_arg), encodeArray(bitcoin_signature_2_arg), contents_arg);
                return nativeResponseValue;
        }
+       // uint64_t ChannelAnnouncement_clone_ptr(LDKChannelAnnouncement *NONNULL_PTR arg);
+       export function ChannelAnnouncement_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.ChannelAnnouncement_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKChannelAnnouncement ChannelAnnouncement_clone(const struct LDKChannelAnnouncement *NONNULL_PTR orig);
        export function ChannelAnnouncement_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -12984,6 +15723,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.UnsignedChannelUpdate_set_fee_proportional_millionths(this_ptr, val);
                // debug statements here
        }
+       // uint64_t UnsignedChannelUpdate_clone_ptr(LDKUnsignedChannelUpdate *NONNULL_PTR arg);
+       export function UnsignedChannelUpdate_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.UnsignedChannelUpdate_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKUnsignedChannelUpdate UnsignedChannelUpdate_clone(const struct LDKUnsignedChannelUpdate *NONNULL_PTR orig);
        export function UnsignedChannelUpdate_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -13040,6 +15787,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.ChannelUpdate_new(encodeArray(signature_arg), contents_arg);
                return nativeResponseValue;
        }
+       // uint64_t ChannelUpdate_clone_ptr(LDKChannelUpdate *NONNULL_PTR arg);
+       export function ChannelUpdate_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.ChannelUpdate_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKChannelUpdate ChannelUpdate_clone(const struct LDKChannelUpdate *NONNULL_PTR orig);
        export function ChannelUpdate_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -13112,6 +15867,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.QueryChannelRange_new(encodeArray(chain_hash_arg), first_blocknum_arg, number_of_blocks_arg);
                return nativeResponseValue;
        }
+       // uint64_t QueryChannelRange_clone_ptr(LDKQueryChannelRange *NONNULL_PTR arg);
+       export function QueryChannelRange_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.QueryChannelRange_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKQueryChannelRange QueryChannelRange_clone(const struct LDKQueryChannelRange *NONNULL_PTR orig);
        export function QueryChannelRange_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -13208,6 +15971,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.ReplyChannelRange_new(encodeArray(chain_hash_arg), first_blocknum_arg, number_of_blocks_arg, sync_complete_arg, short_channel_ids_arg);
                return nativeResponseValue;
        }
+       // uint64_t ReplyChannelRange_clone_ptr(LDKReplyChannelRange *NONNULL_PTR arg);
+       export function ReplyChannelRange_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.ReplyChannelRange_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKReplyChannelRange ReplyChannelRange_clone(const struct LDKReplyChannelRange *NONNULL_PTR orig);
        export function ReplyChannelRange_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -13256,6 +16027,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.QueryShortChannelIds_new(encodeArray(chain_hash_arg), short_channel_ids_arg);
                return nativeResponseValue;
        }
+       // uint64_t QueryShortChannelIds_clone_ptr(LDKQueryShortChannelIds *NONNULL_PTR arg);
+       export function QueryShortChannelIds_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.QueryShortChannelIds_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKQueryShortChannelIds QueryShortChannelIds_clone(const struct LDKQueryShortChannelIds *NONNULL_PTR orig);
        export function QueryShortChannelIds_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -13312,6 +16091,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.ReplyShortChannelIdsEnd_new(encodeArray(chain_hash_arg), full_information_arg);
                return nativeResponseValue;
        }
+       // uint64_t ReplyShortChannelIdsEnd_clone_ptr(LDKReplyShortChannelIdsEnd *NONNULL_PTR arg);
+       export function ReplyShortChannelIdsEnd_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.ReplyShortChannelIdsEnd_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKReplyShortChannelIdsEnd ReplyShortChannelIdsEnd_clone(const struct LDKReplyShortChannelIdsEnd *NONNULL_PTR orig);
        export function ReplyShortChannelIdsEnd_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -13384,6 +16171,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.GossipTimestampFilter_new(encodeArray(chain_hash_arg), first_timestamp_arg, timestamp_range_arg);
                return nativeResponseValue;
        }
+       // uint64_t GossipTimestampFilter_clone_ptr(LDKGossipTimestampFilter *NONNULL_PTR arg);
+       export function GossipTimestampFilter_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.GossipTimestampFilter_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKGossipTimestampFilter GossipTimestampFilter_clone(const struct LDKGossipTimestampFilter *NONNULL_PTR orig);
        export function GossipTimestampFilter_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -13400,6 +16195,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.ErrorAction_free(this_ptr);
                // debug statements here
        }
+       // uint64_t ErrorAction_clone_ptr(LDKErrorAction *NONNULL_PTR arg);
+       export function ErrorAction_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.ErrorAction_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKErrorAction ErrorAction_clone(const struct LDKErrorAction *NONNULL_PTR orig);
        export function ErrorAction_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -13488,6 +16291,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.LightningError_new(err_arg, action_arg);
                return nativeResponseValue;
        }
+       // uint64_t LightningError_clone_ptr(LDKLightningError *NONNULL_PTR arg);
+       export function LightningError_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.LightningError_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKLightningError LightningError_clone(const struct LDKLightningError *NONNULL_PTR orig);
        export function LightningError_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -13608,6 +16419,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CommitmentUpdate_new(update_add_htlcs_arg, update_fulfill_htlcs_arg, update_fail_htlcs_arg, update_fail_malformed_htlcs_arg, update_fee_arg, commitment_signed_arg);
                return nativeResponseValue;
        }
+       // uint64_t CommitmentUpdate_clone_ptr(LDKCommitmentUpdate *NONNULL_PTR arg);
+       export function CommitmentUpdate_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CommitmentUpdate_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCommitmentUpdate CommitmentUpdate_clone(const struct LDKCommitmentUpdate *NONNULL_PTR orig);
        export function CommitmentUpdate_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -14288,6 +17107,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.MessageHandler_new(chan_handler_arg, route_handler_arg);
                return nativeResponseValue;
        }
+       // uint64_t SocketDescriptor_clone_ptr(LDKSocketDescriptor *NONNULL_PTR arg);
+       export function SocketDescriptor_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.SocketDescriptor_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKSocketDescriptor SocketDescriptor_clone(const struct LDKSocketDescriptor *NONNULL_PTR orig);
        export function SocketDescriptor_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -14336,6 +17163,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.PeerHandleError_new(no_connection_possible_arg);
                return nativeResponseValue;
        }
+       // uint64_t PeerHandleError_clone_ptr(LDKPeerHandleError *NONNULL_PTR arg);
+       export function PeerHandleError_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.PeerHandleError_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKPeerHandleError PeerHandleError_clone(const struct LDKPeerHandleError *NONNULL_PTR orig);
        export function PeerHandleError_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -14584,6 +17419,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.TxCreationKeys_new(encodeArray(per_commitment_point_arg), encodeArray(revocation_key_arg), encodeArray(broadcaster_htlc_key_arg), encodeArray(countersignatory_htlc_key_arg), encodeArray(broadcaster_delayed_payment_key_arg));
                return nativeResponseValue;
        }
+       // uint64_t TxCreationKeys_clone_ptr(LDKTxCreationKeys *NONNULL_PTR arg);
+       export function TxCreationKeys_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.TxCreationKeys_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKTxCreationKeys TxCreationKeys_clone(const struct LDKTxCreationKeys *NONNULL_PTR orig);
        export function TxCreationKeys_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -14704,6 +17547,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.ChannelPublicKeys_new(encodeArray(funding_pubkey_arg), encodeArray(revocation_basepoint_arg), encodeArray(payment_point_arg), encodeArray(delayed_payment_basepoint_arg), encodeArray(htlc_basepoint_arg));
                return nativeResponseValue;
        }
+       // uint64_t ChannelPublicKeys_clone_ptr(LDKChannelPublicKeys *NONNULL_PTR arg);
+       export function ChannelPublicKeys_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.ChannelPublicKeys_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKChannelPublicKeys ChannelPublicKeys_clone(const struct LDKChannelPublicKeys *NONNULL_PTR orig);
        export function ChannelPublicKeys_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -14848,6 +17699,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.HTLCOutputInCommitment_new(offered_arg, amount_msat_arg, cltv_expiry_arg, encodeArray(payment_hash_arg), transaction_output_index_arg);
                return nativeResponseValue;
        }
+       // uint64_t HTLCOutputInCommitment_clone_ptr(LDKHTLCOutputInCommitment *NONNULL_PTR arg);
+       export function HTLCOutputInCommitment_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.HTLCOutputInCommitment_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKHTLCOutputInCommitment HTLCOutputInCommitment_clone(const struct LDKHTLCOutputInCommitment *NONNULL_PTR orig);
        export function HTLCOutputInCommitment_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -14992,6 +17851,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.ChannelTransactionParameters_new(holder_pubkeys_arg, holder_selected_contest_delay_arg, is_outbound_from_holder_arg, counterparty_parameters_arg, funding_outpoint_arg);
                return nativeResponseValue;
        }
+       // uint64_t ChannelTransactionParameters_clone_ptr(LDKChannelTransactionParameters *NONNULL_PTR arg);
+       export function ChannelTransactionParameters_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.ChannelTransactionParameters_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKChannelTransactionParameters ChannelTransactionParameters_clone(const struct LDKChannelTransactionParameters *NONNULL_PTR orig);
        export function ChannelTransactionParameters_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -15048,6 +17915,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CounterpartyChannelTransactionParameters_new(pubkeys_arg, selected_contest_delay_arg);
                return nativeResponseValue;
        }
+       // uint64_t CounterpartyChannelTransactionParameters_clone_ptr(LDKCounterpartyChannelTransactionParameters *NONNULL_PTR arg);
+       export function CounterpartyChannelTransactionParameters_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CounterpartyChannelTransactionParameters_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCounterpartyChannelTransactionParameters CounterpartyChannelTransactionParameters_clone(const struct LDKCounterpartyChannelTransactionParameters *NONNULL_PTR orig);
        export function CounterpartyChannelTransactionParameters_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -15192,6 +18067,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.HolderCommitmentTransaction_set_counterparty_htlc_sigs(this_ptr, val);
                // debug statements here
        }
+       // uint64_t HolderCommitmentTransaction_clone_ptr(LDKHolderCommitmentTransaction *NONNULL_PTR arg);
+       export function HolderCommitmentTransaction_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.HolderCommitmentTransaction_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKHolderCommitmentTransaction HolderCommitmentTransaction_clone(const struct LDKHolderCommitmentTransaction *NONNULL_PTR orig);
        export function HolderCommitmentTransaction_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -15272,6 +18155,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.BuiltCommitmentTransaction_new(encodeArray(transaction_arg), encodeArray(txid_arg));
                return nativeResponseValue;
        }
+       // uint64_t BuiltCommitmentTransaction_clone_ptr(LDKBuiltCommitmentTransaction *NONNULL_PTR arg);
+       export function BuiltCommitmentTransaction_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.BuiltCommitmentTransaction_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKBuiltCommitmentTransaction BuiltCommitmentTransaction_clone(const struct LDKBuiltCommitmentTransaction *NONNULL_PTR orig);
        export function BuiltCommitmentTransaction_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -15320,6 +18211,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.ClosingTransaction_free(this_obj);
                // debug statements here
        }
+       // uint64_t ClosingTransaction_clone_ptr(LDKClosingTransaction *NONNULL_PTR arg);
+       export function ClosingTransaction_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.ClosingTransaction_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKClosingTransaction ClosingTransaction_clone(const struct LDKClosingTransaction *NONNULL_PTR orig);
        export function ClosingTransaction_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -15432,6 +18331,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CommitmentTransaction_free(this_obj);
                // debug statements here
        }
+       // uint64_t CommitmentTransaction_clone_ptr(LDKCommitmentTransaction *NONNULL_PTR arg);
+       export function CommitmentTransaction_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.CommitmentTransaction_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKCommitmentTransaction CommitmentTransaction_clone(const struct LDKCommitmentTransaction *NONNULL_PTR orig);
        export function CommitmentTransaction_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -15584,6 +18491,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.InvoiceFeatures_eq(a, b);
                return nativeResponseValue;
        }
+       // uint64_t InitFeatures_clone_ptr(LDKInitFeatures *NONNULL_PTR arg);
+       export function InitFeatures_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.InitFeatures_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKInitFeatures InitFeatures_clone(const struct LDKInitFeatures *NONNULL_PTR orig);
        export function InitFeatures_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -15592,6 +18507,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.InitFeatures_clone(orig);
                return nativeResponseValue;
        }
+       // uint64_t NodeFeatures_clone_ptr(LDKNodeFeatures *NONNULL_PTR arg);
+       export function NodeFeatures_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.NodeFeatures_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKNodeFeatures NodeFeatures_clone(const struct LDKNodeFeatures *NONNULL_PTR orig);
        export function NodeFeatures_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -15600,6 +18523,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.NodeFeatures_clone(orig);
                return nativeResponseValue;
        }
+       // uint64_t ChannelFeatures_clone_ptr(LDKChannelFeatures *NONNULL_PTR arg);
+       export function ChannelFeatures_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.ChannelFeatures_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKChannelFeatures ChannelFeatures_clone(const struct LDKChannelFeatures *NONNULL_PTR orig);
        export function ChannelFeatures_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -15608,6 +18539,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.ChannelFeatures_clone(orig);
                return nativeResponseValue;
        }
+       // uint64_t InvoiceFeatures_clone_ptr(LDKInvoiceFeatures *NONNULL_PTR arg);
+       export function InvoiceFeatures_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.InvoiceFeatures_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKInvoiceFeatures InvoiceFeatures_clone(const struct LDKInvoiceFeatures *NONNULL_PTR orig);
        export function InvoiceFeatures_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -15840,6 +18779,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.ShutdownScript_free(this_obj);
                // debug statements here
        }
+       // uint64_t ShutdownScript_clone_ptr(LDKShutdownScript *NONNULL_PTR arg);
+       export function ShutdownScript_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.ShutdownScript_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKShutdownScript ShutdownScript_clone(const struct LDKShutdownScript *NONNULL_PTR orig);
        export function ShutdownScript_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -15880,6 +18827,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.InvalidShutdownScript_new(encodeArray(script_arg));
                return nativeResponseValue;
        }
+       // uint64_t InvalidShutdownScript_clone_ptr(LDKInvalidShutdownScript *NONNULL_PTR arg);
+       export function InvalidShutdownScript_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.InvalidShutdownScript_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKInvalidShutdownScript InvalidShutdownScript_clone(const struct LDKInvalidShutdownScript *NONNULL_PTR orig);
        export function InvalidShutdownScript_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -15960,6 +18915,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.CustomMessageReader_free(this_ptr);
                // debug statements here
        }
+       // uint64_t Type_clone_ptr(LDKType *NONNULL_PTR arg);
+       export function Type_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.Type_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKType Type_clone(const struct LDKType *NONNULL_PTR orig);
        export function Type_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -16016,6 +18979,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.NodeId_free(this_obj);
                // debug statements here
        }
+       // uint64_t NodeId_clone_ptr(LDKNodeId *NONNULL_PTR arg);
+       export function NodeId_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.NodeId_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKNodeId NodeId_clone(const struct LDKNodeId *NONNULL_PTR orig);
        export function NodeId_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -16072,6 +19043,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.NetworkGraph_free(this_obj);
                // debug statements here
        }
+       // uint64_t NetworkGraph_clone_ptr(LDKNetworkGraph *NONNULL_PTR arg);
+       export function NetworkGraph_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.NetworkGraph_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKNetworkGraph NetworkGraph_clone(const struct LDKNetworkGraph *NONNULL_PTR orig);
        export function NetworkGraph_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -16096,6 +19075,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.NetworkUpdate_free(this_ptr);
                // debug statements here
        }
+       // uint64_t NetworkUpdate_clone_ptr(LDKNetworkUpdate *NONNULL_PTR arg);
+       export function NetworkUpdate_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.NetworkUpdate_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKNetworkUpdate NetworkUpdate_clone(const struct LDKNetworkUpdate *NONNULL_PTR orig);
        export function NetworkUpdate_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -16136,6 +19123,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.NetworkUpdate_write(obj);
                return decodeArray(nativeResponseValue);
        }
+       // struct LDKCResult_COption_NetworkUpdateZDecodeErrorZ NetworkUpdate_read(struct LDKu8slice ser);
+       export function NetworkUpdate_read(ser: Uint8Array): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.NetworkUpdate_read(encodeArray(ser));
+               return nativeResponseValue;
+       }
        // struct LDKEventHandler NetGraphMsgHandler_as_EventHandler(const struct LDKNetGraphMsgHandler *NONNULL_PTR this_arg);
        export function NetGraphMsgHandler_as_EventHandler(this_arg: number): number {
                if(!isWasmInitialized) {
@@ -16312,6 +19307,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.DirectionalChannelInfo_new(last_update_arg, enabled_arg, cltv_expiry_delta_arg, htlc_minimum_msat_arg, htlc_maximum_msat_arg, fees_arg, last_update_message_arg);
                return nativeResponseValue;
        }
+       // uint64_t DirectionalChannelInfo_clone_ptr(LDKDirectionalChannelInfo *NONNULL_PTR arg);
+       export function DirectionalChannelInfo_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.DirectionalChannelInfo_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKDirectionalChannelInfo DirectionalChannelInfo_clone(const struct LDKDirectionalChannelInfo *NONNULL_PTR orig);
        export function DirectionalChannelInfo_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -16464,6 +19467,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.ChannelInfo_new(features_arg, node_one_arg, one_to_two_arg, node_two_arg, two_to_one_arg, capacity_sats_arg, announcement_message_arg);
                return nativeResponseValue;
        }
+       // uint64_t ChannelInfo_clone_ptr(LDKChannelInfo *NONNULL_PTR arg);
+       export function ChannelInfo_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.ChannelInfo_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKChannelInfo ChannelInfo_clone(const struct LDKChannelInfo *NONNULL_PTR orig);
        export function ChannelInfo_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -16544,6 +19555,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.RoutingFees_eq(a, b);
                return nativeResponseValue;
        }
+       // uint64_t RoutingFees_clone_ptr(LDKRoutingFees *NONNULL_PTR arg);
+       export function RoutingFees_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.RoutingFees_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKRoutingFees RoutingFees_clone(const struct LDKRoutingFees *NONNULL_PTR orig);
        export function RoutingFees_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -16680,6 +19699,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.NodeAnnouncementInfo_new(features_arg, last_update_arg, encodeArray(rgb_arg), encodeArray(alias_arg), addresses_arg, announcement_message_arg);
                return nativeResponseValue;
        }
+       // uint64_t NodeAnnouncementInfo_clone_ptr(LDKNodeAnnouncementInfo *NONNULL_PTR arg);
+       export function NodeAnnouncementInfo_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.NodeAnnouncementInfo_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKNodeAnnouncementInfo NodeAnnouncementInfo_clone(const struct LDKNodeAnnouncementInfo *NONNULL_PTR orig);
        export function NodeAnnouncementInfo_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -16760,6 +19787,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.NodeInfo_new(channels_arg, lowest_inbound_channel_fees_arg, announcement_info_arg);
                return nativeResponseValue;
        }
+       // uint64_t NodeInfo_clone_ptr(LDKNodeInfo *NONNULL_PTR arg);
+       export function NodeInfo_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.NodeInfo_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKNodeInfo NodeInfo_clone(const struct LDKNodeInfo *NONNULL_PTR orig);
        export function NodeInfo_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -17000,6 +20035,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.RouteHop_new(encodeArray(pubkey_arg), node_features_arg, short_channel_id_arg, channel_features_arg, fee_msat_arg, cltv_expiry_delta_arg);
                return nativeResponseValue;
        }
+       // uint64_t RouteHop_clone_ptr(LDKRouteHop *NONNULL_PTR arg);
+       export function RouteHop_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.RouteHop_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKRouteHop RouteHop_clone(const struct LDKRouteHop *NONNULL_PTR orig);
        export function RouteHop_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -17088,6 +20131,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.Route_new(paths_arg, payee_arg);
                return nativeResponseValue;
        }
+       // uint64_t Route_clone_ptr(LDKRoute *NONNULL_PTR arg);
+       export function Route_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.Route_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKRoute Route_clone(const struct LDKRoute *NONNULL_PTR orig);
        export function Route_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -17208,6 +20259,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.RouteParameters_new(payee_arg, final_value_msat_arg, final_cltv_expiry_delta_arg);
                return nativeResponseValue;
        }
+       // uint64_t RouteParameters_clone_ptr(LDKRouteParameters *NONNULL_PTR arg);
+       export function RouteParameters_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.RouteParameters_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKRouteParameters RouteParameters_clone(const struct LDKRouteParameters *NONNULL_PTR orig);
        export function RouteParameters_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -17312,6 +20371,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.Payee_new(encodeArray(pubkey_arg), features_arg, route_hints_arg, expiry_time_arg);
                return nativeResponseValue;
        }
+       // uint64_t Payee_clone_ptr(LDKPayee *NONNULL_PTR arg);
+       export function Payee_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.Payee_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKPayee Payee_clone(const struct LDKPayee *NONNULL_PTR orig);
        export function Payee_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -17400,6 +20467,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.RouteHint_new(a_arg);
                return nativeResponseValue;
        }
+       // uint64_t RouteHint_clone_ptr(LDKRouteHint *NONNULL_PTR arg);
+       export function RouteHint_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.RouteHint_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKRouteHint RouteHint_clone(const struct LDKRouteHint *NONNULL_PTR orig);
        export function RouteHint_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -17552,6 +20627,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.RouteHintHop_new(encodeArray(src_node_id_arg), short_channel_id_arg, fees_arg, cltv_expiry_delta_arg, htlc_minimum_msat_arg, htlc_maximum_msat_arg);
                return nativeResponseValue;
        }
+       // uint64_t RouteHintHop_clone_ptr(LDKRouteHintHop *NONNULL_PTR arg);
+       export function RouteHintHop_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.RouteHintHop_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKRouteHintHop RouteHintHop_clone(const struct LDKRouteHintHop *NONNULL_PTR orig);
        export function RouteHintHop_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -17848,6 +20931,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.Invoice_eq(a, b);
                return nativeResponseValue;
        }
+       // uint64_t Invoice_clone_ptr(LDKInvoice *NONNULL_PTR arg);
+       export function Invoice_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.Invoice_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKInvoice Invoice_clone(const struct LDKInvoice *NONNULL_PTR orig);
        export function Invoice_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -17872,6 +20963,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.SignedRawInvoice_eq(a, b);
                return nativeResponseValue;
        }
+       // uint64_t SignedRawInvoice_clone_ptr(LDKSignedRawInvoice *NONNULL_PTR arg);
+       export function SignedRawInvoice_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.SignedRawInvoice_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKSignedRawInvoice SignedRawInvoice_clone(const struct LDKSignedRawInvoice *NONNULL_PTR orig);
        export function SignedRawInvoice_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -17912,6 +21011,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.RawInvoice_eq(a, b);
                return nativeResponseValue;
        }
+       // uint64_t RawInvoice_clone_ptr(LDKRawInvoice *NONNULL_PTR arg);
+       export function RawInvoice_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.RawInvoice_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKRawInvoice RawInvoice_clone(const struct LDKRawInvoice *NONNULL_PTR orig);
        export function RawInvoice_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -17952,6 +21059,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.RawDataPart_eq(a, b);
                return nativeResponseValue;
        }
+       // uint64_t RawDataPart_clone_ptr(LDKRawDataPart *NONNULL_PTR arg);
+       export function RawDataPart_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.RawDataPart_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKRawDataPart RawDataPart_clone(const struct LDKRawDataPart *NONNULL_PTR orig);
        export function RawDataPart_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -17976,6 +21091,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.PositiveTimestamp_eq(a, b);
                return nativeResponseValue;
        }
+       // uint64_t PositiveTimestamp_clone_ptr(LDKPositiveTimestamp *NONNULL_PTR arg);
+       export function PositiveTimestamp_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.PositiveTimestamp_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKPositiveTimestamp PositiveTimestamp_clone(const struct LDKPositiveTimestamp *NONNULL_PTR orig);
        export function PositiveTimestamp_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -18112,6 +21235,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.Sha256_free(this_obj);
                // debug statements here
        }
+       // uint64_t Sha256_clone_ptr(LDKSha256 *NONNULL_PTR arg);
+       export function Sha256_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.Sha256_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKSha256 Sha256_clone(const struct LDKSha256 *NONNULL_PTR orig);
        export function Sha256_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -18144,6 +21275,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.Description_free(this_obj);
                // debug statements here
        }
+       // uint64_t Description_clone_ptr(LDKDescription *NONNULL_PTR arg);
+       export function Description_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.Description_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKDescription Description_clone(const struct LDKDescription *NONNULL_PTR orig);
        export function Description_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -18200,6 +21339,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.PayeePubKey_new(encodeArray(a_arg));
                return nativeResponseValue;
        }
+       // uint64_t PayeePubKey_clone_ptr(LDKPayeePubKey *NONNULL_PTR arg);
+       export function PayeePubKey_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.PayeePubKey_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKPayeePubKey PayeePubKey_clone(const struct LDKPayeePubKey *NONNULL_PTR orig);
        export function PayeePubKey_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -18232,6 +21379,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.ExpiryTime_free(this_obj);
                // debug statements here
        }
+       // uint64_t ExpiryTime_clone_ptr(LDKExpiryTime *NONNULL_PTR arg);
+       export function ExpiryTime_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.ExpiryTime_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKExpiryTime ExpiryTime_clone(const struct LDKExpiryTime *NONNULL_PTR orig);
        export function ExpiryTime_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -18288,6 +21443,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.MinFinalCltvExpiry_new(a_arg);
                return nativeResponseValue;
        }
+       // uint64_t MinFinalCltvExpiry_clone_ptr(LDKMinFinalCltvExpiry *NONNULL_PTR arg);
+       export function MinFinalCltvExpiry_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.MinFinalCltvExpiry_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKMinFinalCltvExpiry MinFinalCltvExpiry_clone(const struct LDKMinFinalCltvExpiry *NONNULL_PTR orig);
        export function MinFinalCltvExpiry_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -18320,6 +21483,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.Fallback_free(this_ptr);
                // debug statements here
        }
+       // uint64_t Fallback_clone_ptr(LDKFallback *NONNULL_PTR arg);
+       export function Fallback_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.Fallback_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKFallback Fallback_clone(const struct LDKFallback *NONNULL_PTR orig);
        export function Fallback_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -18376,6 +21547,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.InvoiceSignature_free(this_obj);
                // debug statements here
        }
+       // uint64_t InvoiceSignature_clone_ptr(LDKInvoiceSignature *NONNULL_PTR arg);
+       export function InvoiceSignature_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.InvoiceSignature_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKInvoiceSignature InvoiceSignature_clone(const struct LDKInvoiceSignature *NONNULL_PTR orig);
        export function InvoiceSignature_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -18400,6 +21579,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.PrivateRoute_free(this_obj);
                // debug statements here
        }
+       // uint64_t PrivateRoute_clone_ptr(LDKPrivateRoute *NONNULL_PTR arg);
+       export function PrivateRoute_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.PrivateRoute_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKPrivateRoute PrivateRoute_clone(const struct LDKPrivateRoute *NONNULL_PTR orig);
        export function PrivateRoute_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -18960,6 +22147,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.SignOrCreationError_free(this_ptr);
                // debug statements here
        }
+       // uint64_t SignOrCreationError_clone_ptr(LDKSignOrCreationError *NONNULL_PTR arg);
+       export function SignOrCreationError_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.SignOrCreationError_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKSignOrCreationError SignOrCreationError_clone(const struct LDKSignOrCreationError *NONNULL_PTR orig);
        export function SignOrCreationError_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -19056,6 +22251,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.RetryAttempts_new(a_arg);
                return nativeResponseValue;
        }
+       // uint64_t RetryAttempts_clone_ptr(LDKRetryAttempts *NONNULL_PTR arg);
+       export function RetryAttempts_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.RetryAttempts_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKRetryAttempts RetryAttempts_clone(const struct LDKRetryAttempts *NONNULL_PTR orig);
        export function RetryAttempts_clone(orig: number): number {
                if(!isWasmInitialized) {
@@ -19088,6 +22291,14 @@ public static native long new_empty_slice_vec();
                const nativeResponseValue = wasm.PaymentError_free(this_ptr);
                // debug statements here
        }
+       // uint64_t PaymentError_clone_ptr(LDKPaymentError *NONNULL_PTR arg);
+       export function PaymentError_clone_ptr(arg: number): number {
+               if(!isWasmInitialized) {
+                       throw new Error("initializeWasm() must be awaited first!");
+               }
+               const nativeResponseValue = wasm.PaymentError_clone_ptr(arg);
+               return nativeResponseValue;
+       }
        // struct LDKPaymentError PaymentError_clone(const struct LDKPaymentError *NONNULL_PTR orig);
        export function PaymentError_clone(orig: number): number {
                if(!isWasmInitialized) {
index 7d913f2dc8c8df8eda797c3205ef4c2f69646c64..fcbdf0f7308a276a9674bab2113a78067abdb616 100644 (file)
@@ -1,6 +1,12 @@
 
             export enum AccessError {
-                LDKAccessError_UnknownChain,
-                               LDKAccessError_UnknownTx,
+                /**
+ * The requested chain is unknown.
+ */
+LDKAccessError_UnknownChain,
+                               /**
+ * The requested transaction doesn't exist or hasn't confirmed.
+ */
+LDKAccessError_UnknownTx,
                                
             }
index 934306baa792edb008b0628118e254143fc0d147..0e32c6e8d19dd396a865bef5e744067779543548 100644 (file)
@@ -1,6 +1,68 @@
 
             export enum ChannelMonitorUpdateErr {
-                LDKChannelMonitorUpdateErr_TemporaryFailure,
-                               LDKChannelMonitorUpdateErr_PermanentFailure,
+                /**
+ * Used to indicate a temporary failure (eg connection to a watchtower or remote backup of
+our state failed, but is expected to succeed at some point in the future).
+
+Such a failure will \"freeze\" a channel, preventing us from revoking old states or
+submitting new commitment transactions to the counterparty. Once the update(s) that failed
+have been successfully applied, a [`MonitorEvent::UpdateCompleted`] event should be returned
+via [`Watch::release_pending_monitor_events`] which will then restore the channel to an
+operational state.
+
+Note that a given ChannelManager will *never* re-generate a given ChannelMonitorUpdate. If
+you return a TemporaryFailure you must ensure that it is written to disk safely before
+writing out the latest ChannelManager state.
+
+Even when a channel has been \"frozen\" updates to the ChannelMonitor can continue to occur
+(eg if an inbound HTLC which we forwarded was claimed upstream resulting in us attempting
+to claim it on this channel) and those updates must be applied wherever they can be. At
+least one such updated ChannelMonitor must be persisted otherwise PermanentFailure should
+be returned to get things on-chain ASAP using only the in-memory copy. Obviously updates to
+the channel which would invalidate previous ChannelMonitors are not made when a channel has
+been \"frozen\".
+
+Note that even if updates made after TemporaryFailure succeed you must still provide a
+[`MonitorEvent::UpdateCompleted`] to ensure you have the latest monitor and re-enable
+normal channel operation. Note that this is normally generated through a call to
+[`ChainMonitor::channel_monitor_updated`].
+
+Note that the update being processed here will not be replayed for you when you return a
+[`MonitorEvent::UpdateCompleted`] event via [`Watch::release_pending_monitor_events`], so
+you must store the update itself on your own local disk prior to returning a
+TemporaryFailure. You may, of course, employ a journaling approach, storing only the
+ChannelMonitorUpdate on disk without updating the monitor itself, replaying the journal at
+reload-time.
+
+For deployments where a copy of ChannelMonitors and other local state are backed up in a
+remote location (with local copies persisted immediately), it is anticipated that all
+updates will return TemporaryFailure until the remote copies could be updated.
+
+[`ChainMonitor::channel_monitor_updated`]: chainmonitor::ChainMonitor::channel_monitor_updated
+ */
+LDKChannelMonitorUpdateErr_TemporaryFailure,
+                               /**
+ * Used to indicate no further channel monitor updates will be allowed (eg we've moved on to a
+different watchtower and cannot update with all watchtowers that were previously informed
+of this channel).
+
+At reception of this error, ChannelManager will force-close the channel and return at
+least a final ChannelMonitorUpdate::ChannelForceClosed which must be delivered to at
+least one ChannelMonitor copy. Revocation secret MUST NOT be released and offchain channel
+update must be rejected.
+
+This failure may also signal a failure to update the local persisted copy of one of
+the channel monitor instance.
+
+Note that even when you fail a holder commitment transaction update, you must store the
+update to ensure you can claim from it in case of a duplicate copy of this ChannelMonitor
+broadcasts it (e.g distributed channel-monitor deployment)
+
+In case of distributed watchtowers deployment, the new version must be written to disk, as
+state may have been stored but rejected due to a block forcing a commitment broadcast. This
+storage is used to claim outputs of rejected state confirmed onchain by another watchtower,
+lagging behind on block processing.
+ */
+LDKChannelMonitorUpdateErr_PermanentFailure,
                                
             }
index 55a06099c63d2732f3029eb386aadf6dac4e7458..25afe79709ce9da0841b31642893f54e663f7cfd 100644 (file)
@@ -1,7 +1,16 @@
 
             export enum ConfirmationTarget {
-                LDKConfirmationTarget_Background,
-                               LDKConfirmationTarget_Normal,
-                               LDKConfirmationTarget_HighPriority,
+                /**
+ * We are happy with this transaction confirming slowly when feerate drops some.
+ */
+LDKConfirmationTarget_Background,
+                               /**
+ * We'd like this transaction to confirm without major delay, but 12-18 blocks is fine.
+ */
+LDKConfirmationTarget_Normal,
+                               /**
+ * We'd like this transaction to confirm in the next few blocks.
+ */
+LDKConfirmationTarget_HighPriority,
                                
             }
index 8570e7ca26e145e982734f01fb98a64cf7d34c99..b3ce7f1e1047aaf6d3eab94b4534ef2815cdc9fa 100644 (file)
@@ -1,8 +1,20 @@
 
             export enum CreationError {
-                LDKCreationError_DescriptionTooLong,
-                               LDKCreationError_RouteTooLong,
-                               LDKCreationError_TimestampOutOfBounds,
-                               LDKCreationError_ExpiryTimeOutOfBounds,
+                /**
+ * The supplied description string was longer than 639 __bytes__ (see [`Description::new(...)`](./struct.Description.html#method.new))
+ */
+LDKCreationError_DescriptionTooLong,
+                               /**
+ * The specified route has too many hops and can't be encoded
+ */
+LDKCreationError_RouteTooLong,
+                               /**
+ * The unix timestamp of the supplied date is <0 or can't be represented as `SystemTime`
+ */
+LDKCreationError_TimestampOutOfBounds,
+                               /**
+ * The supplied expiry time could cause an overflow if added to a `PositiveTimestamp`
+ */
+LDKCreationError_ExpiryTimeOutOfBounds,
                                
             }
index c7b34f98257d625dcb7d381700b65002bf59ed4d..c8a63787ff8c1a5b92bb28c861c5bd64af1b560c 100644 (file)
@@ -1,9 +1,24 @@
 
             export enum Currency {
-                LDKCurrency_Bitcoin,
-                               LDKCurrency_BitcoinTestnet,
-                               LDKCurrency_Regtest,
-                               LDKCurrency_Simnet,
-                               LDKCurrency_Signet,
+                /**
+ * Bitcoin mainnet
+ */
+LDKCurrency_Bitcoin,
+                               /**
+ * Bitcoin testnet
+ */
+LDKCurrency_BitcoinTestnet,
+                               /**
+ * Bitcoin regtest
+ */
+LDKCurrency_Regtest,
+                               /**
+ * Bitcoin simnet
+ */
+LDKCurrency_Simnet,
+                               /**
+ * Bitcoin signet
+ */
+LDKCurrency_Signet,
                                
             }
index ba44f74036479fa18f6df0c609207f42fac1316b..3c159f7e87954a5536d9d68a5b4e2fc43e08b840 100644 (file)
@@ -1,9 +1,24 @@
 
             export enum Level {
-                LDKLevel_Trace,
-                               LDKLevel_Debug,
-                               LDKLevel_Info,
-                               LDKLevel_Warn,
-                               LDKLevel_Error,
+                /**
+ * Designates very low priority, often extremely verbose, information
+ */
+LDKLevel_Trace,
+                               /**
+ * Designates lower priority information
+ */
+LDKLevel_Debug,
+                               /**
+ * Designates useful information
+ */
+LDKLevel_Info,
+                               /**
+ * Designates hazardous situations
+ */
+LDKLevel_Warn,
+                               /**
+ * Designates very serious errors
+ */
+LDKLevel_Error,
                                
             }
index 980490e99b031dbe4a673b23f058d75439fb8b06..c871fadc4c8e9a78c854aa7586849bd6350474e9 100644 (file)
@@ -1,8 +1,20 @@
 
             export enum Network {
-                LDKNetwork_Bitcoin,
-                               LDKNetwork_Testnet,
-                               LDKNetwork_Regtest,
-                               LDKNetwork_Signet,
+                /**
+ * The main Bitcoin blockchain.
+ */
+LDKNetwork_Bitcoin,
+                               /**
+ * The testnet3 blockchain.
+ */
+LDKNetwork_Testnet,
+                               /**
+ * A local test blockchain.
+ */
+LDKNetwork_Regtest,
+                               /**
+ * A blockchain on which blocks are signed instead of mined.
+ */
+LDKNetwork_Signet,
                                
             }
index b116382f39c91817d3f72c5ef82e39a2bb34a568..eef54a9b0b745cbf83a2c696d77d00cc74b77587 100644 (file)
@@ -1,13 +1,40 @@
 
             export enum Secp256k1Error {
-                LDKSecp256k1Error_IncorrectSignature,
-                               LDKSecp256k1Error_InvalidMessage,
-                               LDKSecp256k1Error_InvalidPublicKey,
-                               LDKSecp256k1Error_InvalidSignature,
-                               LDKSecp256k1Error_InvalidSecretKey,
-                               LDKSecp256k1Error_InvalidRecoveryId,
-                               LDKSecp256k1Error_InvalidTweak,
-                               LDKSecp256k1Error_TweakCheckFailed,
-                               LDKSecp256k1Error_NotEnoughMemory,
+                /**
+ * Signature failed verification
+ */
+LDKSecp256k1Error_IncorrectSignature,
+                               /**
+ * Badly sized message ("messages" are actually fixed-sized digests; see the MESSAGE_SIZE constant)
+ */
+LDKSecp256k1Error_InvalidMessage,
+                               /**
+ * Bad public key
+ */
+LDKSecp256k1Error_InvalidPublicKey,
+                               /**
+ * Bad signature
+ */
+LDKSecp256k1Error_InvalidSignature,
+                               /**
+ * Bad secret key
+ */
+LDKSecp256k1Error_InvalidSecretKey,
+                               /**
+ * Bad recovery id
+ */
+LDKSecp256k1Error_InvalidRecoveryId,
+                               /**
+ * Invalid tweak for add_assign or mul_assign
+ */
+LDKSecp256k1Error_InvalidTweak,
+                               /**
+ * tweak_add_check failed on an xonly public key
+ */
+LDKSecp256k1Error_TweakCheckFailed,
+                               /**
+ * Didn't pass enough memory to context creation with preallocated memory
+ */
+LDKSecp256k1Error_NotEnoughMemory,
                                
             }
index a296463ad3c40745de57518f251f4f09715b2428..ea1655f949742dbbd495e76ecf5f5b617e3cbcb1 100644 (file)
@@ -1,14 +1,45 @@
 
             export enum SemanticError {
-                LDKSemanticError_NoPaymentHash,
-                               LDKSemanticError_MultiplePaymentHashes,
-                               LDKSemanticError_NoDescription,
-                               LDKSemanticError_MultipleDescriptions,
-                               LDKSemanticError_NoPaymentSecret,
-                               LDKSemanticError_MultiplePaymentSecrets,
-                               LDKSemanticError_InvalidFeatures,
-                               LDKSemanticError_InvalidRecoveryId,
-                               LDKSemanticError_InvalidSignature,
-                               LDKSemanticError_ImpreciseAmount,
+                /**
+ * The invoice is missing the mandatory payment hash
+ */
+LDKSemanticError_NoPaymentHash,
+                               /**
+ * The invoice has multiple payment hashes which isn't allowed
+ */
+LDKSemanticError_MultiplePaymentHashes,
+                               /**
+ * No description or description hash are part of the invoice
+ */
+LDKSemanticError_NoDescription,
+                               /**
+ * The invoice contains multiple descriptions and/or description hashes which isn't allowed
+ */
+LDKSemanticError_MultipleDescriptions,
+                               /**
+ * The invoice is missing the mandatory payment secret, which all modern lightning nodes
+should provide.
+ */
+LDKSemanticError_NoPaymentSecret,
+                               /**
+ * The invoice contains multiple payment secrets
+ */
+LDKSemanticError_MultiplePaymentSecrets,
+                               /**
+ * The invoice's features are invalid
+ */
+LDKSemanticError_InvalidFeatures,
+                               /**
+ * The recovery id doesn't fit the signature/pub key
+ */
+LDKSemanticError_InvalidRecoveryId,
+                               /**
+ * The invoice's signature is invalid
+ */
+LDKSemanticError_InvalidSignature,
+                               /**
+ * The invoice's amount was not a whole number of millisatoshis
+ */
+LDKSemanticError_ImpreciseAmount,
                                
             }
index dbc39aca334f353a1c22c657baa88479136acd71..5f25c8536ff91a8793aaae20ad66787c9b12a7f5 100644 (file)
@@ -1,8 +1,20 @@
 
             export enum SiPrefix {
-                LDKSiPrefix_Milli,
-                               LDKSiPrefix_Micro,
-                               LDKSiPrefix_Nano,
-                               LDKSiPrefix_Pico,
+                /**
+ * 10^-3
+ */
+LDKSiPrefix_Milli,
+                               /**
+ * 10^-6
+ */
+LDKSiPrefix_Micro,
+                               /**
+ * 10^-9
+ */
+LDKSiPrefix_Nano,
+                               /**
+ * 10^-12
+ */
+LDKSiPrefix_Pico,
                                
             }
index 7b68692ce96833b1f78615e3194214f69f8d1c79..61fdaef0b98d77196c9375233cd3e7749695947c 100644 (file)
@@ -77,6 +77,11 @@ export class IncompatibleShutdownScript extends APIError {
                this.script = script_hu_conv;
        }
 }
+       public number clone_ptr() {
+               number ret = bindings.APIError_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public APIError clone() {
                number ret = bindings.APIError_clone(this.ptr);
                APIError ret_hu_conv = APIError.constr_from_ptr(ret);
index ba21a7ca7b1beb3acf852db9591f71d00bb86630..4e102c77817673f1ac0b4940fae7f834bbdc4c2a 100644 (file)
@@ -24,7 +24,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_temporary_channel_id(Uint8Array val) {
-               bindings.AcceptChannel_set_temporary_channel_id(this.ptr, val);
+               bindings.AcceptChannel_set_temporary_channel_id(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        public number get_dust_limit_satoshis() {
@@ -96,7 +96,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_funding_pubkey(Uint8Array val) {
-               bindings.AcceptChannel_set_funding_pubkey(this.ptr, val);
+               bindings.AcceptChannel_set_funding_pubkey(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        public Uint8Array get_revocation_basepoint() {
@@ -105,7 +105,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_revocation_basepoint(Uint8Array val) {
-               bindings.AcceptChannel_set_revocation_basepoint(this.ptr, val);
+               bindings.AcceptChannel_set_revocation_basepoint(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        public Uint8Array get_payment_point() {
@@ -114,7 +114,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_payment_point(Uint8Array val) {
-               bindings.AcceptChannel_set_payment_point(this.ptr, val);
+               bindings.AcceptChannel_set_payment_point(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        public Uint8Array get_delayed_payment_basepoint() {
@@ -123,7 +123,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_delayed_payment_basepoint(Uint8Array val) {
-               bindings.AcceptChannel_set_delayed_payment_basepoint(this.ptr, val);
+               bindings.AcceptChannel_set_delayed_payment_basepoint(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        public Uint8Array get_htlc_basepoint() {
@@ -132,7 +132,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_htlc_basepoint(Uint8Array val) {
-               bindings.AcceptChannel_set_htlc_basepoint(this.ptr, val);
+               bindings.AcceptChannel_set_htlc_basepoint(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        public Uint8Array get_first_per_commitment_point() {
@@ -141,7 +141,12 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_first_per_commitment_point(Uint8Array val) {
-               bindings.AcceptChannel_set_first_per_commitment_point(this.ptr, val);
+               bindings.AcceptChannel_set_first_per_commitment_point(this.ptr, InternalUtils.check_arr_len(val, 33));
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.AcceptChannel_clone_ptr(this.ptr);
+               return ret;
        }
 
        public AcceptChannel clone() {
index 416f2a14c0a286f62c74cdd832ba9ca9d8935f11..ccb20fb0e3272f98d17b75eceaedb08e05a67091 100644 (file)
@@ -34,7 +34,7 @@ import * as bindings from '../bindings' // TODO: figure out location
                         // todo: in-line interface filling
                         get_utxo (genesis_hash: Uint8Array, short_channel_id: number): number {
                                                        Result_TxOutAccessErrorZ ret = arg.get_utxo(genesis_hash, short_channel_id);
-                               result: number = ret != null ? ret.ptr : 0;
+                               result: number = ret == null ? 0 : ret.clone_ptr();
                                return result;
                                                },
 
@@ -53,7 +53,7 @@ import * as bindings from '../bindings' // TODO: figure out location
                 held: Access;
             }
        public Result_TxOutAccessErrorZ get_utxo(Uint8Array genesis_hash, number short_channel_id) {
-               number ret = bindings.Access_get_utxo(this.ptr, genesis_hash, short_channel_id);
+               number ret = bindings.Access_get_utxo(this.ptr, InternalUtils.check_arr_len(genesis_hash, 32), short_channel_id);
                Result_TxOutAccessErrorZ ret_hu_conv = Result_TxOutAccessErrorZ.constr_from_ptr(ret);
                return ret_hu_conv;
        }
index 78905ec3afc5b4936acb101d5c914329c01e82cc..808cd55e48eff3c1ac9dc96efd1d4d373df978dd 100644 (file)
@@ -24,7 +24,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_channel_id(Uint8Array val) {
-               bindings.AnnouncementSignatures_set_channel_id(this.ptr, val);
+               bindings.AnnouncementSignatures_set_channel_id(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        public number get_short_channel_id() {
@@ -42,7 +42,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_node_signature(Uint8Array val) {
-               bindings.AnnouncementSignatures_set_node_signature(this.ptr, val);
+               bindings.AnnouncementSignatures_set_node_signature(this.ptr, InternalUtils.check_arr_len(val, 64));
        }
 
        public Uint8Array get_bitcoin_signature() {
@@ -51,16 +51,21 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_bitcoin_signature(Uint8Array val) {
-               bindings.AnnouncementSignatures_set_bitcoin_signature(this.ptr, val);
+               bindings.AnnouncementSignatures_set_bitcoin_signature(this.ptr, InternalUtils.check_arr_len(val, 64));
        }
 
        public static AnnouncementSignatures constructor_new(Uint8Array channel_id_arg, number short_channel_id_arg, Uint8Array node_signature_arg, Uint8Array bitcoin_signature_arg) {
-               number ret = bindings.AnnouncementSignatures_new(channel_id_arg, short_channel_id_arg, node_signature_arg, bitcoin_signature_arg);
+               number ret = bindings.AnnouncementSignatures_new(InternalUtils.check_arr_len(channel_id_arg, 32), short_channel_id_arg, InternalUtils.check_arr_len(node_signature_arg, 64), InternalUtils.check_arr_len(bitcoin_signature_arg, 64));
                const ret_hu_conv: AnnouncementSignatures = new AnnouncementSignatures(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.AnnouncementSignatures_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public AnnouncementSignatures clone() {
                number ret = bindings.AnnouncementSignatures_clone(this.ptr);
                const ret_hu_conv: AnnouncementSignatures = new AnnouncementSignatures(null, ret);
index c7ff0db9a81ef668277ca631e96f903ab1cb97dc..c76978e049500f651fafb6ee18f1a061d177504a 100644 (file)
@@ -60,6 +60,11 @@ export class MaybeClaimableHTLCAwaitingTimeout extends Balance {
                this.claimable_height = obj.claimable_height;
        }
 }
+       public number clone_ptr() {
+               number ret = bindings.Balance_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Balance clone() {
                number ret = bindings.Balance_clone(this.ptr);
                Balance ret_hu_conv = Balance.constr_from_ptr(ret);
index 1aa749f69f5679605c8cf8dc1862931ad1d9ba04..b76963c707fe63aaeed6ed5ff1e0ab051b53665c 100644 (file)
@@ -15,7 +15,7 @@ import * as bindings from '../bindings' // TODO: figure out location
                                        this.bindings_instance = null;
                                    } else {
                                        // TODO: private constructor instantiation
-                                       super(bindings.LDKBaseSign_new(arg, pubkeys == null ? 0 : pubkeys.ptr & ~1));
+                                       super(bindings.LDKBaseSign_new(arg, pubkeys == null ? 0 : pubkeys.clone_ptr()));
                                        this.ptrs_to.push(arg);
                                        
                                    }
@@ -34,77 +34,80 @@ import * as bindings from '../bindings' // TODO: figure out location
                         // todo: in-line interface filling
                         get_per_commitment_point (idx: number): Uint8Array {
                                                        Uint8Array ret = arg.get_per_commitment_point(idx);
-                               return ret;
+                               result: Uint8Array = InternalUtils.check_arr_len(ret, 33);
+                               return result;
                                                },
 
                                                release_commitment_secret (idx: number): Uint8Array {
                                                        Uint8Array ret = arg.release_commitment_secret(idx);
-                               return ret;
+                               result: Uint8Array = InternalUtils.check_arr_len(ret, 32);
+                               return result;
                                                },
 
                                                validate_holder_commitment (holder_tx: number): number {
                                                        const holder_tx_hu_conv: HolderCommitmentTransaction = new HolderCommitmentTransaction(null, holder_tx);
                                                        Result_NoneNoneZ ret = arg.validate_holder_commitment(holder_tx_hu_conv);
-                               result: number = ret != null ? ret.ptr : 0;
+                               result: number = ret == null ? 0 : ret.clone_ptr();
                                return result;
                                                },
 
                                                channel_keys_id (): Uint8Array {
                                                        Uint8Array ret = arg.channel_keys_id();
-                               return ret;
+                               result: Uint8Array = InternalUtils.check_arr_len(ret, 32);
+                               return result;
                                                },
 
                                                sign_counterparty_commitment (commitment_tx: number): number {
                                                        const commitment_tx_hu_conv: CommitmentTransaction = new CommitmentTransaction(null, commitment_tx);
                                                        Result_C2Tuple_SignatureCVec_SignatureZZNoneZ ret = arg.sign_counterparty_commitment(commitment_tx_hu_conv);
-                               result: number = ret != null ? ret.ptr : 0;
+                               result: number = ret == null ? 0 : ret.clone_ptr();
                                return result;
                                                },
 
                                                validate_counterparty_revocation (idx: number, secret: Uint8Array): number {
                                                        Result_NoneNoneZ ret = arg.validate_counterparty_revocation(idx, secret);
-                               result: number = ret != null ? ret.ptr : 0;
+                               result: number = ret == null ? 0 : ret.clone_ptr();
                                return result;
                                                },
 
                                                sign_holder_commitment_and_htlcs (commitment_tx: number): number {
                                                        const commitment_tx_hu_conv: HolderCommitmentTransaction = new HolderCommitmentTransaction(null, commitment_tx);
                                                        Result_C2Tuple_SignatureCVec_SignatureZZNoneZ ret = arg.sign_holder_commitment_and_htlcs(commitment_tx_hu_conv);
-                               result: number = ret != null ? ret.ptr : 0;
+                               result: number = ret == null ? 0 : ret.clone_ptr();
                                return result;
                                                },
 
                                                sign_justice_revoked_output (justice_tx: Uint8Array, input: number, amount: number, per_commitment_key: Uint8Array): number {
                                                        Result_SignatureNoneZ ret = arg.sign_justice_revoked_output(justice_tx, input, amount, per_commitment_key);
-                               result: number = ret != null ? ret.ptr : 0;
+                               result: number = ret == null ? 0 : ret.clone_ptr();
                                return result;
                                                },
 
                                                sign_justice_revoked_htlc (justice_tx: Uint8Array, input: number, amount: number, per_commitment_key: Uint8Array, htlc: number): number {
                                                        const htlc_hu_conv: HTLCOutputInCommitment = new HTLCOutputInCommitment(null, htlc);
                                                        Result_SignatureNoneZ ret = arg.sign_justice_revoked_htlc(justice_tx, input, amount, per_commitment_key, htlc_hu_conv);
-                               result: number = ret != null ? ret.ptr : 0;
+                               result: number = ret == null ? 0 : ret.clone_ptr();
                                return result;
                                                },
 
                                                sign_counterparty_htlc_transaction (htlc_tx: Uint8Array, input: number, amount: number, per_commitment_point: Uint8Array, htlc: number): number {
                                                        const htlc_hu_conv: HTLCOutputInCommitment = new HTLCOutputInCommitment(null, htlc);
                                                        Result_SignatureNoneZ ret = arg.sign_counterparty_htlc_transaction(htlc_tx, input, amount, per_commitment_point, htlc_hu_conv);
-                               result: number = ret != null ? ret.ptr : 0;
+                               result: number = ret == null ? 0 : ret.clone_ptr();
                                return result;
                                                },
 
                                                sign_closing_transaction (closing_tx: number): number {
                                                        const closing_tx_hu_conv: ClosingTransaction = new ClosingTransaction(null, closing_tx);
                                                        Result_SignatureNoneZ ret = arg.sign_closing_transaction(closing_tx_hu_conv);
-                               result: number = ret != null ? ret.ptr : 0;
+                               result: number = ret == null ? 0 : ret.clone_ptr();
                                return result;
                                                },
 
                                                sign_channel_announcement (msg: number): number {
                                                        const msg_hu_conv: UnsignedChannelAnnouncement = new UnsignedChannelAnnouncement(null, msg);
                                                        Result_SignatureNoneZ ret = arg.sign_channel_announcement(msg_hu_conv);
-                               result: number = ret != null ? ret.ptr : 0;
+                               result: number = ret == null ? 0 : ret.clone_ptr();
                                return result;
                                                },
 
@@ -169,7 +172,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public Result_NoneNoneZ validate_counterparty_revocation(number idx, Uint8Array secret) {
-               number ret = bindings.BaseSign_validate_counterparty_revocation(this.ptr, idx, secret);
+               number ret = bindings.BaseSign_validate_counterparty_revocation(this.ptr, idx, InternalUtils.check_arr_len(secret, 32));
                Result_NoneNoneZ ret_hu_conv = Result_NoneNoneZ.constr_from_ptr(ret);
                return ret_hu_conv;
        }
@@ -182,20 +185,20 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public Result_SignatureNoneZ sign_justice_revoked_output(Uint8Array justice_tx, number input, number amount, Uint8Array per_commitment_key) {
-               number ret = bindings.BaseSign_sign_justice_revoked_output(this.ptr, justice_tx, input, amount, per_commitment_key);
+               number ret = bindings.BaseSign_sign_justice_revoked_output(this.ptr, justice_tx, input, amount, InternalUtils.check_arr_len(per_commitment_key, 32));
                Result_SignatureNoneZ ret_hu_conv = Result_SignatureNoneZ.constr_from_ptr(ret);
                return ret_hu_conv;
        }
 
        public Result_SignatureNoneZ sign_justice_revoked_htlc(Uint8Array justice_tx, number input, number amount, Uint8Array per_commitment_key, HTLCOutputInCommitment htlc) {
-               number ret = bindings.BaseSign_sign_justice_revoked_htlc(this.ptr, justice_tx, input, amount, per_commitment_key, htlc == null ? 0 : htlc.ptr & ~1);
+               number ret = bindings.BaseSign_sign_justice_revoked_htlc(this.ptr, justice_tx, input, amount, InternalUtils.check_arr_len(per_commitment_key, 32), htlc == null ? 0 : htlc.ptr & ~1);
                Result_SignatureNoneZ ret_hu_conv = Result_SignatureNoneZ.constr_from_ptr(ret);
                this.ptrs_to.add(htlc);
                return ret_hu_conv;
        }
 
        public Result_SignatureNoneZ sign_counterparty_htlc_transaction(Uint8Array htlc_tx, number input, number amount, Uint8Array per_commitment_point, HTLCOutputInCommitment htlc) {
-               number ret = bindings.BaseSign_sign_counterparty_htlc_transaction(this.ptr, htlc_tx, input, amount, per_commitment_point, htlc == null ? 0 : htlc.ptr & ~1);
+               number ret = bindings.BaseSign_sign_counterparty_htlc_transaction(this.ptr, htlc_tx, input, amount, InternalUtils.check_arr_len(per_commitment_point, 33), htlc == null ? 0 : htlc.ptr & ~1);
                Result_SignatureNoneZ ret_hu_conv = Result_SignatureNoneZ.constr_from_ptr(ret);
                this.ptrs_to.add(htlc);
                return ret_hu_conv;
index 439ba0e0365326c4e9bef55bd55bed5ed6f9335c..08597ee1d22bc594842176bb4c8d2a8d5ee2b700 100644 (file)
@@ -18,6 +18,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                         bindings.BestBlock_free(this.ptr);
                     }
                 }
+       public number clone_ptr() {
+               number ret = bindings.BestBlock_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public BestBlock clone() {
                number ret = bindings.BestBlock_clone(this.ptr);
                const ret_hu_conv: BestBlock = new BestBlock(null, ret);
@@ -33,7 +38,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public static BestBlock constructor_new(Uint8Array block_hash, number height) {
-               number ret = bindings.BestBlock_new(block_hash, height);
+               number ret = bindings.BestBlock_new(InternalUtils.check_arr_len(block_hash, 32), height);
                const ret_hu_conv: BestBlock = new BestBlock(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
index 7d2e387c6cf2cb8e85d4c3d29c3024767e5e5ed2..a2082dc29641fb34d2323a753bcf6efd4c0e237d 100644 (file)
@@ -33,16 +33,21 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_txid(Uint8Array val) {
-               bindings.BuiltCommitmentTransaction_set_txid(this.ptr, val);
+               bindings.BuiltCommitmentTransaction_set_txid(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        public static BuiltCommitmentTransaction constructor_new(Uint8Array transaction_arg, Uint8Array txid_arg) {
-               number ret = bindings.BuiltCommitmentTransaction_new(transaction_arg, txid_arg);
+               number ret = bindings.BuiltCommitmentTransaction_new(transaction_arg, InternalUtils.check_arr_len(txid_arg, 32));
                const ret_hu_conv: BuiltCommitmentTransaction = new BuiltCommitmentTransaction(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.BuiltCommitmentTransaction_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public BuiltCommitmentTransaction clone() {
                number ret = bindings.BuiltCommitmentTransaction_clone(this.ptr);
                const ret_hu_conv: BuiltCommitmentTransaction = new BuiltCommitmentTransaction(null, ret);
@@ -67,7 +72,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public Uint8Array sign(Uint8Array funding_key, Uint8Array funding_redeemscript, number channel_value_satoshis) {
-               Uint8Array ret = bindings.BuiltCommitmentTransaction_sign(this.ptr, funding_key, funding_redeemscript, channel_value_satoshis);
+               Uint8Array ret = bindings.BuiltCommitmentTransaction_sign(this.ptr, InternalUtils.check_arr_len(funding_key, 32), funding_redeemscript, channel_value_satoshis);
                return ret;
        }
 
index 356c5d4b78dd5dc13181c0b9538eb64c829a968f..e65e42be81c56de272c0fb3ca3f733e513971998 100644 (file)
@@ -22,6 +22,7 @@ import * as bindings from '../bindings' // TODO: figure out location
                number ret = bindings.ChainMonitor_new(chain_source.ptr, broadcaster == null ? 0 : broadcaster.ptr, logger == null ? 0 : logger.ptr, feeest == null ? 0 : feeest.ptr, persister == null ? 0 : persister.ptr);
                const ret_hu_conv: ChainMonitor = new ChainMonitor(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
+               ret_hu_conv.ptrs_to.add(chain_source);
                ret_hu_conv.ptrs_to.add(broadcaster);
                ret_hu_conv.ptrs_to.add(logger);
                ret_hu_conv.ptrs_to.add(feeest);
index 292a85f19a4504385b51d0e5eff24b2bfc4f04ff..cf87765d3143b35944518f91aa3d5b15b9122a29 100644 (file)
@@ -45,6 +45,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.ChainParameters_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public ChainParameters clone() {
                number ret = bindings.ChainParameters_clone(this.ptr);
                const ret_hu_conv: ChainParameters = new ChainParameters(null, ret);
index 62e42cbe5973af8ab03c5a0c251dce277dbe4e27..d009b06c607693447c4e97d343afb4ad9b0ba1c1 100644 (file)
@@ -24,7 +24,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_node_signature_1(Uint8Array val) {
-               bindings.ChannelAnnouncement_set_node_signature_1(this.ptr, val);
+               bindings.ChannelAnnouncement_set_node_signature_1(this.ptr, InternalUtils.check_arr_len(val, 64));
        }
 
        public Uint8Array get_node_signature_2() {
@@ -33,7 +33,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_node_signature_2(Uint8Array val) {
-               bindings.ChannelAnnouncement_set_node_signature_2(this.ptr, val);
+               bindings.ChannelAnnouncement_set_node_signature_2(this.ptr, InternalUtils.check_arr_len(val, 64));
        }
 
        public Uint8Array get_bitcoin_signature_1() {
@@ -42,7 +42,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_bitcoin_signature_1(Uint8Array val) {
-               bindings.ChannelAnnouncement_set_bitcoin_signature_1(this.ptr, val);
+               bindings.ChannelAnnouncement_set_bitcoin_signature_1(this.ptr, InternalUtils.check_arr_len(val, 64));
        }
 
        public Uint8Array get_bitcoin_signature_2() {
@@ -51,7 +51,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_bitcoin_signature_2(Uint8Array val) {
-               bindings.ChannelAnnouncement_set_bitcoin_signature_2(this.ptr, val);
+               bindings.ChannelAnnouncement_set_bitcoin_signature_2(this.ptr, InternalUtils.check_arr_len(val, 64));
        }
 
        public UnsignedChannelAnnouncement get_contents() {
@@ -66,12 +66,17 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public static ChannelAnnouncement constructor_new(Uint8Array node_signature_1_arg, Uint8Array node_signature_2_arg, Uint8Array bitcoin_signature_1_arg, Uint8Array bitcoin_signature_2_arg, UnsignedChannelAnnouncement contents_arg) {
-               number ret = bindings.ChannelAnnouncement_new(node_signature_1_arg, node_signature_2_arg, bitcoin_signature_1_arg, bitcoin_signature_2_arg, contents_arg == null ? 0 : contents_arg.ptr & ~1);
+               number ret = bindings.ChannelAnnouncement_new(InternalUtils.check_arr_len(node_signature_1_arg, 64), InternalUtils.check_arr_len(node_signature_2_arg, 64), InternalUtils.check_arr_len(bitcoin_signature_1_arg, 64), InternalUtils.check_arr_len(bitcoin_signature_2_arg, 64), contents_arg == null ? 0 : contents_arg.ptr & ~1);
                const ret_hu_conv: ChannelAnnouncement = new ChannelAnnouncement(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.ChannelAnnouncement_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public ChannelAnnouncement clone() {
                number ret = bindings.ChannelAnnouncement_clone(this.ptr);
                const ret_hu_conv: ChannelAnnouncement = new ChannelAnnouncement(null, ret);
index 570630c5599fc1d37f95f28f1c2edfd9a2305c08..e7e2c97905a747c4b8b6dc4e39fad7f5a40e7e8e 100644 (file)
@@ -88,6 +88,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.ChannelConfig_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public ChannelConfig clone() {
                number ret = bindings.ChannelConfig_clone(this.ptr);
                const ret_hu_conv: ChannelConfig = new ChannelConfig(null, ret);
index 6e3d03b69d7fc9942072be6e18cfe1bf9b52f87d..2facb0744d50cb3b68b97bcb1a200002514b15f7 100644 (file)
@@ -24,7 +24,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_node_id(Uint8Array val) {
-               bindings.ChannelCounterparty_set_node_id(this.ptr, val);
+               bindings.ChannelCounterparty_set_node_id(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        public InitFeatures get_features() {
@@ -59,12 +59,17 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public static ChannelCounterparty constructor_new(Uint8Array node_id_arg, InitFeatures features_arg, number unspendable_punishment_reserve_arg, CounterpartyForwardingInfo forwarding_info_arg) {
-               number ret = bindings.ChannelCounterparty_new(node_id_arg, features_arg == null ? 0 : features_arg.ptr & ~1, unspendable_punishment_reserve_arg, forwarding_info_arg == null ? 0 : forwarding_info_arg.ptr & ~1);
+               number ret = bindings.ChannelCounterparty_new(InternalUtils.check_arr_len(node_id_arg, 33), features_arg == null ? 0 : features_arg.ptr & ~1, unspendable_punishment_reserve_arg, forwarding_info_arg == null ? 0 : forwarding_info_arg.ptr & ~1);
                const ret_hu_conv: ChannelCounterparty = new ChannelCounterparty(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.ChannelCounterparty_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public ChannelCounterparty clone() {
                number ret = bindings.ChannelCounterparty_clone(this.ptr);
                const ret_hu_conv: ChannelCounterparty = new ChannelCounterparty(null, ret);
index 07ddf85d4cae12b5bec52d6e3c700497e077ec4c..333efbe51a4c8b14e2cdc5a2d8de7b0ff23fde19 100644 (file)
@@ -24,7 +24,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_channel_id(Uint8Array val) {
-               bindings.ChannelDetails_set_channel_id(this.ptr, val);
+               bindings.ChannelDetails_set_channel_id(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        public ChannelCounterparty get_counterparty() {
@@ -166,12 +166,17 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public static ChannelDetails constructor_new(Uint8Array channel_id_arg, ChannelCounterparty counterparty_arg, OutPoint funding_txo_arg, Option_u64Z short_channel_id_arg, number channel_value_satoshis_arg, Option_u64Z unspendable_punishment_reserve_arg, number user_channel_id_arg, number outbound_capacity_msat_arg, number inbound_capacity_msat_arg, Option_u32Z confirmations_required_arg, Option_u16Z force_close_spend_delay_arg, boolean is_outbound_arg, boolean is_funding_locked_arg, boolean is_usable_arg, boolean is_public_arg) {
-               number ret = bindings.ChannelDetails_new(channel_id_arg, counterparty_arg == null ? 0 : counterparty_arg.ptr & ~1, funding_txo_arg == null ? 0 : funding_txo_arg.ptr & ~1, short_channel_id_arg.ptr, channel_value_satoshis_arg, unspendable_punishment_reserve_arg.ptr, user_channel_id_arg, outbound_capacity_msat_arg, inbound_capacity_msat_arg, confirmations_required_arg.ptr, force_close_spend_delay_arg.ptr, is_outbound_arg, is_funding_locked_arg, is_usable_arg, is_public_arg);
+               number ret = bindings.ChannelDetails_new(InternalUtils.check_arr_len(channel_id_arg, 32), counterparty_arg == null ? 0 : counterparty_arg.ptr & ~1, funding_txo_arg == null ? 0 : funding_txo_arg.ptr & ~1, short_channel_id_arg.ptr, channel_value_satoshis_arg, unspendable_punishment_reserve_arg.ptr, user_channel_id_arg, outbound_capacity_msat_arg, inbound_capacity_msat_arg, confirmations_required_arg.ptr, force_close_spend_delay_arg.ptr, is_outbound_arg, is_funding_locked_arg, is_usable_arg, is_public_arg);
                const ret_hu_conv: ChannelDetails = new ChannelDetails(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.ChannelDetails_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public ChannelDetails clone() {
                number ret = bindings.ChannelDetails_clone(this.ptr);
                const ret_hu_conv: ChannelDetails = new ChannelDetails(null, ret);
index 05694319ab53a5292c77c7a92b766a5efce599d2..305b3a2160a807b3c8f792a9bf422958d3609929 100644 (file)
@@ -24,6 +24,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                return ret;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.ChannelFeatures_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public ChannelFeatures clone() {
                number ret = bindings.ChannelFeatures_clone(this.ptr);
                const ret_hu_conv: ChannelFeatures = new ChannelFeatures(null, ret);
index 1db4cd89ff8a59ea8900e43206260a603e865e2c..2c06b274874b3e3a27aa602b2ea73eebd1ed24f1 100644 (file)
@@ -52,6 +52,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.ChannelHandshakeConfig_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public ChannelHandshakeConfig clone() {
                number ret = bindings.ChannelHandshakeConfig_clone(this.ptr);
                const ret_hu_conv: ChannelHandshakeConfig = new ChannelHandshakeConfig(null, ret);
index 99b663bb4d0f4e52319c6713931952aeb02b8fec..643c7ffa564ac5699937688d030e90792c601ca3 100644 (file)
@@ -97,6 +97,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.ChannelHandshakeLimits_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public ChannelHandshakeLimits clone() {
                number ret = bindings.ChannelHandshakeLimits_clone(this.ptr);
                const ret_hu_conv: ChannelHandshakeLimits = new ChannelHandshakeLimits(null, ret);
index 2ae6c0e9591f4a87e0a778cd4593a7f028ff4eb5..0101375df6dd49e9792caf1560c5035a8556524f 100644 (file)
@@ -102,6 +102,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.ChannelInfo_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public ChannelInfo clone() {
                number ret = bindings.ChannelInfo_clone(this.ptr);
                const ret_hu_conv: ChannelInfo = new ChannelInfo(null, ret);
index d9857373b719d9860dc8968990d1e1993030d32a..b99a3cba7253c4130197b122da4f923bd56b5b7f 100644 (file)
@@ -38,7 +38,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public Result__u832APIErrorZ create_channel(Uint8Array their_network_key, number channel_value_satoshis, number push_msat, number user_channel_id, UserConfig override_config) {
-               number ret = bindings.ChannelManager_create_channel(this.ptr, their_network_key, channel_value_satoshis, push_msat, user_channel_id, override_config == null ? 0 : override_config.ptr & ~1);
+               number ret = bindings.ChannelManager_create_channel(this.ptr, InternalUtils.check_arr_len(their_network_key, 33), channel_value_satoshis, push_msat, user_channel_id, override_config == null ? 0 : override_config.ptr & ~1);
                Result__u832APIErrorZ ret_hu_conv = Result__u832APIErrorZ.constr_from_ptr(ret);
                return ret_hu_conv;
        }
@@ -68,19 +68,19 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public Result_NoneAPIErrorZ close_channel(Uint8Array channel_id) {
-               number ret = bindings.ChannelManager_close_channel(this.ptr, channel_id);
+               number ret = bindings.ChannelManager_close_channel(this.ptr, InternalUtils.check_arr_len(channel_id, 32));
                Result_NoneAPIErrorZ ret_hu_conv = Result_NoneAPIErrorZ.constr_from_ptr(ret);
                return ret_hu_conv;
        }
 
        public Result_NoneAPIErrorZ close_channel_with_target_feerate(Uint8Array channel_id, number target_feerate_sats_per_1000_weight) {
-               number ret = bindings.ChannelManager_close_channel_with_target_feerate(this.ptr, channel_id, target_feerate_sats_per_1000_weight);
+               number ret = bindings.ChannelManager_close_channel_with_target_feerate(this.ptr, InternalUtils.check_arr_len(channel_id, 32), target_feerate_sats_per_1000_weight);
                Result_NoneAPIErrorZ ret_hu_conv = Result_NoneAPIErrorZ.constr_from_ptr(ret);
                return ret_hu_conv;
        }
 
        public Result_NoneAPIErrorZ force_close_channel(Uint8Array channel_id) {
-               number ret = bindings.ChannelManager_force_close_channel(this.ptr, channel_id);
+               number ret = bindings.ChannelManager_force_close_channel(this.ptr, InternalUtils.check_arr_len(channel_id, 32));
                Result_NoneAPIErrorZ ret_hu_conv = Result_NoneAPIErrorZ.constr_from_ptr(ret);
                return ret_hu_conv;
        }
@@ -90,34 +90,34 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public Result_PaymentIdPaymentSendFailureZ send_payment(Route route, Uint8Array payment_hash, Uint8Array payment_secret) {
-               number ret = bindings.ChannelManager_send_payment(this.ptr, route == null ? 0 : route.ptr & ~1, payment_hash, payment_secret);
+               number ret = bindings.ChannelManager_send_payment(this.ptr, route == null ? 0 : route.ptr & ~1, InternalUtils.check_arr_len(payment_hash, 32), InternalUtils.check_arr_len(payment_secret, 32));
                Result_PaymentIdPaymentSendFailureZ ret_hu_conv = Result_PaymentIdPaymentSendFailureZ.constr_from_ptr(ret);
                this.ptrs_to.add(route);
                return ret_hu_conv;
        }
 
        public Result_NonePaymentSendFailureZ retry_payment(Route route, Uint8Array payment_id) {
-               number ret = bindings.ChannelManager_retry_payment(this.ptr, route == null ? 0 : route.ptr & ~1, payment_id);
+               number ret = bindings.ChannelManager_retry_payment(this.ptr, route == null ? 0 : route.ptr & ~1, InternalUtils.check_arr_len(payment_id, 32));
                Result_NonePaymentSendFailureZ ret_hu_conv = Result_NonePaymentSendFailureZ.constr_from_ptr(ret);
                this.ptrs_to.add(route);
                return ret_hu_conv;
        }
 
        public Result_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ send_spontaneous_payment(Route route, Uint8Array payment_preimage) {
-               number ret = bindings.ChannelManager_send_spontaneous_payment(this.ptr, route == null ? 0 : route.ptr & ~1, payment_preimage);
+               number ret = bindings.ChannelManager_send_spontaneous_payment(this.ptr, route == null ? 0 : route.ptr & ~1, InternalUtils.check_arr_len(payment_preimage, 32));
                Result_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ ret_hu_conv = Result_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ.constr_from_ptr(ret);
                this.ptrs_to.add(route);
                return ret_hu_conv;
        }
 
        public Result_NoneAPIErrorZ funding_transaction_generated(Uint8Array temporary_channel_id, Uint8Array funding_transaction) {
-               number ret = bindings.ChannelManager_funding_transaction_generated(this.ptr, temporary_channel_id, funding_transaction);
+               number ret = bindings.ChannelManager_funding_transaction_generated(this.ptr, InternalUtils.check_arr_len(temporary_channel_id, 32), funding_transaction);
                Result_NoneAPIErrorZ ret_hu_conv = Result_NoneAPIErrorZ.constr_from_ptr(ret);
                return ret_hu_conv;
        }
 
        public void broadcast_node_announcement(Uint8Array rgb, Uint8Array alias, NetAddress[] addresses) {
-               bindings.ChannelManager_broadcast_node_announcement(this.ptr, rgb, alias, addresses != null ? Arrays.stream(addresses).map(addresses_conv_12 -> addresses_conv_12.ptr).toArray(number[]::new) : null);
+               bindings.ChannelManager_broadcast_node_announcement(this.ptr, InternalUtils.check_arr_len(rgb, 3), InternalUtils.check_arr_len(alias, 32), addresses != null ? Arrays.stream(addresses).map(addresses_conv_12 -> addresses_conv_12.ptr).toArray(number[]::new) : null);
        }
 
        public void process_pending_htlc_forwards() {
@@ -129,12 +129,12 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public boolean fail_htlc_backwards(Uint8Array payment_hash) {
-               boolean ret = bindings.ChannelManager_fail_htlc_backwards(this.ptr, payment_hash);
+               boolean ret = bindings.ChannelManager_fail_htlc_backwards(this.ptr, InternalUtils.check_arr_len(payment_hash, 32));
                return ret;
        }
 
        public boolean claim_funds(Uint8Array payment_preimage) {
-               boolean ret = bindings.ChannelManager_claim_funds(this.ptr, payment_preimage);
+               boolean ret = bindings.ChannelManager_claim_funds(this.ptr, InternalUtils.check_arr_len(payment_preimage, 32));
                return ret;
        }
 
@@ -151,7 +151,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public Result_PaymentSecretAPIErrorZ create_inbound_payment_for_hash(Uint8Array payment_hash, Option_u64Z min_value_msat, number invoice_expiry_delta_secs, number user_payment_id) {
-               number ret = bindings.ChannelManager_create_inbound_payment_for_hash(this.ptr, payment_hash, min_value_msat.ptr, invoice_expiry_delta_secs, user_payment_id);
+               number ret = bindings.ChannelManager_create_inbound_payment_for_hash(this.ptr, InternalUtils.check_arr_len(payment_hash, 32), min_value_msat.ptr, invoice_expiry_delta_secs, user_payment_id);
                Result_PaymentSecretAPIErrorZ ret_hu_conv = Result_PaymentSecretAPIErrorZ.constr_from_ptr(ret);
                return ret_hu_conv;
        }
index 304b00e986a93c5be718f0a9e93e09affe150d97..f6cffb2afc916382948733095c3c90b969a3221c 100644 (file)
@@ -35,7 +35,7 @@ import * as bindings from '../bindings' // TODO: figure out location
                         persist_manager (channel_manager: number): number {
                                                        const channel_manager_hu_conv: ChannelManager = new ChannelManager(null, channel_manager);
                                                        Result_NoneErrorZ ret = arg.persist_manager(channel_manager_hu_conv);
-                               result: number = ret != null ? ret.ptr : 0;
+                               result: number = ret == null ? 0 : ret.clone_ptr();
                                return result;
                                                },
 
index 23478b360679ac8f6bf805f1db1c2c4ec433b324..bc81d097b14c0484550a6673c7d242d14e072215 100644 (file)
@@ -171,102 +171,102 @@ import * as bindings from '../bindings' // TODO: figure out location
                 held: ChannelMessageHandler;
             }
        public void handle_open_channel(Uint8Array their_node_id, InitFeatures their_features, OpenChannel msg) {
-               bindings.ChannelMessageHandler_handle_open_channel(this.ptr, their_node_id, their_features == null ? 0 : their_features.ptr & ~1, msg == null ? 0 : msg.ptr & ~1);
+               bindings.ChannelMessageHandler_handle_open_channel(this.ptr, InternalUtils.check_arr_len(their_node_id, 33), their_features == null ? 0 : their_features.ptr & ~1, msg == null ? 0 : msg.ptr & ~1);
                this.ptrs_to.add(msg);
        }
 
        public void handle_accept_channel(Uint8Array their_node_id, InitFeatures their_features, AcceptChannel msg) {
-               bindings.ChannelMessageHandler_handle_accept_channel(this.ptr, their_node_id, their_features == null ? 0 : their_features.ptr & ~1, msg == null ? 0 : msg.ptr & ~1);
+               bindings.ChannelMessageHandler_handle_accept_channel(this.ptr, InternalUtils.check_arr_len(their_node_id, 33), their_features == null ? 0 : their_features.ptr & ~1, msg == null ? 0 : msg.ptr & ~1);
                this.ptrs_to.add(msg);
        }
 
        public void handle_funding_created(Uint8Array their_node_id, FundingCreated msg) {
-               bindings.ChannelMessageHandler_handle_funding_created(this.ptr, their_node_id, msg == null ? 0 : msg.ptr & ~1);
+               bindings.ChannelMessageHandler_handle_funding_created(this.ptr, InternalUtils.check_arr_len(their_node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                this.ptrs_to.add(msg);
        }
 
        public void handle_funding_signed(Uint8Array their_node_id, FundingSigned msg) {
-               bindings.ChannelMessageHandler_handle_funding_signed(this.ptr, their_node_id, msg == null ? 0 : msg.ptr & ~1);
+               bindings.ChannelMessageHandler_handle_funding_signed(this.ptr, InternalUtils.check_arr_len(their_node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                this.ptrs_to.add(msg);
        }
 
        public void handle_funding_locked(Uint8Array their_node_id, FundingLocked msg) {
-               bindings.ChannelMessageHandler_handle_funding_locked(this.ptr, their_node_id, msg == null ? 0 : msg.ptr & ~1);
+               bindings.ChannelMessageHandler_handle_funding_locked(this.ptr, InternalUtils.check_arr_len(their_node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                this.ptrs_to.add(msg);
        }
 
        public void handle_shutdown(Uint8Array their_node_id, InitFeatures their_features, Shutdown msg) {
-               bindings.ChannelMessageHandler_handle_shutdown(this.ptr, their_node_id, their_features == null ? 0 : their_features.ptr & ~1, msg == null ? 0 : msg.ptr & ~1);
+               bindings.ChannelMessageHandler_handle_shutdown(this.ptr, InternalUtils.check_arr_len(their_node_id, 33), their_features == null ? 0 : their_features.ptr & ~1, msg == null ? 0 : msg.ptr & ~1);
                this.ptrs_to.add(their_features);
                this.ptrs_to.add(msg);
        }
 
        public void handle_closing_signed(Uint8Array their_node_id, ClosingSigned msg) {
-               bindings.ChannelMessageHandler_handle_closing_signed(this.ptr, their_node_id, msg == null ? 0 : msg.ptr & ~1);
+               bindings.ChannelMessageHandler_handle_closing_signed(this.ptr, InternalUtils.check_arr_len(their_node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                this.ptrs_to.add(msg);
        }
 
        public void handle_update_add_htlc(Uint8Array their_node_id, UpdateAddHTLC msg) {
-               bindings.ChannelMessageHandler_handle_update_add_htlc(this.ptr, their_node_id, msg == null ? 0 : msg.ptr & ~1);
+               bindings.ChannelMessageHandler_handle_update_add_htlc(this.ptr, InternalUtils.check_arr_len(their_node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                this.ptrs_to.add(msg);
        }
 
        public void handle_update_fulfill_htlc(Uint8Array their_node_id, UpdateFulfillHTLC msg) {
-               bindings.ChannelMessageHandler_handle_update_fulfill_htlc(this.ptr, their_node_id, msg == null ? 0 : msg.ptr & ~1);
+               bindings.ChannelMessageHandler_handle_update_fulfill_htlc(this.ptr, InternalUtils.check_arr_len(their_node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                this.ptrs_to.add(msg);
        }
 
        public void handle_update_fail_htlc(Uint8Array their_node_id, UpdateFailHTLC msg) {
-               bindings.ChannelMessageHandler_handle_update_fail_htlc(this.ptr, their_node_id, msg == null ? 0 : msg.ptr & ~1);
+               bindings.ChannelMessageHandler_handle_update_fail_htlc(this.ptr, InternalUtils.check_arr_len(their_node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                this.ptrs_to.add(msg);
        }
 
        public void handle_update_fail_malformed_htlc(Uint8Array their_node_id, UpdateFailMalformedHTLC msg) {
-               bindings.ChannelMessageHandler_handle_update_fail_malformed_htlc(this.ptr, their_node_id, msg == null ? 0 : msg.ptr & ~1);
+               bindings.ChannelMessageHandler_handle_update_fail_malformed_htlc(this.ptr, InternalUtils.check_arr_len(their_node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                this.ptrs_to.add(msg);
        }
 
        public void handle_commitment_signed(Uint8Array their_node_id, CommitmentSigned msg) {
-               bindings.ChannelMessageHandler_handle_commitment_signed(this.ptr, their_node_id, msg == null ? 0 : msg.ptr & ~1);
+               bindings.ChannelMessageHandler_handle_commitment_signed(this.ptr, InternalUtils.check_arr_len(their_node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                this.ptrs_to.add(msg);
        }
 
        public void handle_revoke_and_ack(Uint8Array their_node_id, RevokeAndACK msg) {
-               bindings.ChannelMessageHandler_handle_revoke_and_ack(this.ptr, their_node_id, msg == null ? 0 : msg.ptr & ~1);
+               bindings.ChannelMessageHandler_handle_revoke_and_ack(this.ptr, InternalUtils.check_arr_len(their_node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                this.ptrs_to.add(msg);
        }
 
        public void handle_update_fee(Uint8Array their_node_id, UpdateFee msg) {
-               bindings.ChannelMessageHandler_handle_update_fee(this.ptr, their_node_id, msg == null ? 0 : msg.ptr & ~1);
+               bindings.ChannelMessageHandler_handle_update_fee(this.ptr, InternalUtils.check_arr_len(their_node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                this.ptrs_to.add(msg);
        }
 
        public void handle_announcement_signatures(Uint8Array their_node_id, AnnouncementSignatures msg) {
-               bindings.ChannelMessageHandler_handle_announcement_signatures(this.ptr, their_node_id, msg == null ? 0 : msg.ptr & ~1);
+               bindings.ChannelMessageHandler_handle_announcement_signatures(this.ptr, InternalUtils.check_arr_len(their_node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                this.ptrs_to.add(msg);
        }
 
        public void peer_disconnected(Uint8Array their_node_id, boolean no_connection_possible) {
-               bindings.ChannelMessageHandler_peer_disconnected(this.ptr, their_node_id, no_connection_possible);
+               bindings.ChannelMessageHandler_peer_disconnected(this.ptr, InternalUtils.check_arr_len(their_node_id, 33), no_connection_possible);
        }
 
        public void peer_connected(Uint8Array their_node_id, Init msg) {
-               bindings.ChannelMessageHandler_peer_connected(this.ptr, their_node_id, msg == null ? 0 : msg.ptr & ~1);
+               bindings.ChannelMessageHandler_peer_connected(this.ptr, InternalUtils.check_arr_len(their_node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                this.ptrs_to.add(msg);
        }
 
        public void handle_channel_reestablish(Uint8Array their_node_id, ChannelReestablish msg) {
-               bindings.ChannelMessageHandler_handle_channel_reestablish(this.ptr, their_node_id, msg == null ? 0 : msg.ptr & ~1);
+               bindings.ChannelMessageHandler_handle_channel_reestablish(this.ptr, InternalUtils.check_arr_len(their_node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                this.ptrs_to.add(msg);
        }
 
        public void handle_channel_update(Uint8Array their_node_id, ChannelUpdate msg) {
-               bindings.ChannelMessageHandler_handle_channel_update(this.ptr, their_node_id, msg == null ? 0 : msg.ptr & ~1);
+               bindings.ChannelMessageHandler_handle_channel_update(this.ptr, InternalUtils.check_arr_len(their_node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                this.ptrs_to.add(msg);
        }
 
        public void handle_error(Uint8Array their_node_id, ErrorMessage msg) {
-               bindings.ChannelMessageHandler_handle_error(this.ptr, their_node_id, msg == null ? 0 : msg.ptr & ~1);
+               bindings.ChannelMessageHandler_handle_error(this.ptr, InternalUtils.check_arr_len(their_node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                this.ptrs_to.add(msg);
        }
 
index 1ee3bcb6b86196a3e04e9917312b3d96431b503f..d0c4a00d7943ea0deaf665d10db76384401360cc 100644 (file)
@@ -18,6 +18,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                         bindings.ChannelMonitor_free(this.ptr);
                     }
                 }
+       public number clone_ptr() {
+               number ret = bindings.ChannelMonitor_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public ChannelMonitor clone() {
                number ret = bindings.ChannelMonitor_clone(this.ptr);
                const ret_hu_conv: ChannelMonitor = new ChannelMonitor(null, ret);
@@ -100,7 +105,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public TwoTuple_TxidCVec_C2Tuple_u32TxOutZZZ[] block_connected(Uint8Array header, TwoTuple_usizeTransactionZ[] txdata, number height, BroadcasterInterface broadcaster, FeeEstimator fee_estimator, Logger logger) {
-               number[] ret = bindings.ChannelMonitor_block_connected(this.ptr, header, txdata != null ? Arrays.stream(txdata).map(txdata_conv_28 -> txdata_conv_28 != null ? txdata_conv_28.ptr : 0).toArray(number[]::new) : null, height, broadcaster == null ? 0 : broadcaster.ptr, fee_estimator == null ? 0 : fee_estimator.ptr, logger == null ? 0 : logger.ptr);
+               number[] ret = bindings.ChannelMonitor_block_connected(this.ptr, InternalUtils.check_arr_len(header, 80), txdata != null ? Arrays.stream(txdata).map(txdata_conv_28 -> txdata_conv_28 != null ? txdata_conv_28.ptr : 0).toArray(number[]::new) : null, height, broadcaster == null ? 0 : broadcaster.ptr, fee_estimator == null ? 0 : fee_estimator.ptr, logger == null ? 0 : logger.ptr);
                TwoTuple_TxidCVec_C2Tuple_u32TxOutZZZ[] ret_conv_39_arr = new TwoTuple_TxidCVec_C2Tuple_u32TxOutZZZ[ret.length];
                for (int n = 0; n < ret.length; n++) {
                        number ret_conv_39 = ret[n];
@@ -115,14 +120,14 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void block_disconnected(Uint8Array header, number height, BroadcasterInterface broadcaster, FeeEstimator fee_estimator, Logger logger) {
-               bindings.ChannelMonitor_block_disconnected(this.ptr, header, height, broadcaster == null ? 0 : broadcaster.ptr, fee_estimator == null ? 0 : fee_estimator.ptr, logger == null ? 0 : logger.ptr);
+               bindings.ChannelMonitor_block_disconnected(this.ptr, InternalUtils.check_arr_len(header, 80), height, broadcaster == null ? 0 : broadcaster.ptr, fee_estimator == null ? 0 : fee_estimator.ptr, logger == null ? 0 : logger.ptr);
                this.ptrs_to.add(broadcaster);
                this.ptrs_to.add(fee_estimator);
                this.ptrs_to.add(logger);
        }
 
        public TwoTuple_TxidCVec_C2Tuple_u32TxOutZZZ[] transactions_confirmed(Uint8Array header, TwoTuple_usizeTransactionZ[] txdata, number height, BroadcasterInterface broadcaster, FeeEstimator fee_estimator, Logger logger) {
-               number[] ret = bindings.ChannelMonitor_transactions_confirmed(this.ptr, header, txdata != null ? Arrays.stream(txdata).map(txdata_conv_28 -> txdata_conv_28 != null ? txdata_conv_28.ptr : 0).toArray(number[]::new) : null, height, broadcaster == null ? 0 : broadcaster.ptr, fee_estimator == null ? 0 : fee_estimator.ptr, logger == null ? 0 : logger.ptr);
+               number[] ret = bindings.ChannelMonitor_transactions_confirmed(this.ptr, InternalUtils.check_arr_len(header, 80), txdata != null ? Arrays.stream(txdata).map(txdata_conv_28 -> txdata_conv_28 != null ? txdata_conv_28.ptr : 0).toArray(number[]::new) : null, height, broadcaster == null ? 0 : broadcaster.ptr, fee_estimator == null ? 0 : fee_estimator.ptr, logger == null ? 0 : logger.ptr);
                TwoTuple_TxidCVec_C2Tuple_u32TxOutZZZ[] ret_conv_39_arr = new TwoTuple_TxidCVec_C2Tuple_u32TxOutZZZ[ret.length];
                for (int n = 0; n < ret.length; n++) {
                        number ret_conv_39 = ret[n];
@@ -137,14 +142,14 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void transaction_unconfirmed(Uint8Array txid, BroadcasterInterface broadcaster, FeeEstimator fee_estimator, Logger logger) {
-               bindings.ChannelMonitor_transaction_unconfirmed(this.ptr, txid, broadcaster == null ? 0 : broadcaster.ptr, fee_estimator == null ? 0 : fee_estimator.ptr, logger == null ? 0 : logger.ptr);
+               bindings.ChannelMonitor_transaction_unconfirmed(this.ptr, InternalUtils.check_arr_len(txid, 32), broadcaster == null ? 0 : broadcaster.ptr, fee_estimator == null ? 0 : fee_estimator.ptr, logger == null ? 0 : logger.ptr);
                this.ptrs_to.add(broadcaster);
                this.ptrs_to.add(fee_estimator);
                this.ptrs_to.add(logger);
        }
 
        public TwoTuple_TxidCVec_C2Tuple_u32TxOutZZZ[] best_block_updated(Uint8Array header, number height, BroadcasterInterface broadcaster, FeeEstimator fee_estimator, Logger logger) {
-               number[] ret = bindings.ChannelMonitor_best_block_updated(this.ptr, header, height, broadcaster == null ? 0 : broadcaster.ptr, fee_estimator == null ? 0 : fee_estimator.ptr, logger == null ? 0 : logger.ptr);
+               number[] ret = bindings.ChannelMonitor_best_block_updated(this.ptr, InternalUtils.check_arr_len(header, 80), height, broadcaster == null ? 0 : broadcaster.ptr, fee_estimator == null ? 0 : fee_estimator.ptr, logger == null ? 0 : logger.ptr);
                TwoTuple_TxidCVec_C2Tuple_u32TxOutZZZ[] ret_conv_39_arr = new TwoTuple_TxidCVec_C2Tuple_u32TxOutZZZ[ret.length];
                for (int n = 0; n < ret.length; n++) {
                        number ret_conv_39 = ret[n];
index 80e11cd18b1aaddac9b3b8a6d8455e905b565bdd..d33e5141db1d2210f3fdddb07649feccfe825814 100644 (file)
@@ -27,6 +27,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                bindings.ChannelMonitorUpdate_set_update_id(this.ptr, val);
        }
 
+       public number clone_ptr() {
+               number ret = bindings.ChannelMonitorUpdate_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public ChannelMonitorUpdate clone() {
                number ret = bindings.ChannelMonitorUpdate_clone(this.ptr);
                const ret_hu_conv: ChannelMonitorUpdate = new ChannelMonitorUpdate(null, ret);
index 758d809bf41da02d13ab8d3e9171d20d4af481da..18fd76973a5f4f8f8c58cba5be86adee34d55e46 100644 (file)
@@ -24,7 +24,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_funding_pubkey(Uint8Array val) {
-               bindings.ChannelPublicKeys_set_funding_pubkey(this.ptr, val);
+               bindings.ChannelPublicKeys_set_funding_pubkey(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        public Uint8Array get_revocation_basepoint() {
@@ -33,7 +33,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_revocation_basepoint(Uint8Array val) {
-               bindings.ChannelPublicKeys_set_revocation_basepoint(this.ptr, val);
+               bindings.ChannelPublicKeys_set_revocation_basepoint(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        public Uint8Array get_payment_point() {
@@ -42,7 +42,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_payment_point(Uint8Array val) {
-               bindings.ChannelPublicKeys_set_payment_point(this.ptr, val);
+               bindings.ChannelPublicKeys_set_payment_point(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        public Uint8Array get_delayed_payment_basepoint() {
@@ -51,7 +51,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_delayed_payment_basepoint(Uint8Array val) {
-               bindings.ChannelPublicKeys_set_delayed_payment_basepoint(this.ptr, val);
+               bindings.ChannelPublicKeys_set_delayed_payment_basepoint(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        public Uint8Array get_htlc_basepoint() {
@@ -60,16 +60,21 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_htlc_basepoint(Uint8Array val) {
-               bindings.ChannelPublicKeys_set_htlc_basepoint(this.ptr, val);
+               bindings.ChannelPublicKeys_set_htlc_basepoint(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        public static ChannelPublicKeys constructor_new(Uint8Array funding_pubkey_arg, Uint8Array revocation_basepoint_arg, Uint8Array payment_point_arg, Uint8Array delayed_payment_basepoint_arg, Uint8Array htlc_basepoint_arg) {
-               number ret = bindings.ChannelPublicKeys_new(funding_pubkey_arg, revocation_basepoint_arg, payment_point_arg, delayed_payment_basepoint_arg, htlc_basepoint_arg);
+               number ret = bindings.ChannelPublicKeys_new(InternalUtils.check_arr_len(funding_pubkey_arg, 33), InternalUtils.check_arr_len(revocation_basepoint_arg, 33), InternalUtils.check_arr_len(payment_point_arg, 33), InternalUtils.check_arr_len(delayed_payment_basepoint_arg, 33), InternalUtils.check_arr_len(htlc_basepoint_arg, 33));
                const ret_hu_conv: ChannelPublicKeys = new ChannelPublicKeys(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.ChannelPublicKeys_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public ChannelPublicKeys clone() {
                number ret = bindings.ChannelPublicKeys_clone(this.ptr);
                const ret_hu_conv: ChannelPublicKeys = new ChannelPublicKeys(null, ret);
index 0be4b49dc82ccda0e51e6ed8860bf735258f7128..c39a2ec601001f436229c9c39a9c56d10bcb4c5e 100644 (file)
@@ -24,7 +24,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_channel_id(Uint8Array val) {
-               bindings.ChannelReestablish_set_channel_id(this.ptr, val);
+               bindings.ChannelReestablish_set_channel_id(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        public number get_next_local_commitment_number() {
@@ -45,6 +45,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                bindings.ChannelReestablish_set_next_remote_commitment_number(this.ptr, val);
        }
 
+       public number clone_ptr() {
+               number ret = bindings.ChannelReestablish_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public ChannelReestablish clone() {
                number ret = bindings.ChannelReestablish_clone(this.ptr);
                const ret_hu_conv: ChannelReestablish = new ChannelReestablish(null, ret);
index 31525ff7a5a3c499b75f481866c46fefc651fef3..7efbc0cf914b6c9aab402ef6bc92c8580156ee54 100644 (file)
@@ -76,6 +76,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.ChannelTransactionParameters_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public ChannelTransactionParameters clone() {
                number ret = bindings.ChannelTransactionParameters_clone(this.ptr);
                const ret_hu_conv: ChannelTransactionParameters = new ChannelTransactionParameters(null, ret);
index a7a09748fdfe2abde4f46c74b107ccb63be94833..c59b6116b45d0fc9fbb8d4bebb3e73105fca1199 100644 (file)
@@ -24,7 +24,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_signature(Uint8Array val) {
-               bindings.ChannelUpdate_set_signature(this.ptr, val);
+               bindings.ChannelUpdate_set_signature(this.ptr, InternalUtils.check_arr_len(val, 64));
        }
 
        public UnsignedChannelUpdate get_contents() {
@@ -39,12 +39,17 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public static ChannelUpdate constructor_new(Uint8Array signature_arg, UnsignedChannelUpdate contents_arg) {
-               number ret = bindings.ChannelUpdate_new(signature_arg, contents_arg == null ? 0 : contents_arg.ptr & ~1);
+               number ret = bindings.ChannelUpdate_new(InternalUtils.check_arr_len(signature_arg, 64), contents_arg == null ? 0 : contents_arg.ptr & ~1);
                const ret_hu_conv: ChannelUpdate = new ChannelUpdate(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.ChannelUpdate_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public ChannelUpdate clone() {
                number ret = bindings.ChannelUpdate_clone(this.ptr);
                const ret_hu_conv: ChannelUpdate = new ChannelUpdate(null, ret);
index 8be14a855041897056ec89f329e7a8d99c233fc2..c9cd256422a3bedeeff57ca3838adbab9ce7d302 100644 (file)
@@ -24,7 +24,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_channel_id(Uint8Array val) {
-               bindings.ClosingSigned_set_channel_id(this.ptr, val);
+               bindings.ClosingSigned_set_channel_id(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        public number get_fee_satoshis() {
@@ -42,7 +42,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_signature(Uint8Array val) {
-               bindings.ClosingSigned_set_signature(this.ptr, val);
+               bindings.ClosingSigned_set_signature(this.ptr, InternalUtils.check_arr_len(val, 64));
        }
 
        public ClosingSignedFeeRange get_fee_range() {
@@ -57,12 +57,17 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public static ClosingSigned constructor_new(Uint8Array channel_id_arg, number fee_satoshis_arg, Uint8Array signature_arg, ClosingSignedFeeRange fee_range_arg) {
-               number ret = bindings.ClosingSigned_new(channel_id_arg, fee_satoshis_arg, signature_arg, fee_range_arg == null ? 0 : fee_range_arg.ptr & ~1);
+               number ret = bindings.ClosingSigned_new(InternalUtils.check_arr_len(channel_id_arg, 32), fee_satoshis_arg, InternalUtils.check_arr_len(signature_arg, 64), fee_range_arg == null ? 0 : fee_range_arg.ptr & ~1);
                const ret_hu_conv: ClosingSigned = new ClosingSigned(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.ClosingSigned_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public ClosingSigned clone() {
                number ret = bindings.ClosingSigned_clone(this.ptr);
                const ret_hu_conv: ClosingSigned = new ClosingSigned(null, ret);
index b3dc2bac708a82352861e8f6882707b00737a152..a34f9e391e59f86aad346211654bf860e4bb2a86 100644 (file)
@@ -43,6 +43,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.ClosingSignedFeeRange_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public ClosingSignedFeeRange clone() {
                number ret = bindings.ClosingSignedFeeRange_clone(this.ptr);
                const ret_hu_conv: ClosingSignedFeeRange = new ClosingSignedFeeRange(null, ret);
index 7757ea9c525d8cecfa6421e5a4237e4e19c62dd9..52f1bc7c3b24ce97e9dcd68ac124f4c68842decd 100644 (file)
@@ -18,6 +18,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                         bindings.ClosingTransaction_free(this.ptr);
                     }
                 }
+       public number clone_ptr() {
+               number ret = bindings.ClosingTransaction_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public ClosingTransaction clone() {
                number ret = bindings.ClosingTransaction_clone(this.ptr);
                const ret_hu_conv: ClosingTransaction = new ClosingTransaction(null, ret);
index bf2d6fc2db090b6a80703069ee7c15f89202e64d..b75406c7403db4a7e6dabb18d683d8f83988b782 100644 (file)
@@ -74,6 +74,11 @@ export class OutdatedChannelManager extends ClosureReason {
                super(null, ptr);
        }
 }
+       public number clone_ptr() {
+               number ret = bindings.ClosureReason_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public ClosureReason clone() {
                number ret = bindings.ClosureReason_clone(this.ptr);
                ClosureReason ret_hu_conv = ClosureReason.constr_from_ptr(ret);
index 0c99e819c20c70da84243ca6d84f0be36375a83a..59def698062f4707dd1bd373cd5f635240ce7735 100644 (file)
@@ -24,7 +24,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_channel_id(Uint8Array val) {
-               bindings.CommitmentSigned_set_channel_id(this.ptr, val);
+               bindings.CommitmentSigned_set_channel_id(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        public Uint8Array get_signature() {
@@ -33,20 +33,25 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_signature(Uint8Array val) {
-               bindings.CommitmentSigned_set_signature(this.ptr, val);
+               bindings.CommitmentSigned_set_signature(this.ptr, InternalUtils.check_arr_len(val, 64));
        }
 
        public void set_htlc_signatures(Uint8Array[] val) {
-               bindings.CommitmentSigned_set_htlc_signatures(this.ptr, val);
+               bindings.CommitmentSigned_set_htlc_signatures(this.ptr, val != null ? Arrays.stream(val).map(val_conv_12 -> InternalUtils.check_arr_len(val_conv_12, 64)).toArray(Uint8Array[]::new) : null);
        }
 
        public static CommitmentSigned constructor_new(Uint8Array channel_id_arg, Uint8Array signature_arg, Uint8Array[] htlc_signatures_arg) {
-               number ret = bindings.CommitmentSigned_new(channel_id_arg, signature_arg, htlc_signatures_arg);
+               number ret = bindings.CommitmentSigned_new(InternalUtils.check_arr_len(channel_id_arg, 32), InternalUtils.check_arr_len(signature_arg, 64), htlc_signatures_arg != null ? Arrays.stream(htlc_signatures_arg).map(htlc_signatures_arg_conv_12 -> InternalUtils.check_arr_len(htlc_signatures_arg_conv_12, 64)).toArray(Uint8Array[]::new) : null);
                const ret_hu_conv: CommitmentSigned = new CommitmentSigned(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.CommitmentSigned_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public CommitmentSigned clone() {
                number ret = bindings.CommitmentSigned_clone(this.ptr);
                const ret_hu_conv: CommitmentSigned = new CommitmentSigned(null, ret);
index 97c85a9f858d269c18042b7b32dece1e321ae344..2a1a96fc10d3521f46a728e7cac93827c83e97c4 100644 (file)
@@ -18,6 +18,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                         bindings.CommitmentTransaction_free(this.ptr);
                     }
                 }
+       public number clone_ptr() {
+               number ret = bindings.CommitmentTransaction_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public CommitmentTransaction clone() {
                number ret = bindings.CommitmentTransaction_clone(this.ptr);
                const ret_hu_conv: CommitmentTransaction = new CommitmentTransaction(null, ret);
index 8fa5923504d2484bf4d55b6ee5f983c1e2c23e4f..0c7e3dbc1382c576a4c6b842ff8c43429efbe303 100644 (file)
@@ -111,6 +111,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.CommitmentUpdate_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public CommitmentUpdate clone() {
                number ret = bindings.CommitmentUpdate_clone(this.ptr);
                const ret_hu_conv: CommitmentUpdate = new CommitmentUpdate(null, ret);
index f3b6b27dcd0a3027fdc014c9697f1004757739c1..c991e83cc6a81defc799fb5a1eff264b770eb8ca 100644 (file)
@@ -53,7 +53,8 @@ import * as bindings from '../bindings' // TODO: figure out location
 
                                                get_relevant_txids (): Uint8Array[] {
                                                        Uint8Array[] ret = arg.get_relevant_txids();
-                               return ret;
+                               result: Uint8Array[] = ret != null ? Arrays.stream(ret).map(ret_conv_12 -> InternalUtils.check_arr_len(ret_conv_12, 32)).toArray(Uint8Array[]::new) : null;
+                               return result;
                                                },
 
                                                
@@ -74,15 +75,15 @@ import * as bindings from '../bindings' // TODO: figure out location
                 held: Confirm;
             }
        public void transactions_confirmed(Uint8Array header, TwoTuple_usizeTransactionZ[] txdata, number height) {
-               bindings.Confirm_transactions_confirmed(this.ptr, header, txdata != null ? Arrays.stream(txdata).map(txdata_conv_28 -> txdata_conv_28 != null ? txdata_conv_28.ptr : 0).toArray(number[]::new) : null, height);
+               bindings.Confirm_transactions_confirmed(this.ptr, InternalUtils.check_arr_len(header, 80), txdata != null ? Arrays.stream(txdata).map(txdata_conv_28 -> txdata_conv_28 != null ? txdata_conv_28.ptr : 0).toArray(number[]::new) : null, height);
        }
 
        public void transaction_unconfirmed(Uint8Array txid) {
-               bindings.Confirm_transaction_unconfirmed(this.ptr, txid);
+               bindings.Confirm_transaction_unconfirmed(this.ptr, InternalUtils.check_arr_len(txid, 32));
        }
 
        public void best_block_updated(Uint8Array header, number height) {
-               bindings.Confirm_best_block_updated(this.ptr, header, height);
+               bindings.Confirm_best_block_updated(this.ptr, InternalUtils.check_arr_len(header, 80), height);
        }
 
        public Uint8Array[] get_relevant_txids() {
index dba2820b745cf2b69d4dfef7fb5cb7733949fdd5..140dfb350892b0dc79cce93a46c311d5e319c67b 100644 (file)
@@ -45,6 +45,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.CounterpartyChannelTransactionParameters_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public CounterpartyChannelTransactionParameters clone() {
                number ret = bindings.CounterpartyChannelTransactionParameters_clone(this.ptr);
                const ret_hu_conv: CounterpartyChannelTransactionParameters = new CounterpartyChannelTransactionParameters(null, ret);
index ec452c4c30af680065c63c6bbad8ee60879a06c5..8b8db2081f722d59a8a5feef66423d76d6b09a24 100644 (file)
@@ -52,6 +52,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.CounterpartyForwardingInfo_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public CounterpartyForwardingInfo clone() {
                number ret = bindings.CounterpartyForwardingInfo_clone(this.ptr);
                const ret_hu_conv: CounterpartyForwardingInfo = new CounterpartyForwardingInfo(null, ret);
index 49c3f96c3544b5fc2b4629870492057fc675a5ba..0791013ba796c504b4868e52ded6ea2f3c36b9fc 100644 (file)
@@ -37,13 +37,13 @@ import * as bindings from '../bindings' // TODO: figure out location
                                                        Type ret_hu_conv = new Type(null, msg);
                                ret_hu_conv.ptrs_to.add(this);
                                                        Result_NoneLightningErrorZ ret = arg.handle_custom_message(ret_hu_conv, sender_node_id);
-                               result: number = ret != null ? ret.ptr : 0;
+                               result: number = ret == null ? 0 : ret.clone_ptr();
                                return result;
                                                },
 
                                                get_and_clear_pending_msg (): number[] {
                                                        TwoTuple_PublicKeyTypeZ[] ret = arg.get_and_clear_pending_msg();
-                               result: number[] = ret != null ? Arrays.stream(ret).map(ret_conv_25 -> ret_conv_25 != null ? ret_conv_25.ptr : 0).toArray(number[]::new) : null;
+                               result: number[] = ret != null ? Arrays.stream(ret).map(ret_conv_25 -> ret_conv_25 == null ? 0 : ret_conv_25.clone_ptr()).toArray(number[]::new) : null;
                                return result;
                                                },
 
@@ -63,7 +63,7 @@ import * as bindings from '../bindings' // TODO: figure out location
                 held: CustomMessageHandler;
             }
        public Result_NoneLightningErrorZ handle_custom_message(Type msg, Uint8Array sender_node_id) {
-               number ret = bindings.CustomMessageHandler_handle_custom_message(this.ptr, msg == null ? 0 : msg.ptr, sender_node_id);
+               number ret = bindings.CustomMessageHandler_handle_custom_message(this.ptr, msg == null ? 0 : msg.ptr, InternalUtils.check_arr_len(sender_node_id, 33));
                Result_NoneLightningErrorZ ret_hu_conv = Result_NoneLightningErrorZ.constr_from_ptr(ret);
                this.ptrs_to.add(msg);
                return ret_hu_conv;
index e8fb7247f5efdd09b59652db05602f6f64bcf543..6d57c77e8da577bf9d9e69e4e7d2ab527b11cd4f 100644 (file)
@@ -34,7 +34,7 @@ import * as bindings from '../bindings' // TODO: figure out location
                         // todo: in-line interface filling
                         read (message_type: number, buffer: Uint8Array): number {
                                                        Result_COption_TypeZDecodeErrorZ ret = arg.read(message_type, buffer);
-                               result: number = ret != null ? ret.ptr : 0;
+                               result: number = ret == null ? 0 : ret.clone_ptr();
                                return result;
                                                },
 
index 4f9bd46a084424fc1d1f784d542147c342075b4c..35fc4caa8edc3b70feb0d39c447318082b477761 100644 (file)
@@ -24,7 +24,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_your_last_per_commitment_secret(Uint8Array val) {
-               bindings.DataLossProtect_set_your_last_per_commitment_secret(this.ptr, val);
+               bindings.DataLossProtect_set_your_last_per_commitment_secret(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        public Uint8Array get_my_current_per_commitment_point() {
@@ -33,16 +33,21 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_my_current_per_commitment_point(Uint8Array val) {
-               bindings.DataLossProtect_set_my_current_per_commitment_point(this.ptr, val);
+               bindings.DataLossProtect_set_my_current_per_commitment_point(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        public static DataLossProtect constructor_new(Uint8Array your_last_per_commitment_secret_arg, Uint8Array my_current_per_commitment_point_arg) {
-               number ret = bindings.DataLossProtect_new(your_last_per_commitment_secret_arg, my_current_per_commitment_point_arg);
+               number ret = bindings.DataLossProtect_new(InternalUtils.check_arr_len(your_last_per_commitment_secret_arg, 32), InternalUtils.check_arr_len(my_current_per_commitment_point_arg, 33));
                const ret_hu_conv: DataLossProtect = new DataLossProtect(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.DataLossProtect_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public DataLossProtect clone() {
                number ret = bindings.DataLossProtect_clone(this.ptr);
                const ret_hu_conv: DataLossProtect = new DataLossProtect(null, ret);
index 750447a81a56214117621b58bd538122eb05d75d..caffcab4de73fb7eb6dda62633110c51bbf53378 100644 (file)
@@ -18,6 +18,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                         bindings.DecodeError_free(this.ptr);
                     }
                 }
+       public number clone_ptr() {
+               number ret = bindings.DecodeError_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public DecodeError clone() {
                number ret = bindings.DecodeError_clone(this.ptr);
                const ret_hu_conv: DecodeError = new DecodeError(null, ret);
index b89922e8b54a9725d18cce1e09b31d0dd3363f07..669ad3d0d9f4c92fee8c3bf06bfa34f7fd4d9ced 100644 (file)
@@ -35,7 +35,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_per_commitment_point(Uint8Array val) {
-               bindings.DelayedPaymentOutputDescriptor_set_per_commitment_point(this.ptr, val);
+               bindings.DelayedPaymentOutputDescriptor_set_per_commitment_point(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        public number get_to_self_delay() {
@@ -57,7 +57,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_revocation_pubkey(Uint8Array val) {
-               bindings.DelayedPaymentOutputDescriptor_set_revocation_pubkey(this.ptr, val);
+               bindings.DelayedPaymentOutputDescriptor_set_revocation_pubkey(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        public Uint8Array get_channel_keys_id() {
@@ -66,7 +66,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_channel_keys_id(Uint8Array val) {
-               bindings.DelayedPaymentOutputDescriptor_set_channel_keys_id(this.ptr, val);
+               bindings.DelayedPaymentOutputDescriptor_set_channel_keys_id(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        public number get_channel_value_satoshis() {
@@ -79,12 +79,17 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public static DelayedPaymentOutputDescriptor constructor_new(OutPoint outpoint_arg, Uint8Array per_commitment_point_arg, number to_self_delay_arg, TxOut output_arg, Uint8Array revocation_pubkey_arg, Uint8Array channel_keys_id_arg, number channel_value_satoshis_arg) {
-               number ret = bindings.DelayedPaymentOutputDescriptor_new(outpoint_arg == null ? 0 : outpoint_arg.ptr & ~1, per_commitment_point_arg, to_self_delay_arg, output_arg.ptr, revocation_pubkey_arg, channel_keys_id_arg, channel_value_satoshis_arg);
+               number ret = bindings.DelayedPaymentOutputDescriptor_new(outpoint_arg == null ? 0 : outpoint_arg.ptr & ~1, InternalUtils.check_arr_len(per_commitment_point_arg, 33), to_self_delay_arg, output_arg.ptr, InternalUtils.check_arr_len(revocation_pubkey_arg, 33), InternalUtils.check_arr_len(channel_keys_id_arg, 32), channel_value_satoshis_arg);
                const ret_hu_conv: DelayedPaymentOutputDescriptor = new DelayedPaymentOutputDescriptor(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.DelayedPaymentOutputDescriptor_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public DelayedPaymentOutputDescriptor clone() {
                number ret = bindings.DelayedPaymentOutputDescriptor_clone(this.ptr);
                const ret_hu_conv: DelayedPaymentOutputDescriptor = new DelayedPaymentOutputDescriptor(null, ret);
index db55f33b712765ba3be4edb718035dadb47e3400..3fcb336d4f2e76073d858770816134da1ceedd32 100644 (file)
@@ -18,6 +18,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                         bindings.Description_free(this.ptr);
                     }
                 }
+       public number clone_ptr() {
+               number ret = bindings.Description_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Description clone() {
                number ret = bindings.Description_clone(this.ptr);
                const ret_hu_conv: Description = new Description(null, ret);
index f0148649c0bbb5b5d1d160e9825dd25f551acf3a..d76b77f5ae7e2ad9ae03cf6bfc60c3e83dc74079 100644 (file)
@@ -94,6 +94,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.DirectionalChannelInfo_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public DirectionalChannelInfo clone() {
                number ret = bindings.DirectionalChannelInfo_clone(this.ptr);
                const ret_hu_conv: DirectionalChannelInfo = new DirectionalChannelInfo(null, ret);
index a2f28ba8b5355db9cdef0426eaa4bc4ef6255651..ff12a1ded092d7a55610e74d05695a207b875270 100644 (file)
@@ -58,6 +58,11 @@ export class SendErrorMessage extends ErrorAction {
                this.msg = msg_hu_conv;
        }
 }
+       public number clone_ptr() {
+               number ret = bindings.ErrorAction_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public ErrorAction clone() {
                number ret = bindings.ErrorAction_clone(this.ptr);
                ErrorAction ret_hu_conv = ErrorAction.constr_from_ptr(ret);
index e85c775b8a935db4aafb6ef8fb093743b64ae87f..755f7122be06a3bb54172169946078c7841ab89f 100644 (file)
@@ -24,7 +24,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_channel_id(Uint8Array val) {
-               bindings.ErrorMessage_set_channel_id(this.ptr, val);
+               bindings.ErrorMessage_set_channel_id(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        public String get_data() {
@@ -37,12 +37,17 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public static ErrorMessage constructor_new(Uint8Array channel_id_arg, String data_arg) {
-               number ret = bindings.ErrorMessage_new(channel_id_arg, data_arg);
+               number ret = bindings.ErrorMessage_new(InternalUtils.check_arr_len(channel_id_arg, 32), data_arg);
                const ret_hu_conv: ErrorMessage = new ErrorMessage(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.ErrorMessage_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public ErrorMessage clone() {
                number ret = bindings.ErrorMessage_clone(this.ptr);
                const ret_hu_conv: ErrorMessage = new ErrorMessage(null, ret);
index 36a548c89d7e5d287e7cdeb29202b92fa35c632e..022a0b5cb0fdc7ca2b647ecf758c5258942982f4 100644 (file)
@@ -179,6 +179,11 @@ export class DiscardFunding extends Event {
                this.transaction = obj.transaction;
        }
 }
+       public number clone_ptr() {
+               number ret = bindings.Event_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Event clone() {
                number ret = bindings.Event_clone(this.ptr);
                Event ret_hu_conv = Event.constr_from_ptr(ret);
@@ -187,28 +192,28 @@ export class DiscardFunding extends Event {
        }
 
        public static Event constructor_funding_generation_ready(Uint8Array temporary_channel_id, number channel_value_satoshis, Uint8Array output_script, number user_channel_id) {
-               number ret = bindings.Event_funding_generation_ready(temporary_channel_id, channel_value_satoshis, output_script, user_channel_id);
+               number ret = bindings.Event_funding_generation_ready(InternalUtils.check_arr_len(temporary_channel_id, 32), channel_value_satoshis, output_script, user_channel_id);
                Event ret_hu_conv = Event.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
        public static Event constructor_payment_received(Uint8Array payment_hash, number amt, PaymentPurpose purpose) {
-               number ret = bindings.Event_payment_received(payment_hash, amt, purpose.ptr);
+               number ret = bindings.Event_payment_received(InternalUtils.check_arr_len(payment_hash, 32), amt, purpose.ptr);
                Event ret_hu_conv = Event.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
        public static Event constructor_payment_sent(Uint8Array payment_id, Uint8Array payment_preimage, Uint8Array payment_hash, Option_u64Z fee_paid_msat) {
-               number ret = bindings.Event_payment_sent(payment_id, payment_preimage, payment_hash, fee_paid_msat.ptr);
+               number ret = bindings.Event_payment_sent(InternalUtils.check_arr_len(payment_id, 32), InternalUtils.check_arr_len(payment_preimage, 32), InternalUtils.check_arr_len(payment_hash, 32), fee_paid_msat.ptr);
                Event ret_hu_conv = Event.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
        public static Event constructor_payment_path_failed(Uint8Array payment_id, Uint8Array payment_hash, boolean rejected_by_dest, Option_NetworkUpdateZ network_update, boolean all_paths_failed, RouteHop[] path, Option_u64Z short_channel_id, RouteParameters retry) {
-               number ret = bindings.Event_payment_path_failed(payment_id, payment_hash, rejected_by_dest, network_update.ptr, all_paths_failed, path != null ? Arrays.stream(path).map(path_conv_10 -> path_conv_10 == null ? 0 : path_conv_10.ptr & ~1).toArray(number[]::new) : null, short_channel_id.ptr, retry == null ? 0 : retry.ptr & ~1);
+               number ret = bindings.Event_payment_path_failed(InternalUtils.check_arr_len(payment_id, 32), InternalUtils.check_arr_len(payment_hash, 32), rejected_by_dest, network_update.ptr, all_paths_failed, path != null ? Arrays.stream(path).map(path_conv_10 -> path_conv_10 == null ? 0 : path_conv_10.ptr & ~1).toArray(number[]::new) : null, short_channel_id.ptr, retry == null ? 0 : retry.ptr & ~1);
                Event ret_hu_conv = Event.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
@@ -236,14 +241,14 @@ export class DiscardFunding extends Event {
        }
 
        public static Event constructor_channel_closed(Uint8Array channel_id, number user_channel_id, ClosureReason reason) {
-               number ret = bindings.Event_channel_closed(channel_id, user_channel_id, reason.ptr);
+               number ret = bindings.Event_channel_closed(InternalUtils.check_arr_len(channel_id, 32), user_channel_id, reason.ptr);
                Event ret_hu_conv = Event.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
        public static Event constructor_discard_funding(Uint8Array channel_id, Uint8Array transaction) {
-               number ret = bindings.Event_discard_funding(channel_id, transaction);
+               number ret = bindings.Event_discard_funding(InternalUtils.check_arr_len(channel_id, 32), transaction);
                Event ret_hu_conv = Event.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
index 90390158f9154e3c385f429febb3ea4eeb627c7d..47b3210745ea0f51f5d52969fa5e49b7dc3f2f7f 100644 (file)
@@ -18,6 +18,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                         bindings.ExpiryTime_free(this.ptr);
                     }
                 }
+       public number clone_ptr() {
+               number ret = bindings.ExpiryTime_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public ExpiryTime clone() {
                number ret = bindings.ExpiryTime_clone(this.ptr);
                const ret_hu_conv: ExpiryTime = new ExpiryTime(null, ret);
index 046b1440a0bd51c7916e37d4d103c0587b49d3dd..31845b130593b4e8cd6cd38bda90678cecd593a8 100644 (file)
@@ -48,6 +48,11 @@ export class ScriptHash extends Fallback {
                this.script_hash = obj.script_hash;
        }
 }
+       public number clone_ptr() {
+               number ret = bindings.Fallback_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Fallback clone() {
                number ret = bindings.Fallback_clone(this.ptr);
                Fallback ret_hu_conv = Fallback.constr_from_ptr(ret);
@@ -63,14 +68,14 @@ export class ScriptHash extends Fallback {
        }
 
        public static Fallback constructor_pub_key_hash(Uint8Array a) {
-               number ret = bindings.Fallback_pub_key_hash(a);
+               number ret = bindings.Fallback_pub_key_hash(InternalUtils.check_arr_len(a, 20));
                Fallback ret_hu_conv = Fallback.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
        public static Fallback constructor_script_hash(Uint8Array a) {
-               number ret = bindings.Fallback_script_hash(a);
+               number ret = bindings.Fallback_script_hash(InternalUtils.check_arr_len(a, 20));
                Fallback ret_hu_conv = Fallback.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
index ca6e7b2e9c03f8170eac1f2ff6990dfec6e214dc..140d9500a36d3da86a87f4c4cea64b2e4a80e142 100644 (file)
@@ -40,7 +40,7 @@ import * as bindings from '../bindings' // TODO: figure out location
                                                        const output_hu_conv: WatchedOutput = new WatchedOutput(null, output);
                                output_hu_conv.ptrs_to.add(this);
                                                        Option_C2Tuple_usizeTransactionZZ ret = arg.register_output(output_hu_conv);
-                               result: number = ret.ptr;
+                               result: number = ret == null ? 0 : ret.clone_ptr();
                                return result;
                                                },
 
@@ -60,7 +60,7 @@ import * as bindings from '../bindings' // TODO: figure out location
                 held: Filter;
             }
        public void register_tx(Uint8Array txid, Uint8Array script_pubkey) {
-               bindings.Filter_register_tx(this.ptr, txid, script_pubkey);
+               bindings.Filter_register_tx(this.ptr, InternalUtils.check_arr_len(txid, 32), script_pubkey);
        }
 
        public Option_C2Tuple_usizeTransactionZZ register_output(WatchedOutput output) {
index a04f078135553e9ac28d51e7a767f90df36b63d3..6dd59364f81dc75242c06536e0c381b78fed966b 100644 (file)
@@ -24,7 +24,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_temporary_channel_id(Uint8Array val) {
-               bindings.FundingCreated_set_temporary_channel_id(this.ptr, val);
+               bindings.FundingCreated_set_temporary_channel_id(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        public Uint8Array get_funding_txid() {
@@ -33,7 +33,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_funding_txid(Uint8Array val) {
-               bindings.FundingCreated_set_funding_txid(this.ptr, val);
+               bindings.FundingCreated_set_funding_txid(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        public number get_funding_output_index() {
@@ -51,16 +51,21 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_signature(Uint8Array val) {
-               bindings.FundingCreated_set_signature(this.ptr, val);
+               bindings.FundingCreated_set_signature(this.ptr, InternalUtils.check_arr_len(val, 64));
        }
 
        public static FundingCreated constructor_new(Uint8Array temporary_channel_id_arg, Uint8Array funding_txid_arg, number funding_output_index_arg, Uint8Array signature_arg) {
-               number ret = bindings.FundingCreated_new(temporary_channel_id_arg, funding_txid_arg, funding_output_index_arg, signature_arg);
+               number ret = bindings.FundingCreated_new(InternalUtils.check_arr_len(temporary_channel_id_arg, 32), InternalUtils.check_arr_len(funding_txid_arg, 32), funding_output_index_arg, InternalUtils.check_arr_len(signature_arg, 64));
                const ret_hu_conv: FundingCreated = new FundingCreated(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.FundingCreated_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public FundingCreated clone() {
                number ret = bindings.FundingCreated_clone(this.ptr);
                const ret_hu_conv: FundingCreated = new FundingCreated(null, ret);
index e03acf3e3dff529d69fa34b31ee4e25e1f6219c8..e620101239100cb8e657ab1d87acc2b9545ddd0b 100644 (file)
@@ -24,7 +24,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_channel_id(Uint8Array val) {
-               bindings.FundingLocked_set_channel_id(this.ptr, val);
+               bindings.FundingLocked_set_channel_id(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        public Uint8Array get_next_per_commitment_point() {
@@ -33,16 +33,21 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_next_per_commitment_point(Uint8Array val) {
-               bindings.FundingLocked_set_next_per_commitment_point(this.ptr, val);
+               bindings.FundingLocked_set_next_per_commitment_point(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        public static FundingLocked constructor_new(Uint8Array channel_id_arg, Uint8Array next_per_commitment_point_arg) {
-               number ret = bindings.FundingLocked_new(channel_id_arg, next_per_commitment_point_arg);
+               number ret = bindings.FundingLocked_new(InternalUtils.check_arr_len(channel_id_arg, 32), InternalUtils.check_arr_len(next_per_commitment_point_arg, 33));
                const ret_hu_conv: FundingLocked = new FundingLocked(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.FundingLocked_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public FundingLocked clone() {
                number ret = bindings.FundingLocked_clone(this.ptr);
                const ret_hu_conv: FundingLocked = new FundingLocked(null, ret);
index a0271f1a7a70c90be695b51ed288ae9b681c069e..f9380e7f306df21aa092887b43505c169ae73ad1 100644 (file)
@@ -24,7 +24,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_channel_id(Uint8Array val) {
-               bindings.FundingSigned_set_channel_id(this.ptr, val);
+               bindings.FundingSigned_set_channel_id(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        public Uint8Array get_signature() {
@@ -33,16 +33,21 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_signature(Uint8Array val) {
-               bindings.FundingSigned_set_signature(this.ptr, val);
+               bindings.FundingSigned_set_signature(this.ptr, InternalUtils.check_arr_len(val, 64));
        }
 
        public static FundingSigned constructor_new(Uint8Array channel_id_arg, Uint8Array signature_arg) {
-               number ret = bindings.FundingSigned_new(channel_id_arg, signature_arg);
+               number ret = bindings.FundingSigned_new(InternalUtils.check_arr_len(channel_id_arg, 32), InternalUtils.check_arr_len(signature_arg, 64));
                const ret_hu_conv: FundingSigned = new FundingSigned(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.FundingSigned_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public FundingSigned clone() {
                number ret = bindings.FundingSigned_clone(this.ptr);
                const ret_hu_conv: FundingSigned = new FundingSigned(null, ret);
index 8ef06f40e6ade8da97ce68d939e3eb61cb15921a..2d1e9aec6d403e36a5610574008440a2fbce1354 100644 (file)
@@ -24,7 +24,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_chain_hash(Uint8Array val) {
-               bindings.GossipTimestampFilter_set_chain_hash(this.ptr, val);
+               bindings.GossipTimestampFilter_set_chain_hash(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        public number get_first_timestamp() {
@@ -46,12 +46,17 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public static GossipTimestampFilter constructor_new(Uint8Array chain_hash_arg, number first_timestamp_arg, number timestamp_range_arg) {
-               number ret = bindings.GossipTimestampFilter_new(chain_hash_arg, first_timestamp_arg, timestamp_range_arg);
+               number ret = bindings.GossipTimestampFilter_new(InternalUtils.check_arr_len(chain_hash_arg, 32), first_timestamp_arg, timestamp_range_arg);
                const ret_hu_conv: GossipTimestampFilter = new GossipTimestampFilter(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.GossipTimestampFilter_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public GossipTimestampFilter clone() {
                number ret = bindings.GossipTimestampFilter_clone(this.ptr);
                const ret_hu_conv: GossipTimestampFilter = new GossipTimestampFilter(null, ret);
index 2f0e42b11c722970c961b7a5d39ad2da8bbf6d7d..3b93a6a7b18948d67db31385ad50496974d84c23 100644 (file)
@@ -51,7 +51,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_payment_hash(Uint8Array val) {
-               bindings.HTLCOutputInCommitment_set_payment_hash(this.ptr, val);
+               bindings.HTLCOutputInCommitment_set_payment_hash(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        public Option_u32Z get_transaction_output_index() {
@@ -66,12 +66,17 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public static HTLCOutputInCommitment constructor_new(boolean offered_arg, number amount_msat_arg, number cltv_expiry_arg, Uint8Array payment_hash_arg, Option_u32Z transaction_output_index_arg) {
-               number ret = bindings.HTLCOutputInCommitment_new(offered_arg, amount_msat_arg, cltv_expiry_arg, payment_hash_arg, transaction_output_index_arg.ptr);
+               number ret = bindings.HTLCOutputInCommitment_new(offered_arg, amount_msat_arg, cltv_expiry_arg, InternalUtils.check_arr_len(payment_hash_arg, 32), transaction_output_index_arg.ptr);
                const ret_hu_conv: HTLCOutputInCommitment = new HTLCOutputInCommitment(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.HTLCOutputInCommitment_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public HTLCOutputInCommitment clone() {
                number ret = bindings.HTLCOutputInCommitment_clone(this.ptr);
                const ret_hu_conv: HTLCOutputInCommitment = new HTLCOutputInCommitment(null, ret);
index 3eaef5532f1a26052442c082f54cff93ddcd4ca3..23f9d9a3d9509e19e19fc6e5f5cccbfeabba67b5 100644 (file)
@@ -18,6 +18,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                         bindings.HTLCUpdate_free(this.ptr);
                     }
                 }
+       public number clone_ptr() {
+               number ret = bindings.HTLCUpdate_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public HTLCUpdate clone() {
                number ret = bindings.HTLCUpdate_clone(this.ptr);
                const ret_hu_conv: HTLCUpdate = new HTLCUpdate(null, ret);
index 1a071a701c79c798c1d484caa3f59c202b7f0bcc..1ece40cfabff7cc98325a264dc7e316a919c8bac 100644 (file)
@@ -24,11 +24,16 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_counterparty_sig(Uint8Array val) {
-               bindings.HolderCommitmentTransaction_set_counterparty_sig(this.ptr, val);
+               bindings.HolderCommitmentTransaction_set_counterparty_sig(this.ptr, InternalUtils.check_arr_len(val, 64));
        }
 
        public void set_counterparty_htlc_sigs(Uint8Array[] val) {
-               bindings.HolderCommitmentTransaction_set_counterparty_htlc_sigs(this.ptr, val);
+               bindings.HolderCommitmentTransaction_set_counterparty_htlc_sigs(this.ptr, val != null ? Arrays.stream(val).map(val_conv_12 -> InternalUtils.check_arr_len(val_conv_12, 64)).toArray(Uint8Array[]::new) : null);
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.HolderCommitmentTransaction_clone_ptr(this.ptr);
+               return ret;
        }
 
        public HolderCommitmentTransaction clone() {
@@ -50,7 +55,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public static HolderCommitmentTransaction constructor_new(CommitmentTransaction commitment_tx, Uint8Array counterparty_sig, Uint8Array[] counterparty_htlc_sigs, Uint8Array holder_funding_key, Uint8Array counterparty_funding_key) {
-               number ret = bindings.HolderCommitmentTransaction_new(commitment_tx == null ? 0 : commitment_tx.ptr & ~1, counterparty_sig, counterparty_htlc_sigs, holder_funding_key, counterparty_funding_key);
+               number ret = bindings.HolderCommitmentTransaction_new(commitment_tx == null ? 0 : commitment_tx.ptr & ~1, InternalUtils.check_arr_len(counterparty_sig, 64), counterparty_htlc_sigs != null ? Arrays.stream(counterparty_htlc_sigs).map(counterparty_htlc_sigs_conv_12 -> InternalUtils.check_arr_len(counterparty_htlc_sigs_conv_12, 64)).toArray(Uint8Array[]::new) : null, InternalUtils.check_arr_len(holder_funding_key, 33), InternalUtils.check_arr_len(counterparty_funding_key, 33));
                const ret_hu_conv: HolderCommitmentTransaction = new HolderCommitmentTransaction(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
index 7df31aa9eda97a792cc632c59392d83a9125197a..767957f2eac5d46112c646068dabe6ea52c08e9c 100644 (file)
@@ -24,7 +24,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_funding_key(Uint8Array val) {
-               bindings.InMemorySigner_set_funding_key(this.ptr, val);
+               bindings.InMemorySigner_set_funding_key(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        public Uint8Array get_revocation_base_key() {
@@ -33,7 +33,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_revocation_base_key(Uint8Array val) {
-               bindings.InMemorySigner_set_revocation_base_key(this.ptr, val);
+               bindings.InMemorySigner_set_revocation_base_key(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        public Uint8Array get_payment_key() {
@@ -42,7 +42,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_payment_key(Uint8Array val) {
-               bindings.InMemorySigner_set_payment_key(this.ptr, val);
+               bindings.InMemorySigner_set_payment_key(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        public Uint8Array get_delayed_payment_base_key() {
@@ -51,7 +51,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_delayed_payment_base_key(Uint8Array val) {
-               bindings.InMemorySigner_set_delayed_payment_base_key(this.ptr, val);
+               bindings.InMemorySigner_set_delayed_payment_base_key(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        public Uint8Array get_htlc_base_key() {
@@ -60,7 +60,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_htlc_base_key(Uint8Array val) {
-               bindings.InMemorySigner_set_htlc_base_key(this.ptr, val);
+               bindings.InMemorySigner_set_htlc_base_key(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        public Uint8Array get_commitment_seed() {
@@ -69,7 +69,12 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_commitment_seed(Uint8Array val) {
-               bindings.InMemorySigner_set_commitment_seed(this.ptr, val);
+               bindings.InMemorySigner_set_commitment_seed(this.ptr, InternalUtils.check_arr_len(val, 32));
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.InMemorySigner_clone_ptr(this.ptr);
+               return ret;
        }
 
        public InMemorySigner clone() {
@@ -80,7 +85,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public static InMemorySigner constructor_new(Uint8Array funding_key, Uint8Array revocation_base_key, Uint8Array payment_key, Uint8Array delayed_payment_base_key, Uint8Array htlc_base_key, Uint8Array commitment_seed, number channel_value_satoshis, Uint8Array channel_keys_id) {
-               number ret = bindings.InMemorySigner_new(funding_key, revocation_base_key, payment_key, delayed_payment_base_key, htlc_base_key, commitment_seed, channel_value_satoshis, channel_keys_id);
+               number ret = bindings.InMemorySigner_new(InternalUtils.check_arr_len(funding_key, 32), InternalUtils.check_arr_len(revocation_base_key, 32), InternalUtils.check_arr_len(payment_key, 32), InternalUtils.check_arr_len(delayed_payment_base_key, 32), InternalUtils.check_arr_len(htlc_base_key, 32), InternalUtils.check_arr_len(commitment_seed, 32), channel_value_satoshis, InternalUtils.check_arr_len(channel_keys_id, 32));
                const ret_hu_conv: InMemorySigner = new InMemorySigner(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
index 9b127bfcb42705bf2c47a7ebef6e5f0c37e18e3e..94cd5d87e5a4e1ad6838d6bd1b2752cc6654de99 100644 (file)
@@ -36,6 +36,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.Init_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Init clone() {
                number ret = bindings.Init_clone(this.ptr);
                const ret_hu_conv: Init = new Init(null, ret);
index 4f18b363874afc4c2456ca0956d20ce2a6f04c16..387c4a3023f3458ac02fd24ff8315a11ee2ee0af 100644 (file)
@@ -24,6 +24,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                return ret;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.InitFeatures_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public InitFeatures clone() {
                number ret = bindings.InitFeatures_clone(this.ptr);
                const ret_hu_conv: InitFeatures = new InitFeatures(null, ret);
index 57d7b9072a8c315325731299738f9c7771d68f4c..0f5a990f31a17ebfac98a5a42cbdced1d2b01990 100644 (file)
@@ -34,6 +34,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.InvalidShutdownScript_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public InvalidShutdownScript clone() {
                number ret = bindings.InvalidShutdownScript_clone(this.ptr);
                const ret_hu_conv: InvalidShutdownScript = new InvalidShutdownScript(null, ret);
index d5fa849d28b9e38b1b2dad04eb87ba3ae6deb90c..aa559f5aac86b32d2fc40e8d1f8833c0d4f2d008 100644 (file)
@@ -24,6 +24,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                return ret;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.Invoice_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Invoice clone() {
                number ret = bindings.Invoice_clone(this.ptr);
                const ret_hu_conv: Invoice = new Invoice(null, ret);
index e68a62c1e37acd5a0f74f3b8aef0cda91d7cf726..109957b1841cee1d5b34b842c47f62a6593b11f7 100644 (file)
@@ -24,6 +24,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                return ret;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.InvoiceFeatures_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public InvoiceFeatures clone() {
                number ret = bindings.InvoiceFeatures_clone(this.ptr);
                const ret_hu_conv: InvoiceFeatures = new InvoiceFeatures(null, ret);
index f76849f86dd56d0ecd2966710f1df931ec31963b..fcccc6c8ecaa68a9ac8bb0496812d5d0ef97f4bb 100644 (file)
@@ -45,7 +45,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void remove_cached_payment(Uint8Array payment_hash) {
-               bindings.InvoicePayer_remove_cached_payment(this.ptr, payment_hash);
+               bindings.InvoicePayer_remove_cached_payment(this.ptr, InternalUtils.check_arr_len(payment_hash, 32));
        }
 
        public EventHandler as_EventHandler() {
index f533e27dfe58b4f2814e5b80ae31ab4d6c15bc90..55643a493aa820346110379287a5984b16ef0c3a 100644 (file)
@@ -18,6 +18,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                         bindings.InvoiceSignature_free(this.ptr);
                     }
                 }
+       public number clone_ptr() {
+               number ret = bindings.InvoiceSignature_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public InvoiceSignature clone() {
                number ret = bindings.InvoiceSignature_clone(this.ptr);
                const ret_hu_conv: InvoiceSignature = new InvoiceSignature(null, ret);
index 7f48672c537653a1dc94d330f947129c0332b7a8..46543e46aee58fa82a6aa638430ab057f6bbdfa6 100644 (file)
@@ -34,7 +34,8 @@ import * as bindings from '../bindings' // TODO: figure out location
                         // todo: in-line interface filling
                         get_node_secret (): Uint8Array {
                                                        Uint8Array ret = arg.get_node_secret();
-                               return ret;
+                               result: Uint8Array = InternalUtils.check_arr_len(ret, 32);
+                               return result;
                                                },
 
                                                get_destination_script (): Uint8Array {
@@ -44,31 +45,32 @@ import * as bindings from '../bindings' // TODO: figure out location
 
                                                get_shutdown_scriptpubkey (): number {
                                                        ShutdownScript ret = arg.get_shutdown_scriptpubkey();
-                               result: number = ret == null ? 0 : ret.ptr & ~1;
+                               result: number = ret == null ? 0 : ret.clone_ptr();
                                return result;
                                                },
 
                                                get_channel_signer (inbound: boolean, channel_value_satoshis: number): number {
                                                        Sign ret = arg.get_channel_signer(inbound, channel_value_satoshis);
-                               result: number = ret == null ? 0 : ret.ptr;
+                               result: number = ret == null ? 0 : ret.clone_ptr();
                                impl_holder.held.ptrs_to.add(ret);
                                return result;
                                                },
 
                                                get_secure_random_bytes (): Uint8Array {
                                                        Uint8Array ret = arg.get_secure_random_bytes();
-                               return ret;
+                               result: Uint8Array = InternalUtils.check_arr_len(ret, 32);
+                               return result;
                                                },
 
                                                read_chan_signer (reader: Uint8Array): number {
                                                        Result_SignDecodeErrorZ ret = arg.read_chan_signer(reader);
-                               result: number = ret != null ? ret.ptr : 0;
+                               result: number = ret == null ? 0 : ret.clone_ptr();
                                return result;
                                                },
 
                                                sign_invoice (invoice_preimage: Uint8Array): number {
                                                        Result_RecoverableSignatureNoneZ ret = arg.sign_invoice(invoice_preimage);
-                               result: number = ret != null ? ret.ptr : 0;
+                               result: number = ret == null ? 0 : ret.clone_ptr();
                                return result;
                                                },
 
index 96626d24f45a9988b4dbed37f2be1dec602f94a0..75ab015f85a1e18012593166867dba2848fbbf6a 100644 (file)
@@ -19,14 +19,14 @@ import * as bindings from '../bindings' // TODO: figure out location
                     }
                 }
        public static KeysManager constructor_new(Uint8Array seed, number starting_time_secs, number starting_time_nanos) {
-               number ret = bindings.KeysManager_new(seed, starting_time_secs, starting_time_nanos);
+               number ret = bindings.KeysManager_new(InternalUtils.check_arr_len(seed, 32), starting_time_secs, starting_time_nanos);
                const ret_hu_conv: KeysManager = new KeysManager(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
        public InMemorySigner derive_channel_keys(number channel_value_satoshis, Uint8Array params) {
-               number ret = bindings.KeysManager_derive_channel_keys(this.ptr, channel_value_satoshis, params);
+               number ret = bindings.KeysManager_derive_channel_keys(this.ptr, channel_value_satoshis, InternalUtils.check_arr_len(params, 32));
                const ret_hu_conv: InMemorySigner = new InMemorySigner(null, ret);
                ret_hu_conv.ptrs_to.add(this);
                return ret_hu_conv;
index 02b894ca0e20f8c985cbd30b9c85c25236be55a0..3cdedcccfcd34446abeccca80af620aa3ef60a9d 100644 (file)
@@ -45,6 +45,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.LightningError_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public LightningError clone() {
                number ret = bindings.LightningError_clone(this.ptr);
                const ret_hu_conv: LightningError = new LightningError(null, ret);
index 9e6ad6f9ad593e27f4b93470e2d5f5d1278f9851..15154c4f6b187ec8adbc827ed2bc2608de3adacb 100644 (file)
@@ -60,7 +60,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void block_disconnected(Uint8Array header, number height) {
-               bindings.Listen_block_disconnected(this.ptr, header, height);
+               bindings.Listen_block_disconnected(this.ptr, InternalUtils.check_arr_len(header, 80), height);
        }
 
 }
index e70ca9bceea59028f901ceb9bc53139dd6690cb7..ffe8b3a5394431a13548e6110bfd2d08f1d009a3 100644 (file)
@@ -32,8 +32,9 @@ import * as bindings from '../bindings' // TODO: figure out location
                     const impl_holder: LDKLoggerHolder = new LDKLoggerHolder();
                     let structImplementation = <bindings.LDKLogger>{
                         // todo: in-line interface filling
-                        log (record: String): void {
-                                                       arg.log(record);
+                        log (record: number): void {
+                                                       const record_hu_conv: Record = new Record(null, record);
+                                                       arg.log(record_hu_conv);
                                                },
 
                                                
@@ -43,7 +44,7 @@ import * as bindings from '../bindings' // TODO: figure out location
             }
 
             export interface LoggerInterface {
-                log(record: String): void;
+                log(record: Record): void;
                                
             }
 
index 682d5556a5ab423c4ca3fea38f0810131dff4175..c02e9e37e2246cb172698a7a7874d8a654772e6e 100644 (file)
@@ -298,6 +298,11 @@ export class SendReplyChannelRange extends MessageSendEvent {
                this.msg = msg_hu_conv;
        }
 }
+       public number clone_ptr() {
+               number ret = bindings.MessageSendEvent_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public MessageSendEvent clone() {
                number ret = bindings.MessageSendEvent_clone(this.ptr);
                MessageSendEvent ret_hu_conv = MessageSendEvent.constr_from_ptr(ret);
@@ -306,77 +311,77 @@ export class SendReplyChannelRange extends MessageSendEvent {
        }
 
        public static MessageSendEvent constructor_send_accept_channel(Uint8Array node_id, AcceptChannel msg) {
-               number ret = bindings.MessageSendEvent_send_accept_channel(node_id, msg == null ? 0 : msg.ptr & ~1);
+               number ret = bindings.MessageSendEvent_send_accept_channel(InternalUtils.check_arr_len(node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                MessageSendEvent ret_hu_conv = MessageSendEvent.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
        public static MessageSendEvent constructor_send_open_channel(Uint8Array node_id, OpenChannel msg) {
-               number ret = bindings.MessageSendEvent_send_open_channel(node_id, msg == null ? 0 : msg.ptr & ~1);
+               number ret = bindings.MessageSendEvent_send_open_channel(InternalUtils.check_arr_len(node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                MessageSendEvent ret_hu_conv = MessageSendEvent.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
        public static MessageSendEvent constructor_send_funding_created(Uint8Array node_id, FundingCreated msg) {
-               number ret = bindings.MessageSendEvent_send_funding_created(node_id, msg == null ? 0 : msg.ptr & ~1);
+               number ret = bindings.MessageSendEvent_send_funding_created(InternalUtils.check_arr_len(node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                MessageSendEvent ret_hu_conv = MessageSendEvent.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
        public static MessageSendEvent constructor_send_funding_signed(Uint8Array node_id, FundingSigned msg) {
-               number ret = bindings.MessageSendEvent_send_funding_signed(node_id, msg == null ? 0 : msg.ptr & ~1);
+               number ret = bindings.MessageSendEvent_send_funding_signed(InternalUtils.check_arr_len(node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                MessageSendEvent ret_hu_conv = MessageSendEvent.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
        public static MessageSendEvent constructor_send_funding_locked(Uint8Array node_id, FundingLocked msg) {
-               number ret = bindings.MessageSendEvent_send_funding_locked(node_id, msg == null ? 0 : msg.ptr & ~1);
+               number ret = bindings.MessageSendEvent_send_funding_locked(InternalUtils.check_arr_len(node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                MessageSendEvent ret_hu_conv = MessageSendEvent.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
        public static MessageSendEvent constructor_send_announcement_signatures(Uint8Array node_id, AnnouncementSignatures msg) {
-               number ret = bindings.MessageSendEvent_send_announcement_signatures(node_id, msg == null ? 0 : msg.ptr & ~1);
+               number ret = bindings.MessageSendEvent_send_announcement_signatures(InternalUtils.check_arr_len(node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                MessageSendEvent ret_hu_conv = MessageSendEvent.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
        public static MessageSendEvent constructor_update_htlcs(Uint8Array node_id, CommitmentUpdate updates) {
-               number ret = bindings.MessageSendEvent_update_htlcs(node_id, updates == null ? 0 : updates.ptr & ~1);
+               number ret = bindings.MessageSendEvent_update_htlcs(InternalUtils.check_arr_len(node_id, 33), updates == null ? 0 : updates.ptr & ~1);
                MessageSendEvent ret_hu_conv = MessageSendEvent.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
        public static MessageSendEvent constructor_send_revoke_and_ack(Uint8Array node_id, RevokeAndACK msg) {
-               number ret = bindings.MessageSendEvent_send_revoke_and_ack(node_id, msg == null ? 0 : msg.ptr & ~1);
+               number ret = bindings.MessageSendEvent_send_revoke_and_ack(InternalUtils.check_arr_len(node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                MessageSendEvent ret_hu_conv = MessageSendEvent.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
        public static MessageSendEvent constructor_send_closing_signed(Uint8Array node_id, ClosingSigned msg) {
-               number ret = bindings.MessageSendEvent_send_closing_signed(node_id, msg == null ? 0 : msg.ptr & ~1);
+               number ret = bindings.MessageSendEvent_send_closing_signed(InternalUtils.check_arr_len(node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                MessageSendEvent ret_hu_conv = MessageSendEvent.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
        public static MessageSendEvent constructor_send_shutdown(Uint8Array node_id, Shutdown msg) {
-               number ret = bindings.MessageSendEvent_send_shutdown(node_id, msg == null ? 0 : msg.ptr & ~1);
+               number ret = bindings.MessageSendEvent_send_shutdown(InternalUtils.check_arr_len(node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                MessageSendEvent ret_hu_conv = MessageSendEvent.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
        public static MessageSendEvent constructor_send_channel_reestablish(Uint8Array node_id, ChannelReestablish msg) {
-               number ret = bindings.MessageSendEvent_send_channel_reestablish(node_id, msg == null ? 0 : msg.ptr & ~1);
+               number ret = bindings.MessageSendEvent_send_channel_reestablish(InternalUtils.check_arr_len(node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                MessageSendEvent ret_hu_conv = MessageSendEvent.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
@@ -404,35 +409,35 @@ export class SendReplyChannelRange extends MessageSendEvent {
        }
 
        public static MessageSendEvent constructor_send_channel_update(Uint8Array node_id, ChannelUpdate msg) {
-               number ret = bindings.MessageSendEvent_send_channel_update(node_id, msg == null ? 0 : msg.ptr & ~1);
+               number ret = bindings.MessageSendEvent_send_channel_update(InternalUtils.check_arr_len(node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                MessageSendEvent ret_hu_conv = MessageSendEvent.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
        public static MessageSendEvent constructor_handle_error(Uint8Array node_id, ErrorAction action) {
-               number ret = bindings.MessageSendEvent_handle_error(node_id, action.ptr);
+               number ret = bindings.MessageSendEvent_handle_error(InternalUtils.check_arr_len(node_id, 33), action.ptr);
                MessageSendEvent ret_hu_conv = MessageSendEvent.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
        public static MessageSendEvent constructor_send_channel_range_query(Uint8Array node_id, QueryChannelRange msg) {
-               number ret = bindings.MessageSendEvent_send_channel_range_query(node_id, msg == null ? 0 : msg.ptr & ~1);
+               number ret = bindings.MessageSendEvent_send_channel_range_query(InternalUtils.check_arr_len(node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                MessageSendEvent ret_hu_conv = MessageSendEvent.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
        public static MessageSendEvent constructor_send_short_ids_query(Uint8Array node_id, QueryShortChannelIds msg) {
-               number ret = bindings.MessageSendEvent_send_short_ids_query(node_id, msg == null ? 0 : msg.ptr & ~1);
+               number ret = bindings.MessageSendEvent_send_short_ids_query(InternalUtils.check_arr_len(node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                MessageSendEvent ret_hu_conv = MessageSendEvent.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
        public static MessageSendEvent constructor_send_reply_channel_range(Uint8Array node_id, ReplyChannelRange msg) {
-               number ret = bindings.MessageSendEvent_send_reply_channel_range(node_id, msg == null ? 0 : msg.ptr & ~1);
+               number ret = bindings.MessageSendEvent_send_reply_channel_range(InternalUtils.check_arr_len(node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                MessageSendEvent ret_hu_conv = MessageSendEvent.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
index fb52212af9ad210a67341b26f3e10a1e04cafae0..d4cb29a32d587aaee16bd07a704bb32640f4a504 100644 (file)
@@ -34,7 +34,7 @@ import * as bindings from '../bindings' // TODO: figure out location
                         // todo: in-line interface filling
                         get_and_clear_pending_msg_events (): number[] {
                                                        MessageSendEvent[] ret = arg.get_and_clear_pending_msg_events();
-                               result: number[] = ret != null ? Arrays.stream(ret).map(ret_conv_18 -> ret_conv_18.ptr).toArray(number[]::new) : null;
+                               result: number[] = ret != null ? Arrays.stream(ret).map(ret_conv_18 -> ret_conv_18 == null ? 0 : ret_conv_18.clone_ptr()).toArray(number[]::new) : null;
                                return result;
                                                },
 
index 28511146d6967f1a666271f6931eb3684d8af2d6..709b1788dea3e9e919237d041476aaf5f86c0050 100644 (file)
@@ -34,6 +34,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.MinFinalCltvExpiry_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public MinFinalCltvExpiry clone() {
                number ret = bindings.MinFinalCltvExpiry_clone(this.ptr);
                const ret_hu_conv: MinFinalCltvExpiry = new MinFinalCltvExpiry(null, ret);
index 121b502547e2c3160a98474bea3baa5779da9d62..40899fe85e2a13ed8f09682d6d0cce1392b75686 100644 (file)
@@ -68,6 +68,11 @@ export class UpdateFailed extends MonitorEvent {
                this.update_failed = update_failed_hu_conv;
        }
 }
+       public number clone_ptr() {
+               number ret = bindings.MonitorEvent_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public MonitorEvent clone() {
                number ret = bindings.MonitorEvent_clone(this.ptr);
                MonitorEvent ret_hu_conv = MonitorEvent.constr_from_ptr(ret);
index d76621adcee4037930de791347a9ce6e52979fce..662021c1acd2a851242d40925fbb0c21be455f95 100644 (file)
@@ -34,6 +34,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.MonitorUpdateError_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public MonitorUpdateError clone() {
                number ret = bindings.MonitorUpdateError_clone(this.ptr);
                const ret_hu_conv: MonitorUpdateError = new MonitorUpdateError(null, ret);
index 9a792befe53dbbfb89794d92b4bd60cbe9293c27..d9e6d3e553c670ad4cc3ec387336292d9284c518 100644 (file)
@@ -18,6 +18,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                         bindings.MonitorUpdateId_free(this.ptr);
                     }
                 }
+       public number clone_ptr() {
+               number ret = bindings.MonitorUpdateId_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public MonitorUpdateId clone() {
                number ret = bindings.MonitorUpdateId_clone(this.ptr);
                const ret_hu_conv: MonitorUpdateId = new MonitorUpdateId(null, ret);
index 0c93f092731777c077962a208073c7dd5cc0b64b..2910201adc8213475e89a9cfd404fb73f48bbb8a 100644 (file)
@@ -66,6 +66,11 @@ export class OnionV3 extends NetAddress {
                this.port = obj.port;
        }
 }
+       public number clone_ptr() {
+               number ret = bindings.NetAddress_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public NetAddress clone() {
                number ret = bindings.NetAddress_clone(this.ptr);
                NetAddress ret_hu_conv = NetAddress.constr_from_ptr(ret);
@@ -74,28 +79,28 @@ export class OnionV3 extends NetAddress {
        }
 
        public static NetAddress constructor_ipv4(Uint8Array addr, number port) {
-               number ret = bindings.NetAddress_ipv4(addr, port);
+               number ret = bindings.NetAddress_ipv4(InternalUtils.check_arr_len(addr, 4), port);
                NetAddress ret_hu_conv = NetAddress.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
        public static NetAddress constructor_ipv6(Uint8Array addr, number port) {
-               number ret = bindings.NetAddress_ipv6(addr, port);
+               number ret = bindings.NetAddress_ipv6(InternalUtils.check_arr_len(addr, 16), port);
                NetAddress ret_hu_conv = NetAddress.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
        public static NetAddress constructor_onion_v2(Uint8Array addr, number port) {
-               number ret = bindings.NetAddress_onion_v2(addr, port);
+               number ret = bindings.NetAddress_onion_v2(InternalUtils.check_arr_len(addr, 10), port);
                NetAddress ret_hu_conv = NetAddress.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
        public static NetAddress constructor_onion_v3(Uint8Array ed25519_pubkey, number checksum, number version, number port) {
-               number ret = bindings.NetAddress_onion_v3(ed25519_pubkey, checksum, version, port);
+               number ret = bindings.NetAddress_onion_v3(InternalUtils.check_arr_len(ed25519_pubkey, 32), checksum, version, port);
                NetAddress ret_hu_conv = NetAddress.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
index b4dbb87bed84b646eb13e70b1e40d22f958c6ef5..ee9659a8418be48e54006d5b3d11b803d8a52c7c 100644 (file)
@@ -30,12 +30,14 @@ import * as bindings from '../bindings' // TODO: figure out location
                const ret_hu_conv: NetGraphMsgHandler = new NetGraphMsgHandler(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                ret_hu_conv.ptrs_to.add(network_graph);
+               ret_hu_conv.ptrs_to.add(chain_access);
                ret_hu_conv.ptrs_to.add(logger);
                return ret_hu_conv;
        }
 
        public void add_chain_access(Option_AccessZ chain_access) {
                bindings.NetGraphMsgHandler_add_chain_access(this.ptr, chain_access.ptr);
+               this.ptrs_to.add(chain_access);
        }
 
        public RoutingMessageHandler as_RoutingMessageHandler() {
index 2d96e4c0a2614ecfcfd259941af6106f87020fe8..e2c2a6f807772dda39a8810c9768852004a62221 100644 (file)
@@ -18,6 +18,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                         bindings.NetworkGraph_free(this.ptr);
                     }
                 }
+       public number clone_ptr() {
+               number ret = bindings.NetworkGraph_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public NetworkGraph clone() {
                number ret = bindings.NetworkGraph_clone(this.ptr);
                const ret_hu_conv: NetworkGraph = new NetworkGraph(null, ret);
@@ -37,7 +42,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public static NetworkGraph constructor_new(Uint8Array genesis_hash) {
-               number ret = bindings.NetworkGraph_new(genesis_hash);
+               number ret = bindings.NetworkGraph_new(InternalUtils.check_arr_len(genesis_hash, 32));
                const ret_hu_conv: NetworkGraph = new NetworkGraph(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
@@ -68,6 +73,7 @@ import * as bindings from '../bindings' // TODO: figure out location
                number ret = bindings.NetworkGraph_update_channel_from_announcement(this.ptr, msg == null ? 0 : msg.ptr & ~1, chain_access.ptr);
                Result_NoneLightningErrorZ ret_hu_conv = Result_NoneLightningErrorZ.constr_from_ptr(ret);
                this.ptrs_to.add(msg);
+               this.ptrs_to.add(chain_access);
                return ret_hu_conv;
        }
 
@@ -75,6 +81,7 @@ import * as bindings from '../bindings' // TODO: figure out location
                number ret = bindings.NetworkGraph_update_channel_from_unsigned_announcement(this.ptr, msg == null ? 0 : msg.ptr & ~1, chain_access.ptr);
                Result_NoneLightningErrorZ ret_hu_conv = Result_NoneLightningErrorZ.constr_from_ptr(ret);
                this.ptrs_to.add(msg);
+               this.ptrs_to.add(chain_access);
                return ret_hu_conv;
        }
 
@@ -83,7 +90,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void fail_node(Uint8Array _node_id, boolean is_permanent) {
-               bindings.NetworkGraph_fail_node(this.ptr, _node_id, is_permanent);
+               bindings.NetworkGraph_fail_node(this.ptr, InternalUtils.check_arr_len(_node_id, 33), is_permanent);
        }
 
        public Result_NoneLightningErrorZ update_channel(ChannelUpdate msg) {
index 97f9af233dd12d54dbefe4c0e90775cf8f1d19f5..758e222501f7093b7613aecc22411a8349ac94bd 100644 (file)
@@ -51,6 +51,11 @@ export class NodeFailure extends NetworkUpdate {
                this.is_permanent = obj.is_permanent;
        }
 }
+       public number clone_ptr() {
+               number ret = bindings.NetworkUpdate_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public NetworkUpdate clone() {
                number ret = bindings.NetworkUpdate_clone(this.ptr);
                NetworkUpdate ret_hu_conv = NetworkUpdate.constr_from_ptr(ret);
@@ -73,7 +78,7 @@ export class NodeFailure extends NetworkUpdate {
        }
 
        public static NetworkUpdate constructor_node_failure(Uint8Array node_id, boolean is_permanent) {
-               number ret = bindings.NetworkUpdate_node_failure(node_id, is_permanent);
+               number ret = bindings.NetworkUpdate_node_failure(InternalUtils.check_arr_len(node_id, 33), is_permanent);
                NetworkUpdate ret_hu_conv = NetworkUpdate.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
index cef5ecdbe4eab77f47128cd891673594ca208ef7..e3087cd1550d8bdcfb4a097596285ffb78ecfce6 100644 (file)
@@ -24,7 +24,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_signature(Uint8Array val) {
-               bindings.NodeAnnouncement_set_signature(this.ptr, val);
+               bindings.NodeAnnouncement_set_signature(this.ptr, InternalUtils.check_arr_len(val, 64));
        }
 
        public UnsignedNodeAnnouncement get_contents() {
@@ -39,12 +39,17 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public static NodeAnnouncement constructor_new(Uint8Array signature_arg, UnsignedNodeAnnouncement contents_arg) {
-               number ret = bindings.NodeAnnouncement_new(signature_arg, contents_arg == null ? 0 : contents_arg.ptr & ~1);
+               number ret = bindings.NodeAnnouncement_new(InternalUtils.check_arr_len(signature_arg, 64), contents_arg == null ? 0 : contents_arg.ptr & ~1);
                const ret_hu_conv: NodeAnnouncement = new NodeAnnouncement(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.NodeAnnouncement_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public NodeAnnouncement clone() {
                number ret = bindings.NodeAnnouncement_clone(this.ptr);
                const ret_hu_conv: NodeAnnouncement = new NodeAnnouncement(null, ret);
index cd2e6d24d340246c8332d4ed052fa9f38c57d74e..a5cd22864ec0e2c74c8df72e7dc80ae39fadb040 100644 (file)
@@ -44,7 +44,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_rgb(Uint8Array val) {
-               bindings.NodeAnnouncementInfo_set_rgb(this.ptr, val);
+               bindings.NodeAnnouncementInfo_set_rgb(this.ptr, InternalUtils.check_arr_len(val, 3));
        }
 
        public Uint8Array get_alias() {
@@ -53,7 +53,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_alias(Uint8Array val) {
-               bindings.NodeAnnouncementInfo_set_alias(this.ptr, val);
+               bindings.NodeAnnouncementInfo_set_alias(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        public void set_addresses(NetAddress[] val) {
@@ -72,12 +72,17 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public static NodeAnnouncementInfo constructor_new(NodeFeatures features_arg, number last_update_arg, Uint8Array rgb_arg, Uint8Array alias_arg, NetAddress[] addresses_arg, NodeAnnouncement announcement_message_arg) {
-               number ret = bindings.NodeAnnouncementInfo_new(features_arg == null ? 0 : features_arg.ptr & ~1, last_update_arg, rgb_arg, alias_arg, addresses_arg != null ? Arrays.stream(addresses_arg).map(addresses_arg_conv_12 -> addresses_arg_conv_12.ptr).toArray(number[]::new) : null, announcement_message_arg == null ? 0 : announcement_message_arg.ptr & ~1);
+               number ret = bindings.NodeAnnouncementInfo_new(features_arg == null ? 0 : features_arg.ptr & ~1, last_update_arg, InternalUtils.check_arr_len(rgb_arg, 3), InternalUtils.check_arr_len(alias_arg, 32), addresses_arg != null ? Arrays.stream(addresses_arg).map(addresses_arg_conv_12 -> addresses_arg_conv_12.ptr).toArray(number[]::new) : null, announcement_message_arg == null ? 0 : announcement_message_arg.ptr & ~1);
                const ret_hu_conv: NodeAnnouncementInfo = new NodeAnnouncementInfo(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.NodeAnnouncementInfo_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public NodeAnnouncementInfo clone() {
                number ret = bindings.NodeAnnouncementInfo_clone(this.ptr);
                const ret_hu_conv: NodeAnnouncementInfo = new NodeAnnouncementInfo(null, ret);
index d65e11e3f445eac9e5a34117eb60a940f1421d60..96f6e286ac9b39357dd8a7d561f305c2322d1f6a 100644 (file)
@@ -24,6 +24,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                return ret;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.NodeFeatures_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public NodeFeatures clone() {
                number ret = bindings.NodeFeatures_clone(this.ptr);
                const ret_hu_conv: NodeFeatures = new NodeFeatures(null, ret);
index c08e56322c916fa4cdb362dee89a1b173d6a3259..9f288e0accc09edc6efe30496cd3f8778392f7e6 100644 (file)
@@ -18,6 +18,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                         bindings.NodeId_free(this.ptr);
                     }
                 }
+       public number clone_ptr() {
+               number ret = bindings.NodeId_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public NodeId clone() {
                number ret = bindings.NodeId_clone(this.ptr);
                const ret_hu_conv: NodeId = new NodeId(null, ret);
@@ -26,7 +31,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public static NodeId constructor_from_pubkey(Uint8Array pubkey) {
-               number ret = bindings.NodeId_from_pubkey(pubkey);
+               number ret = bindings.NodeId_from_pubkey(InternalUtils.check_arr_len(pubkey, 33));
                const ret_hu_conv: NodeId = new NodeId(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
index 810dbcd7d175216530093b6ac34f33a8c0578af4..da17e0630f00fe0f91cef0a665d729ddcd2d882c 100644 (file)
@@ -51,6 +51,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.NodeInfo_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public NodeInfo clone() {
                number ret = bindings.NodeInfo_clone(this.ptr);
                const ret_hu_conv: NodeInfo = new NodeInfo(null, ret);
index cbdaf307b0e85c2c02c24d32b72e494e4cc26f03..6a62b83621b3b599ab9d1f3e47a2447c266e875a 100644 (file)
@@ -24,7 +24,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_chain_hash(Uint8Array val) {
-               bindings.OpenChannel_set_chain_hash(this.ptr, val);
+               bindings.OpenChannel_set_chain_hash(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        public Uint8Array get_temporary_channel_id() {
@@ -33,7 +33,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_temporary_channel_id(Uint8Array val) {
-               bindings.OpenChannel_set_temporary_channel_id(this.ptr, val);
+               bindings.OpenChannel_set_temporary_channel_id(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        public number get_funding_satoshis() {
@@ -123,7 +123,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_funding_pubkey(Uint8Array val) {
-               bindings.OpenChannel_set_funding_pubkey(this.ptr, val);
+               bindings.OpenChannel_set_funding_pubkey(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        public Uint8Array get_revocation_basepoint() {
@@ -132,7 +132,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_revocation_basepoint(Uint8Array val) {
-               bindings.OpenChannel_set_revocation_basepoint(this.ptr, val);
+               bindings.OpenChannel_set_revocation_basepoint(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        public Uint8Array get_payment_point() {
@@ -141,7 +141,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_payment_point(Uint8Array val) {
-               bindings.OpenChannel_set_payment_point(this.ptr, val);
+               bindings.OpenChannel_set_payment_point(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        public Uint8Array get_delayed_payment_basepoint() {
@@ -150,7 +150,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_delayed_payment_basepoint(Uint8Array val) {
-               bindings.OpenChannel_set_delayed_payment_basepoint(this.ptr, val);
+               bindings.OpenChannel_set_delayed_payment_basepoint(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        public Uint8Array get_htlc_basepoint() {
@@ -159,7 +159,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_htlc_basepoint(Uint8Array val) {
-               bindings.OpenChannel_set_htlc_basepoint(this.ptr, val);
+               bindings.OpenChannel_set_htlc_basepoint(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        public Uint8Array get_first_per_commitment_point() {
@@ -168,7 +168,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_first_per_commitment_point(Uint8Array val) {
-               bindings.OpenChannel_set_first_per_commitment_point(this.ptr, val);
+               bindings.OpenChannel_set_first_per_commitment_point(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        public number get_channel_flags() {
@@ -180,6 +180,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                bindings.OpenChannel_set_channel_flags(this.ptr, val);
        }
 
+       public number clone_ptr() {
+               number ret = bindings.OpenChannel_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public OpenChannel clone() {
                number ret = bindings.OpenChannel_clone(this.ptr);
                const ret_hu_conv: OpenChannel = new OpenChannel(null, ret);
index d9de28ad5b2f992407825dea6f941aad2b3c813b..a3cb7413ea9d082d1695b5ec77b62ce5160b1751 100644 (file)
@@ -49,6 +49,11 @@ export class None extends COption_C2Tuple_usizeTransactionZZ {
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.COption_C2Tuple_usizeTransactionZZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Option_C2Tuple_usizeTransactionZZ clone() {
                number ret = bindings.COption_C2Tuple_usizeTransactionZZ_clone(this.ptr);
                Option_C2Tuple_usizeTransactionZZ ret_hu_conv = Option_C2Tuple_usizeTransactionZZ.constr_from_ptr(ret);
index 2a71cc8657517545bba9683b103ad72f13ac27ac..9cbac12c745d7007f4a0205db5b28b46e2a3d765 100644 (file)
@@ -54,6 +54,11 @@ export class None extends COption_CVec_NetAddressZZ {
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.COption_CVec_NetAddressZZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Option_CVec_NetAddressZZ clone() {
                number ret = bindings.COption_CVec_NetAddressZZ_clone(this.ptr);
                Option_CVec_NetAddressZZ ret_hu_conv = Option_CVec_NetAddressZZ.constr_from_ptr(ret);
diff --git a/ts/structs/Option_ClosureReasonZ.ts b/ts/structs/Option_ClosureReasonZ.ts
new file mode 100644 (file)
index 0000000..c77ca35
--- /dev/null
@@ -0,0 +1,64 @@
+
+import CommonBase from './CommonBase';
+import * as bindings from '../bindings' // TODO: figure out location
+
+export default class COption_ClosureReasonZ extends CommonBase {
+       protected constructor(_dummy: object, ptr: number) { super(ptr); }
+       protected finalize() {
+               super.finalize();
+               if (this.ptr != 0) { bindings.COption_ClosureReasonZ_free(this.ptr); }
+       }
+       static constr_from_ptr(ptr: number): COption_ClosureReasonZ {
+               const raw_val: bindings.LDKCOption_ClosureReasonZ = bindings.LDKCOption_ClosureReasonZ_ref_from_ptr(ptr);
+               if (raw_val instanceof bindings.LDKCOption_ClosureReasonZ.Some) {
+                       return new Some(this.ptr, raw_val);
+               }
+               if (raw_val instanceof bindings.LDKCOption_ClosureReasonZ.None) {
+                       return new None(this.ptr, raw_val);
+               }
+               throw new Error('oops, this should be unreachable'); // Unreachable without extending the (internal) bindings interface
+       }
+
+}
+export class Some extends COption_ClosureReasonZ {
+       public some: ClosureReason;
+       private constructor(ptr: number, obj: bindings.LDKCOption_ClosureReasonZ.Some) {
+               super(null, ptr);
+               const some: number = obj.some;
+               ClosureReason some_hu_conv = ClosureReason.constr_from_ptr(some);
+                       some_hu_conv.ptrs_to.add(this);
+               this.some = some_hu_conv;
+       }
+}
+export class None extends COption_ClosureReasonZ {
+       private constructor(ptr: number, obj: bindings.LDKCOption_ClosureReasonZ.None) {
+               super(null, ptr);
+       }
+}
+       public static Option_ClosureReasonZ constructor_some(ClosureReason o) {
+               number ret = bindings.COption_ClosureReasonZ_some(o.ptr);
+               Option_ClosureReasonZ ret_hu_conv = Option_ClosureReasonZ.constr_from_ptr(ret);
+               ret_hu_conv.ptrs_to.add(ret_hu_conv);
+               return ret_hu_conv;
+       }
+
+       public static Option_ClosureReasonZ constructor_none() {
+               number ret = bindings.COption_ClosureReasonZ_none();
+               Option_ClosureReasonZ ret_hu_conv = Option_ClosureReasonZ.constr_from_ptr(ret);
+               ret_hu_conv.ptrs_to.add(ret_hu_conv);
+               return ret_hu_conv;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.COption_ClosureReasonZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
+       public Option_ClosureReasonZ clone() {
+               number ret = bindings.COption_ClosureReasonZ_clone(this.ptr);
+               Option_ClosureReasonZ ret_hu_conv = Option_ClosureReasonZ.constr_from_ptr(ret);
+               ret_hu_conv.ptrs_to.add(this);
+               return ret_hu_conv;
+       }
+
+}
diff --git a/ts/structs/Option_EventZ.ts b/ts/structs/Option_EventZ.ts
new file mode 100644 (file)
index 0000000..a1a60c1
--- /dev/null
@@ -0,0 +1,64 @@
+
+import CommonBase from './CommonBase';
+import * as bindings from '../bindings' // TODO: figure out location
+
+export default class COption_EventZ extends CommonBase {
+       protected constructor(_dummy: object, ptr: number) { super(ptr); }
+       protected finalize() {
+               super.finalize();
+               if (this.ptr != 0) { bindings.COption_EventZ_free(this.ptr); }
+       }
+       static constr_from_ptr(ptr: number): COption_EventZ {
+               const raw_val: bindings.LDKCOption_EventZ = bindings.LDKCOption_EventZ_ref_from_ptr(ptr);
+               if (raw_val instanceof bindings.LDKCOption_EventZ.Some) {
+                       return new Some(this.ptr, raw_val);
+               }
+               if (raw_val instanceof bindings.LDKCOption_EventZ.None) {
+                       return new None(this.ptr, raw_val);
+               }
+               throw new Error('oops, this should be unreachable'); // Unreachable without extending the (internal) bindings interface
+       }
+
+}
+export class Some extends COption_EventZ {
+       public some: Event;
+       private constructor(ptr: number, obj: bindings.LDKCOption_EventZ.Some) {
+               super(null, ptr);
+               const some: number = obj.some;
+               Event some_hu_conv = Event.constr_from_ptr(some);
+                       some_hu_conv.ptrs_to.add(this);
+               this.some = some_hu_conv;
+       }
+}
+export class None extends COption_EventZ {
+       private constructor(ptr: number, obj: bindings.LDKCOption_EventZ.None) {
+               super(null, ptr);
+       }
+}
+       public static Option_EventZ constructor_some(Event o) {
+               number ret = bindings.COption_EventZ_some(o.ptr);
+               Option_EventZ ret_hu_conv = Option_EventZ.constr_from_ptr(ret);
+               ret_hu_conv.ptrs_to.add(ret_hu_conv);
+               return ret_hu_conv;
+       }
+
+       public static Option_EventZ constructor_none() {
+               number ret = bindings.COption_EventZ_none();
+               Option_EventZ ret_hu_conv = Option_EventZ.constr_from_ptr(ret);
+               ret_hu_conv.ptrs_to.add(ret_hu_conv);
+               return ret_hu_conv;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.COption_EventZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
+       public Option_EventZ clone() {
+               number ret = bindings.COption_EventZ_clone(this.ptr);
+               Option_EventZ ret_hu_conv = Option_EventZ.constr_from_ptr(ret);
+               ret_hu_conv.ptrs_to.add(this);
+               return ret_hu_conv;
+       }
+
+}
diff --git a/ts/structs/Option_MonitorEventZ.ts b/ts/structs/Option_MonitorEventZ.ts
new file mode 100644 (file)
index 0000000..143df5c
--- /dev/null
@@ -0,0 +1,64 @@
+
+import CommonBase from './CommonBase';
+import * as bindings from '../bindings' // TODO: figure out location
+
+export default class COption_MonitorEventZ extends CommonBase {
+       protected constructor(_dummy: object, ptr: number) { super(ptr); }
+       protected finalize() {
+               super.finalize();
+               if (this.ptr != 0) { bindings.COption_MonitorEventZ_free(this.ptr); }
+       }
+       static constr_from_ptr(ptr: number): COption_MonitorEventZ {
+               const raw_val: bindings.LDKCOption_MonitorEventZ = bindings.LDKCOption_MonitorEventZ_ref_from_ptr(ptr);
+               if (raw_val instanceof bindings.LDKCOption_MonitorEventZ.Some) {
+                       return new Some(this.ptr, raw_val);
+               }
+               if (raw_val instanceof bindings.LDKCOption_MonitorEventZ.None) {
+                       return new None(this.ptr, raw_val);
+               }
+               throw new Error('oops, this should be unreachable'); // Unreachable without extending the (internal) bindings interface
+       }
+
+}
+export class Some extends COption_MonitorEventZ {
+       public some: MonitorEvent;
+       private constructor(ptr: number, obj: bindings.LDKCOption_MonitorEventZ.Some) {
+               super(null, ptr);
+               const some: number = obj.some;
+               MonitorEvent some_hu_conv = MonitorEvent.constr_from_ptr(some);
+                       some_hu_conv.ptrs_to.add(this);
+               this.some = some_hu_conv;
+       }
+}
+export class None extends COption_MonitorEventZ {
+       private constructor(ptr: number, obj: bindings.LDKCOption_MonitorEventZ.None) {
+               super(null, ptr);
+       }
+}
+       public static Option_MonitorEventZ constructor_some(MonitorEvent o) {
+               number ret = bindings.COption_MonitorEventZ_some(o.ptr);
+               Option_MonitorEventZ ret_hu_conv = Option_MonitorEventZ.constr_from_ptr(ret);
+               ret_hu_conv.ptrs_to.add(ret_hu_conv);
+               return ret_hu_conv;
+       }
+
+       public static Option_MonitorEventZ constructor_none() {
+               number ret = bindings.COption_MonitorEventZ_none();
+               Option_MonitorEventZ ret_hu_conv = Option_MonitorEventZ.constr_from_ptr(ret);
+               ret_hu_conv.ptrs_to.add(ret_hu_conv);
+               return ret_hu_conv;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.COption_MonitorEventZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
+       public Option_MonitorEventZ clone() {
+               number ret = bindings.COption_MonitorEventZ_clone(this.ptr);
+               Option_MonitorEventZ ret_hu_conv = Option_MonitorEventZ.constr_from_ptr(ret);
+               ret_hu_conv.ptrs_to.add(this);
+               return ret_hu_conv;
+       }
+
+}
index 33af24de3d3a1f1078d9fa6c0994a08dfc318811..959f0c420ed52977949d044df46b2facf9cd4794 100644 (file)
@@ -49,6 +49,11 @@ export class None extends COption_NetworkUpdateZ {
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.COption_NetworkUpdateZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Option_NetworkUpdateZ clone() {
                number ret = bindings.COption_NetworkUpdateZ_clone(this.ptr);
                Option_NetworkUpdateZ ret_hu_conv = Option_NetworkUpdateZ.constr_from_ptr(ret);
index a9d05e95c2430b21e0ee1c60d361ebcbacac40cb..b6919288c4953cbcb7312e93760ff2421277c2d7 100644 (file)
@@ -50,6 +50,11 @@ export class None extends COption_TypeZ {
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.COption_TypeZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Option_TypeZ clone() {
                number ret = bindings.COption_TypeZ_clone(this.ptr);
                Option_TypeZ ret_hu_conv = Option_TypeZ.constr_from_ptr(ret);
index e2ccbc90e4ad2505a77ee1a22cabe2fc7ddc151c..0c7441d7da56b0f4dcbed96d1fbd92265011e8f2 100644 (file)
@@ -46,6 +46,11 @@ export class None extends COption_u16Z {
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.COption_u16Z_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Option_u16Z clone() {
                number ret = bindings.COption_u16Z_clone(this.ptr);
                Option_u16Z ret_hu_conv = Option_u16Z.constr_from_ptr(ret);
index 35daf1ff112cb5c12047e74368552e837942e978..a91f74c3dcc3d546e4ba299e71df9fc6a1f52704 100644 (file)
@@ -46,6 +46,11 @@ export class None extends COption_u32Z {
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.COption_u32Z_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Option_u32Z clone() {
                number ret = bindings.COption_u32Z_clone(this.ptr);
                Option_u32Z ret_hu_conv = Option_u32Z.constr_from_ptr(ret);
index 1e10d8f557ba71fd9eafc814f2b4e8f467d6e040..92aa678165b617a844ee11ea0fc7d38ceb6c5437 100644 (file)
@@ -46,6 +46,11 @@ export class None extends COption_u64Z {
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.COption_u64Z_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Option_u64Z clone() {
                number ret = bindings.COption_u64Z_clone(this.ptr);
                Option_u64Z ret_hu_conv = Option_u64Z.constr_from_ptr(ret);
index e2fedfc62f7db40dd615340334bed3f70fe089dc..29005226fc4f73c7a9d1e6650240528b45164c2c 100644 (file)
@@ -24,7 +24,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_txid(Uint8Array val) {
-               bindings.OutPoint_set_txid(this.ptr, val);
+               bindings.OutPoint_set_txid(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        public number get_index() {
@@ -37,12 +37,17 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public static OutPoint constructor_new(Uint8Array txid_arg, number index_arg) {
-               number ret = bindings.OutPoint_new(txid_arg, index_arg);
+               number ret = bindings.OutPoint_new(InternalUtils.check_arr_len(txid_arg, 32), index_arg);
                const ret_hu_conv: OutPoint = new OutPoint(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.OutPoint_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public OutPoint clone() {
                number ret = bindings.OutPoint_clone(this.ptr);
                const ret_hu_conv: OutPoint = new OutPoint(null, ret);
index 699bd71bd42f9e1aaca088c68a36ac8aabbc37d4..a981e13ecb47e6b2d3c0d8e7eac9e183d0b19253 100644 (file)
@@ -24,7 +24,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_pubkey(Uint8Array val) {
-               bindings.Payee_set_pubkey(this.ptr, val);
+               bindings.Payee_set_pubkey(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        public InvoiceFeatures get_features() {
@@ -66,12 +66,17 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public static Payee constructor_new(Uint8Array pubkey_arg, InvoiceFeatures features_arg, RouteHint[] route_hints_arg, Option_u64Z expiry_time_arg) {
-               number ret = bindings.Payee_new(pubkey_arg, features_arg == null ? 0 : features_arg.ptr & ~1, route_hints_arg != null ? Arrays.stream(route_hints_arg).map(route_hints_arg_conv_11 -> route_hints_arg_conv_11 == null ? 0 : route_hints_arg_conv_11.ptr & ~1).toArray(number[]::new) : null, expiry_time_arg.ptr);
+               number ret = bindings.Payee_new(InternalUtils.check_arr_len(pubkey_arg, 33), features_arg == null ? 0 : features_arg.ptr & ~1, route_hints_arg != null ? Arrays.stream(route_hints_arg).map(route_hints_arg_conv_11 -> route_hints_arg_conv_11 == null ? 0 : route_hints_arg_conv_11.ptr & ~1).toArray(number[]::new) : null, expiry_time_arg.ptr);
                const ret_hu_conv: Payee = new Payee(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.Payee_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Payee clone() {
                number ret = bindings.Payee_clone(this.ptr);
                const ret_hu_conv: Payee = new Payee(null, ret);
@@ -102,14 +107,14 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public static Payee constructor_from_node_id(Uint8Array pubkey) {
-               number ret = bindings.Payee_from_node_id(pubkey);
+               number ret = bindings.Payee_from_node_id(InternalUtils.check_arr_len(pubkey, 33));
                const ret_hu_conv: Payee = new Payee(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
        public static Payee constructor_for_keysend(Uint8Array pubkey) {
-               number ret = bindings.Payee_for_keysend(pubkey);
+               number ret = bindings.Payee_for_keysend(InternalUtils.check_arr_len(pubkey, 33));
                const ret_hu_conv: Payee = new Payee(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
index 8e7373ee16d41e27b8fd16d143e6877b6b2c2d43..e7d9c9306e4faad05f142fd42e4c16b3f41c1a25 100644 (file)
@@ -24,16 +24,21 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_a(Uint8Array val) {
-               bindings.PayeePubKey_set_a(this.ptr, val);
+               bindings.PayeePubKey_set_a(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        public static PayeePubKey constructor_new(Uint8Array a_arg) {
-               number ret = bindings.PayeePubKey_new(a_arg);
+               number ret = bindings.PayeePubKey_new(InternalUtils.check_arr_len(a_arg, 33));
                const ret_hu_conv: PayeePubKey = new PayeePubKey(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.PayeePubKey_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public PayeePubKey clone() {
                number ret = bindings.PayeePubKey_clone(this.ptr);
                const ret_hu_conv: PayeePubKey = new PayeePubKey(null, ret);
index cd233a61145d76d4f7ff66d338dcb26b72af5aae..1e815cb1a3031f4c9c1ebd401eb300a1462856f2 100644 (file)
@@ -34,26 +34,27 @@ import * as bindings from '../bindings' // TODO: figure out location
                         // todo: in-line interface filling
                         node_id (): Uint8Array {
                                                        Uint8Array ret = arg.node_id();
-                               return ret;
+                               result: Uint8Array = InternalUtils.check_arr_len(ret, 33);
+                               return result;
                                                },
 
                                                first_hops (): number[] {
                                                        ChannelDetails[] ret = arg.first_hops();
-                               result: number[] = ret != null ? Arrays.stream(ret).map(ret_conv_16 -> ret_conv_16 == null ? 0 : ret_conv_16.ptr & ~1).toArray(number[]::new) : null;
+                               result: number[] = ret != null ? Arrays.stream(ret).map(ret_conv_16 -> ret_conv_16 == null ? 0 : ret_conv_16.clone_ptr()).toArray(number[]::new) : null;
                                return result;
                                                },
 
                                                send_payment (route: number, payment_hash: Uint8Array, payment_secret: Uint8Array): number {
                                                        const route_hu_conv: Route = new Route(null, route);
                                                        Result_PaymentIdPaymentSendFailureZ ret = arg.send_payment(route_hu_conv, payment_hash, payment_secret);
-                               result: number = ret != null ? ret.ptr : 0;
+                               result: number = ret == null ? 0 : ret.clone_ptr();
                                return result;
                                                },
 
                                                retry_payment (route: number, payment_id: Uint8Array): number {
                                                        const route_hu_conv: Route = new Route(null, route);
                                                        Result_NonePaymentSendFailureZ ret = arg.retry_payment(route_hu_conv, payment_id);
-                               result: number = ret != null ? ret.ptr : 0;
+                               result: number = ret == null ? 0 : ret.clone_ptr();
                                return result;
                                                },
 
@@ -92,14 +93,14 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public Result_PaymentIdPaymentSendFailureZ send_payment(Route route, Uint8Array payment_hash, Uint8Array payment_secret) {
-               number ret = bindings.Payer_send_payment(this.ptr, route == null ? 0 : route.ptr & ~1, payment_hash, payment_secret);
+               number ret = bindings.Payer_send_payment(this.ptr, route == null ? 0 : route.ptr & ~1, InternalUtils.check_arr_len(payment_hash, 32), InternalUtils.check_arr_len(payment_secret, 32));
                Result_PaymentIdPaymentSendFailureZ ret_hu_conv = Result_PaymentIdPaymentSendFailureZ.constr_from_ptr(ret);
                this.ptrs_to.add(route);
                return ret_hu_conv;
        }
 
        public Result_NonePaymentSendFailureZ retry_payment(Route route, Uint8Array payment_id) {
-               number ret = bindings.Payer_retry_payment(this.ptr, route == null ? 0 : route.ptr & ~1, payment_id);
+               number ret = bindings.Payer_retry_payment(this.ptr, route == null ? 0 : route.ptr & ~1, InternalUtils.check_arr_len(payment_id, 32));
                Result_NonePaymentSendFailureZ ret_hu_conv = Result_NonePaymentSendFailureZ.constr_from_ptr(ret);
                this.ptrs_to.add(route);
                return ret_hu_conv;
index da4a31f62b965659524b752388daa545a77475da..37ee22e3077d3fddd8f8f956f756636750b795d1 100644 (file)
@@ -50,6 +50,11 @@ export class Sending extends PaymentError {
                this.sending = sending_hu_conv;
        }
 }
+       public number clone_ptr() {
+               number ret = bindings.PaymentError_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public PaymentError clone() {
                number ret = bindings.PaymentError_clone(this.ptr);
                PaymentError ret_hu_conv = PaymentError.constr_from_ptr(ret);
index 69a9436d10320bb90cf1f817a65e85f001044786..163b602848552410361ed81169235a9a2f63f864 100644 (file)
@@ -38,6 +38,11 @@ export class SpontaneousPayment extends PaymentPurpose {
                this.spontaneous_payment = obj.spontaneous_payment;
        }
 }
+       public number clone_ptr() {
+               number ret = bindings.PaymentPurpose_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public PaymentPurpose clone() {
                number ret = bindings.PaymentPurpose_clone(this.ptr);
                PaymentPurpose ret_hu_conv = PaymentPurpose.constr_from_ptr(ret);
@@ -46,14 +51,14 @@ export class SpontaneousPayment extends PaymentPurpose {
        }
 
        public static PaymentPurpose constructor_invoice_payment(Uint8Array payment_preimage, Uint8Array payment_secret, number user_payment_id) {
-               number ret = bindings.PaymentPurpose_invoice_payment(payment_preimage, payment_secret, user_payment_id);
+               number ret = bindings.PaymentPurpose_invoice_payment(InternalUtils.check_arr_len(payment_preimage, 32), InternalUtils.check_arr_len(payment_secret, 32), user_payment_id);
                PaymentPurpose ret_hu_conv = PaymentPurpose.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
        public static PaymentPurpose constructor_spontaneous_payment(Uint8Array a) {
-               number ret = bindings.PaymentPurpose_spontaneous_payment(a);
+               number ret = bindings.PaymentPurpose_spontaneous_payment(InternalUtils.check_arr_len(a, 32));
                PaymentPurpose ret_hu_conv = PaymentPurpose.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
index 5aa12403631b8628599b7f1b0519ee6fe66643e8..82553689bfaa917828774ee55378d1b215da811c 100644 (file)
@@ -86,6 +86,11 @@ export class PartialFailure extends PaymentSendFailure {
                this.payment_id = obj.payment_id;
        }
 }
+       public number clone_ptr() {
+               number ret = bindings.PaymentSendFailure_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public PaymentSendFailure clone() {
                number ret = bindings.PaymentSendFailure_clone(this.ptr);
                PaymentSendFailure ret_hu_conv = PaymentSendFailure.constr_from_ptr(ret);
@@ -115,7 +120,7 @@ export class PartialFailure extends PaymentSendFailure {
        }
 
        public static PaymentSendFailure constructor_partial_failure(Result_NoneAPIErrorZ[] results, RouteParameters failed_paths_retry, Uint8Array payment_id) {
-               number ret = bindings.PaymentSendFailure_partial_failure(results != null ? Arrays.stream(results).map(results_conv_22 -> results_conv_22 != null ? results_conv_22.ptr : 0).toArray(number[]::new) : null, failed_paths_retry == null ? 0 : failed_paths_retry.ptr & ~1, payment_id);
+               number ret = bindings.PaymentSendFailure_partial_failure(results != null ? Arrays.stream(results).map(results_conv_22 -> results_conv_22 != null ? results_conv_22.ptr : 0).toArray(number[]::new) : null, failed_paths_retry == null ? 0 : failed_paths_retry.ptr & ~1, InternalUtils.check_arr_len(payment_id, 32));
                PaymentSendFailure ret_hu_conv = PaymentSendFailure.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
index 52504971e59ec71a14abaa95c3bb5ada4a63f782..7e80b4b92294a282f8c7c97d6c202fc152f912c2 100644 (file)
@@ -34,6 +34,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.PeerHandleError_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public PeerHandleError clone() {
                number ret = bindings.PeerHandleError_clone(this.ptr);
                const ret_hu_conv: PeerHandleError = new PeerHandleError(null, ret);
index 1b62d075b1054a823956989cb82020e80b9c4f8c..1900a954dd143f47b4eb854e2fb9ebfd78edd4d0 100644 (file)
@@ -19,7 +19,7 @@ import * as bindings from '../bindings' // TODO: figure out location
                     }
                 }
        public static PeerManager constructor_new(ChannelMessageHandler message_handler_chan_handler_arg, RoutingMessageHandler message_handler_route_handler_arg, Uint8Array our_node_secret, Uint8Array ephemeral_random_data, Logger logger, CustomMessageHandler custom_message_handler) {
-               number ret = bindings.PeerManager_new(bindings.MessageHandler_new(message_handler_chan_handler_arg == null ? 0 : message_handler_chan_handler_arg.ptr, message_handler_route_handler_arg == null ? 0 : message_handler_route_handler_arg.ptr), our_node_secret, ephemeral_random_data, logger == null ? 0 : logger.ptr, custom_message_handler == null ? 0 : custom_message_handler.ptr);
+               number ret = bindings.PeerManager_new(bindings.MessageHandler_new(message_handler_chan_handler_arg == null ? 0 : message_handler_chan_handler_arg.ptr, message_handler_route_handler_arg == null ? 0 : message_handler_route_handler_arg.ptr), InternalUtils.check_arr_len(our_node_secret, 32), InternalUtils.check_arr_len(ephemeral_random_data, 32), logger == null ? 0 : logger.ptr, custom_message_handler == null ? 0 : custom_message_handler.ptr);
                const ret_hu_conv: PeerManager = new PeerManager(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                ret_hu_conv.ptrs_to.add(message_handler_chan_handler_arg);
@@ -35,7 +35,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public Result_CVec_u8ZPeerHandleErrorZ new_outbound_connection(Uint8Array their_node_id, SocketDescriptor descriptor) {
-               number ret = bindings.PeerManager_new_outbound_connection(this.ptr, their_node_id, descriptor == null ? 0 : descriptor.ptr);
+               number ret = bindings.PeerManager_new_outbound_connection(this.ptr, InternalUtils.check_arr_len(their_node_id, 33), descriptor == null ? 0 : descriptor.ptr);
                Result_CVec_u8ZPeerHandleErrorZ ret_hu_conv = Result_CVec_u8ZPeerHandleErrorZ.constr_from_ptr(ret);
                this.ptrs_to.add(descriptor);
                return ret_hu_conv;
@@ -69,7 +69,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void disconnect_by_node_id(Uint8Array node_id, boolean no_connection_possible) {
-               bindings.PeerManager_disconnect_by_node_id(this.ptr, node_id, no_connection_possible);
+               bindings.PeerManager_disconnect_by_node_id(this.ptr, InternalUtils.check_arr_len(node_id, 33), no_connection_possible);
        }
 
        public void disconnect_all_peers() {
index f13f9b90c4329ced144002a83890f8d30ae5df36..3a4b734464a46d891b2d8405aaceb34a308dadb3 100644 (file)
@@ -39,7 +39,7 @@ import * as bindings from '../bindings' // TODO: figure out location
                                                        const update_id_hu_conv: MonitorUpdateId = new MonitorUpdateId(null, update_id);
                                update_id_hu_conv.ptrs_to.add(this);
                                                        Result_NoneChannelMonitorUpdateErrZ ret = arg.persist_new_channel(channel_id_hu_conv, data_hu_conv, update_id_hu_conv);
-                               result: number = ret != null ? ret.ptr : 0;
+                               result: number = ret == null ? 0 : ret.clone_ptr();
                                return result;
                                                },
 
@@ -51,7 +51,7 @@ import * as bindings from '../bindings' // TODO: figure out location
                                                        const update_id_hu_conv: MonitorUpdateId = new MonitorUpdateId(null, update_id);
                                update_id_hu_conv.ptrs_to.add(this);
                                                        Result_NoneChannelMonitorUpdateErrZ ret = arg.update_persisted_channel(channel_id_hu_conv, update_hu_conv, data_hu_conv, update_id_hu_conv);
-                               result: number = ret != null ? ret.ptr : 0;
+                               result: number = ret == null ? 0 : ret.clone_ptr();
                                return result;
                                                },
 
index f7054fe012ae08e2ec003add20f46ebc69e91716..e1a0a848dd19373025ac62888fb01c7c2c659066 100644 (file)
@@ -43,6 +43,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.Ping_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Ping clone() {
                number ret = bindings.Ping_clone(this.ptr);
                const ret_hu_conv: Ping = new Ping(null, ret);
index 58be169f8d101530f3d3079658feebe15c26c260..c4749eb21dbbd7728090ead0f563476057966906 100644 (file)
@@ -34,6 +34,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.Pong_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Pong clone() {
                number ret = bindings.Pong_clone(this.ptr);
                const ret_hu_conv: Pong = new Pong(null, ret);
index 8580d269213a9e428f2b4a425e543990e3d4bb4c..de2bdceedfed27d38aaf24001e86c16a23603e41 100644 (file)
@@ -24,6 +24,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                return ret;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.PositiveTimestamp_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public PositiveTimestamp clone() {
                number ret = bindings.PositiveTimestamp_clone(this.ptr);
                const ret_hu_conv: PositiveTimestamp = new PositiveTimestamp(null, ret);
index 82943df07a4e5cf09e95e88e0f53a55a24a2bc1b..fc53d04662fddfe4d64440c40212559f1d8ea36c 100644 (file)
@@ -18,6 +18,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                         bindings.PrivateRoute_free(this.ptr);
                     }
                 }
+       public number clone_ptr() {
+               number ret = bindings.PrivateRoute_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public PrivateRoute clone() {
                number ret = bindings.PrivateRoute_clone(this.ptr);
                const ret_hu_conv: PrivateRoute = new PrivateRoute(null, ret);
index 27f68bb815d9f0ce635ff2f686b67de295936b67..11c394b8045fb15008a01ab235e68401d034fa5d 100644 (file)
@@ -24,7 +24,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_chain_hash(Uint8Array val) {
-               bindings.QueryChannelRange_set_chain_hash(this.ptr, val);
+               bindings.QueryChannelRange_set_chain_hash(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        public number get_first_blocknum() {
@@ -46,12 +46,17 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public static QueryChannelRange constructor_new(Uint8Array chain_hash_arg, number first_blocknum_arg, number number_of_blocks_arg) {
-               number ret = bindings.QueryChannelRange_new(chain_hash_arg, first_blocknum_arg, number_of_blocks_arg);
+               number ret = bindings.QueryChannelRange_new(InternalUtils.check_arr_len(chain_hash_arg, 32), first_blocknum_arg, number_of_blocks_arg);
                const ret_hu_conv: QueryChannelRange = new QueryChannelRange(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.QueryChannelRange_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public QueryChannelRange clone() {
                number ret = bindings.QueryChannelRange_clone(this.ptr);
                const ret_hu_conv: QueryChannelRange = new QueryChannelRange(null, ret);
index fe6f93f900dbb907008d793b0f79ac0b9aae808b..5afafcf5c76f16536ee2aa5fd6d520cb06138738 100644 (file)
@@ -24,7 +24,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_chain_hash(Uint8Array val) {
-               bindings.QueryShortChannelIds_set_chain_hash(this.ptr, val);
+               bindings.QueryShortChannelIds_set_chain_hash(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        public void set_short_channel_ids(number[] val) {
@@ -32,12 +32,17 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public static QueryShortChannelIds constructor_new(Uint8Array chain_hash_arg, number[] short_channel_ids_arg) {
-               number ret = bindings.QueryShortChannelIds_new(chain_hash_arg, short_channel_ids_arg);
+               number ret = bindings.QueryShortChannelIds_new(InternalUtils.check_arr_len(chain_hash_arg, 32), short_channel_ids_arg);
                const ret_hu_conv: QueryShortChannelIds = new QueryShortChannelIds(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.QueryShortChannelIds_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public QueryShortChannelIds clone() {
                number ret = bindings.QueryShortChannelIds_clone(this.ptr);
                const ret_hu_conv: QueryShortChannelIds = new QueryShortChannelIds(null, ret);
index 5f63383b8cb2dbadc44f2f5f6f25d64ab8436d6d..c453737328d15699d0581baf1e3e11e5a3909b05 100644 (file)
@@ -35,6 +35,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                return ret;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.RawDataPart_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public RawDataPart clone() {
                number ret = bindings.RawDataPart_clone(this.ptr);
                const ret_hu_conv: RawDataPart = new RawDataPart(null, ret);
index bb6a5dce0783f246382d25247230d2758e258bf3..3cd1b0412d89129315d05b4036d978bc90de2eac 100644 (file)
@@ -35,6 +35,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                return ret;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.RawInvoice_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public RawInvoice clone() {
                number ret = bindings.RawInvoice_clone(this.ptr);
                const ret_hu_conv: RawInvoice = new RawInvoice(null, ret);
index d60088fc4e36940bdf6f5ab9791634129c160d74..b0a1e25efb38372f64733e481df42246ac1daad3 100644 (file)
@@ -19,7 +19,7 @@ import * as bindings from '../bindings' // TODO: figure out location
                     }
                 }
        public Option_CVec_NetAddressZZ get_addresses(Uint8Array pubkey) {
-               number ret = bindings.ReadOnlyNetworkGraph_get_addresses(this.ptr, pubkey);
+               number ret = bindings.ReadOnlyNetworkGraph_get_addresses(this.ptr, InternalUtils.check_arr_len(pubkey, 33));
                Option_CVec_NetAddressZZ ret_hu_conv = Option_CVec_NetAddressZZ.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(this);
                return ret_hu_conv;
diff --git a/ts/structs/Record.ts b/ts/structs/Record.ts
new file mode 100644 (file)
index 0000000..95fc0e2
--- /dev/null
@@ -0,0 +1,78 @@
+
+            
+import CommonBase from './CommonBase';
+import * as bindings from '../bindings' // TODO: figure out location
+
+
+
+            export default class Record extends CommonBase {
+                constructor(_dummy: object, ptr: number) {
+                    super(ptr);
+                }
+
+                
+                protected finalize() {
+                    super.finalize();
+
+                    if (this.ptr != 0) {
+                        bindings.Record_free(this.ptr);
+                    }
+                }
+       public Level get_level() {
+               Level ret = bindings.Record_get_level(this.ptr);
+               return ret;
+       }
+
+       public void set_level(Level val) {
+               bindings.Record_set_level(this.ptr, val);
+       }
+
+       public String get_args() {
+               String ret = bindings.Record_get_args(this.ptr);
+               return ret;
+       }
+
+       public void set_args(String val) {
+               bindings.Record_set_args(this.ptr, val);
+       }
+
+       public String get_module_path() {
+               String ret = bindings.Record_get_module_path(this.ptr);
+               return ret;
+       }
+
+       public void set_module_path(String val) {
+               bindings.Record_set_module_path(this.ptr, val);
+       }
+
+       public String get_file() {
+               String ret = bindings.Record_get_file(this.ptr);
+               return ret;
+       }
+
+       public void set_file(String val) {
+               bindings.Record_set_file(this.ptr, val);
+       }
+
+       public number get_line() {
+               number ret = bindings.Record_get_line(this.ptr);
+               return ret;
+       }
+
+       public void set_line(number val) {
+               bindings.Record_set_line(this.ptr, val);
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.Record_clone_ptr(this.ptr);
+               return ret;
+       }
+
+       public Record clone() {
+               number ret = bindings.Record_clone(this.ptr);
+               const ret_hu_conv: Record = new Record(null, ret);
+               ret_hu_conv.ptrs_to.add(this);
+               return ret_hu_conv;
+       }
+
+}
index bbf199e3ba561afddfcf15dc3b2e33469c2f149b..9d3ec28dd83cd28d2c2f183ff3e79cd5b39cbcaf 100644 (file)
@@ -24,7 +24,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_chain_hash(Uint8Array val) {
-               bindings.ReplyChannelRange_set_chain_hash(this.ptr, val);
+               bindings.ReplyChannelRange_set_chain_hash(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        public number get_first_blocknum() {
@@ -59,12 +59,17 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public static ReplyChannelRange constructor_new(Uint8Array chain_hash_arg, number first_blocknum_arg, number number_of_blocks_arg, boolean sync_complete_arg, number[] short_channel_ids_arg) {
-               number ret = bindings.ReplyChannelRange_new(chain_hash_arg, first_blocknum_arg, number_of_blocks_arg, sync_complete_arg, short_channel_ids_arg);
+               number ret = bindings.ReplyChannelRange_new(InternalUtils.check_arr_len(chain_hash_arg, 32), first_blocknum_arg, number_of_blocks_arg, sync_complete_arg, short_channel_ids_arg);
                const ret_hu_conv: ReplyChannelRange = new ReplyChannelRange(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.ReplyChannelRange_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public ReplyChannelRange clone() {
                number ret = bindings.ReplyChannelRange_clone(this.ptr);
                const ret_hu_conv: ReplyChannelRange = new ReplyChannelRange(null, ret);
index ab431a6a083c07bda3b0006bca6fa32e934d194c..9c3d2881c15e2b12f20faecff65ccd8e6d0ce72f 100644 (file)
@@ -24,7 +24,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_chain_hash(Uint8Array val) {
-               bindings.ReplyShortChannelIdsEnd_set_chain_hash(this.ptr, val);
+               bindings.ReplyShortChannelIdsEnd_set_chain_hash(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        public boolean get_full_information() {
@@ -37,12 +37,17 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public static ReplyShortChannelIdsEnd constructor_new(Uint8Array chain_hash_arg, boolean full_information_arg) {
-               number ret = bindings.ReplyShortChannelIdsEnd_new(chain_hash_arg, full_information_arg);
+               number ret = bindings.ReplyShortChannelIdsEnd_new(InternalUtils.check_arr_len(chain_hash_arg, 32), full_information_arg);
                const ret_hu_conv: ReplyShortChannelIdsEnd = new ReplyShortChannelIdsEnd(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.ReplyShortChannelIdsEnd_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public ReplyShortChannelIdsEnd clone() {
                number ret = bindings.ReplyShortChannelIdsEnd_clone(this.ptr);
                const ret_hu_conv: ReplyShortChannelIdsEnd = new ReplyShortChannelIdsEnd(null, ret);
index cffb6512ad0a6653704a281b2f3e361105479d75..f8dd75b555e1bf67838f8aede36df7cb72eecb9a 100644 (file)
@@ -9,7 +9,7 @@ public class Result_AcceptChannelDecodeErrorZ extends CommonBase {
        }
 
        static Result_AcceptChannelDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_AcceptChannelDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_AcceptChannelDecodeErrorZ_is_ok(ptr)) {
                        return new Result_AcceptChannelDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_AcceptChannelDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_AcceptChannelDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_AcceptChannelDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_AcceptChannelDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_AcceptChannelDecodeErrorZ clone() {
                number ret = bindings.CResult_AcceptChannelDecodeErrorZ_clone(this.ptr);
                Result_AcceptChannelDecodeErrorZ ret_hu_conv = Result_AcceptChannelDecodeErrorZ.constr_from_ptr(ret);
index 812a45329d1c150bf4f3e8874a5939242fc13af0..745f0e4d116346eb2289a1ee977b60704c0e1a6a 100644 (file)
@@ -9,7 +9,7 @@ public class Result_AnnouncementSignaturesDecodeErrorZ extends CommonBase {
        }
 
        static Result_AnnouncementSignaturesDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_AnnouncementSignaturesDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_AnnouncementSignaturesDecodeErrorZ_is_ok(ptr)) {
                        return new Result_AnnouncementSignaturesDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_AnnouncementSignaturesDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_AnnouncementSignaturesDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_AnnouncementSignaturesDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_AnnouncementSignaturesDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_AnnouncementSignaturesDecodeErrorZ clone() {
                number ret = bindings.CResult_AnnouncementSignaturesDecodeErrorZ_clone(this.ptr);
                Result_AnnouncementSignaturesDecodeErrorZ ret_hu_conv = Result_AnnouncementSignaturesDecodeErrorZ.constr_from_ptr(ret);
index 59a2d2559323413c8d2cc4073dd411433defef10..5aef308df957ee7853e2840c56d9808bc452cc61 100644 (file)
@@ -9,7 +9,7 @@ public class Result_BuiltCommitmentTransactionDecodeErrorZ extends CommonBase {
        }
 
        static Result_BuiltCommitmentTransactionDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_BuiltCommitmentTransactionDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_BuiltCommitmentTransactionDecodeErrorZ_is_ok(ptr)) {
                        return new Result_BuiltCommitmentTransactionDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_BuiltCommitmentTransactionDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_BuiltCommitmentTransactionDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_BuiltCommitmentTransactionDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_BuiltCommitmentTransactionDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_BuiltCommitmentTransactionDecodeErrorZ clone() {
                number ret = bindings.CResult_BuiltCommitmentTransactionDecodeErrorZ_clone(this.ptr);
                Result_BuiltCommitmentTransactionDecodeErrorZ ret_hu_conv = Result_BuiltCommitmentTransactionDecodeErrorZ.constr_from_ptr(ret);
index 86f9d9f80007bd43bacc1696089d196000364b6e..91789ad3bc162fc9f10ae130f282d91574a84108 100644 (file)
@@ -9,7 +9,7 @@ public class Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ extends CommonB
        }
 
        static Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_is_ok(ptr)) {
                        return new Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_Err(null, ptr);
@@ -49,4 +49,9 @@ public class Result_C2Tuple_BlockHashChannelManagerZDecodeErrorZ extends CommonB
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_C2Tuple_BlockHashChannelManagerZDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
 }
index fbedce75249782626480590183b2977e04b358f3..3a2f12c543b953228ec5e91e526957e049ad7aba 100644 (file)
@@ -9,7 +9,7 @@ public class Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ extends CommonB
        }
 
        static Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_is_ok(ptr)) {
                        return new Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ extends CommonB
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ clone() {
                number ret = bindings.CResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ_clone(this.ptr);
                Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ ret_hu_conv = Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ.constr_from_ptr(ret);
index 9f4b01239aaa51fced1dbd9c36a8c882b262a815..5708e418d82d1067c0dd7f78bd93b44e8c396ef4 100644 (file)
@@ -9,7 +9,7 @@ public class Result_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ extends Com
        }
 
        static Result_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_result_ok(ptr)) {
+               if (bindings.CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_is_ok(ptr)) {
                        return new Result_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_OK(null, ptr);
                } else {
                        return new Result_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ extends Com
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ clone() {
                number ret = bindings.CResult_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ_clone(this.ptr);
                Result_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ ret_hu_conv = Result_C2Tuple_PaymentHashPaymentIdZPaymentSendFailureZ.constr_from_ptr(ret);
index b16f58760fbd15f2c3d729bfc4c55d6ec559bb71..5ff71a0ac9448cad0e623c650f836120208ca5d1 100644 (file)
@@ -9,7 +9,7 @@ public class Result_C2Tuple_SignatureCVec_SignatureZZNoneZ extends CommonBase {
        }
 
        static Result_C2Tuple_SignatureCVec_SignatureZZNoneZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_result_ok(ptr)) {
+               if (bindings.CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_is_ok(ptr)) {
                        return new Result_C2Tuple_SignatureCVec_SignatureZZNoneZ_OK(null, ptr);
                } else {
                        return new Result_C2Tuple_SignatureCVec_SignatureZZNoneZ_Err(null, ptr);
@@ -44,6 +44,16 @@ public class Result_C2Tuple_SignatureCVec_SignatureZZNoneZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_C2Tuple_SignatureCVec_SignatureZZNoneZ clone() {
                number ret = bindings.CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_clone(this.ptr);
                Result_C2Tuple_SignatureCVec_SignatureZZNoneZ ret_hu_conv = Result_C2Tuple_SignatureCVec_SignatureZZNoneZ.constr_from_ptr(ret);
diff --git a/ts/structs/Result_COption_ClosureReasonZDecodeErrorZ.ts b/ts/structs/Result_COption_ClosureReasonZDecodeErrorZ.ts
new file mode 100644 (file)
index 0000000..c526901
--- /dev/null
@@ -0,0 +1,68 @@
+
+import CommonBase from './CommonBase';
+import * as bindings from '../bindings' // TODO: figure out location
+
+public class Result_COption_ClosureReasonZDecodeErrorZ extends CommonBase {
+       private Result_COption_ClosureReasonZDecodeErrorZ(Object _dummy, long ptr) { super(ptr); }
+       protected void finalize() throws Throwable {
+               if (ptr != 0) { bindings.CResult_COption_ClosureReasonZDecodeErrorZ_free(ptr); } super.finalize();
+       }
+
+       static Result_COption_ClosureReasonZDecodeErrorZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_COption_ClosureReasonZDecodeErrorZ_is_ok(ptr)) {
+                       return new Result_COption_ClosureReasonZDecodeErrorZ_OK(null, ptr);
+               } else {
+                       return new Result_COption_ClosureReasonZDecodeErrorZ_Err(null, ptr);
+               }
+       }
+       public static final class Result_COption_ClosureReasonZDecodeErrorZ_OK extends Result_COption_ClosureReasonZDecodeErrorZ {
+               public final Option_ClosureReasonZ res;
+               private Result_COption_ClosureReasonZDecodeErrorZ_OK(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       number res = bindings.LDKCResult_COption_ClosureReasonZDecodeErrorZ_get_ok(ptr);
+                       Option_ClosureReasonZ res_hu_conv = Option_ClosureReasonZ.constr_from_ptr(res);
+                       res_hu_conv.ptrs_to.add(this);
+                       this.res = res_hu_conv;
+               }
+       }
+
+       public static final class Result_COption_ClosureReasonZDecodeErrorZ_Err extends Result_COption_ClosureReasonZDecodeErrorZ {
+               public final DecodeError err;
+               private Result_COption_ClosureReasonZDecodeErrorZ_Err(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       number err = bindings.LDKCResult_COption_ClosureReasonZDecodeErrorZ_get_err(ptr);
+                       const err_hu_conv: DecodeError = new DecodeError(null, err);
+                       err_hu_conv.ptrs_to.add(this);
+                       this.err = err_hu_conv;
+               }
+       }
+
+       public static Result_COption_ClosureReasonZDecodeErrorZ constructor_ok(Option_ClosureReasonZ o) {
+               number ret = bindings.CResult_COption_ClosureReasonZDecodeErrorZ_ok(o.ptr);
+               Result_COption_ClosureReasonZDecodeErrorZ ret_hu_conv = Result_COption_ClosureReasonZDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       public static Result_COption_ClosureReasonZDecodeErrorZ constructor_err(DecodeError e) {
+               number ret = bindings.CResult_COption_ClosureReasonZDecodeErrorZ_err(e == null ? 0 : e.ptr & ~1);
+               Result_COption_ClosureReasonZDecodeErrorZ ret_hu_conv = Result_COption_ClosureReasonZDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_COption_ClosureReasonZDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_COption_ClosureReasonZDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
+       public Result_COption_ClosureReasonZDecodeErrorZ clone() {
+               number ret = bindings.CResult_COption_ClosureReasonZDecodeErrorZ_clone(this.ptr);
+               Result_COption_ClosureReasonZDecodeErrorZ ret_hu_conv = Result_COption_ClosureReasonZDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
diff --git a/ts/structs/Result_COption_EventZDecodeErrorZ.ts b/ts/structs/Result_COption_EventZDecodeErrorZ.ts
new file mode 100644 (file)
index 0000000..b346fc2
--- /dev/null
@@ -0,0 +1,68 @@
+
+import CommonBase from './CommonBase';
+import * as bindings from '../bindings' // TODO: figure out location
+
+public class Result_COption_EventZDecodeErrorZ extends CommonBase {
+       private Result_COption_EventZDecodeErrorZ(Object _dummy, long ptr) { super(ptr); }
+       protected void finalize() throws Throwable {
+               if (ptr != 0) { bindings.CResult_COption_EventZDecodeErrorZ_free(ptr); } super.finalize();
+       }
+
+       static Result_COption_EventZDecodeErrorZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_COption_EventZDecodeErrorZ_is_ok(ptr)) {
+                       return new Result_COption_EventZDecodeErrorZ_OK(null, ptr);
+               } else {
+                       return new Result_COption_EventZDecodeErrorZ_Err(null, ptr);
+               }
+       }
+       public static final class Result_COption_EventZDecodeErrorZ_OK extends Result_COption_EventZDecodeErrorZ {
+               public final Option_EventZ res;
+               private Result_COption_EventZDecodeErrorZ_OK(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       number res = bindings.LDKCResult_COption_EventZDecodeErrorZ_get_ok(ptr);
+                       Option_EventZ res_hu_conv = Option_EventZ.constr_from_ptr(res);
+                       res_hu_conv.ptrs_to.add(this);
+                       this.res = res_hu_conv;
+               }
+       }
+
+       public static final class Result_COption_EventZDecodeErrorZ_Err extends Result_COption_EventZDecodeErrorZ {
+               public final DecodeError err;
+               private Result_COption_EventZDecodeErrorZ_Err(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       number err = bindings.LDKCResult_COption_EventZDecodeErrorZ_get_err(ptr);
+                       const err_hu_conv: DecodeError = new DecodeError(null, err);
+                       err_hu_conv.ptrs_to.add(this);
+                       this.err = err_hu_conv;
+               }
+       }
+
+       public static Result_COption_EventZDecodeErrorZ constructor_ok(Option_EventZ o) {
+               number ret = bindings.CResult_COption_EventZDecodeErrorZ_ok(o.ptr);
+               Result_COption_EventZDecodeErrorZ ret_hu_conv = Result_COption_EventZDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       public static Result_COption_EventZDecodeErrorZ constructor_err(DecodeError e) {
+               number ret = bindings.CResult_COption_EventZDecodeErrorZ_err(e == null ? 0 : e.ptr & ~1);
+               Result_COption_EventZDecodeErrorZ ret_hu_conv = Result_COption_EventZDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_COption_EventZDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_COption_EventZDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
+       public Result_COption_EventZDecodeErrorZ clone() {
+               number ret = bindings.CResult_COption_EventZDecodeErrorZ_clone(this.ptr);
+               Result_COption_EventZDecodeErrorZ ret_hu_conv = Result_COption_EventZDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
diff --git a/ts/structs/Result_COption_MonitorEventZDecodeErrorZ.ts b/ts/structs/Result_COption_MonitorEventZDecodeErrorZ.ts
new file mode 100644 (file)
index 0000000..af7855e
--- /dev/null
@@ -0,0 +1,68 @@
+
+import CommonBase from './CommonBase';
+import * as bindings from '../bindings' // TODO: figure out location
+
+public class Result_COption_MonitorEventZDecodeErrorZ extends CommonBase {
+       private Result_COption_MonitorEventZDecodeErrorZ(Object _dummy, long ptr) { super(ptr); }
+       protected void finalize() throws Throwable {
+               if (ptr != 0) { bindings.CResult_COption_MonitorEventZDecodeErrorZ_free(ptr); } super.finalize();
+       }
+
+       static Result_COption_MonitorEventZDecodeErrorZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_COption_MonitorEventZDecodeErrorZ_is_ok(ptr)) {
+                       return new Result_COption_MonitorEventZDecodeErrorZ_OK(null, ptr);
+               } else {
+                       return new Result_COption_MonitorEventZDecodeErrorZ_Err(null, ptr);
+               }
+       }
+       public static final class Result_COption_MonitorEventZDecodeErrorZ_OK extends Result_COption_MonitorEventZDecodeErrorZ {
+               public final Option_MonitorEventZ res;
+               private Result_COption_MonitorEventZDecodeErrorZ_OK(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       number res = bindings.LDKCResult_COption_MonitorEventZDecodeErrorZ_get_ok(ptr);
+                       Option_MonitorEventZ res_hu_conv = Option_MonitorEventZ.constr_from_ptr(res);
+                       res_hu_conv.ptrs_to.add(this);
+                       this.res = res_hu_conv;
+               }
+       }
+
+       public static final class Result_COption_MonitorEventZDecodeErrorZ_Err extends Result_COption_MonitorEventZDecodeErrorZ {
+               public final DecodeError err;
+               private Result_COption_MonitorEventZDecodeErrorZ_Err(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       number err = bindings.LDKCResult_COption_MonitorEventZDecodeErrorZ_get_err(ptr);
+                       const err_hu_conv: DecodeError = new DecodeError(null, err);
+                       err_hu_conv.ptrs_to.add(this);
+                       this.err = err_hu_conv;
+               }
+       }
+
+       public static Result_COption_MonitorEventZDecodeErrorZ constructor_ok(Option_MonitorEventZ o) {
+               number ret = bindings.CResult_COption_MonitorEventZDecodeErrorZ_ok(o.ptr);
+               Result_COption_MonitorEventZDecodeErrorZ ret_hu_conv = Result_COption_MonitorEventZDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       public static Result_COption_MonitorEventZDecodeErrorZ constructor_err(DecodeError e) {
+               number ret = bindings.CResult_COption_MonitorEventZDecodeErrorZ_err(e == null ? 0 : e.ptr & ~1);
+               Result_COption_MonitorEventZDecodeErrorZ ret_hu_conv = Result_COption_MonitorEventZDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_COption_MonitorEventZDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_COption_MonitorEventZDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
+       public Result_COption_MonitorEventZDecodeErrorZ clone() {
+               number ret = bindings.CResult_COption_MonitorEventZDecodeErrorZ_clone(this.ptr);
+               Result_COption_MonitorEventZDecodeErrorZ ret_hu_conv = Result_COption_MonitorEventZDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
diff --git a/ts/structs/Result_COption_NetworkUpdateZDecodeErrorZ.ts b/ts/structs/Result_COption_NetworkUpdateZDecodeErrorZ.ts
new file mode 100644 (file)
index 0000000..970174c
--- /dev/null
@@ -0,0 +1,68 @@
+
+import CommonBase from './CommonBase';
+import * as bindings from '../bindings' // TODO: figure out location
+
+public class Result_COption_NetworkUpdateZDecodeErrorZ extends CommonBase {
+       private Result_COption_NetworkUpdateZDecodeErrorZ(Object _dummy, long ptr) { super(ptr); }
+       protected void finalize() throws Throwable {
+               if (ptr != 0) { bindings.CResult_COption_NetworkUpdateZDecodeErrorZ_free(ptr); } super.finalize();
+       }
+
+       static Result_COption_NetworkUpdateZDecodeErrorZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_COption_NetworkUpdateZDecodeErrorZ_is_ok(ptr)) {
+                       return new Result_COption_NetworkUpdateZDecodeErrorZ_OK(null, ptr);
+               } else {
+                       return new Result_COption_NetworkUpdateZDecodeErrorZ_Err(null, ptr);
+               }
+       }
+       public static final class Result_COption_NetworkUpdateZDecodeErrorZ_OK extends Result_COption_NetworkUpdateZDecodeErrorZ {
+               public final Option_NetworkUpdateZ res;
+               private Result_COption_NetworkUpdateZDecodeErrorZ_OK(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       number res = bindings.LDKCResult_COption_NetworkUpdateZDecodeErrorZ_get_ok(ptr);
+                       Option_NetworkUpdateZ res_hu_conv = Option_NetworkUpdateZ.constr_from_ptr(res);
+                       res_hu_conv.ptrs_to.add(this);
+                       this.res = res_hu_conv;
+               }
+       }
+
+       public static final class Result_COption_NetworkUpdateZDecodeErrorZ_Err extends Result_COption_NetworkUpdateZDecodeErrorZ {
+               public final DecodeError err;
+               private Result_COption_NetworkUpdateZDecodeErrorZ_Err(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       number err = bindings.LDKCResult_COption_NetworkUpdateZDecodeErrorZ_get_err(ptr);
+                       const err_hu_conv: DecodeError = new DecodeError(null, err);
+                       err_hu_conv.ptrs_to.add(this);
+                       this.err = err_hu_conv;
+               }
+       }
+
+       public static Result_COption_NetworkUpdateZDecodeErrorZ constructor_ok(Option_NetworkUpdateZ o) {
+               number ret = bindings.CResult_COption_NetworkUpdateZDecodeErrorZ_ok(o.ptr);
+               Result_COption_NetworkUpdateZDecodeErrorZ ret_hu_conv = Result_COption_NetworkUpdateZDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       public static Result_COption_NetworkUpdateZDecodeErrorZ constructor_err(DecodeError e) {
+               number ret = bindings.CResult_COption_NetworkUpdateZDecodeErrorZ_err(e == null ? 0 : e.ptr & ~1);
+               Result_COption_NetworkUpdateZDecodeErrorZ ret_hu_conv = Result_COption_NetworkUpdateZDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_COption_NetworkUpdateZDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_COption_NetworkUpdateZDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
+       public Result_COption_NetworkUpdateZDecodeErrorZ clone() {
+               number ret = bindings.CResult_COption_NetworkUpdateZDecodeErrorZ_clone(this.ptr);
+               Result_COption_NetworkUpdateZDecodeErrorZ ret_hu_conv = Result_COption_NetworkUpdateZDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+}
index 634da2bc45f3dd4f2d22245e25ce5b6c6bb551d3..3207ea4ff716ee4523b2ac1e635b21c0497571d5 100644 (file)
@@ -9,7 +9,7 @@ public class Result_COption_TypeZDecodeErrorZ extends CommonBase {
        }
 
        static Result_COption_TypeZDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_COption_TypeZDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_COption_TypeZDecodeErrorZ_is_ok(ptr)) {
                        return new Result_COption_TypeZDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_COption_TypeZDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_COption_TypeZDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_COption_TypeZDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_COption_TypeZDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_COption_TypeZDecodeErrorZ clone() {
                number ret = bindings.CResult_COption_TypeZDecodeErrorZ_clone(this.ptr);
                Result_COption_TypeZDecodeErrorZ ret_hu_conv = Result_COption_TypeZDecodeErrorZ.constr_from_ptr(ret);
index e2153029980c729e429694c718bee75acb699c5c..e211d81af2bb7c2e974705424b26e62715f8f3fa 100644 (file)
@@ -9,7 +9,7 @@ public class Result_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ extends CommonB
        }
 
        static Result_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_is_ok(ptr)) {
                        return new Result_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_OK(null, ptr);
                } else {
                        return new Result_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_Err(null, ptr);
@@ -51,6 +51,16 @@ public class Result_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ extends CommonB
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ clone() {
                number ret = bindings.CResult_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ_clone(this.ptr);
                Result_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ ret_hu_conv = Result_CVec_C2Tuple_BlockHashChannelMonitorZZErrorZ.constr_from_ptr(ret);
index 52af9438b4907a5e752eba1fc00bc02759e7862e..25385d117c862ffb71299a620357ab566c76f42a 100644 (file)
@@ -9,7 +9,7 @@ public class Result_CVec_CVec_u8ZZNoneZ extends CommonBase {
        }
 
        static Result_CVec_CVec_u8ZZNoneZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_CVec_CVec_u8ZZNoneZ_result_ok(ptr)) {
+               if (bindings.CResult_CVec_CVec_u8ZZNoneZ_is_ok(ptr)) {
                        return new Result_CVec_CVec_u8ZZNoneZ_OK(null, ptr);
                } else {
                        return new Result_CVec_CVec_u8ZZNoneZ_Err(null, ptr);
@@ -41,6 +41,16 @@ public class Result_CVec_CVec_u8ZZNoneZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_CVec_CVec_u8ZZNoneZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_CVec_CVec_u8ZZNoneZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_CVec_CVec_u8ZZNoneZ clone() {
                number ret = bindings.CResult_CVec_CVec_u8ZZNoneZ_clone(this.ptr);
                Result_CVec_CVec_u8ZZNoneZ ret_hu_conv = Result_CVec_CVec_u8ZZNoneZ.constr_from_ptr(ret);
index df61d0339c904b069c4c58699feb3d582c4021ff..bb526206ff3b06a6ad69d33adf7afd190f50224a 100644 (file)
@@ -9,7 +9,7 @@ public class Result_CVec_SignatureZNoneZ extends CommonBase {
        }
 
        static Result_CVec_SignatureZNoneZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_CVec_SignatureZNoneZ_result_ok(ptr)) {
+               if (bindings.CResult_CVec_SignatureZNoneZ_is_ok(ptr)) {
                        return new Result_CVec_SignatureZNoneZ_OK(null, ptr);
                } else {
                        return new Result_CVec_SignatureZNoneZ_Err(null, ptr);
@@ -30,7 +30,7 @@ public class Result_CVec_SignatureZNoneZ extends CommonBase {
        }
 
        public static Result_CVec_SignatureZNoneZ constructor_ok(Uint8Array[] o) {
-               number ret = bindings.CResult_CVec_SignatureZNoneZ_ok(o);
+               number ret = bindings.CResult_CVec_SignatureZNoneZ_ok(o != null ? Arrays.stream(o).map(o_conv_12 -> InternalUtils.check_arr_len(o_conv_12, 64)).toArray(Uint8Array[]::new) : null);
                Result_CVec_SignatureZNoneZ ret_hu_conv = Result_CVec_SignatureZNoneZ.constr_from_ptr(ret);
                return ret_hu_conv;
        }
@@ -41,6 +41,16 @@ public class Result_CVec_SignatureZNoneZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_CVec_SignatureZNoneZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_CVec_SignatureZNoneZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_CVec_SignatureZNoneZ clone() {
                number ret = bindings.CResult_CVec_SignatureZNoneZ_clone(this.ptr);
                Result_CVec_SignatureZNoneZ ret_hu_conv = Result_CVec_SignatureZNoneZ.constr_from_ptr(ret);
index a5ef5951cb7f74538532aae5919073eba1671dc2..e4ff80b48a1500329977c4511b1f022f2b9d574d 100644 (file)
@@ -9,7 +9,7 @@ public class Result_CVec_u8ZPeerHandleErrorZ extends CommonBase {
        }
 
        static Result_CVec_u8ZPeerHandleErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_CVec_u8ZPeerHandleErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_CVec_u8ZPeerHandleErrorZ_is_ok(ptr)) {
                        return new Result_CVec_u8ZPeerHandleErrorZ_OK(null, ptr);
                } else {
                        return new Result_CVec_u8ZPeerHandleErrorZ_Err(null, ptr);
@@ -46,6 +46,16 @@ public class Result_CVec_u8ZPeerHandleErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_CVec_u8ZPeerHandleErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_CVec_u8ZPeerHandleErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_CVec_u8ZPeerHandleErrorZ clone() {
                number ret = bindings.CResult_CVec_u8ZPeerHandleErrorZ_clone(this.ptr);
                Result_CVec_u8ZPeerHandleErrorZ ret_hu_conv = Result_CVec_u8ZPeerHandleErrorZ.constr_from_ptr(ret);
index b06e713cbe814d55fc75639ea78a1ff545ebc084..bc1cf7dcad97c0d107966e009024e1e38251032a 100644 (file)
@@ -9,7 +9,7 @@ public class Result_ChannelAnnouncementDecodeErrorZ extends CommonBase {
        }
 
        static Result_ChannelAnnouncementDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_ChannelAnnouncementDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_ChannelAnnouncementDecodeErrorZ_is_ok(ptr)) {
                        return new Result_ChannelAnnouncementDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_ChannelAnnouncementDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_ChannelAnnouncementDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_ChannelAnnouncementDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_ChannelAnnouncementDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_ChannelAnnouncementDecodeErrorZ clone() {
                number ret = bindings.CResult_ChannelAnnouncementDecodeErrorZ_clone(this.ptr);
                Result_ChannelAnnouncementDecodeErrorZ ret_hu_conv = Result_ChannelAnnouncementDecodeErrorZ.constr_from_ptr(ret);
index 8260d5a5eda9e2909b8a5374cb5fd5de32ae42e2..ec5ec379b4841c93667310ba165caf35fa91c6dd 100644 (file)
@@ -9,7 +9,7 @@ public class Result_ChannelConfigDecodeErrorZ extends CommonBase {
        }
 
        static Result_ChannelConfigDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_ChannelConfigDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_ChannelConfigDecodeErrorZ_is_ok(ptr)) {
                        return new Result_ChannelConfigDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_ChannelConfigDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_ChannelConfigDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_ChannelConfigDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_ChannelConfigDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_ChannelConfigDecodeErrorZ clone() {
                number ret = bindings.CResult_ChannelConfigDecodeErrorZ_clone(this.ptr);
                Result_ChannelConfigDecodeErrorZ ret_hu_conv = Result_ChannelConfigDecodeErrorZ.constr_from_ptr(ret);
index 6a7620094f8fb5d8ae4d0cc16aecc40c4a2e5736..7864a54d581379ca4f5f6f7210c47ac2b882937a 100644 (file)
@@ -9,7 +9,7 @@ public class Result_ChannelFeaturesDecodeErrorZ extends CommonBase {
        }
 
        static Result_ChannelFeaturesDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_ChannelFeaturesDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_ChannelFeaturesDecodeErrorZ_is_ok(ptr)) {
                        return new Result_ChannelFeaturesDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_ChannelFeaturesDecodeErrorZ_Err(null, ptr);
@@ -49,4 +49,9 @@ public class Result_ChannelFeaturesDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_ChannelFeaturesDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
 }
index 21031cde5de8ef762ad27c98bf2b944e1421e968..c8d36ecdd0713a85d802a45a624b8110620de61d 100644 (file)
@@ -9,7 +9,7 @@ public class Result_ChannelInfoDecodeErrorZ extends CommonBase {
        }
 
        static Result_ChannelInfoDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_ChannelInfoDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_ChannelInfoDecodeErrorZ_is_ok(ptr)) {
                        return new Result_ChannelInfoDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_ChannelInfoDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_ChannelInfoDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_ChannelInfoDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_ChannelInfoDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_ChannelInfoDecodeErrorZ clone() {
                number ret = bindings.CResult_ChannelInfoDecodeErrorZ_clone(this.ptr);
                Result_ChannelInfoDecodeErrorZ ret_hu_conv = Result_ChannelInfoDecodeErrorZ.constr_from_ptr(ret);
index f915a89db7fbc218b2c300720047094aac35a1e3..fedae20e0a4facc5a40a76069ec569bdabe00d8c 100644 (file)
@@ -9,7 +9,7 @@ public class Result_ChannelMonitorUpdateDecodeErrorZ extends CommonBase {
        }
 
        static Result_ChannelMonitorUpdateDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_ChannelMonitorUpdateDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_ChannelMonitorUpdateDecodeErrorZ_is_ok(ptr)) {
                        return new Result_ChannelMonitorUpdateDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_ChannelMonitorUpdateDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_ChannelMonitorUpdateDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_ChannelMonitorUpdateDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_ChannelMonitorUpdateDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_ChannelMonitorUpdateDecodeErrorZ clone() {
                number ret = bindings.CResult_ChannelMonitorUpdateDecodeErrorZ_clone(this.ptr);
                Result_ChannelMonitorUpdateDecodeErrorZ ret_hu_conv = Result_ChannelMonitorUpdateDecodeErrorZ.constr_from_ptr(ret);
index e6e260dcb06a118b0ef093b76c5317110cf7794f..feccedd26c2c6182951800d8ef0d2a3fde6ab858 100644 (file)
@@ -9,7 +9,7 @@ public class Result_ChannelPublicKeysDecodeErrorZ extends CommonBase {
        }
 
        static Result_ChannelPublicKeysDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_ChannelPublicKeysDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_ChannelPublicKeysDecodeErrorZ_is_ok(ptr)) {
                        return new Result_ChannelPublicKeysDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_ChannelPublicKeysDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_ChannelPublicKeysDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_ChannelPublicKeysDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_ChannelPublicKeysDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_ChannelPublicKeysDecodeErrorZ clone() {
                number ret = bindings.CResult_ChannelPublicKeysDecodeErrorZ_clone(this.ptr);
                Result_ChannelPublicKeysDecodeErrorZ ret_hu_conv = Result_ChannelPublicKeysDecodeErrorZ.constr_from_ptr(ret);
index df386c17d1e9bb732b6d51e49a8c4e4d243ab92c..32ad42de09bf3991215cfb71a526491345666aac 100644 (file)
@@ -9,7 +9,7 @@ public class Result_ChannelReestablishDecodeErrorZ extends CommonBase {
        }
 
        static Result_ChannelReestablishDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_ChannelReestablishDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_ChannelReestablishDecodeErrorZ_is_ok(ptr)) {
                        return new Result_ChannelReestablishDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_ChannelReestablishDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_ChannelReestablishDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_ChannelReestablishDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_ChannelReestablishDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_ChannelReestablishDecodeErrorZ clone() {
                number ret = bindings.CResult_ChannelReestablishDecodeErrorZ_clone(this.ptr);
                Result_ChannelReestablishDecodeErrorZ ret_hu_conv = Result_ChannelReestablishDecodeErrorZ.constr_from_ptr(ret);
index aa3e3ab298dd99863378abd880c8372a3d9b0731..a8151fa40ab7bdbb1f0ab5b12ccb04dc80ab65ec 100644 (file)
@@ -9,7 +9,7 @@ public class Result_ChannelTransactionParametersDecodeErrorZ extends CommonBase
        }
 
        static Result_ChannelTransactionParametersDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_ChannelTransactionParametersDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_ChannelTransactionParametersDecodeErrorZ_is_ok(ptr)) {
                        return new Result_ChannelTransactionParametersDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_ChannelTransactionParametersDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_ChannelTransactionParametersDecodeErrorZ extends CommonBase
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_ChannelTransactionParametersDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_ChannelTransactionParametersDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_ChannelTransactionParametersDecodeErrorZ clone() {
                number ret = bindings.CResult_ChannelTransactionParametersDecodeErrorZ_clone(this.ptr);
                Result_ChannelTransactionParametersDecodeErrorZ ret_hu_conv = Result_ChannelTransactionParametersDecodeErrorZ.constr_from_ptr(ret);
index 57da57bd26ddfec9193318645599a2831321ea70..0ed98e4e25d00dfb025890d052496a7d7ad62ec6 100644 (file)
@@ -9,7 +9,7 @@ public class Result_ChannelUpdateDecodeErrorZ extends CommonBase {
        }
 
        static Result_ChannelUpdateDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_ChannelUpdateDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_ChannelUpdateDecodeErrorZ_is_ok(ptr)) {
                        return new Result_ChannelUpdateDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_ChannelUpdateDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_ChannelUpdateDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_ChannelUpdateDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_ChannelUpdateDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_ChannelUpdateDecodeErrorZ clone() {
                number ret = bindings.CResult_ChannelUpdateDecodeErrorZ_clone(this.ptr);
                Result_ChannelUpdateDecodeErrorZ ret_hu_conv = Result_ChannelUpdateDecodeErrorZ.constr_from_ptr(ret);
index d7ad4d84ab287860efa812c6b38d17ce4a922406..d3ab07945bf8423cd98749489a722413342c9482 100644 (file)
@@ -9,7 +9,7 @@ public class Result_ClosingSignedDecodeErrorZ extends CommonBase {
        }
 
        static Result_ClosingSignedDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_ClosingSignedDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_ClosingSignedDecodeErrorZ_is_ok(ptr)) {
                        return new Result_ClosingSignedDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_ClosingSignedDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_ClosingSignedDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_ClosingSignedDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_ClosingSignedDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_ClosingSignedDecodeErrorZ clone() {
                number ret = bindings.CResult_ClosingSignedDecodeErrorZ_clone(this.ptr);
                Result_ClosingSignedDecodeErrorZ ret_hu_conv = Result_ClosingSignedDecodeErrorZ.constr_from_ptr(ret);
index 971581fa18d389e30507fe6a35d7d1949544a51f..bf3bc07b0238ae3bbe7ddce0310d663923c80b46 100644 (file)
@@ -9,7 +9,7 @@ public class Result_ClosingSignedFeeRangeDecodeErrorZ extends CommonBase {
        }
 
        static Result_ClosingSignedFeeRangeDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_ClosingSignedFeeRangeDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_ClosingSignedFeeRangeDecodeErrorZ_is_ok(ptr)) {
                        return new Result_ClosingSignedFeeRangeDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_ClosingSignedFeeRangeDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_ClosingSignedFeeRangeDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_ClosingSignedFeeRangeDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_ClosingSignedFeeRangeDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_ClosingSignedFeeRangeDecodeErrorZ clone() {
                number ret = bindings.CResult_ClosingSignedFeeRangeDecodeErrorZ_clone(this.ptr);
                Result_ClosingSignedFeeRangeDecodeErrorZ ret_hu_conv = Result_ClosingSignedFeeRangeDecodeErrorZ.constr_from_ptr(ret);
index fab98b9a7d10d59fee85eac6eb5acb595a38e9b7..69ee5978dace2a21ffd84f1d8aa8ab0783516f08 100644 (file)
@@ -9,7 +9,7 @@ public class Result_CommitmentSignedDecodeErrorZ extends CommonBase {
        }
 
        static Result_CommitmentSignedDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_CommitmentSignedDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_CommitmentSignedDecodeErrorZ_is_ok(ptr)) {
                        return new Result_CommitmentSignedDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_CommitmentSignedDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_CommitmentSignedDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_CommitmentSignedDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_CommitmentSignedDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_CommitmentSignedDecodeErrorZ clone() {
                number ret = bindings.CResult_CommitmentSignedDecodeErrorZ_clone(this.ptr);
                Result_CommitmentSignedDecodeErrorZ ret_hu_conv = Result_CommitmentSignedDecodeErrorZ.constr_from_ptr(ret);
index 6d49cc81c918a5dd9330e4fe726b2645c14bce82..de0ee7c095de17140e84669cb89c32008d312674 100644 (file)
@@ -9,7 +9,7 @@ public class Result_CommitmentTransactionDecodeErrorZ extends CommonBase {
        }
 
        static Result_CommitmentTransactionDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_CommitmentTransactionDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_CommitmentTransactionDecodeErrorZ_is_ok(ptr)) {
                        return new Result_CommitmentTransactionDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_CommitmentTransactionDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_CommitmentTransactionDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_CommitmentTransactionDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_CommitmentTransactionDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_CommitmentTransactionDecodeErrorZ clone() {
                number ret = bindings.CResult_CommitmentTransactionDecodeErrorZ_clone(this.ptr);
                Result_CommitmentTransactionDecodeErrorZ ret_hu_conv = Result_CommitmentTransactionDecodeErrorZ.constr_from_ptr(ret);
index d7b98a10e7860dd714cf63457f7357d9cccb9b1e..2ba9e597a4aa5be44f9427a2088df23971d3b8aa 100644 (file)
@@ -9,7 +9,7 @@ public class Result_CounterpartyChannelTransactionParametersDecodeErrorZ extends
        }
 
        static Result_CounterpartyChannelTransactionParametersDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_CounterpartyChannelTransactionParametersDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_is_ok(ptr)) {
                        return new Result_CounterpartyChannelTransactionParametersDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_CounterpartyChannelTransactionParametersDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_CounterpartyChannelTransactionParametersDecodeErrorZ extends
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_CounterpartyChannelTransactionParametersDecodeErrorZ clone() {
                number ret = bindings.CResult_CounterpartyChannelTransactionParametersDecodeErrorZ_clone(this.ptr);
                Result_CounterpartyChannelTransactionParametersDecodeErrorZ ret_hu_conv = Result_CounterpartyChannelTransactionParametersDecodeErrorZ.constr_from_ptr(ret);
index 41dedd56bc64c69f8ee5a0af7eb71077b2a34119..2a64ba037f018c39d496299775193f1f62ad6d53 100644 (file)
@@ -9,7 +9,7 @@ public class Result_DelayedPaymentOutputDescriptorDecodeErrorZ extends CommonBas
        }
 
        static Result_DelayedPaymentOutputDescriptorDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_DelayedPaymentOutputDescriptorDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_is_ok(ptr)) {
                        return new Result_DelayedPaymentOutputDescriptorDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_DelayedPaymentOutputDescriptorDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_DelayedPaymentOutputDescriptorDecodeErrorZ extends CommonBas
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_DelayedPaymentOutputDescriptorDecodeErrorZ clone() {
                number ret = bindings.CResult_DelayedPaymentOutputDescriptorDecodeErrorZ_clone(this.ptr);
                Result_DelayedPaymentOutputDescriptorDecodeErrorZ ret_hu_conv = Result_DelayedPaymentOutputDescriptorDecodeErrorZ.constr_from_ptr(ret);
index 553a99db213a391b75ff15a7ff0a03f65175ca81..f68ac0f47a40a292b4c532de0c9299f07634ccd9 100644 (file)
@@ -9,7 +9,7 @@ public class Result_DescriptionCreationErrorZ extends CommonBase {
        }
 
        static Result_DescriptionCreationErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_DescriptionCreationErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_DescriptionCreationErrorZ_is_ok(ptr)) {
                        return new Result_DescriptionCreationErrorZ_OK(null, ptr);
                } else {
                        return new Result_DescriptionCreationErrorZ_Err(null, ptr);
@@ -46,6 +46,16 @@ public class Result_DescriptionCreationErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_DescriptionCreationErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_DescriptionCreationErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_DescriptionCreationErrorZ clone() {
                number ret = bindings.CResult_DescriptionCreationErrorZ_clone(this.ptr);
                Result_DescriptionCreationErrorZ ret_hu_conv = Result_DescriptionCreationErrorZ.constr_from_ptr(ret);
index caa6c602a86cb39f163f5f53d51d3ee1d81685aa..352ddcbef22e130cc7bfb9de48be9ca42191aa08 100644 (file)
@@ -9,7 +9,7 @@ public class Result_DirectionalChannelInfoDecodeErrorZ extends CommonBase {
        }
 
        static Result_DirectionalChannelInfoDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_DirectionalChannelInfoDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_DirectionalChannelInfoDecodeErrorZ_is_ok(ptr)) {
                        return new Result_DirectionalChannelInfoDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_DirectionalChannelInfoDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_DirectionalChannelInfoDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_DirectionalChannelInfoDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_DirectionalChannelInfoDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_DirectionalChannelInfoDecodeErrorZ clone() {
                number ret = bindings.CResult_DirectionalChannelInfoDecodeErrorZ_clone(this.ptr);
                Result_DirectionalChannelInfoDecodeErrorZ ret_hu_conv = Result_DirectionalChannelInfoDecodeErrorZ.constr_from_ptr(ret);
index 59e5a53a4fd23ba4e03b7acdccf71e252c9cc7c2..15912b0873ba4cab1c6d8637037d1618d2801cb7 100644 (file)
@@ -9,7 +9,7 @@ public class Result_ErrorMessageDecodeErrorZ extends CommonBase {
        }
 
        static Result_ErrorMessageDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_ErrorMessageDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_ErrorMessageDecodeErrorZ_is_ok(ptr)) {
                        return new Result_ErrorMessageDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_ErrorMessageDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_ErrorMessageDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_ErrorMessageDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_ErrorMessageDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_ErrorMessageDecodeErrorZ clone() {
                number ret = bindings.CResult_ErrorMessageDecodeErrorZ_clone(this.ptr);
                Result_ErrorMessageDecodeErrorZ ret_hu_conv = Result_ErrorMessageDecodeErrorZ.constr_from_ptr(ret);
index b4038d2e0a7bfe68ac97cdd712c1e7c33bf76f10..6e62befde4b757f769cf85b94188a8f837d86276 100644 (file)
@@ -9,7 +9,7 @@ public class Result_ExpiryTimeCreationErrorZ extends CommonBase {
        }
 
        static Result_ExpiryTimeCreationErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_ExpiryTimeCreationErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_ExpiryTimeCreationErrorZ_is_ok(ptr)) {
                        return new Result_ExpiryTimeCreationErrorZ_OK(null, ptr);
                } else {
                        return new Result_ExpiryTimeCreationErrorZ_Err(null, ptr);
@@ -46,6 +46,16 @@ public class Result_ExpiryTimeCreationErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_ExpiryTimeCreationErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_ExpiryTimeCreationErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_ExpiryTimeCreationErrorZ clone() {
                number ret = bindings.CResult_ExpiryTimeCreationErrorZ_clone(this.ptr);
                Result_ExpiryTimeCreationErrorZ ret_hu_conv = Result_ExpiryTimeCreationErrorZ.constr_from_ptr(ret);
index b41267309788335273b64677effe06325cd8004f..07ab44e32a1722e6205ccb5f9f640d4763abf21e 100644 (file)
@@ -9,7 +9,7 @@ public class Result_FundingCreatedDecodeErrorZ extends CommonBase {
        }
 
        static Result_FundingCreatedDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_FundingCreatedDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_FundingCreatedDecodeErrorZ_is_ok(ptr)) {
                        return new Result_FundingCreatedDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_FundingCreatedDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_FundingCreatedDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_FundingCreatedDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_FundingCreatedDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_FundingCreatedDecodeErrorZ clone() {
                number ret = bindings.CResult_FundingCreatedDecodeErrorZ_clone(this.ptr);
                Result_FundingCreatedDecodeErrorZ ret_hu_conv = Result_FundingCreatedDecodeErrorZ.constr_from_ptr(ret);
index ae6717abee3413cacc15369214964e8d1def6b5c..a2432d0c35c56a389cf66e1910506f6a3af077de 100644 (file)
@@ -9,7 +9,7 @@ public class Result_FundingLockedDecodeErrorZ extends CommonBase {
        }
 
        static Result_FundingLockedDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_FundingLockedDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_FundingLockedDecodeErrorZ_is_ok(ptr)) {
                        return new Result_FundingLockedDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_FundingLockedDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_FundingLockedDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_FundingLockedDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_FundingLockedDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_FundingLockedDecodeErrorZ clone() {
                number ret = bindings.CResult_FundingLockedDecodeErrorZ_clone(this.ptr);
                Result_FundingLockedDecodeErrorZ ret_hu_conv = Result_FundingLockedDecodeErrorZ.constr_from_ptr(ret);
index c789c328f859e659629c5afcbb22289ff7501f75..112ad99e8067630d9c829a2e8bf2d4843a17f65e 100644 (file)
@@ -9,7 +9,7 @@ public class Result_FundingSignedDecodeErrorZ extends CommonBase {
        }
 
        static Result_FundingSignedDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_FundingSignedDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_FundingSignedDecodeErrorZ_is_ok(ptr)) {
                        return new Result_FundingSignedDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_FundingSignedDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_FundingSignedDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_FundingSignedDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_FundingSignedDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_FundingSignedDecodeErrorZ clone() {
                number ret = bindings.CResult_FundingSignedDecodeErrorZ_clone(this.ptr);
                Result_FundingSignedDecodeErrorZ ret_hu_conv = Result_FundingSignedDecodeErrorZ.constr_from_ptr(ret);
index 0fe6c279fe5018908d7a0d7d669d6320b0b4ad3e..e867ead0c6c0fdb416ac56e58a2855087e46f48a 100644 (file)
@@ -9,7 +9,7 @@ public class Result_GossipTimestampFilterDecodeErrorZ extends CommonBase {
        }
 
        static Result_GossipTimestampFilterDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_GossipTimestampFilterDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_GossipTimestampFilterDecodeErrorZ_is_ok(ptr)) {
                        return new Result_GossipTimestampFilterDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_GossipTimestampFilterDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_GossipTimestampFilterDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_GossipTimestampFilterDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_GossipTimestampFilterDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_GossipTimestampFilterDecodeErrorZ clone() {
                number ret = bindings.CResult_GossipTimestampFilterDecodeErrorZ_clone(this.ptr);
                Result_GossipTimestampFilterDecodeErrorZ ret_hu_conv = Result_GossipTimestampFilterDecodeErrorZ.constr_from_ptr(ret);
index 56ac8953b2d899127d4a374a48c77cce9781b403..8bcc7e1283e74e06c4f0db05104e749ea2465adf 100644 (file)
@@ -9,7 +9,7 @@ public class Result_HTLCOutputInCommitmentDecodeErrorZ extends CommonBase {
        }
 
        static Result_HTLCOutputInCommitmentDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_HTLCOutputInCommitmentDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_HTLCOutputInCommitmentDecodeErrorZ_is_ok(ptr)) {
                        return new Result_HTLCOutputInCommitmentDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_HTLCOutputInCommitmentDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_HTLCOutputInCommitmentDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_HTLCOutputInCommitmentDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_HTLCOutputInCommitmentDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_HTLCOutputInCommitmentDecodeErrorZ clone() {
                number ret = bindings.CResult_HTLCOutputInCommitmentDecodeErrorZ_clone(this.ptr);
                Result_HTLCOutputInCommitmentDecodeErrorZ ret_hu_conv = Result_HTLCOutputInCommitmentDecodeErrorZ.constr_from_ptr(ret);
index 46409093d1f1839c81e27fc3f4c3e2ce50933cf2..e950edf033280f6b5d93ce6ba27c925c78f5e54e 100644 (file)
@@ -9,7 +9,7 @@ public class Result_HTLCUpdateDecodeErrorZ extends CommonBase {
        }
 
        static Result_HTLCUpdateDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_HTLCUpdateDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_HTLCUpdateDecodeErrorZ_is_ok(ptr)) {
                        return new Result_HTLCUpdateDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_HTLCUpdateDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_HTLCUpdateDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_HTLCUpdateDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_HTLCUpdateDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_HTLCUpdateDecodeErrorZ clone() {
                number ret = bindings.CResult_HTLCUpdateDecodeErrorZ_clone(this.ptr);
                Result_HTLCUpdateDecodeErrorZ ret_hu_conv = Result_HTLCUpdateDecodeErrorZ.constr_from_ptr(ret);
index 7decfef0c2b0e39d6f5b3fb21e779638a2b39b41..432661823dfa457097fecd171ee5e0d9d5f3e00e 100644 (file)
@@ -9,7 +9,7 @@ public class Result_HolderCommitmentTransactionDecodeErrorZ extends CommonBase {
        }
 
        static Result_HolderCommitmentTransactionDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_HolderCommitmentTransactionDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_HolderCommitmentTransactionDecodeErrorZ_is_ok(ptr)) {
                        return new Result_HolderCommitmentTransactionDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_HolderCommitmentTransactionDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_HolderCommitmentTransactionDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_HolderCommitmentTransactionDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_HolderCommitmentTransactionDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_HolderCommitmentTransactionDecodeErrorZ clone() {
                number ret = bindings.CResult_HolderCommitmentTransactionDecodeErrorZ_clone(this.ptr);
                Result_HolderCommitmentTransactionDecodeErrorZ ret_hu_conv = Result_HolderCommitmentTransactionDecodeErrorZ.constr_from_ptr(ret);
index 63692c3e347e85260529aff80b672d9369d127c7..15c4b734c31ea0fa42e7046a1c0b0e50effb9641 100644 (file)
@@ -9,7 +9,7 @@ public class Result_InMemorySignerDecodeErrorZ extends CommonBase {
        }
 
        static Result_InMemorySignerDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_InMemorySignerDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_InMemorySignerDecodeErrorZ_is_ok(ptr)) {
                        return new Result_InMemorySignerDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_InMemorySignerDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_InMemorySignerDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_InMemorySignerDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_InMemorySignerDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_InMemorySignerDecodeErrorZ clone() {
                number ret = bindings.CResult_InMemorySignerDecodeErrorZ_clone(this.ptr);
                Result_InMemorySignerDecodeErrorZ ret_hu_conv = Result_InMemorySignerDecodeErrorZ.constr_from_ptr(ret);
index 5cd3490a949cbb830d6419b3584eb578574a1453..ef549f0dae8bce7c757c9446b2ac75ddae92018a 100644 (file)
@@ -9,7 +9,7 @@ public class Result_InitDecodeErrorZ extends CommonBase {
        }
 
        static Result_InitDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_InitDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_InitDecodeErrorZ_is_ok(ptr)) {
                        return new Result_InitDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_InitDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_InitDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_InitDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_InitDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_InitDecodeErrorZ clone() {
                number ret = bindings.CResult_InitDecodeErrorZ_clone(this.ptr);
                Result_InitDecodeErrorZ ret_hu_conv = Result_InitDecodeErrorZ.constr_from_ptr(ret);
index 0ad8b921d0b5d9906991c7c83a7b25d3e7ff05fe..d3adc2937c2b09fea32cfda7170c74ebed39495b 100644 (file)
@@ -9,7 +9,7 @@ public class Result_InitFeaturesDecodeErrorZ extends CommonBase {
        }
 
        static Result_InitFeaturesDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_InitFeaturesDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_InitFeaturesDecodeErrorZ_is_ok(ptr)) {
                        return new Result_InitFeaturesDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_InitFeaturesDecodeErrorZ_Err(null, ptr);
@@ -49,4 +49,9 @@ public class Result_InitFeaturesDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_InitFeaturesDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
 }
index 1cc8765431e42757136536bc2e62b128a566a10c..e86d913763b000cc8eed0161bb055fbfae481133 100644 (file)
@@ -9,7 +9,7 @@ public class Result_InvoiceFeaturesDecodeErrorZ extends CommonBase {
        }
 
        static Result_InvoiceFeaturesDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_InvoiceFeaturesDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_InvoiceFeaturesDecodeErrorZ_is_ok(ptr)) {
                        return new Result_InvoiceFeaturesDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_InvoiceFeaturesDecodeErrorZ_Err(null, ptr);
@@ -49,4 +49,9 @@ public class Result_InvoiceFeaturesDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_InvoiceFeaturesDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
 }
index 5b765330457a0dd761237f3473a5fe4a879e1d49..689e5cafc6b263ece910be954dc698fc5b540ded 100644 (file)
@@ -9,7 +9,7 @@ public class Result_InvoiceNoneZ extends CommonBase {
        }
 
        static Result_InvoiceNoneZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_InvoiceNoneZ_result_ok(ptr)) {
+               if (bindings.CResult_InvoiceNoneZ_is_ok(ptr)) {
                        return new Result_InvoiceNoneZ_OK(null, ptr);
                } else {
                        return new Result_InvoiceNoneZ_Err(null, ptr);
@@ -44,6 +44,16 @@ public class Result_InvoiceNoneZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_InvoiceNoneZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_InvoiceNoneZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_InvoiceNoneZ clone() {
                number ret = bindings.CResult_InvoiceNoneZ_clone(this.ptr);
                Result_InvoiceNoneZ ret_hu_conv = Result_InvoiceNoneZ.constr_from_ptr(ret);
index 19539891d05eea69bff16cdae0155fe72f92fe91..86271c300fbacf55080e7639e6abf09f62cf3da7 100644 (file)
@@ -9,7 +9,7 @@ public class Result_InvoiceSemanticErrorZ extends CommonBase {
        }
 
        static Result_InvoiceSemanticErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_InvoiceSemanticErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_InvoiceSemanticErrorZ_is_ok(ptr)) {
                        return new Result_InvoiceSemanticErrorZ_OK(null, ptr);
                } else {
                        return new Result_InvoiceSemanticErrorZ_Err(null, ptr);
@@ -46,6 +46,16 @@ public class Result_InvoiceSemanticErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_InvoiceSemanticErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_InvoiceSemanticErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_InvoiceSemanticErrorZ clone() {
                number ret = bindings.CResult_InvoiceSemanticErrorZ_clone(this.ptr);
                Result_InvoiceSemanticErrorZ ret_hu_conv = Result_InvoiceSemanticErrorZ.constr_from_ptr(ret);
index c9578f0470669bf47cf3cb2ca1ac8253e7060b64..c9e7ff57257d53577581fe71171750f437c45936 100644 (file)
@@ -9,7 +9,7 @@ public class Result_InvoiceSignOrCreationErrorZ extends CommonBase {
        }
 
        static Result_InvoiceSignOrCreationErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_InvoiceSignOrCreationErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_InvoiceSignOrCreationErrorZ_is_ok(ptr)) {
                        return new Result_InvoiceSignOrCreationErrorZ_OK(null, ptr);
                } else {
                        return new Result_InvoiceSignOrCreationErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_InvoiceSignOrCreationErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_InvoiceSignOrCreationErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_InvoiceSignOrCreationErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_InvoiceSignOrCreationErrorZ clone() {
                number ret = bindings.CResult_InvoiceSignOrCreationErrorZ_clone(this.ptr);
                Result_InvoiceSignOrCreationErrorZ ret_hu_conv = Result_InvoiceSignOrCreationErrorZ.constr_from_ptr(ret);
index 67ab8e158fb8669b65fb3ef01a599837d6b93a53..28eac6491094505e266901a4439a6cbce2f2c4d1 100644 (file)
@@ -9,7 +9,7 @@ public class Result_LockedChannelMonitorNoneZ extends CommonBase {
        }
 
        static Result_LockedChannelMonitorNoneZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_LockedChannelMonitorNoneZ_result_ok(ptr)) {
+               if (bindings.CResult_LockedChannelMonitorNoneZ_is_ok(ptr)) {
                        return new Result_LockedChannelMonitorNoneZ_OK(null, ptr);
                } else {
                        return new Result_LockedChannelMonitorNoneZ_Err(null, ptr);
@@ -53,4 +53,9 @@ public class Result_LockedChannelMonitorNoneZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_LockedChannelMonitorNoneZ_is_ok(this.ptr);
+               return ret;
+       }
+
 }
index 4324ec8be0a2b796594053dbb0d3b1cf94de8eeb..044797e40b6a4f4baf3b332557938691ca7bf545 100644 (file)
@@ -9,7 +9,7 @@ public class Result_NetAddressDecodeErrorZ extends CommonBase {
        }
 
        static Result_NetAddressDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_NetAddressDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_NetAddressDecodeErrorZ_is_ok(ptr)) {
                        return new Result_NetAddressDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_NetAddressDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_NetAddressDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_NetAddressDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_NetAddressDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_NetAddressDecodeErrorZ clone() {
                number ret = bindings.CResult_NetAddressDecodeErrorZ_clone(this.ptr);
                Result_NetAddressDecodeErrorZ ret_hu_conv = Result_NetAddressDecodeErrorZ.constr_from_ptr(ret);
index 950f8403220d74900235e7c4848c958b076eee4a..111884155a4112d3a7c1f668b554829d8343cc9a 100644 (file)
@@ -9,7 +9,7 @@ public class Result_NetworkGraphDecodeErrorZ extends CommonBase {
        }
 
        static Result_NetworkGraphDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_NetworkGraphDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_NetworkGraphDecodeErrorZ_is_ok(ptr)) {
                        return new Result_NetworkGraphDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_NetworkGraphDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_NetworkGraphDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_NetworkGraphDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_NetworkGraphDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_NetworkGraphDecodeErrorZ clone() {
                number ret = bindings.CResult_NetworkGraphDecodeErrorZ_clone(this.ptr);
                Result_NetworkGraphDecodeErrorZ ret_hu_conv = Result_NetworkGraphDecodeErrorZ.constr_from_ptr(ret);
index a0dba6afab20f8037df01217d1eb959202eef30c..aaab5e96af2670a4debae074e7eb5d26e4c4461a 100644 (file)
@@ -9,7 +9,7 @@ public class Result_NodeAnnouncementDecodeErrorZ extends CommonBase {
        }
 
        static Result_NodeAnnouncementDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_NodeAnnouncementDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_NodeAnnouncementDecodeErrorZ_is_ok(ptr)) {
                        return new Result_NodeAnnouncementDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_NodeAnnouncementDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_NodeAnnouncementDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_NodeAnnouncementDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_NodeAnnouncementDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_NodeAnnouncementDecodeErrorZ clone() {
                number ret = bindings.CResult_NodeAnnouncementDecodeErrorZ_clone(this.ptr);
                Result_NodeAnnouncementDecodeErrorZ ret_hu_conv = Result_NodeAnnouncementDecodeErrorZ.constr_from_ptr(ret);
index 4ce84e362444c292f1643c0907463cffcd7a407d..b8ee77f945ca3a5e8437020220899ae04db09e11 100644 (file)
@@ -9,7 +9,7 @@ public class Result_NodeAnnouncementInfoDecodeErrorZ extends CommonBase {
        }
 
        static Result_NodeAnnouncementInfoDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_NodeAnnouncementInfoDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_NodeAnnouncementInfoDecodeErrorZ_is_ok(ptr)) {
                        return new Result_NodeAnnouncementInfoDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_NodeAnnouncementInfoDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_NodeAnnouncementInfoDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_NodeAnnouncementInfoDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_NodeAnnouncementInfoDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_NodeAnnouncementInfoDecodeErrorZ clone() {
                number ret = bindings.CResult_NodeAnnouncementInfoDecodeErrorZ_clone(this.ptr);
                Result_NodeAnnouncementInfoDecodeErrorZ ret_hu_conv = Result_NodeAnnouncementInfoDecodeErrorZ.constr_from_ptr(ret);
index ce3cbcf27bb03ecd6e603a47eb0a57832c2b51bf..64a8e63805e290476c4c8d5821476c8f86ffb60d 100644 (file)
@@ -9,7 +9,7 @@ public class Result_NodeFeaturesDecodeErrorZ extends CommonBase {
        }
 
        static Result_NodeFeaturesDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_NodeFeaturesDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_NodeFeaturesDecodeErrorZ_is_ok(ptr)) {
                        return new Result_NodeFeaturesDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_NodeFeaturesDecodeErrorZ_Err(null, ptr);
@@ -49,4 +49,9 @@ public class Result_NodeFeaturesDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_NodeFeaturesDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
 }
index 1a6ec7e0a7fdf17ef4c3987fe711cef5f078fcdf..5fb82dc31b3fa6e556b386ebe626a289421113f0 100644 (file)
@@ -9,7 +9,7 @@ public class Result_NodeIdDecodeErrorZ extends CommonBase {
        }
 
        static Result_NodeIdDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_NodeIdDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_NodeIdDecodeErrorZ_is_ok(ptr)) {
                        return new Result_NodeIdDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_NodeIdDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_NodeIdDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_NodeIdDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_NodeIdDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_NodeIdDecodeErrorZ clone() {
                number ret = bindings.CResult_NodeIdDecodeErrorZ_clone(this.ptr);
                Result_NodeIdDecodeErrorZ ret_hu_conv = Result_NodeIdDecodeErrorZ.constr_from_ptr(ret);
index d52fae8d094475257365b13981830019e1fa18f1..3f785d25c3ef97bace3b1fafc11c93d954cf5501 100644 (file)
@@ -9,7 +9,7 @@ public class Result_NodeInfoDecodeErrorZ extends CommonBase {
        }
 
        static Result_NodeInfoDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_NodeInfoDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_NodeInfoDecodeErrorZ_is_ok(ptr)) {
                        return new Result_NodeInfoDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_NodeInfoDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_NodeInfoDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_NodeInfoDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_NodeInfoDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_NodeInfoDecodeErrorZ clone() {
                number ret = bindings.CResult_NodeInfoDecodeErrorZ_clone(this.ptr);
                Result_NodeInfoDecodeErrorZ ret_hu_conv = Result_NodeInfoDecodeErrorZ.constr_from_ptr(ret);
index adc37dd6fc527a3b2af2fd26088eb4486d39049a..76b46084513cbc5858b800e47f2145f783f65a3e 100644 (file)
@@ -9,7 +9,7 @@ public class Result_NoneAPIErrorZ extends CommonBase {
        }
 
        static Result_NoneAPIErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_NoneAPIErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_NoneAPIErrorZ_is_ok(ptr)) {
                        return new Result_NoneAPIErrorZ_OK(null, ptr);
                } else {
                        return new Result_NoneAPIErrorZ_Err(null, ptr);
@@ -44,6 +44,16 @@ public class Result_NoneAPIErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_NoneAPIErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_NoneAPIErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_NoneAPIErrorZ clone() {
                number ret = bindings.CResult_NoneAPIErrorZ_clone(this.ptr);
                Result_NoneAPIErrorZ ret_hu_conv = Result_NoneAPIErrorZ.constr_from_ptr(ret);
index b22b36531a6b7be0a88173cfad509da0ebab8b17..3bfe878ea2485578a4a98b5e704df6c1d0b085fa 100644 (file)
@@ -9,7 +9,7 @@ public class Result_NoneChannelMonitorUpdateErrZ extends CommonBase {
        }
 
        static Result_NoneChannelMonitorUpdateErrZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_NoneChannelMonitorUpdateErrZ_result_ok(ptr)) {
+               if (bindings.CResult_NoneChannelMonitorUpdateErrZ_is_ok(ptr)) {
                        return new Result_NoneChannelMonitorUpdateErrZ_OK(null, ptr);
                } else {
                        return new Result_NoneChannelMonitorUpdateErrZ_Err(null, ptr);
@@ -41,6 +41,16 @@ public class Result_NoneChannelMonitorUpdateErrZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_NoneChannelMonitorUpdateErrZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_NoneChannelMonitorUpdateErrZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_NoneChannelMonitorUpdateErrZ clone() {
                number ret = bindings.CResult_NoneChannelMonitorUpdateErrZ_clone(this.ptr);
                Result_NoneChannelMonitorUpdateErrZ ret_hu_conv = Result_NoneChannelMonitorUpdateErrZ.constr_from_ptr(ret);
index 5e61813f52384b1c18f1c736e1417e05f003576a..7e8df21df291d0c46555532dda58387a3ce23a94 100644 (file)
@@ -9,7 +9,7 @@ public class Result_NoneErrorZ extends CommonBase {
        }
 
        static Result_NoneErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_NoneErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_NoneErrorZ_is_ok(ptr)) {
                        return new Result_NoneErrorZ_OK(null, ptr);
                } else {
                        return new Result_NoneErrorZ_Err(null, ptr);
@@ -41,6 +41,16 @@ public class Result_NoneErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_NoneErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_NoneErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_NoneErrorZ clone() {
                number ret = bindings.CResult_NoneErrorZ_clone(this.ptr);
                Result_NoneErrorZ ret_hu_conv = Result_NoneErrorZ.constr_from_ptr(ret);
index a796ee9e30337aa376875479c2fe96e7643b82fe..8630f41a2bb1343a9daff206ba2d2852194052d3 100644 (file)
@@ -9,7 +9,7 @@ public class Result_NoneLightningErrorZ extends CommonBase {
        }
 
        static Result_NoneLightningErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_NoneLightningErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_NoneLightningErrorZ_is_ok(ptr)) {
                        return new Result_NoneLightningErrorZ_OK(null, ptr);
                } else {
                        return new Result_NoneLightningErrorZ_Err(null, ptr);
@@ -44,6 +44,16 @@ public class Result_NoneLightningErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_NoneLightningErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_NoneLightningErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_NoneLightningErrorZ clone() {
                number ret = bindings.CResult_NoneLightningErrorZ_clone(this.ptr);
                Result_NoneLightningErrorZ ret_hu_conv = Result_NoneLightningErrorZ.constr_from_ptr(ret);
index 75082d32d3c751381291e171aeee277a084b4eb8..78ebc67b6be915c4cd8110495ccbe8348d730385 100644 (file)
@@ -9,7 +9,7 @@ public class Result_NoneMonitorUpdateErrorZ extends CommonBase {
        }
 
        static Result_NoneMonitorUpdateErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_NoneMonitorUpdateErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_NoneMonitorUpdateErrorZ_is_ok(ptr)) {
                        return new Result_NoneMonitorUpdateErrorZ_OK(null, ptr);
                } else {
                        return new Result_NoneMonitorUpdateErrorZ_Err(null, ptr);
@@ -44,6 +44,16 @@ public class Result_NoneMonitorUpdateErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_NoneMonitorUpdateErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_NoneMonitorUpdateErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_NoneMonitorUpdateErrorZ clone() {
                number ret = bindings.CResult_NoneMonitorUpdateErrorZ_clone(this.ptr);
                Result_NoneMonitorUpdateErrorZ ret_hu_conv = Result_NoneMonitorUpdateErrorZ.constr_from_ptr(ret);
index d7939fa1341d29740d15b4d9c3799cc2e1e6138a..4beac56cb7c6f0e5a5efb75c299404e08910b4d0 100644 (file)
@@ -9,7 +9,7 @@ public class Result_NoneNoneZ extends CommonBase {
        }
 
        static Result_NoneNoneZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_NoneNoneZ_result_ok(ptr)) {
+               if (bindings.CResult_NoneNoneZ_is_ok(ptr)) {
                        return new Result_NoneNoneZ_OK(null, ptr);
                } else {
                        return new Result_NoneNoneZ_Err(null, ptr);
@@ -39,6 +39,16 @@ public class Result_NoneNoneZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_NoneNoneZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_NoneNoneZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_NoneNoneZ clone() {
                number ret = bindings.CResult_NoneNoneZ_clone(this.ptr);
                Result_NoneNoneZ ret_hu_conv = Result_NoneNoneZ.constr_from_ptr(ret);
index 69a0ec152546dd433ca1eba998b629f03924d967..73dd48e2a727f101af7389d9b9d3f4105205aeb2 100644 (file)
@@ -9,7 +9,7 @@ public class Result_NonePaymentSendFailureZ extends CommonBase {
        }
 
        static Result_NonePaymentSendFailureZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_NonePaymentSendFailureZ_result_ok(ptr)) {
+               if (bindings.CResult_NonePaymentSendFailureZ_is_ok(ptr)) {
                        return new Result_NonePaymentSendFailureZ_OK(null, ptr);
                } else {
                        return new Result_NonePaymentSendFailureZ_Err(null, ptr);
@@ -44,6 +44,16 @@ public class Result_NonePaymentSendFailureZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_NonePaymentSendFailureZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_NonePaymentSendFailureZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_NonePaymentSendFailureZ clone() {
                number ret = bindings.CResult_NonePaymentSendFailureZ_clone(this.ptr);
                Result_NonePaymentSendFailureZ ret_hu_conv = Result_NonePaymentSendFailureZ.constr_from_ptr(ret);
index 9925e91c9000dcfb508c6bd3bf17a1d1118a7d86..1da48f8663e767c7f43e73344678f05ac74b2317 100644 (file)
@@ -9,7 +9,7 @@ public class Result_NonePeerHandleErrorZ extends CommonBase {
        }
 
        static Result_NonePeerHandleErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_NonePeerHandleErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_NonePeerHandleErrorZ_is_ok(ptr)) {
                        return new Result_NonePeerHandleErrorZ_OK(null, ptr);
                } else {
                        return new Result_NonePeerHandleErrorZ_Err(null, ptr);
@@ -44,6 +44,16 @@ public class Result_NonePeerHandleErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_NonePeerHandleErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_NonePeerHandleErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_NonePeerHandleErrorZ clone() {
                number ret = bindings.CResult_NonePeerHandleErrorZ_clone(this.ptr);
                Result_NonePeerHandleErrorZ ret_hu_conv = Result_NonePeerHandleErrorZ.constr_from_ptr(ret);
index b374cfd52001e5a000a2650d9f6f029d67ef2f57..ec49cdb350ef2596d459ea5b2c0797464ea4a8e2 100644 (file)
@@ -9,7 +9,7 @@ public class Result_NoneSemanticErrorZ extends CommonBase {
        }
 
        static Result_NoneSemanticErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_NoneSemanticErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_NoneSemanticErrorZ_is_ok(ptr)) {
                        return new Result_NoneSemanticErrorZ_OK(null, ptr);
                } else {
                        return new Result_NoneSemanticErrorZ_Err(null, ptr);
@@ -41,6 +41,16 @@ public class Result_NoneSemanticErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_NoneSemanticErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_NoneSemanticErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_NoneSemanticErrorZ clone() {
                number ret = bindings.CResult_NoneSemanticErrorZ_clone(this.ptr);
                Result_NoneSemanticErrorZ ret_hu_conv = Result_NoneSemanticErrorZ.constr_from_ptr(ret);
index 874a9e1dfe2dc2845b553527c9376bca8d9e7f1c..fa1c6389d4508c39592ef8748fbf13af12c2ba14 100644 (file)
@@ -9,7 +9,7 @@ public class Result_OpenChannelDecodeErrorZ extends CommonBase {
        }
 
        static Result_OpenChannelDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_OpenChannelDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_OpenChannelDecodeErrorZ_is_ok(ptr)) {
                        return new Result_OpenChannelDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_OpenChannelDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_OpenChannelDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_OpenChannelDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_OpenChannelDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_OpenChannelDecodeErrorZ clone() {
                number ret = bindings.CResult_OpenChannelDecodeErrorZ_clone(this.ptr);
                Result_OpenChannelDecodeErrorZ ret_hu_conv = Result_OpenChannelDecodeErrorZ.constr_from_ptr(ret);
index 85558e369f218f3489b32862379fbe17a177466d..97099d7c619e6fd5a2f4b36f59bcb7799d55ad47 100644 (file)
@@ -9,7 +9,7 @@ public class Result_OutPointDecodeErrorZ extends CommonBase {
        }
 
        static Result_OutPointDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_OutPointDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_OutPointDecodeErrorZ_is_ok(ptr)) {
                        return new Result_OutPointDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_OutPointDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_OutPointDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_OutPointDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_OutPointDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_OutPointDecodeErrorZ clone() {
                number ret = bindings.CResult_OutPointDecodeErrorZ_clone(this.ptr);
                Result_OutPointDecodeErrorZ ret_hu_conv = Result_OutPointDecodeErrorZ.constr_from_ptr(ret);
index 1eed1cc31d7c5e0ecc6faac8720ea2003a34d778..4a1cf86d9bbd36672c6a476744e8835aa88266ca 100644 (file)
@@ -9,7 +9,7 @@ public class Result_PayeeDecodeErrorZ extends CommonBase {
        }
 
        static Result_PayeeDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_PayeeDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_PayeeDecodeErrorZ_is_ok(ptr)) {
                        return new Result_PayeeDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_PayeeDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_PayeeDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_PayeeDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_PayeeDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_PayeeDecodeErrorZ clone() {
                number ret = bindings.CResult_PayeeDecodeErrorZ_clone(this.ptr);
                Result_PayeeDecodeErrorZ ret_hu_conv = Result_PayeeDecodeErrorZ.constr_from_ptr(ret);
index 871d8843e180485e33a2230c07609e9e9af2d047..1a5c93cdd3bf324af9fd75d1fe9f10f324e3ccdc 100644 (file)
@@ -9,7 +9,7 @@ public class Result_PayeePubKeyErrorZ extends CommonBase {
        }
 
        static Result_PayeePubKeyErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_PayeePubKeyErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_PayeePubKeyErrorZ_is_ok(ptr)) {
                        return new Result_PayeePubKeyErrorZ_OK(null, ptr);
                } else {
                        return new Result_PayeePubKeyErrorZ_Err(null, ptr);
@@ -46,6 +46,16 @@ public class Result_PayeePubKeyErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_PayeePubKeyErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_PayeePubKeyErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_PayeePubKeyErrorZ clone() {
                number ret = bindings.CResult_PayeePubKeyErrorZ_clone(this.ptr);
                Result_PayeePubKeyErrorZ ret_hu_conv = Result_PayeePubKeyErrorZ.constr_from_ptr(ret);
index 7b9eeb214fc450713405849c881d0de02f33203c..31efaae196e3fcdd6b8d48d921c00b1acd8cdfb6 100644 (file)
@@ -9,7 +9,7 @@ public class Result_PaymentIdPaymentErrorZ extends CommonBase {
        }
 
        static Result_PaymentIdPaymentErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_PaymentIdPaymentErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_PaymentIdPaymentErrorZ_is_ok(ptr)) {
                        return new Result_PaymentIdPaymentErrorZ_OK(null, ptr);
                } else {
                        return new Result_PaymentIdPaymentErrorZ_Err(null, ptr);
@@ -35,7 +35,7 @@ public class Result_PaymentIdPaymentErrorZ extends CommonBase {
        }
 
        public static Result_PaymentIdPaymentErrorZ constructor_ok(Uint8Array o) {
-               number ret = bindings.CResult_PaymentIdPaymentErrorZ_ok(o);
+               number ret = bindings.CResult_PaymentIdPaymentErrorZ_ok(InternalUtils.check_arr_len(o, 32));
                Result_PaymentIdPaymentErrorZ ret_hu_conv = Result_PaymentIdPaymentErrorZ.constr_from_ptr(ret);
                return ret_hu_conv;
        }
@@ -46,6 +46,16 @@ public class Result_PaymentIdPaymentErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_PaymentIdPaymentErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_PaymentIdPaymentErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_PaymentIdPaymentErrorZ clone() {
                number ret = bindings.CResult_PaymentIdPaymentErrorZ_clone(this.ptr);
                Result_PaymentIdPaymentErrorZ ret_hu_conv = Result_PaymentIdPaymentErrorZ.constr_from_ptr(ret);
index f55ee0598247859ebf7760d4e4d0cd2d5b04b9a8..c1331d00d92f3c3e72b639f45147c6bb94213ad7 100644 (file)
@@ -9,7 +9,7 @@ public class Result_PaymentIdPaymentSendFailureZ extends CommonBase {
        }
 
        static Result_PaymentIdPaymentSendFailureZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_PaymentIdPaymentSendFailureZ_result_ok(ptr)) {
+               if (bindings.CResult_PaymentIdPaymentSendFailureZ_is_ok(ptr)) {
                        return new Result_PaymentIdPaymentSendFailureZ_OK(null, ptr);
                } else {
                        return new Result_PaymentIdPaymentSendFailureZ_Err(null, ptr);
@@ -35,7 +35,7 @@ public class Result_PaymentIdPaymentSendFailureZ extends CommonBase {
        }
 
        public static Result_PaymentIdPaymentSendFailureZ constructor_ok(Uint8Array o) {
-               number ret = bindings.CResult_PaymentIdPaymentSendFailureZ_ok(o);
+               number ret = bindings.CResult_PaymentIdPaymentSendFailureZ_ok(InternalUtils.check_arr_len(o, 32));
                Result_PaymentIdPaymentSendFailureZ ret_hu_conv = Result_PaymentIdPaymentSendFailureZ.constr_from_ptr(ret);
                return ret_hu_conv;
        }
@@ -46,6 +46,16 @@ public class Result_PaymentIdPaymentSendFailureZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_PaymentIdPaymentSendFailureZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_PaymentIdPaymentSendFailureZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_PaymentIdPaymentSendFailureZ clone() {
                number ret = bindings.CResult_PaymentIdPaymentSendFailureZ_clone(this.ptr);
                Result_PaymentIdPaymentSendFailureZ ret_hu_conv = Result_PaymentIdPaymentSendFailureZ.constr_from_ptr(ret);
index bc1caa2e76f47562ededf8d1e044d5f55d603cea..906f575b5c7e5b19b35a1c8349da40e51bbe7ea2 100644 (file)
@@ -9,7 +9,7 @@ public class Result_PaymentSecretAPIErrorZ extends CommonBase {
        }
 
        static Result_PaymentSecretAPIErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_PaymentSecretAPIErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_PaymentSecretAPIErrorZ_is_ok(ptr)) {
                        return new Result_PaymentSecretAPIErrorZ_OK(null, ptr);
                } else {
                        return new Result_PaymentSecretAPIErrorZ_Err(null, ptr);
@@ -35,7 +35,7 @@ public class Result_PaymentSecretAPIErrorZ extends CommonBase {
        }
 
        public static Result_PaymentSecretAPIErrorZ constructor_ok(Uint8Array o) {
-               number ret = bindings.CResult_PaymentSecretAPIErrorZ_ok(o);
+               number ret = bindings.CResult_PaymentSecretAPIErrorZ_ok(InternalUtils.check_arr_len(o, 32));
                Result_PaymentSecretAPIErrorZ ret_hu_conv = Result_PaymentSecretAPIErrorZ.constr_from_ptr(ret);
                return ret_hu_conv;
        }
@@ -46,6 +46,16 @@ public class Result_PaymentSecretAPIErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_PaymentSecretAPIErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_PaymentSecretAPIErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_PaymentSecretAPIErrorZ clone() {
                number ret = bindings.CResult_PaymentSecretAPIErrorZ_clone(this.ptr);
                Result_PaymentSecretAPIErrorZ ret_hu_conv = Result_PaymentSecretAPIErrorZ.constr_from_ptr(ret);
index f7ee22b9599709e138f73404e53a5ca62e3f6187..5351a3cb5fb0095298dc1a0f090873ae6e93d63a 100644 (file)
@@ -9,7 +9,7 @@ public class Result_PingDecodeErrorZ extends CommonBase {
        }
 
        static Result_PingDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_PingDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_PingDecodeErrorZ_is_ok(ptr)) {
                        return new Result_PingDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_PingDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_PingDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_PingDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_PingDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_PingDecodeErrorZ clone() {
                number ret = bindings.CResult_PingDecodeErrorZ_clone(this.ptr);
                Result_PingDecodeErrorZ ret_hu_conv = Result_PingDecodeErrorZ.constr_from_ptr(ret);
index 1e84dee8703d8f6511f0fa8f3aefe36f46567ed4..10a2eb71f869a32183c296db8175d06113bc05b5 100644 (file)
@@ -9,7 +9,7 @@ public class Result_PongDecodeErrorZ extends CommonBase {
        }
 
        static Result_PongDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_PongDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_PongDecodeErrorZ_is_ok(ptr)) {
                        return new Result_PongDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_PongDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_PongDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_PongDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_PongDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_PongDecodeErrorZ clone() {
                number ret = bindings.CResult_PongDecodeErrorZ_clone(this.ptr);
                Result_PongDecodeErrorZ ret_hu_conv = Result_PongDecodeErrorZ.constr_from_ptr(ret);
index beb9b74f030c743f2f6160858308c3549bdfa5ba..8d5dc04891db33c09b36d62db1abf371adf6c689 100644 (file)
@@ -9,7 +9,7 @@ public class Result_PositiveTimestampCreationErrorZ extends CommonBase {
        }
 
        static Result_PositiveTimestampCreationErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_PositiveTimestampCreationErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_PositiveTimestampCreationErrorZ_is_ok(ptr)) {
                        return new Result_PositiveTimestampCreationErrorZ_OK(null, ptr);
                } else {
                        return new Result_PositiveTimestampCreationErrorZ_Err(null, ptr);
@@ -46,6 +46,16 @@ public class Result_PositiveTimestampCreationErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_PositiveTimestampCreationErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_PositiveTimestampCreationErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_PositiveTimestampCreationErrorZ clone() {
                number ret = bindings.CResult_PositiveTimestampCreationErrorZ_clone(this.ptr);
                Result_PositiveTimestampCreationErrorZ ret_hu_conv = Result_PositiveTimestampCreationErrorZ.constr_from_ptr(ret);
index 37f9b88c44e7bdaecd9e8048281ae77c7bf205f2..4cfd7ba051260ad1a0337d3364f4cc692b9df4ff 100644 (file)
@@ -9,7 +9,7 @@ public class Result_PrivateRouteCreationErrorZ extends CommonBase {
        }
 
        static Result_PrivateRouteCreationErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_PrivateRouteCreationErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_PrivateRouteCreationErrorZ_is_ok(ptr)) {
                        return new Result_PrivateRouteCreationErrorZ_OK(null, ptr);
                } else {
                        return new Result_PrivateRouteCreationErrorZ_Err(null, ptr);
@@ -46,6 +46,16 @@ public class Result_PrivateRouteCreationErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_PrivateRouteCreationErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_PrivateRouteCreationErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_PrivateRouteCreationErrorZ clone() {
                number ret = bindings.CResult_PrivateRouteCreationErrorZ_clone(this.ptr);
                Result_PrivateRouteCreationErrorZ ret_hu_conv = Result_PrivateRouteCreationErrorZ.constr_from_ptr(ret);
index 288fb3ee670d3debf5a144366dd5a722225b70b3..303de7b77700b349cf4185a1d256ff8c8512b477 100644 (file)
@@ -9,7 +9,7 @@ public class Result_PublicKeyErrorZ extends CommonBase {
        }
 
        static Result_PublicKeyErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_PublicKeyErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_PublicKeyErrorZ_is_ok(ptr)) {
                        return new Result_PublicKeyErrorZ_OK(null, ptr);
                } else {
                        return new Result_PublicKeyErrorZ_Err(null, ptr);
@@ -32,7 +32,7 @@ public class Result_PublicKeyErrorZ extends CommonBase {
        }
 
        public static Result_PublicKeyErrorZ constructor_ok(Uint8Array o) {
-               number ret = bindings.CResult_PublicKeyErrorZ_ok(o);
+               number ret = bindings.CResult_PublicKeyErrorZ_ok(InternalUtils.check_arr_len(o, 33));
                Result_PublicKeyErrorZ ret_hu_conv = Result_PublicKeyErrorZ.constr_from_ptr(ret);
                return ret_hu_conv;
        }
@@ -43,6 +43,16 @@ public class Result_PublicKeyErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_PublicKeyErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_PublicKeyErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_PublicKeyErrorZ clone() {
                number ret = bindings.CResult_PublicKeyErrorZ_clone(this.ptr);
                Result_PublicKeyErrorZ ret_hu_conv = Result_PublicKeyErrorZ.constr_from_ptr(ret);
index 94af8564938d1821dd1d586e616045420b09fa20..77695698949a66fd74286bbf6dab2436f2e5ce74 100644 (file)
@@ -9,7 +9,7 @@ public class Result_QueryChannelRangeDecodeErrorZ extends CommonBase {
        }
 
        static Result_QueryChannelRangeDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_QueryChannelRangeDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_QueryChannelRangeDecodeErrorZ_is_ok(ptr)) {
                        return new Result_QueryChannelRangeDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_QueryChannelRangeDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_QueryChannelRangeDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_QueryChannelRangeDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_QueryChannelRangeDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_QueryChannelRangeDecodeErrorZ clone() {
                number ret = bindings.CResult_QueryChannelRangeDecodeErrorZ_clone(this.ptr);
                Result_QueryChannelRangeDecodeErrorZ ret_hu_conv = Result_QueryChannelRangeDecodeErrorZ.constr_from_ptr(ret);
index 4031ee1a9aeb4462e058b15efb078f5f0e5f70b7..7df1f39a5b5c425905554d787b3582098156b25d 100644 (file)
@@ -9,7 +9,7 @@ public class Result_QueryShortChannelIdsDecodeErrorZ extends CommonBase {
        }
 
        static Result_QueryShortChannelIdsDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_QueryShortChannelIdsDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_QueryShortChannelIdsDecodeErrorZ_is_ok(ptr)) {
                        return new Result_QueryShortChannelIdsDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_QueryShortChannelIdsDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_QueryShortChannelIdsDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_QueryShortChannelIdsDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_QueryShortChannelIdsDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_QueryShortChannelIdsDecodeErrorZ clone() {
                number ret = bindings.CResult_QueryShortChannelIdsDecodeErrorZ_clone(this.ptr);
                Result_QueryShortChannelIdsDecodeErrorZ ret_hu_conv = Result_QueryShortChannelIdsDecodeErrorZ.constr_from_ptr(ret);
index 0f03325d87cb8a1e2634c1c1fdb562e0daec8b02..413ac7318d10eff1be7b938febcb70309f53929f 100644 (file)
@@ -9,7 +9,7 @@ public class Result_RecoverableSignatureNoneZ extends CommonBase {
        }
 
        static Result_RecoverableSignatureNoneZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_RecoverableSignatureNoneZ_result_ok(ptr)) {
+               if (bindings.CResult_RecoverableSignatureNoneZ_is_ok(ptr)) {
                        return new Result_RecoverableSignatureNoneZ_OK(null, ptr);
                } else {
                        return new Result_RecoverableSignatureNoneZ_Err(null, ptr);
@@ -30,7 +30,7 @@ public class Result_RecoverableSignatureNoneZ extends CommonBase {
        }
 
        public static Result_RecoverableSignatureNoneZ constructor_ok(Uint8Array arg) {
-               number ret = bindings.CResult_RecoverableSignatureNoneZ_ok(arg);
+               number ret = bindings.CResult_RecoverableSignatureNoneZ_ok(InternalUtils.check_arr_len(arg, 68));
                Result_RecoverableSignatureNoneZ ret_hu_conv = Result_RecoverableSignatureNoneZ.constr_from_ptr(ret);
                return ret_hu_conv;
        }
@@ -41,6 +41,16 @@ public class Result_RecoverableSignatureNoneZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_RecoverableSignatureNoneZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_RecoverableSignatureNoneZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_RecoverableSignatureNoneZ clone() {
                number ret = bindings.CResult_RecoverableSignatureNoneZ_clone(this.ptr);
                Result_RecoverableSignatureNoneZ ret_hu_conv = Result_RecoverableSignatureNoneZ.constr_from_ptr(ret);
index d2217cfc7b26476341afdca9d14bc08c78e86c07..b5af32a46440e3035df5f0642c18bf8c6c3dbeef 100644 (file)
@@ -9,7 +9,7 @@ public class Result_ReplyChannelRangeDecodeErrorZ extends CommonBase {
        }
 
        static Result_ReplyChannelRangeDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_ReplyChannelRangeDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_ReplyChannelRangeDecodeErrorZ_is_ok(ptr)) {
                        return new Result_ReplyChannelRangeDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_ReplyChannelRangeDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_ReplyChannelRangeDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_ReplyChannelRangeDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_ReplyChannelRangeDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_ReplyChannelRangeDecodeErrorZ clone() {
                number ret = bindings.CResult_ReplyChannelRangeDecodeErrorZ_clone(this.ptr);
                Result_ReplyChannelRangeDecodeErrorZ ret_hu_conv = Result_ReplyChannelRangeDecodeErrorZ.constr_from_ptr(ret);
index df3438a887a3d3fa703e4d36b37800afecf99834..94670382d8688ee78f3a035bfb8b65d35e7bb3c9 100644 (file)
@@ -9,7 +9,7 @@ public class Result_ReplyShortChannelIdsEndDecodeErrorZ extends CommonBase {
        }
 
        static Result_ReplyShortChannelIdsEndDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_ReplyShortChannelIdsEndDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_ReplyShortChannelIdsEndDecodeErrorZ_is_ok(ptr)) {
                        return new Result_ReplyShortChannelIdsEndDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_ReplyShortChannelIdsEndDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_ReplyShortChannelIdsEndDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_ReplyShortChannelIdsEndDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_ReplyShortChannelIdsEndDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_ReplyShortChannelIdsEndDecodeErrorZ clone() {
                number ret = bindings.CResult_ReplyShortChannelIdsEndDecodeErrorZ_clone(this.ptr);
                Result_ReplyShortChannelIdsEndDecodeErrorZ ret_hu_conv = Result_ReplyShortChannelIdsEndDecodeErrorZ.constr_from_ptr(ret);
index 3f99cd2827d4768bee1bc66b6b2d2d3377a6908a..7764c368f1bb3c4e520a5ff455238e37f63646d2 100644 (file)
@@ -9,7 +9,7 @@ public class Result_RevokeAndACKDecodeErrorZ extends CommonBase {
        }
 
        static Result_RevokeAndACKDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_RevokeAndACKDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_RevokeAndACKDecodeErrorZ_is_ok(ptr)) {
                        return new Result_RevokeAndACKDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_RevokeAndACKDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_RevokeAndACKDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_RevokeAndACKDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_RevokeAndACKDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_RevokeAndACKDecodeErrorZ clone() {
                number ret = bindings.CResult_RevokeAndACKDecodeErrorZ_clone(this.ptr);
                Result_RevokeAndACKDecodeErrorZ ret_hu_conv = Result_RevokeAndACKDecodeErrorZ.constr_from_ptr(ret);
index 059b0ee2819b7b2cb4dc2f8cc1f28192a11e6438..99794ce41e9b36ad457aef895eb892164be1b3ba 100644 (file)
@@ -9,7 +9,7 @@ public class Result_RouteDecodeErrorZ extends CommonBase {
        }
 
        static Result_RouteDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_RouteDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_RouteDecodeErrorZ_is_ok(ptr)) {
                        return new Result_RouteDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_RouteDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_RouteDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_RouteDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_RouteDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_RouteDecodeErrorZ clone() {
                number ret = bindings.CResult_RouteDecodeErrorZ_clone(this.ptr);
                Result_RouteDecodeErrorZ ret_hu_conv = Result_RouteDecodeErrorZ.constr_from_ptr(ret);
index 1496e3cf4c5b5c90594d7e84d6ec7aac7d2c466f..3b6227134d70fdde2cf76fb82a3887cb79a1e6c8 100644 (file)
@@ -9,7 +9,7 @@ public class Result_RouteHintDecodeErrorZ extends CommonBase {
        }
 
        static Result_RouteHintDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_RouteHintDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_RouteHintDecodeErrorZ_is_ok(ptr)) {
                        return new Result_RouteHintDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_RouteHintDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_RouteHintDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_RouteHintDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_RouteHintDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_RouteHintDecodeErrorZ clone() {
                number ret = bindings.CResult_RouteHintDecodeErrorZ_clone(this.ptr);
                Result_RouteHintDecodeErrorZ ret_hu_conv = Result_RouteHintDecodeErrorZ.constr_from_ptr(ret);
index e6f39c62167a2f045b0e15bb5853d29f31af7872..35c280c1ee62783416a12a0359580e6fd7dbd5c3 100644 (file)
@@ -9,7 +9,7 @@ public class Result_RouteHintHopDecodeErrorZ extends CommonBase {
        }
 
        static Result_RouteHintHopDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_RouteHintHopDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_RouteHintHopDecodeErrorZ_is_ok(ptr)) {
                        return new Result_RouteHintHopDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_RouteHintHopDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_RouteHintHopDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_RouteHintHopDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_RouteHintHopDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_RouteHintHopDecodeErrorZ clone() {
                number ret = bindings.CResult_RouteHintHopDecodeErrorZ_clone(this.ptr);
                Result_RouteHintHopDecodeErrorZ ret_hu_conv = Result_RouteHintHopDecodeErrorZ.constr_from_ptr(ret);
index 6cc99b22a910c65370f5bac2971e7655d9e8b126..a4a3e32969e6d3d5181db5135d4cea92a4c454f4 100644 (file)
@@ -9,7 +9,7 @@ public class Result_RouteHopDecodeErrorZ extends CommonBase {
        }
 
        static Result_RouteHopDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_RouteHopDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_RouteHopDecodeErrorZ_is_ok(ptr)) {
                        return new Result_RouteHopDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_RouteHopDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_RouteHopDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_RouteHopDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_RouteHopDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_RouteHopDecodeErrorZ clone() {
                number ret = bindings.CResult_RouteHopDecodeErrorZ_clone(this.ptr);
                Result_RouteHopDecodeErrorZ ret_hu_conv = Result_RouteHopDecodeErrorZ.constr_from_ptr(ret);
index c7ad17f84d101f8187efd9fbc458ec1f98a71c87..33dc74bf6ade01d864600f51f72a5672f6170562 100644 (file)
@@ -9,7 +9,7 @@ public class Result_RouteLightningErrorZ extends CommonBase {
        }
 
        static Result_RouteLightningErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_RouteLightningErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_RouteLightningErrorZ_is_ok(ptr)) {
                        return new Result_RouteLightningErrorZ_OK(null, ptr);
                } else {
                        return new Result_RouteLightningErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_RouteLightningErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_RouteLightningErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_RouteLightningErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_RouteLightningErrorZ clone() {
                number ret = bindings.CResult_RouteLightningErrorZ_clone(this.ptr);
                Result_RouteLightningErrorZ ret_hu_conv = Result_RouteLightningErrorZ.constr_from_ptr(ret);
index 8c8e18b4ddb25142bbf81660a3410fecb4b61e71..78480fe35b42526055adfa39f0050fd00f260b09 100644 (file)
@@ -9,7 +9,7 @@ public class Result_RouteParametersDecodeErrorZ extends CommonBase {
        }
 
        static Result_RouteParametersDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_RouteParametersDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_RouteParametersDecodeErrorZ_is_ok(ptr)) {
                        return new Result_RouteParametersDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_RouteParametersDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_RouteParametersDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_RouteParametersDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_RouteParametersDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_RouteParametersDecodeErrorZ clone() {
                number ret = bindings.CResult_RouteParametersDecodeErrorZ_clone(this.ptr);
                Result_RouteParametersDecodeErrorZ ret_hu_conv = Result_RouteParametersDecodeErrorZ.constr_from_ptr(ret);
index 0c08bed464a18653cbb733d608856e0164299ead..4c272dfa3c65a8de826e72b63fc614f1e269d7d5 100644 (file)
@@ -9,7 +9,7 @@ public class Result_RoutingFeesDecodeErrorZ extends CommonBase {
        }
 
        static Result_RoutingFeesDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_RoutingFeesDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_RoutingFeesDecodeErrorZ_is_ok(ptr)) {
                        return new Result_RoutingFeesDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_RoutingFeesDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_RoutingFeesDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_RoutingFeesDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_RoutingFeesDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_RoutingFeesDecodeErrorZ clone() {
                number ret = bindings.CResult_RoutingFeesDecodeErrorZ_clone(this.ptr);
                Result_RoutingFeesDecodeErrorZ ret_hu_conv = Result_RoutingFeesDecodeErrorZ.constr_from_ptr(ret);
diff --git a/ts/structs/Result_ScorerDecodeErrorZ.ts b/ts/structs/Result_ScorerDecodeErrorZ.ts
new file mode 100644 (file)
index 0000000..843568b
--- /dev/null
@@ -0,0 +1,66 @@
+
+import CommonBase from './CommonBase';
+import * as bindings from '../bindings' // TODO: figure out location
+
+public class Result_ScorerDecodeErrorZ extends CommonBase {
+       private Result_ScorerDecodeErrorZ(Object _dummy, long ptr) { super(ptr); }
+       protected void finalize() throws Throwable {
+               if (ptr != 0) { bindings.CResult_ScorerDecodeErrorZ_free(ptr); } super.finalize();
+       }
+
+       static Result_ScorerDecodeErrorZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_ScorerDecodeErrorZ_is_ok(ptr)) {
+                       return new Result_ScorerDecodeErrorZ_OK(null, ptr);
+               } else {
+                       return new Result_ScorerDecodeErrorZ_Err(null, ptr);
+               }
+       }
+       public static final class Result_ScorerDecodeErrorZ_OK extends Result_ScorerDecodeErrorZ {
+               public final Scorer res;
+               private Result_ScorerDecodeErrorZ_OK(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       number res = bindings.LDKCResult_ScorerDecodeErrorZ_get_ok(ptr);
+                       const res_hu_conv: Scorer = new Scorer(null, res);
+                       res_hu_conv.ptrs_to.add(this);
+                       this.res = res_hu_conv;
+               }
+       }
+
+       public static final class Result_ScorerDecodeErrorZ_Err extends Result_ScorerDecodeErrorZ {
+               public final DecodeError err;
+               private Result_ScorerDecodeErrorZ_Err(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       number err = bindings.LDKCResult_ScorerDecodeErrorZ_get_err(ptr);
+                       const err_hu_conv: DecodeError = new DecodeError(null, err);
+                       err_hu_conv.ptrs_to.add(this);
+                       this.err = err_hu_conv;
+               }
+       }
+
+       public static Result_ScorerDecodeErrorZ constructor_ok(ScoringParameters o_params) {
+               number ret = bindings.CResult_ScorerDecodeErrorZ_ok(bindings.Scorer_new(o_params == null ? 0 : o_params.ptr & ~1));
+               Result_ScorerDecodeErrorZ ret_hu_conv = Result_ScorerDecodeErrorZ.constr_from_ptr(ret);
+               ret_hu_conv.ptrs_to.add(o_params);
+// Due to rust's strict-ownership memory model, in some cases we need to "move"
+// an object to pass exclusive ownership to the function being called.
+// In most cases, we avoid ret_hu_conv being visible in GC'd languages by cloning the object
+// at the FFI layer, creating a new object which Rust can claim ownership of
+// However, in some cases (eg here), there is no way to clone an object, and thus
+// we actually have to pass full ownership to Rust.
+// Thus, after ret_hu_conv call, o_params is reset to null and is now a dummy object.
+o_params.ptr = 0;
+               return ret_hu_conv;
+       }
+
+       public static Result_ScorerDecodeErrorZ constructor_err(DecodeError e) {
+               number ret = bindings.CResult_ScorerDecodeErrorZ_err(e == null ? 0 : e.ptr & ~1);
+               Result_ScorerDecodeErrorZ ret_hu_conv = Result_ScorerDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_ScorerDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+}
diff --git a/ts/structs/Result_ScoringParametersDecodeErrorZ.ts b/ts/structs/Result_ScoringParametersDecodeErrorZ.ts
new file mode 100644 (file)
index 0000000..742ed89
--- /dev/null
@@ -0,0 +1,57 @@
+
+import CommonBase from './CommonBase';
+import * as bindings from '../bindings' // TODO: figure out location
+
+public class Result_ScoringParametersDecodeErrorZ extends CommonBase {
+       private Result_ScoringParametersDecodeErrorZ(Object _dummy, long ptr) { super(ptr); }
+       protected void finalize() throws Throwable {
+               if (ptr != 0) { bindings.CResult_ScoringParametersDecodeErrorZ_free(ptr); } super.finalize();
+       }
+
+       static Result_ScoringParametersDecodeErrorZ constr_from_ptr(long ptr) {
+               if (bindings.CResult_ScoringParametersDecodeErrorZ_is_ok(ptr)) {
+                       return new Result_ScoringParametersDecodeErrorZ_OK(null, ptr);
+               } else {
+                       return new Result_ScoringParametersDecodeErrorZ_Err(null, ptr);
+               }
+       }
+       public static final class Result_ScoringParametersDecodeErrorZ_OK extends Result_ScoringParametersDecodeErrorZ {
+               public final ScoringParameters res;
+               private Result_ScoringParametersDecodeErrorZ_OK(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       number res = bindings.LDKCResult_ScoringParametersDecodeErrorZ_get_ok(ptr);
+                       const res_hu_conv: ScoringParameters = new ScoringParameters(null, res);
+                       res_hu_conv.ptrs_to.add(this);
+                       this.res = res_hu_conv;
+               }
+       }
+
+       public static final class Result_ScoringParametersDecodeErrorZ_Err extends Result_ScoringParametersDecodeErrorZ {
+               public final DecodeError err;
+               private Result_ScoringParametersDecodeErrorZ_Err(Object _dummy, long ptr) {
+                       super(_dummy, ptr);
+                       number err = bindings.LDKCResult_ScoringParametersDecodeErrorZ_get_err(ptr);
+                       const err_hu_conv: DecodeError = new DecodeError(null, err);
+                       err_hu_conv.ptrs_to.add(this);
+                       this.err = err_hu_conv;
+               }
+       }
+
+       public static Result_ScoringParametersDecodeErrorZ constructor_ok(number o_base_penalty_msat_arg, number o_failure_penalty_msat_arg, number o_failure_penalty_half_life_arg) {
+               number ret = bindings.CResult_ScoringParametersDecodeErrorZ_ok(bindings.ScoringParameters_new(o_base_penalty_msat_arg, o_failure_penalty_msat_arg, o_failure_penalty_half_life_arg));
+               Result_ScoringParametersDecodeErrorZ ret_hu_conv = Result_ScoringParametersDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       public static Result_ScoringParametersDecodeErrorZ constructor_err(DecodeError e) {
+               number ret = bindings.CResult_ScoringParametersDecodeErrorZ_err(e == null ? 0 : e.ptr & ~1);
+               Result_ScoringParametersDecodeErrorZ ret_hu_conv = Result_ScoringParametersDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_ScoringParametersDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+}
index 817da050efb8f0a326f68da4130f6752f54b3864..ae21d631dd85a216b56f65e33619b213a93932b8 100644 (file)
@@ -9,7 +9,7 @@ public class Result_SecretKeyErrorZ extends CommonBase {
        }
 
        static Result_SecretKeyErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_SecretKeyErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_SecretKeyErrorZ_is_ok(ptr)) {
                        return new Result_SecretKeyErrorZ_OK(null, ptr);
                } else {
                        return new Result_SecretKeyErrorZ_Err(null, ptr);
@@ -32,7 +32,7 @@ public class Result_SecretKeyErrorZ extends CommonBase {
        }
 
        public static Result_SecretKeyErrorZ constructor_ok(Uint8Array o) {
-               number ret = bindings.CResult_SecretKeyErrorZ_ok(o);
+               number ret = bindings.CResult_SecretKeyErrorZ_ok(InternalUtils.check_arr_len(o, 32));
                Result_SecretKeyErrorZ ret_hu_conv = Result_SecretKeyErrorZ.constr_from_ptr(ret);
                return ret_hu_conv;
        }
@@ -43,4 +43,9 @@ public class Result_SecretKeyErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_SecretKeyErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
 }
index 98c30c01779131cba26f2f2f016ae8a7965789d2..6eaa72bcc0109a04003a3795de5ddf4be361f23c 100644 (file)
@@ -9,7 +9,7 @@ public class Result_ShutdownDecodeErrorZ extends CommonBase {
        }
 
        static Result_ShutdownDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_ShutdownDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_ShutdownDecodeErrorZ_is_ok(ptr)) {
                        return new Result_ShutdownDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_ShutdownDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_ShutdownDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_ShutdownDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_ShutdownDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_ShutdownDecodeErrorZ clone() {
                number ret = bindings.CResult_ShutdownDecodeErrorZ_clone(this.ptr);
                Result_ShutdownDecodeErrorZ ret_hu_conv = Result_ShutdownDecodeErrorZ.constr_from_ptr(ret);
index b2ec0a9208831d2b41a02d52ab27390e66c447d4..067d8ffd933b25555af3802e9044c73c7f1156fe 100644 (file)
@@ -9,7 +9,7 @@ public class Result_ShutdownScriptDecodeErrorZ extends CommonBase {
        }
 
        static Result_ShutdownScriptDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_ShutdownScriptDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_ShutdownScriptDecodeErrorZ_is_ok(ptr)) {
                        return new Result_ShutdownScriptDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_ShutdownScriptDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_ShutdownScriptDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_ShutdownScriptDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_ShutdownScriptDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_ShutdownScriptDecodeErrorZ clone() {
                number ret = bindings.CResult_ShutdownScriptDecodeErrorZ_clone(this.ptr);
                Result_ShutdownScriptDecodeErrorZ ret_hu_conv = Result_ShutdownScriptDecodeErrorZ.constr_from_ptr(ret);
index 670190b8e256c7ec8e69eb738ad257a92c8b49fe..7fae6c5c1841f31edc54055652895331267574b9 100644 (file)
@@ -9,7 +9,7 @@ public class Result_ShutdownScriptInvalidShutdownScriptZ extends CommonBase {
        }
 
        static Result_ShutdownScriptInvalidShutdownScriptZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_ShutdownScriptInvalidShutdownScriptZ_result_ok(ptr)) {
+               if (bindings.CResult_ShutdownScriptInvalidShutdownScriptZ_is_ok(ptr)) {
                        return new Result_ShutdownScriptInvalidShutdownScriptZ_OK(null, ptr);
                } else {
                        return new Result_ShutdownScriptInvalidShutdownScriptZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_ShutdownScriptInvalidShutdownScriptZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_ShutdownScriptInvalidShutdownScriptZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_ShutdownScriptInvalidShutdownScriptZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_ShutdownScriptInvalidShutdownScriptZ clone() {
                number ret = bindings.CResult_ShutdownScriptInvalidShutdownScriptZ_clone(this.ptr);
                Result_ShutdownScriptInvalidShutdownScriptZ ret_hu_conv = Result_ShutdownScriptInvalidShutdownScriptZ.constr_from_ptr(ret);
index 0bb1c2362d47efd2de1e9323a841a1aef569c6cc..950fe4200535252170b3945afbb013a043b8ccaf 100644 (file)
@@ -9,7 +9,7 @@ public class Result_SiPrefixNoneZ extends CommonBase {
        }
 
        static Result_SiPrefixNoneZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_SiPrefixNoneZ_result_ok(ptr)) {
+               if (bindings.CResult_SiPrefixNoneZ_is_ok(ptr)) {
                        return new Result_SiPrefixNoneZ_OK(null, ptr);
                } else {
                        return new Result_SiPrefixNoneZ_Err(null, ptr);
@@ -41,6 +41,16 @@ public class Result_SiPrefixNoneZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_SiPrefixNoneZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_SiPrefixNoneZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_SiPrefixNoneZ clone() {
                number ret = bindings.CResult_SiPrefixNoneZ_clone(this.ptr);
                Result_SiPrefixNoneZ ret_hu_conv = Result_SiPrefixNoneZ.constr_from_ptr(ret);
index ea9586c461792a3789d115fb809bca8163b33a50..ff486f6c4e9248690aab3e66bea2c080bf11f6dd 100644 (file)
@@ -9,7 +9,7 @@ public class Result_SignDecodeErrorZ extends CommonBase {
        }
 
        static Result_SignDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_SignDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_SignDecodeErrorZ_is_ok(ptr)) {
                        return new Result_SignDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_SignDecodeErrorZ_Err(null, ptr);
@@ -50,6 +50,16 @@ public class Result_SignDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_SignDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_SignDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_SignDecodeErrorZ clone() {
                number ret = bindings.CResult_SignDecodeErrorZ_clone(this.ptr);
                Result_SignDecodeErrorZ ret_hu_conv = Result_SignDecodeErrorZ.constr_from_ptr(ret);
index 5297299e7608b83c21eaefa6244d296698799941..7f1c5a6abef0de9c2dd35c5b8013d8c785af5cb5 100644 (file)
@@ -9,7 +9,7 @@ public class Result_SignatureNoneZ extends CommonBase {
        }
 
        static Result_SignatureNoneZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_SignatureNoneZ_result_ok(ptr)) {
+               if (bindings.CResult_SignatureNoneZ_is_ok(ptr)) {
                        return new Result_SignatureNoneZ_OK(null, ptr);
                } else {
                        return new Result_SignatureNoneZ_Err(null, ptr);
@@ -30,7 +30,7 @@ public class Result_SignatureNoneZ extends CommonBase {
        }
 
        public static Result_SignatureNoneZ constructor_ok(Uint8Array o) {
-               number ret = bindings.CResult_SignatureNoneZ_ok(o);
+               number ret = bindings.CResult_SignatureNoneZ_ok(InternalUtils.check_arr_len(o, 64));
                Result_SignatureNoneZ ret_hu_conv = Result_SignatureNoneZ.constr_from_ptr(ret);
                return ret_hu_conv;
        }
@@ -41,6 +41,16 @@ public class Result_SignatureNoneZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_SignatureNoneZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_SignatureNoneZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_SignatureNoneZ clone() {
                number ret = bindings.CResult_SignatureNoneZ_clone(this.ptr);
                Result_SignatureNoneZ ret_hu_conv = Result_SignatureNoneZ.constr_from_ptr(ret);
index 5c3bdf2b71c718ce4c08bfa53174881114465f70..6b3da462ed52f57fd53bfa92aa81d6cd56d92042 100644 (file)
@@ -9,7 +9,7 @@ public class Result_SignedRawInvoiceNoneZ extends CommonBase {
        }
 
        static Result_SignedRawInvoiceNoneZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_SignedRawInvoiceNoneZ_result_ok(ptr)) {
+               if (bindings.CResult_SignedRawInvoiceNoneZ_is_ok(ptr)) {
                        return new Result_SignedRawInvoiceNoneZ_OK(null, ptr);
                } else {
                        return new Result_SignedRawInvoiceNoneZ_Err(null, ptr);
@@ -44,6 +44,16 @@ public class Result_SignedRawInvoiceNoneZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_SignedRawInvoiceNoneZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_SignedRawInvoiceNoneZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_SignedRawInvoiceNoneZ clone() {
                number ret = bindings.CResult_SignedRawInvoiceNoneZ_clone(this.ptr);
                Result_SignedRawInvoiceNoneZ ret_hu_conv = Result_SignedRawInvoiceNoneZ.constr_from_ptr(ret);
index dda6dbffd073910ba295705148cc7c3d7e6f9f59..37e335904bab730cffceff534ea7ec38b11df00b 100644 (file)
@@ -9,7 +9,7 @@ public class Result_SpendableOutputDescriptorDecodeErrorZ extends CommonBase {
        }
 
        static Result_SpendableOutputDescriptorDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_SpendableOutputDescriptorDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_SpendableOutputDescriptorDecodeErrorZ_is_ok(ptr)) {
                        return new Result_SpendableOutputDescriptorDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_SpendableOutputDescriptorDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_SpendableOutputDescriptorDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_SpendableOutputDescriptorDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_SpendableOutputDescriptorDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_SpendableOutputDescriptorDecodeErrorZ clone() {
                number ret = bindings.CResult_SpendableOutputDescriptorDecodeErrorZ_clone(this.ptr);
                Result_SpendableOutputDescriptorDecodeErrorZ ret_hu_conv = Result_SpendableOutputDescriptorDecodeErrorZ.constr_from_ptr(ret);
index c798e1513e54adf0ad36c92dfc8284126f809e67..3899f62e44e3ac5f111704828959674eb74702bb 100644 (file)
@@ -9,7 +9,7 @@ public class Result_StaticPaymentOutputDescriptorDecodeErrorZ extends CommonBase
        }
 
        static Result_StaticPaymentOutputDescriptorDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_StaticPaymentOutputDescriptorDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_StaticPaymentOutputDescriptorDecodeErrorZ_is_ok(ptr)) {
                        return new Result_StaticPaymentOutputDescriptorDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_StaticPaymentOutputDescriptorDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_StaticPaymentOutputDescriptorDecodeErrorZ extends CommonBase
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_StaticPaymentOutputDescriptorDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_StaticPaymentOutputDescriptorDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_StaticPaymentOutputDescriptorDecodeErrorZ clone() {
                number ret = bindings.CResult_StaticPaymentOutputDescriptorDecodeErrorZ_clone(this.ptr);
                Result_StaticPaymentOutputDescriptorDecodeErrorZ ret_hu_conv = Result_StaticPaymentOutputDescriptorDecodeErrorZ.constr_from_ptr(ret);
index e5c9da4c70c3bed3355bf0773cb31e31098b40b0..b482d250546c450fe6bd79bc3c943030e37a2ad1 100644 (file)
@@ -9,7 +9,7 @@ public class Result_StringErrorZ extends CommonBase {
        }
 
        static Result_StringErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_StringErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_StringErrorZ_is_ok(ptr)) {
                        return new Result_StringErrorZ_OK(null, ptr);
                } else {
                        return new Result_StringErrorZ_Err(null, ptr);
@@ -43,4 +43,9 @@ public class Result_StringErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_StringErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
 }
index 1e51b2e2f639b6c82a5b2860453f443ac94f68dc..b1ccf6b7d9b7708c8ce499a5ceb8caf6f3394621 100644 (file)
@@ -9,7 +9,7 @@ public class Result_TransactionNoneZ extends CommonBase {
        }
 
        static Result_TransactionNoneZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_TransactionNoneZ_result_ok(ptr)) {
+               if (bindings.CResult_TransactionNoneZ_is_ok(ptr)) {
                        return new Result_TransactionNoneZ_OK(null, ptr);
                } else {
                        return new Result_TransactionNoneZ_Err(null, ptr);
@@ -41,6 +41,16 @@ public class Result_TransactionNoneZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_TransactionNoneZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_TransactionNoneZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_TransactionNoneZ clone() {
                number ret = bindings.CResult_TransactionNoneZ_clone(this.ptr);
                Result_TransactionNoneZ ret_hu_conv = Result_TransactionNoneZ.constr_from_ptr(ret);
index 31a100d1c4f34b9332411920334446c444f2ac57..4698edfcc30c02c03199db3a3d3d81acba373454 100644 (file)
@@ -9,7 +9,7 @@ public class Result_TrustedClosingTransactionNoneZ extends CommonBase {
        }
 
        static Result_TrustedClosingTransactionNoneZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_TrustedClosingTransactionNoneZ_result_ok(ptr)) {
+               if (bindings.CResult_TrustedClosingTransactionNoneZ_is_ok(ptr)) {
                        return new Result_TrustedClosingTransactionNoneZ_OK(null, ptr);
                } else {
                        return new Result_TrustedClosingTransactionNoneZ_Err(null, ptr);
@@ -53,4 +53,9 @@ public class Result_TrustedClosingTransactionNoneZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_TrustedClosingTransactionNoneZ_is_ok(this.ptr);
+               return ret;
+       }
+
 }
index 7a29641e5877187afdfeba548bba979a169aa763..406c6d76beac86da854d092aa580bf7a77da26be 100644 (file)
@@ -9,7 +9,7 @@ public class Result_TrustedCommitmentTransactionNoneZ extends CommonBase {
        }
 
        static Result_TrustedCommitmentTransactionNoneZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_TrustedCommitmentTransactionNoneZ_result_ok(ptr)) {
+               if (bindings.CResult_TrustedCommitmentTransactionNoneZ_is_ok(ptr)) {
                        return new Result_TrustedCommitmentTransactionNoneZ_OK(null, ptr);
                } else {
                        return new Result_TrustedCommitmentTransactionNoneZ_Err(null, ptr);
@@ -53,4 +53,9 @@ public class Result_TrustedCommitmentTransactionNoneZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_TrustedCommitmentTransactionNoneZ_is_ok(this.ptr);
+               return ret;
+       }
+
 }
index 079c5132958eb9c2e2acee87acfa4a3f17d1bddd..674477cd0c6cd83d1a66cc84681349f82a52e561 100644 (file)
@@ -9,7 +9,7 @@ public class Result_TxCreationKeysDecodeErrorZ extends CommonBase {
        }
 
        static Result_TxCreationKeysDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_TxCreationKeysDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_TxCreationKeysDecodeErrorZ_is_ok(ptr)) {
                        return new Result_TxCreationKeysDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_TxCreationKeysDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_TxCreationKeysDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_TxCreationKeysDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_TxCreationKeysDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_TxCreationKeysDecodeErrorZ clone() {
                number ret = bindings.CResult_TxCreationKeysDecodeErrorZ_clone(this.ptr);
                Result_TxCreationKeysDecodeErrorZ ret_hu_conv = Result_TxCreationKeysDecodeErrorZ.constr_from_ptr(ret);
index efcb2f496455837a960ee6cbfd15edc80f92eedd..49666976fe995fd2701777134051b871dc3e70cf 100644 (file)
@@ -9,7 +9,7 @@ public class Result_TxCreationKeysErrorZ extends CommonBase {
        }
 
        static Result_TxCreationKeysErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_TxCreationKeysErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_TxCreationKeysErrorZ_is_ok(ptr)) {
                        return new Result_TxCreationKeysErrorZ_OK(null, ptr);
                } else {
                        return new Result_TxCreationKeysErrorZ_Err(null, ptr);
@@ -46,6 +46,16 @@ public class Result_TxCreationKeysErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_TxCreationKeysErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_TxCreationKeysErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_TxCreationKeysErrorZ clone() {
                number ret = bindings.CResult_TxCreationKeysErrorZ_clone(this.ptr);
                Result_TxCreationKeysErrorZ ret_hu_conv = Result_TxCreationKeysErrorZ.constr_from_ptr(ret);
index f72042f9d698e1b493ebd51cb21a84ca9fbdf0c2..fe6a0a7fd71b212dd74a7a1f2d26cc2163567999 100644 (file)
@@ -9,7 +9,7 @@ public class Result_TxOutAccessErrorZ extends CommonBase {
        }
 
        static Result_TxOutAccessErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_TxOutAccessErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_TxOutAccessErrorZ_is_ok(ptr)) {
                        return new Result_TxOutAccessErrorZ_OK(null, ptr);
                } else {
                        return new Result_TxOutAccessErrorZ_Err(null, ptr);
@@ -45,6 +45,16 @@ public class Result_TxOutAccessErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_TxOutAccessErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_TxOutAccessErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_TxOutAccessErrorZ clone() {
                number ret = bindings.CResult_TxOutAccessErrorZ_clone(this.ptr);
                Result_TxOutAccessErrorZ ret_hu_conv = Result_TxOutAccessErrorZ.constr_from_ptr(ret);
index 958a7dd4234d9b61e13a296a684efadf50fed1c2..55f53adfc9b1482707e6cd1fc9d3e27a3b40c56a 100644 (file)
@@ -9,7 +9,7 @@ public class Result_UnsignedChannelAnnouncementDecodeErrorZ extends CommonBase {
        }
 
        static Result_UnsignedChannelAnnouncementDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_UnsignedChannelAnnouncementDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_UnsignedChannelAnnouncementDecodeErrorZ_is_ok(ptr)) {
                        return new Result_UnsignedChannelAnnouncementDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_UnsignedChannelAnnouncementDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_UnsignedChannelAnnouncementDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_UnsignedChannelAnnouncementDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_UnsignedChannelAnnouncementDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_UnsignedChannelAnnouncementDecodeErrorZ clone() {
                number ret = bindings.CResult_UnsignedChannelAnnouncementDecodeErrorZ_clone(this.ptr);
                Result_UnsignedChannelAnnouncementDecodeErrorZ ret_hu_conv = Result_UnsignedChannelAnnouncementDecodeErrorZ.constr_from_ptr(ret);
index 979f6b492a8a38495d673d9d4c16919d62502c66..eeaf83dc35bebfb0aa0a50f58d56db62c1c7eba6 100644 (file)
@@ -9,7 +9,7 @@ public class Result_UnsignedChannelUpdateDecodeErrorZ extends CommonBase {
        }
 
        static Result_UnsignedChannelUpdateDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_UnsignedChannelUpdateDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_UnsignedChannelUpdateDecodeErrorZ_is_ok(ptr)) {
                        return new Result_UnsignedChannelUpdateDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_UnsignedChannelUpdateDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_UnsignedChannelUpdateDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_UnsignedChannelUpdateDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_UnsignedChannelUpdateDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_UnsignedChannelUpdateDecodeErrorZ clone() {
                number ret = bindings.CResult_UnsignedChannelUpdateDecodeErrorZ_clone(this.ptr);
                Result_UnsignedChannelUpdateDecodeErrorZ ret_hu_conv = Result_UnsignedChannelUpdateDecodeErrorZ.constr_from_ptr(ret);
index 0dae74270fa3982b2724a38fea0fce0bb15e82be..d5e2c38cbbd3ff4fe1e292e65ee3df8d67f26dde 100644 (file)
@@ -9,7 +9,7 @@ public class Result_UnsignedNodeAnnouncementDecodeErrorZ extends CommonBase {
        }
 
        static Result_UnsignedNodeAnnouncementDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_UnsignedNodeAnnouncementDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_UnsignedNodeAnnouncementDecodeErrorZ_is_ok(ptr)) {
                        return new Result_UnsignedNodeAnnouncementDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_UnsignedNodeAnnouncementDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_UnsignedNodeAnnouncementDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_UnsignedNodeAnnouncementDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_UnsignedNodeAnnouncementDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_UnsignedNodeAnnouncementDecodeErrorZ clone() {
                number ret = bindings.CResult_UnsignedNodeAnnouncementDecodeErrorZ_clone(this.ptr);
                Result_UnsignedNodeAnnouncementDecodeErrorZ ret_hu_conv = Result_UnsignedNodeAnnouncementDecodeErrorZ.constr_from_ptr(ret);
index 9392c197f09b6bbaaa07c09df7d44694c3fdc8e9..e0cd7e7ea6e4ef95e632f8f54b203a8dfa105391 100644 (file)
@@ -9,7 +9,7 @@ public class Result_UpdateAddHTLCDecodeErrorZ extends CommonBase {
        }
 
        static Result_UpdateAddHTLCDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_UpdateAddHTLCDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_UpdateAddHTLCDecodeErrorZ_is_ok(ptr)) {
                        return new Result_UpdateAddHTLCDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_UpdateAddHTLCDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_UpdateAddHTLCDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_UpdateAddHTLCDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_UpdateAddHTLCDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_UpdateAddHTLCDecodeErrorZ clone() {
                number ret = bindings.CResult_UpdateAddHTLCDecodeErrorZ_clone(this.ptr);
                Result_UpdateAddHTLCDecodeErrorZ ret_hu_conv = Result_UpdateAddHTLCDecodeErrorZ.constr_from_ptr(ret);
index 7be6bd51f97028662af42dbc0d6bb90a5b24089d..20f471a6ca16f3a9bdbe6ab149eea15774bc0a73 100644 (file)
@@ -9,7 +9,7 @@ public class Result_UpdateFailHTLCDecodeErrorZ extends CommonBase {
        }
 
        static Result_UpdateFailHTLCDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_UpdateFailHTLCDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_UpdateFailHTLCDecodeErrorZ_is_ok(ptr)) {
                        return new Result_UpdateFailHTLCDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_UpdateFailHTLCDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_UpdateFailHTLCDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_UpdateFailHTLCDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_UpdateFailHTLCDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_UpdateFailHTLCDecodeErrorZ clone() {
                number ret = bindings.CResult_UpdateFailHTLCDecodeErrorZ_clone(this.ptr);
                Result_UpdateFailHTLCDecodeErrorZ ret_hu_conv = Result_UpdateFailHTLCDecodeErrorZ.constr_from_ptr(ret);
index 7777a8a082ac4f0448386a1fb48c3afc01903beb..4066e0b5b73b0fe4c68af9ca95dfb9ebaa6964ff 100644 (file)
@@ -9,7 +9,7 @@ public class Result_UpdateFailMalformedHTLCDecodeErrorZ extends CommonBase {
        }
 
        static Result_UpdateFailMalformedHTLCDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_UpdateFailMalformedHTLCDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_UpdateFailMalformedHTLCDecodeErrorZ_is_ok(ptr)) {
                        return new Result_UpdateFailMalformedHTLCDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_UpdateFailMalformedHTLCDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_UpdateFailMalformedHTLCDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_UpdateFailMalformedHTLCDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_UpdateFailMalformedHTLCDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_UpdateFailMalformedHTLCDecodeErrorZ clone() {
                number ret = bindings.CResult_UpdateFailMalformedHTLCDecodeErrorZ_clone(this.ptr);
                Result_UpdateFailMalformedHTLCDecodeErrorZ ret_hu_conv = Result_UpdateFailMalformedHTLCDecodeErrorZ.constr_from_ptr(ret);
index a7488f364d0206227e0fb17f22c5bcd0583138cb..09fbb33302aaa26e07131d3382ae8c8d67b0a80e 100644 (file)
@@ -9,7 +9,7 @@ public class Result_UpdateFeeDecodeErrorZ extends CommonBase {
        }
 
        static Result_UpdateFeeDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_UpdateFeeDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_UpdateFeeDecodeErrorZ_is_ok(ptr)) {
                        return new Result_UpdateFeeDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_UpdateFeeDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_UpdateFeeDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_UpdateFeeDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_UpdateFeeDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_UpdateFeeDecodeErrorZ clone() {
                number ret = bindings.CResult_UpdateFeeDecodeErrorZ_clone(this.ptr);
                Result_UpdateFeeDecodeErrorZ ret_hu_conv = Result_UpdateFeeDecodeErrorZ.constr_from_ptr(ret);
index f054b92fdd7473deace155cea4abc35c795ce9c8..7104ca83ad66357add7a3587785bad521c372a83 100644 (file)
@@ -9,7 +9,7 @@ public class Result_UpdateFulfillHTLCDecodeErrorZ extends CommonBase {
        }
 
        static Result_UpdateFulfillHTLCDecodeErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_UpdateFulfillHTLCDecodeErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_UpdateFulfillHTLCDecodeErrorZ_is_ok(ptr)) {
                        return new Result_UpdateFulfillHTLCDecodeErrorZ_OK(null, ptr);
                } else {
                        return new Result_UpdateFulfillHTLCDecodeErrorZ_Err(null, ptr);
@@ -49,6 +49,16 @@ public class Result_UpdateFulfillHTLCDecodeErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_UpdateFulfillHTLCDecodeErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_UpdateFulfillHTLCDecodeErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_UpdateFulfillHTLCDecodeErrorZ clone() {
                number ret = bindings.CResult_UpdateFulfillHTLCDecodeErrorZ_clone(this.ptr);
                Result_UpdateFulfillHTLCDecodeErrorZ ret_hu_conv = Result_UpdateFulfillHTLCDecodeErrorZ.constr_from_ptr(ret);
index f31052779c3feef2b0868804cee4daa927f363b5..bd0a59b0091864a046ee4db5a1bf27572a1cfe25 100644 (file)
@@ -9,7 +9,7 @@ public class Result__u832APIErrorZ extends CommonBase {
        }
 
        static Result__u832APIErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult__u832APIErrorZ_result_ok(ptr)) {
+               if (bindings.CResult__u832APIErrorZ_is_ok(ptr)) {
                        return new Result__u832APIErrorZ_OK(null, ptr);
                } else {
                        return new Result__u832APIErrorZ_Err(null, ptr);
@@ -35,7 +35,7 @@ public class Result__u832APIErrorZ extends CommonBase {
        }
 
        public static Result__u832APIErrorZ constructor_ok(Uint8Array o) {
-               number ret = bindings.CResult__u832APIErrorZ_ok(o);
+               number ret = bindings.CResult__u832APIErrorZ_ok(InternalUtils.check_arr_len(o, 32));
                Result__u832APIErrorZ ret_hu_conv = Result__u832APIErrorZ.constr_from_ptr(ret);
                return ret_hu_conv;
        }
@@ -46,6 +46,16 @@ public class Result__u832APIErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult__u832APIErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult__u832APIErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result__u832APIErrorZ clone() {
                number ret = bindings.CResult__u832APIErrorZ_clone(this.ptr);
                Result__u832APIErrorZ ret_hu_conv = Result__u832APIErrorZ.constr_from_ptr(ret);
index 803ef06d87a013ec97269915d1e1242c31272366..021bd8722c5fe56c5a45bbdc15dcee92556b14a0 100644 (file)
@@ -9,7 +9,7 @@ public class Result_boolLightningErrorZ extends CommonBase {
        }
 
        static Result_boolLightningErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_boolLightningErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_boolLightningErrorZ_is_ok(ptr)) {
                        return new Result_boolLightningErrorZ_OK(null, ptr);
                } else {
                        return new Result_boolLightningErrorZ_Err(null, ptr);
@@ -46,6 +46,16 @@ public class Result_boolLightningErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_boolLightningErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_boolLightningErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_boolLightningErrorZ clone() {
                number ret = bindings.CResult_boolLightningErrorZ_clone(this.ptr);
                Result_boolLightningErrorZ ret_hu_conv = Result_boolLightningErrorZ.constr_from_ptr(ret);
index 337145dcd09206f867d5ce7582944f91fb08d840..2d8e096a88d0f51114a3955d55e47c4dc617b5ed 100644 (file)
@@ -9,7 +9,7 @@ public class Result_boolPeerHandleErrorZ extends CommonBase {
        }
 
        static Result_boolPeerHandleErrorZ constr_from_ptr(long ptr) {
-               if (bindings.LDKCResult_boolPeerHandleErrorZ_result_ok(ptr)) {
+               if (bindings.CResult_boolPeerHandleErrorZ_is_ok(ptr)) {
                        return new Result_boolPeerHandleErrorZ_OK(null, ptr);
                } else {
                        return new Result_boolPeerHandleErrorZ_Err(null, ptr);
@@ -46,6 +46,16 @@ public class Result_boolPeerHandleErrorZ extends CommonBase {
                return ret_hu_conv;
        }
 
+       public boolean is_ok() {
+               boolean ret = bindings.CResult_boolPeerHandleErrorZ_is_ok(this.ptr);
+               return ret;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.CResult_boolPeerHandleErrorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Result_boolPeerHandleErrorZ clone() {
                number ret = bindings.CResult_boolPeerHandleErrorZ_clone(this.ptr);
                Result_boolPeerHandleErrorZ ret_hu_conv = Result_boolPeerHandleErrorZ.constr_from_ptr(ret);
index a01632d833cd6c2aae26f16ef221c653f6873364..d844d6edf97e7a91baf7291f1ecbeb3560cfa594 100644 (file)
@@ -34,6 +34,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.RetryAttempts_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public RetryAttempts clone() {
                number ret = bindings.RetryAttempts_clone(this.ptr);
                const ret_hu_conv: RetryAttempts = new RetryAttempts(null, ret);
index d521246952e6f179e61e07076dab1efe544ba542..b472040373b29021408a1899d93ad8adee7d975e 100644 (file)
@@ -24,7 +24,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_channel_id(Uint8Array val) {
-               bindings.RevokeAndACK_set_channel_id(this.ptr, val);
+               bindings.RevokeAndACK_set_channel_id(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        public Uint8Array get_per_commitment_secret() {
@@ -33,7 +33,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_per_commitment_secret(Uint8Array val) {
-               bindings.RevokeAndACK_set_per_commitment_secret(this.ptr, val);
+               bindings.RevokeAndACK_set_per_commitment_secret(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        public Uint8Array get_next_per_commitment_point() {
@@ -42,16 +42,21 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_next_per_commitment_point(Uint8Array val) {
-               bindings.RevokeAndACK_set_next_per_commitment_point(this.ptr, val);
+               bindings.RevokeAndACK_set_next_per_commitment_point(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        public static RevokeAndACK constructor_new(Uint8Array channel_id_arg, Uint8Array per_commitment_secret_arg, Uint8Array next_per_commitment_point_arg) {
-               number ret = bindings.RevokeAndACK_new(channel_id_arg, per_commitment_secret_arg, next_per_commitment_point_arg);
+               number ret = bindings.RevokeAndACK_new(InternalUtils.check_arr_len(channel_id_arg, 32), InternalUtils.check_arr_len(per_commitment_secret_arg, 32), InternalUtils.check_arr_len(next_per_commitment_point_arg, 33));
                const ret_hu_conv: RevokeAndACK = new RevokeAndACK(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.RevokeAndACK_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public RevokeAndACK clone() {
                number ret = bindings.RevokeAndACK_clone(this.ptr);
                const ret_hu_conv: RevokeAndACK = new RevokeAndACK(null, ret);
index e0810374ba42ea318173784204adf96372d1d865..0335254b1014b8baf3238a869daadafd43f82dcb 100644 (file)
@@ -57,6 +57,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.Route_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Route clone() {
                number ret = bindings.Route_clone(this.ptr);
                const ret_hu_conv: Route = new Route(null, ret);
index dfd723259dc070f90945f3e6f34072f5a99c824f..05604200805abecd84c3e7421b9578688a900f29 100644 (file)
@@ -41,6 +41,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.RouteHint_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public RouteHint clone() {
                number ret = bindings.RouteHint_clone(this.ptr);
                const ret_hu_conv: RouteHint = new RouteHint(null, ret);
index dc25be939c4cfce29f38e340fd51729b78b9e3b9..a211023c72495b3525c8258025b6c674c0fc16bd 100644 (file)
@@ -24,7 +24,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_src_node_id(Uint8Array val) {
-               bindings.RouteHintHop_set_src_node_id(this.ptr, val);
+               bindings.RouteHintHop_set_src_node_id(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        public number get_short_channel_id() {
@@ -79,12 +79,17 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public static RouteHintHop constructor_new(Uint8Array src_node_id_arg, number short_channel_id_arg, RoutingFees fees_arg, number cltv_expiry_delta_arg, Option_u64Z htlc_minimum_msat_arg, Option_u64Z htlc_maximum_msat_arg) {
-               number ret = bindings.RouteHintHop_new(src_node_id_arg, short_channel_id_arg, fees_arg == null ? 0 : fees_arg.ptr & ~1, cltv_expiry_delta_arg, htlc_minimum_msat_arg.ptr, htlc_maximum_msat_arg.ptr);
+               number ret = bindings.RouteHintHop_new(InternalUtils.check_arr_len(src_node_id_arg, 33), short_channel_id_arg, fees_arg == null ? 0 : fees_arg.ptr & ~1, cltv_expiry_delta_arg, htlc_minimum_msat_arg.ptr, htlc_maximum_msat_arg.ptr);
                const ret_hu_conv: RouteHintHop = new RouteHintHop(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.RouteHintHop_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public RouteHintHop clone() {
                number ret = bindings.RouteHintHop_clone(this.ptr);
                const ret_hu_conv: RouteHintHop = new RouteHintHop(null, ret);
index b3ba3d73695b8e7667bebbf0be8c9bc8401253b6..af9e0616336880c532ef2cedd274c4def631f52c 100644 (file)
@@ -24,7 +24,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_pubkey(Uint8Array val) {
-               bindings.RouteHop_set_pubkey(this.ptr, val);
+               bindings.RouteHop_set_pubkey(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        public NodeFeatures get_node_features() {
@@ -77,12 +77,17 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public static RouteHop constructor_new(Uint8Array pubkey_arg, NodeFeatures node_features_arg, number short_channel_id_arg, ChannelFeatures channel_features_arg, number fee_msat_arg, number cltv_expiry_delta_arg) {
-               number ret = bindings.RouteHop_new(pubkey_arg, node_features_arg == null ? 0 : node_features_arg.ptr & ~1, short_channel_id_arg, channel_features_arg == null ? 0 : channel_features_arg.ptr & ~1, fee_msat_arg, cltv_expiry_delta_arg);
+               number ret = bindings.RouteHop_new(InternalUtils.check_arr_len(pubkey_arg, 33), node_features_arg == null ? 0 : node_features_arg.ptr & ~1, short_channel_id_arg, channel_features_arg == null ? 0 : channel_features_arg.ptr & ~1, fee_msat_arg, cltv_expiry_delta_arg);
                const ret_hu_conv: RouteHop = new RouteHop(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.RouteHop_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public RouteHop clone() {
                number ret = bindings.RouteHop_clone(this.ptr);
                const ret_hu_conv: RouteHop = new RouteHop(null, ret);
index fa67e170577387b85c78c7d76f6cab0bfd3e9b10..304e319054f4bcac281b38bfff0206dd7627caed 100644 (file)
@@ -54,6 +54,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.RouteParameters_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public RouteParameters clone() {
                number ret = bindings.RouteParameters_clone(this.ptr);
                const ret_hu_conv: RouteParameters = new RouteParameters(null, ret);
index 4b7dd59336217b7e7a4f07d8866e8249b7615379..98467779d1aee20474d5ffc2246e255b69941051 100644 (file)
@@ -44,7 +44,7 @@ import * as bindings from '../bindings' // TODO: figure out location
                                                        Score ret_hu_conv = new Score(null, scorer);
                                ret_hu_conv.ptrs_to.add(this);
                                                        Result_RouteLightningErrorZ ret = arg.find_route(payer, params_hu_conv, first_hops_conv_16_arr, ret_hu_conv);
-                               result: number = ret != null ? ret.ptr : 0;
+                               result: number = ret == null ? 0 : ret.clone_ptr();
                                return result;
                                                },
 
@@ -63,7 +63,7 @@ import * as bindings from '../bindings' // TODO: figure out location
                 held: Router;
             }
        public Result_RouteLightningErrorZ find_route(Uint8Array payer, RouteParameters params, ChannelDetails[] first_hops, Score scorer) {
-               number ret = bindings.Router_find_route(this.ptr, payer, params == null ? 0 : params.ptr & ~1, first_hops != null ? Arrays.stream(first_hops).map(first_hops_conv_16 -> first_hops_conv_16 == null ? 0 : first_hops_conv_16.ptr & ~1).toArray(number[]::new) : null, scorer == null ? 0 : scorer.ptr);
+               number ret = bindings.Router_find_route(this.ptr, InternalUtils.check_arr_len(payer, 33), params == null ? 0 : params.ptr & ~1, first_hops != null ? Arrays.stream(first_hops).map(first_hops_conv_16 -> first_hops_conv_16 == null ? 0 : first_hops_conv_16.ptr & ~1).toArray(number[]::new) : null, scorer == null ? 0 : scorer.ptr);
                Result_RouteLightningErrorZ ret_hu_conv = Result_RouteLightningErrorZ.constr_from_ptr(ret);
                this.ptrs_to.add(params);
                for (ChannelDetails first_hops_conv_16: first_hops) { this.ptrs_to.add(first_hops_conv_16); };
index 2fb461a4567ffaa617e6b828992ebcf07a77e37e..494a0fb1ee5a7f86313691471f0a1a7c62fda7c0 100644 (file)
@@ -49,6 +49,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                return ret;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.RoutingFees_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public RoutingFees clone() {
                number ret = bindings.RoutingFees_clone(this.ptr);
                const ret_hu_conv: RoutingFees = new RoutingFees(null, ret);
index c83f25abdb775e321b7f96419ef2bd3456fc83fb..263b67c09ef8c6401661d3b1deab8308ad21bc04 100644 (file)
@@ -36,33 +36,33 @@ import * as bindings from '../bindings' // TODO: figure out location
                         handle_node_announcement (msg: number): number {
                                                        const msg_hu_conv: NodeAnnouncement = new NodeAnnouncement(null, msg);
                                                        Result_boolLightningErrorZ ret = arg.handle_node_announcement(msg_hu_conv);
-                               result: number = ret != null ? ret.ptr : 0;
+                               result: number = ret == null ? 0 : ret.clone_ptr();
                                return result;
                                                },
 
                                                handle_channel_announcement (msg: number): number {
                                                        const msg_hu_conv: ChannelAnnouncement = new ChannelAnnouncement(null, msg);
                                                        Result_boolLightningErrorZ ret = arg.handle_channel_announcement(msg_hu_conv);
-                               result: number = ret != null ? ret.ptr : 0;
+                               result: number = ret == null ? 0 : ret.clone_ptr();
                                return result;
                                                },
 
                                                handle_channel_update (msg: number): number {
                                                        const msg_hu_conv: ChannelUpdate = new ChannelUpdate(null, msg);
                                                        Result_boolLightningErrorZ ret = arg.handle_channel_update(msg_hu_conv);
-                               result: number = ret != null ? ret.ptr : 0;
+                               result: number = ret == null ? 0 : ret.clone_ptr();
                                return result;
                                                },
 
                                                get_next_channel_announcements (starting_point: number, batch_amount: number): number[] {
                                                        ThreeTuple_ChannelAnnouncementChannelUpdateChannelUpdateZ[] ret = arg.get_next_channel_announcements(starting_point, batch_amount);
-                               result: number[] = ret != null ? Arrays.stream(ret).map(ret_conv_59 -> ret_conv_59 != null ? ret_conv_59.ptr : 0).toArray(number[]::new) : null;
+                               result: number[] = ret != null ? Arrays.stream(ret).map(ret_conv_59 -> ret_conv_59 == null ? 0 : ret_conv_59.clone_ptr()).toArray(number[]::new) : null;
                                return result;
                                                },
 
                                                get_next_node_announcements (starting_point: Uint8Array, batch_amount: number): number[] {
                                                        NodeAnnouncement[] ret = arg.get_next_node_announcements(starting_point, batch_amount);
-                               result: number[] = ret != null ? Arrays.stream(ret).map(ret_conv_18 -> ret_conv_18 == null ? 0 : ret_conv_18.ptr & ~1).toArray(number[]::new) : null;
+                               result: number[] = ret != null ? Arrays.stream(ret).map(ret_conv_18 -> ret_conv_18 == null ? 0 : ret_conv_18.clone_ptr()).toArray(number[]::new) : null;
                                return result;
                                                },
 
@@ -75,7 +75,7 @@ import * as bindings from '../bindings' // TODO: figure out location
                                                        const msg_hu_conv: ReplyChannelRange = new ReplyChannelRange(null, msg);
                                msg_hu_conv.ptrs_to.add(this);
                                                        Result_NoneLightningErrorZ ret = arg.handle_reply_channel_range(their_node_id, msg_hu_conv);
-                               result: number = ret != null ? ret.ptr : 0;
+                               result: number = ret == null ? 0 : ret.clone_ptr();
                                return result;
                                                },
 
@@ -83,7 +83,7 @@ import * as bindings from '../bindings' // TODO: figure out location
                                                        const msg_hu_conv: ReplyShortChannelIdsEnd = new ReplyShortChannelIdsEnd(null, msg);
                                msg_hu_conv.ptrs_to.add(this);
                                                        Result_NoneLightningErrorZ ret = arg.handle_reply_short_channel_ids_end(their_node_id, msg_hu_conv);
-                               result: number = ret != null ? ret.ptr : 0;
+                               result: number = ret == null ? 0 : ret.clone_ptr();
                                return result;
                                                },
 
@@ -91,7 +91,7 @@ import * as bindings from '../bindings' // TODO: figure out location
                                                        const msg_hu_conv: QueryChannelRange = new QueryChannelRange(null, msg);
                                msg_hu_conv.ptrs_to.add(this);
                                                        Result_NoneLightningErrorZ ret = arg.handle_query_channel_range(their_node_id, msg_hu_conv);
-                               result: number = ret != null ? ret.ptr : 0;
+                               result: number = ret == null ? 0 : ret.clone_ptr();
                                return result;
                                                },
 
@@ -99,7 +99,7 @@ import * as bindings from '../bindings' // TODO: figure out location
                                                        const msg_hu_conv: QueryShortChannelIds = new QueryShortChannelIds(null, msg);
                                msg_hu_conv.ptrs_to.add(this);
                                                        Result_NoneLightningErrorZ ret = arg.handle_query_short_channel_ids(their_node_id, msg_hu_conv);
-                               result: number = ret != null ? ret.ptr : 0;
+                               result: number = ret == null ? 0 : ret.clone_ptr();
                                return result;
                                                },
 
@@ -160,7 +160,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public NodeAnnouncement[] get_next_node_announcements(Uint8Array starting_point, number batch_amount) {
-               number[] ret = bindings.RoutingMessageHandler_get_next_node_announcements(this.ptr, starting_point, batch_amount);
+               number[] ret = bindings.RoutingMessageHandler_get_next_node_announcements(this.ptr, InternalUtils.check_arr_len(starting_point, 33), batch_amount);
                NodeAnnouncement[] ret_conv_18_arr = new NodeAnnouncement[ret.length];
                for (int s = 0; s < ret.length; s++) {
                        number ret_conv_18 = ret[s];
@@ -172,30 +172,30 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void sync_routing_table(Uint8Array their_node_id, Init init) {
-               bindings.RoutingMessageHandler_sync_routing_table(this.ptr, their_node_id, init == null ? 0 : init.ptr & ~1);
+               bindings.RoutingMessageHandler_sync_routing_table(this.ptr, InternalUtils.check_arr_len(their_node_id, 33), init == null ? 0 : init.ptr & ~1);
                this.ptrs_to.add(init);
        }
 
        public Result_NoneLightningErrorZ handle_reply_channel_range(Uint8Array their_node_id, ReplyChannelRange msg) {
-               number ret = bindings.RoutingMessageHandler_handle_reply_channel_range(this.ptr, their_node_id, msg == null ? 0 : msg.ptr & ~1);
+               number ret = bindings.RoutingMessageHandler_handle_reply_channel_range(this.ptr, InternalUtils.check_arr_len(their_node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                Result_NoneLightningErrorZ ret_hu_conv = Result_NoneLightningErrorZ.constr_from_ptr(ret);
                return ret_hu_conv;
        }
 
        public Result_NoneLightningErrorZ handle_reply_short_channel_ids_end(Uint8Array their_node_id, ReplyShortChannelIdsEnd msg) {
-               number ret = bindings.RoutingMessageHandler_handle_reply_short_channel_ids_end(this.ptr, their_node_id, msg == null ? 0 : msg.ptr & ~1);
+               number ret = bindings.RoutingMessageHandler_handle_reply_short_channel_ids_end(this.ptr, InternalUtils.check_arr_len(their_node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                Result_NoneLightningErrorZ ret_hu_conv = Result_NoneLightningErrorZ.constr_from_ptr(ret);
                return ret_hu_conv;
        }
 
        public Result_NoneLightningErrorZ handle_query_channel_range(Uint8Array their_node_id, QueryChannelRange msg) {
-               number ret = bindings.RoutingMessageHandler_handle_query_channel_range(this.ptr, their_node_id, msg == null ? 0 : msg.ptr & ~1);
+               number ret = bindings.RoutingMessageHandler_handle_query_channel_range(this.ptr, InternalUtils.check_arr_len(their_node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                Result_NoneLightningErrorZ ret_hu_conv = Result_NoneLightningErrorZ.constr_from_ptr(ret);
                return ret_hu_conv;
        }
 
        public Result_NoneLightningErrorZ handle_query_short_channel_ids(Uint8Array their_node_id, QueryShortChannelIds msg) {
-               number ret = bindings.RoutingMessageHandler_handle_query_short_channel_ids(this.ptr, their_node_id, msg == null ? 0 : msg.ptr & ~1);
+               number ret = bindings.RoutingMessageHandler_handle_query_short_channel_ids(this.ptr, InternalUtils.check_arr_len(their_node_id, 33), msg == null ? 0 : msg.ptr & ~1);
                Result_NoneLightningErrorZ ret_hu_conv = Result_NoneLightningErrorZ.constr_from_ptr(ret);
                return ret_hu_conv;
        }
index 2f97904cc839aae0bfa72cef6aca4a4d254e991f..dd23a09865c63d965fc274c24c98b399b83aaec9 100644 (file)
@@ -18,6 +18,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                         bindings.Sha256_free(this.ptr);
                     }
                 }
+       public number clone_ptr() {
+               number ret = bindings.Sha256_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Sha256 clone() {
                number ret = bindings.Sha256_clone(this.ptr);
                const ret_hu_conv: Sha256 = new Sha256(null, ret);
index 3c50548ba8afbd06d5b0d9b4fff813073b330f98..dd73d5bd9dfe70819f73885925c9265715d49c7b 100644 (file)
@@ -24,7 +24,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_channel_id(Uint8Array val) {
-               bindings.Shutdown_set_channel_id(this.ptr, val);
+               bindings.Shutdown_set_channel_id(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        public Uint8Array get_scriptpubkey() {
@@ -37,12 +37,17 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public static Shutdown constructor_new(Uint8Array channel_id_arg, Uint8Array scriptpubkey_arg) {
-               number ret = bindings.Shutdown_new(channel_id_arg, scriptpubkey_arg);
+               number ret = bindings.Shutdown_new(InternalUtils.check_arr_len(channel_id_arg, 32), scriptpubkey_arg);
                const ret_hu_conv: Shutdown = new Shutdown(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.Shutdown_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Shutdown clone() {
                number ret = bindings.Shutdown_clone(this.ptr);
                const ret_hu_conv: Shutdown = new Shutdown(null, ret);
index c035f7c9fc46d47cd4bc82d569dd40ec8cc5f024..e1da61d7b230afeab62f4830e2dad0cba9c10752 100644 (file)
@@ -18,6 +18,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                         bindings.ShutdownScript_free(this.ptr);
                     }
                 }
+       public number clone_ptr() {
+               number ret = bindings.ShutdownScript_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public ShutdownScript clone() {
                number ret = bindings.ShutdownScript_clone(this.ptr);
                const ret_hu_conv: ShutdownScript = new ShutdownScript(null, ret);
@@ -37,14 +42,14 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public static ShutdownScript constructor_new_p2wpkh(Uint8Array pubkey_hash) {
-               number ret = bindings.ShutdownScript_new_p2wpkh(pubkey_hash);
+               number ret = bindings.ShutdownScript_new_p2wpkh(InternalUtils.check_arr_len(pubkey_hash, 20));
                const ret_hu_conv: ShutdownScript = new ShutdownScript(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
        public static ShutdownScript constructor_new_p2wsh(Uint8Array script_hash) {
-               number ret = bindings.ShutdownScript_new_p2wsh(script_hash);
+               number ret = bindings.ShutdownScript_new_p2wsh(InternalUtils.check_arr_len(script_hash, 32));
                const ret_hu_conv: ShutdownScript = new ShutdownScript(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
index e99c5818519833df7c4442b5ffd45794571b8ae9..1d99ab39897ae324e9dc49a48c47a42c51fd8297 100644 (file)
@@ -15,7 +15,7 @@ import * as bindings from '../bindings' // TODO: figure out location
                                        this.bindings_instance = null;
                                    } else {
                                        // TODO: private constructor instantiation
-                                       super(bindings.LDKSign_new(arg, baseSign, pubkeys == null ? 0 : pubkeys.ptr & ~1));
+                                       super(bindings.LDKSign_new(arg, baseSign, pubkeys == null ? 0 : pubkeys.clone_ptr()));
                                        this.ptrs_to.push(arg);
                                        this.ptrs_to.push(baseSign);
 
@@ -57,6 +57,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                return ret;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.Sign_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Sign clone() {
                number ret = bindings.Sign_clone(this.ptr);
                Sign ret_hu_conv = new Sign(null, ret);
index 27312a3ae4cb12f362fc34697af9457d618f77c4..d2e1e36bced8ede6a6209780715b7b0b070f09ed 100644 (file)
@@ -32,6 +32,11 @@ export class CreationError extends SignOrCreationError {
                this.creation_error = obj.creation_error;
        }
 }
+       public number clone_ptr() {
+               number ret = bindings.SignOrCreationError_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public SignOrCreationError clone() {
                number ret = bindings.SignOrCreationError_clone(this.ptr);
                SignOrCreationError ret_hu_conv = SignOrCreationError.constr_from_ptr(ret);
index 53f73549b0a7169fa13d15b125cd148c4209032c..22f2b59ed18e2f3e612405d46a819a16a556783f 100644 (file)
@@ -24,6 +24,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                return ret;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.SignedRawInvoice_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public SignedRawInvoice clone() {
                number ret = bindings.SignedRawInvoice_clone(this.ptr);
                const ret_hu_conv: SignedRawInvoice = new SignedRawInvoice(null, ret);
index a2207ae78e8a1592b05d84d30629b6b7d1c839f0..d94392555350789337c81e0478945e27d0acc245 100644 (file)
@@ -84,6 +84,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                return ret;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.SocketDescriptor_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public SocketDescriptor clone() {
                number ret = bindings.SocketDescriptor_clone(this.ptr);
                SocketDescriptor ret_hu_conv = new SocketDescriptor(null, ret);
index bdd9f6599f0dff99e155f296a6f3d2fdb796bc44..f0758a28c91ac6a928f63a44817883620b3c42bd 100644 (file)
@@ -57,6 +57,11 @@ export class StaticPaymentOutput extends SpendableOutputDescriptor {
                this.static_payment_output = static_payment_output_hu_conv;
        }
 }
+       public number clone_ptr() {
+               number ret = bindings.SpendableOutputDescriptor_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public SpendableOutputDescriptor clone() {
                number ret = bindings.SpendableOutputDescriptor_clone(this.ptr);
                SpendableOutputDescriptor ret_hu_conv = SpendableOutputDescriptor.constr_from_ptr(ret);
index 62428567d08bb317a84cf07ff68da5883cc5dbff..9af18ea3578fe2bbca3b9f8b1341870e69719c8b 100644 (file)
@@ -39,7 +39,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_channel_keys_id(Uint8Array val) {
-               bindings.StaticPaymentOutputDescriptor_set_channel_keys_id(this.ptr, val);
+               bindings.StaticPaymentOutputDescriptor_set_channel_keys_id(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        public number get_channel_value_satoshis() {
@@ -52,12 +52,17 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public static StaticPaymentOutputDescriptor constructor_new(OutPoint outpoint_arg, TxOut output_arg, Uint8Array channel_keys_id_arg, number channel_value_satoshis_arg) {
-               number ret = bindings.StaticPaymentOutputDescriptor_new(outpoint_arg == null ? 0 : outpoint_arg.ptr & ~1, output_arg.ptr, channel_keys_id_arg, channel_value_satoshis_arg);
+               number ret = bindings.StaticPaymentOutputDescriptor_new(outpoint_arg == null ? 0 : outpoint_arg.ptr & ~1, output_arg.ptr, InternalUtils.check_arr_len(channel_keys_id_arg, 32), channel_value_satoshis_arg);
                const ret_hu_conv: StaticPaymentOutputDescriptor = new StaticPaymentOutputDescriptor(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.StaticPaymentOutputDescriptor_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public StaticPaymentOutputDescriptor clone() {
                number ret = bindings.StaticPaymentOutputDescriptor_clone(this.ptr);
                const ret_hu_conv: StaticPaymentOutputDescriptor = new StaticPaymentOutputDescriptor(null, ret);
index 0292294ed5ca050851d478f586745ac645193c1a..625b5834c42604613c99879552f1236a5c32037c 100644 (file)
@@ -18,4 +18,44 @@ import * as bindings from '../bindings' // TODO: figure out location
                         bindings.C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_free(this.ptr);
                     }
                 }
+       public ChannelAnnouncement get_a() {
+               number ret = bindings.C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_get_a(this.ptr);
+               const ret_hu_conv: ChannelAnnouncement = new ChannelAnnouncement(null, ret);
+               ret_hu_conv.ptrs_to.add(this);
+               return ret_hu_conv;
+       }
+
+       public ChannelUpdate get_b() {
+               number ret = bindings.C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_get_b(this.ptr);
+               const ret_hu_conv: ChannelUpdate = new ChannelUpdate(null, ret);
+               ret_hu_conv.ptrs_to.add(this);
+               return ret_hu_conv;
+       }
+
+       public ChannelUpdate get_c() {
+               number ret = bindings.C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_get_c(this.ptr);
+               const ret_hu_conv: ChannelUpdate = new ChannelUpdate(null, ret);
+               ret_hu_conv.ptrs_to.add(this);
+               return ret_hu_conv;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
+       public ThreeTuple_ChannelAnnouncementChannelUpdateChannelUpdateZ clone() {
+               number ret = bindings.C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_clone(this.ptr);
+               ThreeTuple_ChannelAnnouncementChannelUpdateChannelUpdateZ ret_hu_conv = new ThreeTuple_ChannelAnnouncementChannelUpdateChannelUpdateZ(null, ret);
+               ret_hu_conv.ptrs_to.add(this);
+               return ret_hu_conv;
+       }
+
+       public static ThreeTuple_ChannelAnnouncementChannelUpdateChannelUpdateZ constructor_new(ChannelAnnouncement a, ChannelUpdate b, ChannelUpdate c) {
+               number ret = bindings.C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_new(a == null ? 0 : a.ptr & ~1, b == null ? 0 : b.ptr & ~1, c == null ? 0 : c.ptr & ~1);
+               ThreeTuple_ChannelAnnouncementChannelUpdateChannelUpdateZ ret_hu_conv = new ThreeTuple_ChannelAnnouncementChannelUpdateChannelUpdateZ(null, ret);
+               ret_hu_conv.ptrs_to.add(ret_hu_conv);
+               return ret_hu_conv;
+       }
+
 }
index cdcd147a7fc9358745b82a4fd1266b89fe2ac87b..e1a156442c10ef7d526416c17d34ca8b76b18af5 100644 (file)
@@ -18,4 +18,42 @@ import * as bindings from '../bindings' // TODO: figure out location
                         bindings.C3Tuple_RawInvoice_u832InvoiceSignatureZ_free(this.ptr);
                     }
                 }
+       public RawInvoice get_a() {
+               number ret = bindings.C3Tuple_RawInvoice_u832InvoiceSignatureZ_get_a(this.ptr);
+               const ret_hu_conv: RawInvoice = new RawInvoice(null, ret);
+               ret_hu_conv.ptrs_to.add(this);
+               return ret_hu_conv;
+       }
+
+       public Uint8Array get_b() {
+               Uint8Array ret = bindings.C3Tuple_RawInvoice_u832InvoiceSignatureZ_get_b(this.ptr);
+               return ret;
+       }
+
+       public InvoiceSignature get_c() {
+               number ret = bindings.C3Tuple_RawInvoice_u832InvoiceSignatureZ_get_c(this.ptr);
+               const ret_hu_conv: InvoiceSignature = new InvoiceSignature(null, ret);
+               ret_hu_conv.ptrs_to.add(this);
+               return ret_hu_conv;
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.C3Tuple_RawInvoice_u832InvoiceSignatureZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
+       public ThreeTuple_RawInvoice_u832InvoiceSignatureZ clone() {
+               number ret = bindings.C3Tuple_RawInvoice_u832InvoiceSignatureZ_clone(this.ptr);
+               ThreeTuple_RawInvoice_u832InvoiceSignatureZ ret_hu_conv = new ThreeTuple_RawInvoice_u832InvoiceSignatureZ(null, ret);
+               ret_hu_conv.ptrs_to.add(this);
+               return ret_hu_conv;
+       }
+
+       public static ThreeTuple_RawInvoice_u832InvoiceSignatureZ constructor_new(RawInvoice a, Uint8Array b, InvoiceSignature c) {
+               number ret = bindings.C3Tuple_RawInvoice_u832InvoiceSignatureZ_new(a == null ? 0 : a.ptr & ~1, InternalUtils.check_arr_len(b, 32), c == null ? 0 : c.ptr & ~1);
+               ThreeTuple_RawInvoice_u832InvoiceSignatureZ ret_hu_conv = new ThreeTuple_RawInvoice_u832InvoiceSignatureZ(null, ret);
+               ret_hu_conv.ptrs_to.add(ret_hu_conv);
+               return ret_hu_conv;
+       }
+
 }
index eb15abc187091d70536112fd44ff929b6afab54f..a9aa05dda1c08649a219c44e45376822fc4fa7e2 100644 (file)
@@ -29,7 +29,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public Uint8Array sign(Uint8Array funding_key, Uint8Array funding_redeemscript, number channel_value_satoshis) {
-               Uint8Array ret = bindings.TrustedClosingTransaction_sign(this.ptr, funding_key, funding_redeemscript, channel_value_satoshis);
+               Uint8Array ret = bindings.TrustedClosingTransaction_sign(this.ptr, InternalUtils.check_arr_len(funding_key, 32), funding_redeemscript, channel_value_satoshis);
                return ret;
        }
 
index 5448f12e841226975df97e9713a198c9e7527809..09248f42ff1ccd5ff964dc72b166c88bfa91cdfa 100644 (file)
@@ -38,7 +38,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public Result_CVec_SignatureZNoneZ get_htlc_sigs(Uint8Array htlc_base_key, DirectedChannelTransactionParameters channel_parameters) {
-               number ret = bindings.TrustedCommitmentTransaction_get_htlc_sigs(this.ptr, htlc_base_key, channel_parameters == null ? 0 : channel_parameters.ptr & ~1);
+               number ret = bindings.TrustedCommitmentTransaction_get_htlc_sigs(this.ptr, InternalUtils.check_arr_len(htlc_base_key, 32), channel_parameters == null ? 0 : channel_parameters.ptr & ~1);
                Result_CVec_SignatureZNoneZ ret_hu_conv = Result_CVec_SignatureZNoneZ.constr_from_ptr(ret);
                this.ptrs_to.add(channel_parameters);
                return ret_hu_conv;
index 31156f91a796cbb2473527833aa942ca464709ff..d6c17cfe9b104be3fb78a802b4bdb5d84f4baae6 100644 (file)
@@ -31,7 +31,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public static TwoTuple_BlockHashChannelManagerZ constructor_new(Uint8Array a, FeeEstimator b_fee_est, Watch b_chain_monitor, BroadcasterInterface b_tx_broadcaster, Logger b_logger, KeysInterface b_keys_manager, UserConfig b_config, ChainParameters b_params) {
-               number ret = bindings.C2Tuple_BlockHashChannelManagerZ_new(a, bindings.ChannelManager_new(b_fee_est == null ? 0 : b_fee_est.ptr, b_chain_monitor == null ? 0 : b_chain_monitor.ptr, b_tx_broadcaster == null ? 0 : b_tx_broadcaster.ptr, b_logger == null ? 0 : b_logger.ptr, b_keys_manager == null ? 0 : b_keys_manager.ptr, b_config == null ? 0 : b_config.ptr & ~1, b_params == null ? 0 : b_params.ptr & ~1));
+               number ret = bindings.C2Tuple_BlockHashChannelManagerZ_new(InternalUtils.check_arr_len(a, 32), bindings.ChannelManager_new(b_fee_est == null ? 0 : b_fee_est.ptr, b_chain_monitor == null ? 0 : b_chain_monitor.ptr, b_tx_broadcaster == null ? 0 : b_tx_broadcaster.ptr, b_logger == null ? 0 : b_logger.ptr, b_keys_manager == null ? 0 : b_keys_manager.ptr, b_config == null ? 0 : b_config.ptr & ~1, b_params == null ? 0 : b_params.ptr & ~1));
                TwoTuple_BlockHashChannelManagerZ ret_hu_conv = new TwoTuple_BlockHashChannelManagerZ(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                ret_hu_conv.ptrs_to.add(b_fee_est);
index 7fbdcc751179882b8765f13b1f825b9387e9070c..e2efd8a83cf35c70e435f9f0a372d80c95a7b285 100644 (file)
@@ -30,6 +30,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.C2Tuple_BlockHashChannelMonitorZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public TwoTuple_BlockHashChannelMonitorZ clone() {
                number ret = bindings.C2Tuple_BlockHashChannelMonitorZ_clone(this.ptr);
                TwoTuple_BlockHashChannelMonitorZ ret_hu_conv = new TwoTuple_BlockHashChannelMonitorZ(null, ret);
@@ -38,7 +43,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public static TwoTuple_BlockHashChannelMonitorZ constructor_new(Uint8Array a, ChannelMonitor b) {
-               number ret = bindings.C2Tuple_BlockHashChannelMonitorZ_new(a, b == null ? 0 : b.ptr & ~1);
+               number ret = bindings.C2Tuple_BlockHashChannelMonitorZ_new(InternalUtils.check_arr_len(a, 32), b == null ? 0 : b.ptr & ~1);
                TwoTuple_BlockHashChannelMonitorZ ret_hu_conv = new TwoTuple_BlockHashChannelMonitorZ(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
index 7949951890157fd25663c3bff2845362b5f521fd..0a9dd35b2088d99fe2bae71583622e69dfc05f3f 100644 (file)
@@ -30,6 +30,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                return ret;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.C2Tuple_OutPointScriptZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public TwoTuple_OutPointScriptZ clone() {
                number ret = bindings.C2Tuple_OutPointScriptZ_clone(this.ptr);
                TwoTuple_OutPointScriptZ ret_hu_conv = new TwoTuple_OutPointScriptZ(null, ret);
index 5f4d48d53b6c967bc9664898790467d996fbd425..645ca609b87572b61452d70041b8bc5bd4601464 100644 (file)
@@ -28,6 +28,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                return ret;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.C2Tuple_PaymentHashPaymentIdZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public TwoTuple_PaymentHashPaymentIdZ clone() {
                number ret = bindings.C2Tuple_PaymentHashPaymentIdZ_clone(this.ptr);
                TwoTuple_PaymentHashPaymentIdZ ret_hu_conv = new TwoTuple_PaymentHashPaymentIdZ(null, ret);
@@ -36,7 +41,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public static TwoTuple_PaymentHashPaymentIdZ constructor_new(Uint8Array a, Uint8Array b) {
-               number ret = bindings.C2Tuple_PaymentHashPaymentIdZ_new(a, b);
+               number ret = bindings.C2Tuple_PaymentHashPaymentIdZ_new(InternalUtils.check_arr_len(a, 32), InternalUtils.check_arr_len(b, 32));
                TwoTuple_PaymentHashPaymentIdZ ret_hu_conv = new TwoTuple_PaymentHashPaymentIdZ(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
index 0948fad9ca96e1d4388297601d5418b609de0ce5..d0401208b9bc1576ac02a51bea49526ef02d8f1c 100644 (file)
@@ -28,6 +28,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                return ret;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.C2Tuple_PaymentHashPaymentSecretZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public TwoTuple_PaymentHashPaymentSecretZ clone() {
                number ret = bindings.C2Tuple_PaymentHashPaymentSecretZ_clone(this.ptr);
                TwoTuple_PaymentHashPaymentSecretZ ret_hu_conv = new TwoTuple_PaymentHashPaymentSecretZ(null, ret);
@@ -36,7 +41,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public static TwoTuple_PaymentHashPaymentSecretZ constructor_new(Uint8Array a, Uint8Array b) {
-               number ret = bindings.C2Tuple_PaymentHashPaymentSecretZ_new(a, b);
+               number ret = bindings.C2Tuple_PaymentHashPaymentSecretZ_new(InternalUtils.check_arr_len(a, 32), InternalUtils.check_arr_len(b, 32));
                TwoTuple_PaymentHashPaymentSecretZ ret_hu_conv = new TwoTuple_PaymentHashPaymentSecretZ(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
index 211fbc13c7b3993b329b1cc172554308800f706a..c7c126717dbfc748bf676e298a7e20c7d8cc2ff6 100644 (file)
@@ -30,6 +30,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.C2Tuple_PublicKeyTypeZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public TwoTuple_PublicKeyTypeZ clone() {
                number ret = bindings.C2Tuple_PublicKeyTypeZ_clone(this.ptr);
                TwoTuple_PublicKeyTypeZ ret_hu_conv = new TwoTuple_PublicKeyTypeZ(null, ret);
@@ -38,7 +43,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public static TwoTuple_PublicKeyTypeZ constructor_new(Uint8Array a, Type b) {
-               number ret = bindings.C2Tuple_PublicKeyTypeZ_new(a, b == null ? 0 : b.ptr);
+               number ret = bindings.C2Tuple_PublicKeyTypeZ_new(InternalUtils.check_arr_len(a, 33), b == null ? 0 : b.ptr);
                TwoTuple_PublicKeyTypeZ ret_hu_conv = new TwoTuple_PublicKeyTypeZ(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                ret_hu_conv.ptrs_to.add(b);
index 40a8a0a7e7eacfc0cf264659c7f3c09523bb337c..ff23dea678829d23354bba19f8c273e565e83e58 100644 (file)
@@ -28,6 +28,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                return ret;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.C2Tuple_SignatureCVec_SignatureZZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public TwoTuple_SignatureCVec_SignatureZZ clone() {
                number ret = bindings.C2Tuple_SignatureCVec_SignatureZZ_clone(this.ptr);
                TwoTuple_SignatureCVec_SignatureZZ ret_hu_conv = new TwoTuple_SignatureCVec_SignatureZZ(null, ret);
@@ -36,7 +41,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public static TwoTuple_SignatureCVec_SignatureZZ constructor_new(Uint8Array a, Uint8Array[] b) {
-               number ret = bindings.C2Tuple_SignatureCVec_SignatureZZ_new(a, b);
+               number ret = bindings.C2Tuple_SignatureCVec_SignatureZZ_new(InternalUtils.check_arr_len(a, 64), b != null ? Arrays.stream(b).map(b_conv_12 -> InternalUtils.check_arr_len(b_conv_12, 64)).toArray(Uint8Array[]::new) : null);
                TwoTuple_SignatureCVec_SignatureZZ ret_hu_conv = new TwoTuple_SignatureCVec_SignatureZZ(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
index 18b2bc67eadf84cb3c59694aeac1211ec5400602..28911f41550f558a694669a973b67fac390b3f73 100644 (file)
@@ -35,6 +35,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                return ret_conv_21_arr;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public TwoTuple_TxidCVec_C2Tuple_u32ScriptZZZ clone() {
                number ret = bindings.C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_clone(this.ptr);
                TwoTuple_TxidCVec_C2Tuple_u32ScriptZZZ ret_hu_conv = new TwoTuple_TxidCVec_C2Tuple_u32ScriptZZZ(null, ret);
@@ -43,7 +48,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public static TwoTuple_TxidCVec_C2Tuple_u32ScriptZZZ constructor_new(Uint8Array a, TwoTuple_u32ScriptZ[] b) {
-               number ret = bindings.C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_new(a, b != null ? Arrays.stream(b).map(b_conv_21 -> b_conv_21 != null ? b_conv_21.ptr : 0).toArray(number[]::new) : null);
+               number ret = bindings.C2Tuple_TxidCVec_C2Tuple_u32ScriptZZZ_new(InternalUtils.check_arr_len(a, 32), b != null ? Arrays.stream(b).map(b_conv_21 -> b_conv_21 != null ? b_conv_21.ptr : 0).toArray(number[]::new) : null);
                TwoTuple_TxidCVec_C2Tuple_u32ScriptZZZ ret_hu_conv = new TwoTuple_TxidCVec_C2Tuple_u32ScriptZZZ(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
index 61c7aec214b82765a2f2dcd9f78d5eb1a3d81650..a18ddfe835e7cca4633997f58d157e9c2697a6e0 100644 (file)
@@ -35,6 +35,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                return ret_conv_20_arr;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public TwoTuple_TxidCVec_C2Tuple_u32TxOutZZZ clone() {
                number ret = bindings.C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_clone(this.ptr);
                TwoTuple_TxidCVec_C2Tuple_u32TxOutZZZ ret_hu_conv = new TwoTuple_TxidCVec_C2Tuple_u32TxOutZZZ(null, ret);
@@ -43,7 +48,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public static TwoTuple_TxidCVec_C2Tuple_u32TxOutZZZ constructor_new(Uint8Array a, TwoTuple_u32TxOutZ[] b) {
-               number ret = bindings.C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_new(a, b != null ? Arrays.stream(b).map(b_conv_20 -> b_conv_20 != null ? b_conv_20.ptr : 0).toArray(number[]::new) : null);
+               number ret = bindings.C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ_new(InternalUtils.check_arr_len(a, 32), b != null ? Arrays.stream(b).map(b_conv_20 -> b_conv_20 != null ? b_conv_20.ptr : 0).toArray(number[]::new) : null);
                TwoTuple_TxidCVec_C2Tuple_u32TxOutZZZ ret_hu_conv = new TwoTuple_TxidCVec_C2Tuple_u32TxOutZZZ(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
index bc15645b333905778f7f1f905acb53c5b09e6eaa..3f10e6b12b95ee1dec23e04e1102805bbee04a85 100644 (file)
@@ -28,6 +28,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                return ret;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.C2Tuple_u32ScriptZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public TwoTuple_u32ScriptZ clone() {
                number ret = bindings.C2Tuple_u32ScriptZ_clone(this.ptr);
                TwoTuple_u32ScriptZ ret_hu_conv = new TwoTuple_u32ScriptZ(null, ret);
index a5bf46aa543bb7363bc06bf00ea9c10008487659..5792777103be9516b193d66f1508a0e3282d5e24 100644 (file)
@@ -29,6 +29,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                return ret_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.C2Tuple_u32TxOutZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public TwoTuple_u32TxOutZ clone() {
                number ret = bindings.C2Tuple_u32TxOutZ_clone(this.ptr);
                TwoTuple_u32TxOutZ ret_hu_conv = new TwoTuple_u32TxOutZ(null, ret);
index 691679d5948728c9bc1206f6a6984a7efb43e4ab..c150b0a24a0c82eec83ab53fe85fe27e320ead04 100644 (file)
@@ -28,6 +28,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                return ret;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.C2Tuple_usizeTransactionZ_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public TwoTuple_usizeTransactionZ clone() {
                number ret = bindings.C2Tuple_usizeTransactionZ_clone(this.ptr);
                TwoTuple_usizeTransactionZ ret_hu_conv = new TwoTuple_usizeTransactionZ(null, ret);
index e6af3f27352c5cd6aed0d518cc6595ff797cba9f..7cdad7a5a23a649df6a8bd406e45fd05d5ec55b7 100644 (file)
@@ -24,7 +24,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_per_commitment_point(Uint8Array val) {
-               bindings.TxCreationKeys_set_per_commitment_point(this.ptr, val);
+               bindings.TxCreationKeys_set_per_commitment_point(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        public Uint8Array get_revocation_key() {
@@ -33,7 +33,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_revocation_key(Uint8Array val) {
-               bindings.TxCreationKeys_set_revocation_key(this.ptr, val);
+               bindings.TxCreationKeys_set_revocation_key(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        public Uint8Array get_broadcaster_htlc_key() {
@@ -42,7 +42,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_broadcaster_htlc_key(Uint8Array val) {
-               bindings.TxCreationKeys_set_broadcaster_htlc_key(this.ptr, val);
+               bindings.TxCreationKeys_set_broadcaster_htlc_key(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        public Uint8Array get_countersignatory_htlc_key() {
@@ -51,7 +51,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_countersignatory_htlc_key(Uint8Array val) {
-               bindings.TxCreationKeys_set_countersignatory_htlc_key(this.ptr, val);
+               bindings.TxCreationKeys_set_countersignatory_htlc_key(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        public Uint8Array get_broadcaster_delayed_payment_key() {
@@ -60,16 +60,21 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_broadcaster_delayed_payment_key(Uint8Array val) {
-               bindings.TxCreationKeys_set_broadcaster_delayed_payment_key(this.ptr, val);
+               bindings.TxCreationKeys_set_broadcaster_delayed_payment_key(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        public static TxCreationKeys constructor_new(Uint8Array per_commitment_point_arg, Uint8Array revocation_key_arg, Uint8Array broadcaster_htlc_key_arg, Uint8Array countersignatory_htlc_key_arg, Uint8Array broadcaster_delayed_payment_key_arg) {
-               number ret = bindings.TxCreationKeys_new(per_commitment_point_arg, revocation_key_arg, broadcaster_htlc_key_arg, countersignatory_htlc_key_arg, broadcaster_delayed_payment_key_arg);
+               number ret = bindings.TxCreationKeys_new(InternalUtils.check_arr_len(per_commitment_point_arg, 33), InternalUtils.check_arr_len(revocation_key_arg, 33), InternalUtils.check_arr_len(broadcaster_htlc_key_arg, 33), InternalUtils.check_arr_len(countersignatory_htlc_key_arg, 33), InternalUtils.check_arr_len(broadcaster_delayed_payment_key_arg, 33));
                const ret_hu_conv: TxCreationKeys = new TxCreationKeys(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.TxCreationKeys_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public TxCreationKeys clone() {
                number ret = bindings.TxCreationKeys_clone(this.ptr);
                const ret_hu_conv: TxCreationKeys = new TxCreationKeys(null, ret);
@@ -89,13 +94,13 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public static Result_TxCreationKeysErrorZ constructor_derive_new(Uint8Array per_commitment_point, Uint8Array broadcaster_delayed_payment_base, Uint8Array broadcaster_htlc_base, Uint8Array countersignatory_revocation_base, Uint8Array countersignatory_htlc_base) {
-               number ret = bindings.TxCreationKeys_derive_new(per_commitment_point, broadcaster_delayed_payment_base, broadcaster_htlc_base, countersignatory_revocation_base, countersignatory_htlc_base);
+               number ret = bindings.TxCreationKeys_derive_new(InternalUtils.check_arr_len(per_commitment_point, 33), InternalUtils.check_arr_len(broadcaster_delayed_payment_base, 33), InternalUtils.check_arr_len(broadcaster_htlc_base, 33), InternalUtils.check_arr_len(countersignatory_revocation_base, 33), InternalUtils.check_arr_len(countersignatory_htlc_base, 33));
                Result_TxCreationKeysErrorZ ret_hu_conv = Result_TxCreationKeysErrorZ.constr_from_ptr(ret);
                return ret_hu_conv;
        }
 
        public static Result_TxCreationKeysErrorZ constructor_from_channel_static_keys(Uint8Array per_commitment_point, ChannelPublicKeys broadcaster_keys, ChannelPublicKeys countersignatory_keys) {
-               number ret = bindings.TxCreationKeys_from_channel_static_keys(per_commitment_point, broadcaster_keys == null ? 0 : broadcaster_keys.ptr & ~1, countersignatory_keys == null ? 0 : countersignatory_keys.ptr & ~1);
+               number ret = bindings.TxCreationKeys_from_channel_static_keys(InternalUtils.check_arr_len(per_commitment_point, 33), broadcaster_keys == null ? 0 : broadcaster_keys.ptr & ~1, countersignatory_keys == null ? 0 : countersignatory_keys.ptr & ~1);
                Result_TxCreationKeysErrorZ ret_hu_conv = Result_TxCreationKeysErrorZ.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(broadcaster_keys);
                ret_hu_conv.ptrs_to.add(countersignatory_keys);
index 8441989fd05f96f00ba90b8773ba644eb1ef8fc8..fda6128ed8c0db147040ddc8a0961d1ce4047f5e 100644 (file)
@@ -78,6 +78,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                return ret;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.Type_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public Type clone() {
                number ret = bindings.Type_clone(this.ptr);
                Type ret_hu_conv = new Type(null, ret);
index 34645a6805dd81e79933d6a4987dda468dfd0e71..0898195405bea4f54f3bcf0ac9586ca227ed8659 100644 (file)
@@ -35,7 +35,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_chain_hash(Uint8Array val) {
-               bindings.UnsignedChannelAnnouncement_set_chain_hash(this.ptr, val);
+               bindings.UnsignedChannelAnnouncement_set_chain_hash(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        public number get_short_channel_id() {
@@ -53,7 +53,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_node_id_1(Uint8Array val) {
-               bindings.UnsignedChannelAnnouncement_set_node_id_1(this.ptr, val);
+               bindings.UnsignedChannelAnnouncement_set_node_id_1(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        public Uint8Array get_node_id_2() {
@@ -62,7 +62,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_node_id_2(Uint8Array val) {
-               bindings.UnsignedChannelAnnouncement_set_node_id_2(this.ptr, val);
+               bindings.UnsignedChannelAnnouncement_set_node_id_2(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        public Uint8Array get_bitcoin_key_1() {
@@ -71,7 +71,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_bitcoin_key_1(Uint8Array val) {
-               bindings.UnsignedChannelAnnouncement_set_bitcoin_key_1(this.ptr, val);
+               bindings.UnsignedChannelAnnouncement_set_bitcoin_key_1(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        public Uint8Array get_bitcoin_key_2() {
@@ -80,7 +80,12 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_bitcoin_key_2(Uint8Array val) {
-               bindings.UnsignedChannelAnnouncement_set_bitcoin_key_2(this.ptr, val);
+               bindings.UnsignedChannelAnnouncement_set_bitcoin_key_2(this.ptr, InternalUtils.check_arr_len(val, 33));
+       }
+
+       public number clone_ptr() {
+               number ret = bindings.UnsignedChannelAnnouncement_clone_ptr(this.ptr);
+               return ret;
        }
 
        public UnsignedChannelAnnouncement clone() {
index 4accac621135cd9494a3118abf0a0abfef5e4522..c509f73f7778ea1794bc3f58ef1f54db29fa25e4 100644 (file)
@@ -24,7 +24,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_chain_hash(Uint8Array val) {
-               bindings.UnsignedChannelUpdate_set_chain_hash(this.ptr, val);
+               bindings.UnsignedChannelUpdate_set_chain_hash(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        public number get_short_channel_id() {
@@ -90,6 +90,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                bindings.UnsignedChannelUpdate_set_fee_proportional_millionths(this.ptr, val);
        }
 
+       public number clone_ptr() {
+               number ret = bindings.UnsignedChannelUpdate_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public UnsignedChannelUpdate clone() {
                number ret = bindings.UnsignedChannelUpdate_clone(this.ptr);
                const ret_hu_conv: UnsignedChannelUpdate = new UnsignedChannelUpdate(null, ret);
index b64c4f853cc3597a665ebe51fdc838795b8cfd84..dce9672746719b742cd99f240eabd0e27afdd0b1 100644 (file)
@@ -44,7 +44,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_node_id(Uint8Array val) {
-               bindings.UnsignedNodeAnnouncement_set_node_id(this.ptr, val);
+               bindings.UnsignedNodeAnnouncement_set_node_id(this.ptr, InternalUtils.check_arr_len(val, 33));
        }
 
        public Uint8Array get_rgb() {
@@ -53,7 +53,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_rgb(Uint8Array val) {
-               bindings.UnsignedNodeAnnouncement_set_rgb(this.ptr, val);
+               bindings.UnsignedNodeAnnouncement_set_rgb(this.ptr, InternalUtils.check_arr_len(val, 3));
        }
 
        public Uint8Array get_alias() {
@@ -62,13 +62,18 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_alias(Uint8Array val) {
-               bindings.UnsignedNodeAnnouncement_set_alias(this.ptr, val);
+               bindings.UnsignedNodeAnnouncement_set_alias(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        public void set_addresses(NetAddress[] val) {
                bindings.UnsignedNodeAnnouncement_set_addresses(this.ptr, val != null ? Arrays.stream(val).map(val_conv_12 -> val_conv_12.ptr).toArray(number[]::new) : null);
        }
 
+       public number clone_ptr() {
+               number ret = bindings.UnsignedNodeAnnouncement_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public UnsignedNodeAnnouncement clone() {
                number ret = bindings.UnsignedNodeAnnouncement_clone(this.ptr);
                const ret_hu_conv: UnsignedNodeAnnouncement = new UnsignedNodeAnnouncement(null, ret);
index e4506a6b64a8f55d648596d2645217154cf97988..5622a5da3b69acaf386ed83ea56123288fc1694f 100644 (file)
@@ -24,7 +24,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_channel_id(Uint8Array val) {
-               bindings.UpdateAddHTLC_set_channel_id(this.ptr, val);
+               bindings.UpdateAddHTLC_set_channel_id(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        public number get_htlc_id() {
@@ -51,7 +51,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_payment_hash(Uint8Array val) {
-               bindings.UpdateAddHTLC_set_payment_hash(this.ptr, val);
+               bindings.UpdateAddHTLC_set_payment_hash(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        public number get_cltv_expiry() {
@@ -63,6 +63,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                bindings.UpdateAddHTLC_set_cltv_expiry(this.ptr, val);
        }
 
+       public number clone_ptr() {
+               number ret = bindings.UpdateAddHTLC_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public UpdateAddHTLC clone() {
                number ret = bindings.UpdateAddHTLC_clone(this.ptr);
                const ret_hu_conv: UpdateAddHTLC = new UpdateAddHTLC(null, ret);
index fcca5e86a87c30815c153bdc5c732793b6f474d7..afe36ae99db5d40579bed95721abe772d4de9e26 100644 (file)
@@ -24,7 +24,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_channel_id(Uint8Array val) {
-               bindings.UpdateFailHTLC_set_channel_id(this.ptr, val);
+               bindings.UpdateFailHTLC_set_channel_id(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        public number get_htlc_id() {
@@ -36,6 +36,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                bindings.UpdateFailHTLC_set_htlc_id(this.ptr, val);
        }
 
+       public number clone_ptr() {
+               number ret = bindings.UpdateFailHTLC_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public UpdateFailHTLC clone() {
                number ret = bindings.UpdateFailHTLC_clone(this.ptr);
                const ret_hu_conv: UpdateFailHTLC = new UpdateFailHTLC(null, ret);
index 6068882e57f1a79c7a80ccedb45c5b49401e780c..3b894fb18f3c2a60ea125349cf392511c7d19506 100644 (file)
@@ -24,7 +24,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_channel_id(Uint8Array val) {
-               bindings.UpdateFailMalformedHTLC_set_channel_id(this.ptr, val);
+               bindings.UpdateFailMalformedHTLC_set_channel_id(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        public number get_htlc_id() {
@@ -45,6 +45,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                bindings.UpdateFailMalformedHTLC_set_failure_code(this.ptr, val);
        }
 
+       public number clone_ptr() {
+               number ret = bindings.UpdateFailMalformedHTLC_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public UpdateFailMalformedHTLC clone() {
                number ret = bindings.UpdateFailMalformedHTLC_clone(this.ptr);
                const ret_hu_conv: UpdateFailMalformedHTLC = new UpdateFailMalformedHTLC(null, ret);
index 6ffed4250b308f36bc532ed7654690273649e462..a86e590349cd0f99bf6f4bd60277e03635d39eed 100644 (file)
@@ -24,7 +24,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_channel_id(Uint8Array val) {
-               bindings.UpdateFee_set_channel_id(this.ptr, val);
+               bindings.UpdateFee_set_channel_id(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        public number get_feerate_per_kw() {
@@ -37,12 +37,17 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public static UpdateFee constructor_new(Uint8Array channel_id_arg, number feerate_per_kw_arg) {
-               number ret = bindings.UpdateFee_new(channel_id_arg, feerate_per_kw_arg);
+               number ret = bindings.UpdateFee_new(InternalUtils.check_arr_len(channel_id_arg, 32), feerate_per_kw_arg);
                const ret_hu_conv: UpdateFee = new UpdateFee(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.UpdateFee_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public UpdateFee clone() {
                number ret = bindings.UpdateFee_clone(this.ptr);
                const ret_hu_conv: UpdateFee = new UpdateFee(null, ret);
index 02a0a7a5a588260416ddcc867186f2232c5c5fee..5bd5d0b1afbc76cefd867d9710693186f9af14ab 100644 (file)
@@ -24,7 +24,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_channel_id(Uint8Array val) {
-               bindings.UpdateFulfillHTLC_set_channel_id(this.ptr, val);
+               bindings.UpdateFulfillHTLC_set_channel_id(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        public number get_htlc_id() {
@@ -42,16 +42,21 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_payment_preimage(Uint8Array val) {
-               bindings.UpdateFulfillHTLC_set_payment_preimage(this.ptr, val);
+               bindings.UpdateFulfillHTLC_set_payment_preimage(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        public static UpdateFulfillHTLC constructor_new(Uint8Array channel_id_arg, number htlc_id_arg, Uint8Array payment_preimage_arg) {
-               number ret = bindings.UpdateFulfillHTLC_new(channel_id_arg, htlc_id_arg, payment_preimage_arg);
+               number ret = bindings.UpdateFulfillHTLC_new(InternalUtils.check_arr_len(channel_id_arg, 32), htlc_id_arg, InternalUtils.check_arr_len(payment_preimage_arg, 32));
                const ret_hu_conv: UpdateFulfillHTLC = new UpdateFulfillHTLC(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.UpdateFulfillHTLC_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public UpdateFulfillHTLC clone() {
                number ret = bindings.UpdateFulfillHTLC_clone(this.ptr);
                const ret_hu_conv: UpdateFulfillHTLC = new UpdateFulfillHTLC(null, ret);
index ed711c9487ff3b806cb69d7924d71ceebcafd0c8..0cc921e69932d2a0a0ce2fb9ccf7ea16c78fa59d 100644 (file)
@@ -67,6 +67,11 @@ import * as bindings from '../bindings' // TODO: figure out location
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.UserConfig_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public UserConfig clone() {
                number ret = bindings.UserConfig_clone(this.ptr);
                const ret_hu_conv: UserConfig = new UserConfig(null, ret);
index 474fa4065f8f315ea2fd9c9405cce2d1d0c973b4..17fcb276eec319895dc9f764da653219ec1a9099 100644 (file)
@@ -1,5 +1,17 @@
+       public static Result_COption_ClosureReasonZDecodeErrorZ constructor_ClosureReason_read(Uint8Array ser) {
+               number ret = bindings.ClosureReason_read(ser);
+               Result_COption_ClosureReasonZDecodeErrorZ ret_hu_conv = Result_COption_ClosureReasonZDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
+       public static Result_COption_EventZDecodeErrorZ constructor_Event_read(Uint8Array ser) {
+               number ret = bindings.Event_read(ser);
+               Result_COption_EventZDecodeErrorZ ret_hu_conv = Result_COption_EventZDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
        public static Result_StringErrorZ constructor_sign(Uint8Array msg, Uint8Array sk) {
-               number ret = bindings.sign(msg, sk);
+               number ret = bindings.sign(msg, InternalUtils.check_arr_len(sk, 32));
                Result_StringErrorZ ret_hu_conv = Result_StringErrorZ.constr_from_ptr(ret);
                return ret_hu_conv;
        }
        }
 
        public static boolean constructor_verify(Uint8Array msg, String sig, Uint8Array pk) {
-               boolean ret = bindings.verify(msg, sig, pk);
+               boolean ret = bindings.verify(msg, sig, InternalUtils.check_arr_len(pk, 33));
                return ret;
        }
 
+       public static Result_COption_MonitorEventZDecodeErrorZ constructor_MonitorEvent_read(Uint8Array ser) {
+               number ret = bindings.MonitorEvent_read(ser);
+               Result_COption_MonitorEventZDecodeErrorZ ret_hu_conv = Result_COption_MonitorEventZDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
        public static Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ constructor_C2Tuple_BlockHashChannelMonitorZ_read(Uint8Array ser, KeysInterface arg) {
                number ret = bindings.C2Tuple_BlockHashChannelMonitorZ_read(ser, arg == null ? 0 : arg.ptr);
                Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ ret_hu_conv = Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ.constr_from_ptr(ret);
@@ -36,7 +54,7 @@
        }
 
        public static Uint8Array constructor_build_commitment_secret(Uint8Array commitment_seed, number idx) {
-               Uint8Array ret = bindings.build_commitment_secret(commitment_seed, idx);
+               Uint8Array ret = bindings.build_commitment_secret(InternalUtils.check_arr_len(commitment_seed, 32), idx);
                return ret;
        }
 
        }
 
        public static Result_SecretKeyErrorZ constructor_derive_private_key(Uint8Array per_commitment_point, Uint8Array base_secret) {
-               number ret = bindings.derive_private_key(per_commitment_point, base_secret);
+               number ret = bindings.derive_private_key(InternalUtils.check_arr_len(per_commitment_point, 33), InternalUtils.check_arr_len(base_secret, 32));
                Result_SecretKeyErrorZ ret_hu_conv = Result_SecretKeyErrorZ.constr_from_ptr(ret);
                return ret_hu_conv;
        }
 
        public static Result_PublicKeyErrorZ constructor_derive_public_key(Uint8Array per_commitment_point, Uint8Array base_point) {
-               number ret = bindings.derive_public_key(per_commitment_point, base_point);
+               number ret = bindings.derive_public_key(InternalUtils.check_arr_len(per_commitment_point, 33), InternalUtils.check_arr_len(base_point, 33));
                Result_PublicKeyErrorZ ret_hu_conv = Result_PublicKeyErrorZ.constr_from_ptr(ret);
                return ret_hu_conv;
        }
 
        public static Result_SecretKeyErrorZ constructor_derive_private_revocation_key(Uint8Array per_commitment_secret, Uint8Array countersignatory_revocation_base_secret) {
-               number ret = bindings.derive_private_revocation_key(per_commitment_secret, countersignatory_revocation_base_secret);
+               number ret = bindings.derive_private_revocation_key(InternalUtils.check_arr_len(per_commitment_secret, 32), InternalUtils.check_arr_len(countersignatory_revocation_base_secret, 32));
                Result_SecretKeyErrorZ ret_hu_conv = Result_SecretKeyErrorZ.constr_from_ptr(ret);
                return ret_hu_conv;
        }
 
        public static Result_PublicKeyErrorZ constructor_derive_public_revocation_key(Uint8Array per_commitment_point, Uint8Array countersignatory_revocation_base_point) {
-               number ret = bindings.derive_public_revocation_key(per_commitment_point, countersignatory_revocation_base_point);
+               number ret = bindings.derive_public_revocation_key(InternalUtils.check_arr_len(per_commitment_point, 33), InternalUtils.check_arr_len(countersignatory_revocation_base_point, 33));
                Result_PublicKeyErrorZ ret_hu_conv = Result_PublicKeyErrorZ.constr_from_ptr(ret);
                return ret_hu_conv;
        }
 
        public static Uint8Array constructor_get_revokeable_redeemscript(Uint8Array revocation_key, number contest_delay, Uint8Array broadcaster_delayed_payment_key) {
-               Uint8Array ret = bindings.get_revokeable_redeemscript(revocation_key, contest_delay, broadcaster_delayed_payment_key);
+               Uint8Array ret = bindings.get_revokeable_redeemscript(InternalUtils.check_arr_len(revocation_key, 33), contest_delay, InternalUtils.check_arr_len(broadcaster_delayed_payment_key, 33));
                return ret;
        }
 
        }
 
        public static Uint8Array constructor_make_funding_redeemscript(Uint8Array broadcaster, Uint8Array countersignatory) {
-               Uint8Array ret = bindings.make_funding_redeemscript(broadcaster, countersignatory);
+               Uint8Array ret = bindings.make_funding_redeemscript(InternalUtils.check_arr_len(broadcaster, 33), InternalUtils.check_arr_len(countersignatory, 33));
                return ret;
        }
 
        public static Uint8Array constructor_build_htlc_transaction(Uint8Array commitment_txid, number feerate_per_kw, number contest_delay, HTLCOutputInCommitment htlc, Uint8Array broadcaster_delayed_payment_key, Uint8Array revocation_key) {
-               Uint8Array ret = bindings.build_htlc_transaction(commitment_txid, feerate_per_kw, contest_delay, htlc == null ? 0 : htlc.ptr & ~1, broadcaster_delayed_payment_key, revocation_key);
+               Uint8Array ret = bindings.build_htlc_transaction(InternalUtils.check_arr_len(commitment_txid, 32), feerate_per_kw, contest_delay, htlc == null ? 0 : htlc.ptr & ~1, InternalUtils.check_arr_len(broadcaster_delayed_payment_key, 33), InternalUtils.check_arr_len(revocation_key, 33));
                // this.ptrs_to.add(htlc);
                return ret;
        }
 
        public static number constructor_get_commitment_transaction_number_obscure_factor(Uint8Array broadcaster_payment_basepoint, Uint8Array countersignatory_payment_basepoint, boolean outbound_from_broadcaster) {
-               number ret = bindings.get_commitment_transaction_number_obscure_factor(broadcaster_payment_basepoint, countersignatory_payment_basepoint, outbound_from_broadcaster);
+               number ret = bindings.get_commitment_transaction_number_obscure_factor(InternalUtils.check_arr_len(broadcaster_payment_basepoint, 33), InternalUtils.check_arr_len(countersignatory_payment_basepoint, 33), outbound_from_broadcaster);
                return ret;
        }
 
+       public static Result_COption_NetworkUpdateZDecodeErrorZ constructor_NetworkUpdate_read(Uint8Array ser) {
+               number ret = bindings.NetworkUpdate_read(ser);
+               Result_COption_NetworkUpdateZDecodeErrorZ ret_hu_conv = Result_COption_NetworkUpdateZDecodeErrorZ.constr_from_ptr(ret);
+               return ret_hu_conv;
+       }
+
        public static Result_RouteLightningErrorZ constructor_find_route(Uint8Array our_node_pubkey, RouteParameters params, NetworkGraph network, ChannelDetails[] first_hops, Logger logger, Score scorer) {
-               number ret = bindings.find_route(our_node_pubkey, params == null ? 0 : params.ptr & ~1, network == null ? 0 : network.ptr & ~1, first_hops != null ? Arrays.stream(first_hops).map(first_hops_conv_16 -> first_hops_conv_16 == null ? 0 : first_hops_conv_16.ptr & ~1).toArray(number[]::new) : null, logger == null ? 0 : logger.ptr, scorer == null ? 0 : scorer.ptr);
+               number ret = bindings.find_route(InternalUtils.check_arr_len(our_node_pubkey, 33), params == null ? 0 : params.ptr & ~1, network == null ? 0 : network.ptr & ~1, first_hops != null ? Arrays.stream(first_hops).map(first_hops_conv_16 -> first_hops_conv_16 == null ? 0 : first_hops_conv_16.ptr & ~1).toArray(number[]::new) : null, logger == null ? 0 : logger.ptr, scorer == null ? 0 : scorer.ptr);
                Result_RouteLightningErrorZ ret_hu_conv = Result_RouteLightningErrorZ.constr_from_ptr(ret);
                ret_hu_conv.ptrs_to.add(params);
                ret_hu_conv.ptrs_to.add(network);
index 5026f0b3c24bd5aa5ddeb666ac30ba170047fd90..300d856ee11c0980b0da3250603b6ab69bde15ff 100644 (file)
@@ -38,7 +38,7 @@ import * as bindings from '../bindings' // TODO: figure out location
                                                        const monitor_hu_conv: ChannelMonitor = new ChannelMonitor(null, monitor);
                                monitor_hu_conv.ptrs_to.add(this);
                                                        Result_NoneChannelMonitorUpdateErrZ ret = arg.watch_channel(funding_txo_hu_conv, monitor_hu_conv);
-                               result: number = ret != null ? ret.ptr : 0;
+                               result: number = ret == null ? 0 : ret.clone_ptr();
                                return result;
                                                },
 
@@ -48,13 +48,13 @@ import * as bindings from '../bindings' // TODO: figure out location
                                                        const update_hu_conv: ChannelMonitorUpdate = new ChannelMonitorUpdate(null, update);
                                update_hu_conv.ptrs_to.add(this);
                                                        Result_NoneChannelMonitorUpdateErrZ ret = arg.update_channel(funding_txo_hu_conv, update_hu_conv);
-                               result: number = ret != null ? ret.ptr : 0;
+                               result: number = ret == null ? 0 : ret.clone_ptr();
                                return result;
                                                },
 
                                                release_pending_monitor_events (): number[] {
                                                        MonitorEvent[] ret = arg.release_pending_monitor_events();
-                               result: number[] = ret != null ? Arrays.stream(ret).map(ret_conv_14 -> ret_conv_14.ptr).toArray(number[]::new) : null;
+                               result: number[] = ret != null ? Arrays.stream(ret).map(ret_conv_14 -> ret_conv_14 == null ? 0 : ret_conv_14.clone_ptr()).toArray(number[]::new) : null;
                                return result;
                                                },
 
index 87aec961d98a715348a5acbdc81f10e0b2b16f88..8b3364c2d45f521863d32461c9996530d2a6d252 100644 (file)
@@ -24,7 +24,7 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public void set_block_hash(Uint8Array val) {
-               bindings.WatchedOutput_set_block_hash(this.ptr, val);
+               bindings.WatchedOutput_set_block_hash(this.ptr, InternalUtils.check_arr_len(val, 32));
        }
 
        public OutPoint get_outpoint() {
@@ -48,12 +48,17 @@ import * as bindings from '../bindings' // TODO: figure out location
        }
 
        public static WatchedOutput constructor_new(Uint8Array block_hash_arg, OutPoint outpoint_arg, Uint8Array script_pubkey_arg) {
-               number ret = bindings.WatchedOutput_new(block_hash_arg, outpoint_arg == null ? 0 : outpoint_arg.ptr & ~1, script_pubkey_arg);
+               number ret = bindings.WatchedOutput_new(InternalUtils.check_arr_len(block_hash_arg, 32), outpoint_arg == null ? 0 : outpoint_arg.ptr & ~1, script_pubkey_arg);
                const ret_hu_conv: WatchedOutput = new WatchedOutput(null, ret);
                ret_hu_conv.ptrs_to.add(ret_hu_conv);
                return ret_hu_conv;
        }
 
+       public number clone_ptr() {
+               number ret = bindings.WatchedOutput_clone_ptr(this.ptr);
+               return ret;
+       }
+
        public WatchedOutput clone() {
                number ret = bindings.WatchedOutput_clone(this.ptr);
                const ret_hu_conv: WatchedOutput = new WatchedOutput(null, ret);
index 54159d8d85099d3c0db71e0710dd7194d5618c2f..8a83ae4a44ff339f9821c1866d5d2545817ca532 100644 (file)
@@ -124,6 +124,7 @@ void free(void *ptr);
 #define DO_ASSERT(a) (void)(a)
 #define CHECK(a)
 #define CHECK_ACCESS(p)
+#define CHECK_INNER_FIELD_ACCESS_OR_NULL(v)
 """
         else:
             self.c_file_pfx = self.c_file_pfx + """
@@ -189,6 +190,13 @@ static void CHECK_ACCESS(void* ptr) {
                }
        }
 }
+#define CHECK_INNER_FIELD_ACCESS_OR_NULL(v) \\
+       if (v.is_owned && v.inner != NULL) { \\
+               const void *p = __unmangle_inner_ptr(v.inner); \\
+               if (p != NULL) { \\
+                       CHECK_ACCESS(p); \\
+               } \\
+       }
 
 void* __wrap_malloc(size_t len) {
        void* res = __real_malloc(len);
@@ -472,9 +480,11 @@ const decodeString = (stringPointer, free = true) => {
 
         out_typescript_enum_fields = ""
 
-        for var in variants:
+        for var, var_docs in variants:
             out_c = out_c + "\t\tcase %d: return %s;\n" % (ord_v, var)
             ord_v = ord_v + 1
+            if var_docs is not None:
+                out_typescript_enum_fields += f"/**\n * {var_docs}\n */\n"
             out_typescript_enum_fields += f"{var},\n\t\t\t\t"
         out_c = out_c + "\t}\n"
         out_c = out_c + "\tabort();\n"
@@ -483,7 +493,7 @@ const decodeString = (stringPointer, free = true) => {
         out_c = out_c + "static inline int32_t LDK" + struct_name + "_to_js(LDK" + struct_name + " val) {\n"
         out_c = out_c + "\tswitch (val) {\n"
         ord_v = 0
-        for var in variants:
+        for var, _ in variants:
             out_c = out_c + "\t\tcase " + var + ": return %d;\n" % ord_v
             ord_v = ord_v + 1
         out_c = out_c + "\t\tdefault: abort();\n"